in infrastructure-provisioning/src/general/lib/azure/actions_lib.py [0:0]
def create_instance(self, region, instance_size, service_base_name, instance_name, datalab_ssh_user_name,
public_key,
network_interface_resource_id, resource_group_name, primary_disk_size, instance_type,
image_full_name, tags, project_name='', create_option='fromImage', disk_id='',
instance_storage_account_type='Premium_LRS', image_type='default'):
if image_type == 'pre-configured':
image_id = datalab.meta_lib.AzureMeta().get_image(resource_group_name, image_full_name).id
else:
image_name = image_full_name.split(':')
publisher = image_name[0]
offer = image_name[1]
sku = image_name[2]
try:
if instance_type == 'ssn':
parameters = {
'location': region,
'tags': tags,
'hardware_profile': {
'vm_size': instance_size
},
'storage_profile': {
'image_reference': {
'publisher': publisher,
'offer': offer,
'sku': sku,
'version': 'latest'
},
'os_disk': {
'os_type': 'Linux',
'name': '{}-ssn-volume-primary'.format(service_base_name),
'create_option': 'fromImage',
'disk_size_gb': int(primary_disk_size),
'tags': tags,
'managed_disk': {
'storage_account_type': instance_storage_account_type,
}
}
},
'os_profile': {
'computer_name': instance_name.replace('_', '-'),
'admin_username': datalab_ssh_user_name,
'linux_configuration': {
'disable_password_authentication': True,
'ssh': {
'public_keys': [{
'path': '/home/{}/.ssh/authorized_keys'.format(datalab_ssh_user_name),
'key_data': public_key
}]
}
}
},
'network_profile': {
'network_interfaces': [
{
'id': network_interface_resource_id
}
]
}
}
elif instance_type == 'edge':
if create_option == 'fromImage':
parameters = {
'location': region,
'tags': tags,
'hardware_profile': {
'vm_size': instance_size
},
'storage_profile': {
'image_reference': {
'publisher': publisher,
'offer': offer,
'sku': sku,
'version': 'latest'
},
'os_disk': {
'os_type': 'Linux',
'name': '{}-{}-{}-edge-volume-primary'.format(service_base_name, project_name,
os.environ['endpoint_name'].lower()),
'create_option': create_option,
'disk_size_gb': int(primary_disk_size),
'tags': tags,
'managed_disk': {
'storage_account_type': instance_storage_account_type
}
}
},
'os_profile': {
'computer_name': instance_name.replace('_', '-'),
'admin_username': datalab_ssh_user_name,
'linux_configuration': {
'disable_password_authentication': True,
'ssh': {
'public_keys': [{
'path': '/home/{}/.ssh/authorized_keys'.format(datalab_ssh_user_name),
'key_data': public_key
}]
}
}
},
'network_profile': {
'network_interfaces': [
{
'id': network_interface_resource_id
}
]
}
}
elif create_option == 'attach':
parameters = {
'location': region,
'tags': tags,
'hardware_profile': {
'vm_size': instance_size
},
'storage_profile': {
'os_disk': {
'os_type': 'Linux',
'name': '{}-{}-{}-edge-volume-primary'.format(service_base_name, project_name,
os.environ['endpoint_name'].lower()),
'create_option': create_option,
'disk_size_gb': int(primary_disk_size),
'tags': tags,
'managed_disk': {
'id': disk_id,
'storage_account_type': instance_storage_account_type
}
}
},
'network_profile': {
'network_interfaces': [
{
'id': network_interface_resource_id
}
]
}
}
elif instance_type == 'notebook':
if image_type == 'default':
storage_profile = {
'image_reference': {
'publisher': publisher,
'offer': offer,
'sku': sku,
'version': 'latest'
},
'os_disk': {
'os_type': 'Linux',
'name': '{}-volume-primary'.format(instance_name),
'create_option': 'fromImage',
'disk_size_gb': int(primary_disk_size),
'tags': tags,
'managed_disk': {
'storage_account_type': instance_storage_account_type
}
},
'data_disks': [
{
'lun': 1,
'name': '{}-volume-secondary'.format(instance_name),
'create_option': 'empty',
'disk_size_gb': 32,
'tags': {
'Name': '{}-volume-secondary'.format(instance_name)
},
'managed_disk': {
'storage_account_type': instance_storage_account_type
}
}
]
}
elif image_type == 'pre-configured':
storage_profile = {
'image_reference': {
'id': image_id
},
'os_disk': {
'os_type': 'Linux',
'name': '{}-volume-primary'.format(instance_name),
'create_option': 'fromImage',
'disk_size_gb': int(primary_disk_size),
'tags': tags,
'managed_disk': {
'storage_account_type': instance_storage_account_type
}
}
}
parameters = {
'location': region,
'tags': tags,
'hardware_profile': {
'vm_size': instance_size
},
'storage_profile': storage_profile,
'os_profile': {
'computer_name': instance_name.replace('_', '-'),
'admin_username': datalab_ssh_user_name,
'linux_configuration': {
'disable_password_authentication': True,
'ssh': {
'public_keys': [{
'path': '/home/{}/.ssh/authorized_keys'.format(datalab_ssh_user_name),
'key_data': public_key
}]
}
}
},
'network_profile': {
'network_interfaces': [
{
'id': network_interface_resource_id
}
]
}
}
elif instance_type == 'dataengine':
if image_type == 'pre-configured':
storage_profile = {
'image_reference': {
'id': image_id
},
'os_disk': {
'os_type': 'Linux',
'name': '{}-volume-primary'.format(instance_name),
'create_option': 'fromImage',
'disk_size_gb': int(primary_disk_size),
'tags': tags,
'managed_disk': {
'storage_account_type': instance_storage_account_type
}
}
}
elif image_type == 'default':
storage_profile = {
'image_reference': {
'publisher': publisher,
'offer': offer,
'sku': sku,
'version': 'latest'
},
'os_disk': {
'os_type': 'Linux',
'name': '{}-volume-primary'.format(instance_name),
'create_option': 'fromImage',
'disk_size_gb': int(primary_disk_size),
'tags': tags,
'managed_disk': {
'storage_account_type': instance_storage_account_type
}
}
}
parameters = {
'location': region,
'tags': tags,
'hardware_profile': {
'vm_size': instance_size
},
'storage_profile': storage_profile,
'os_profile': {
'computer_name': instance_name.replace('_', '-'),
'admin_username': datalab_ssh_user_name,
'linux_configuration': {
'disable_password_authentication': True,
'ssh': {
'public_keys': [{
'path': '/home/{}/.ssh/authorized_keys'.format(datalab_ssh_user_name),
'key_data': public_key
}]
}
}
},
'network_profile': {
'network_interfaces': [
{
'id': network_interface_resource_id
}
]
}
}
else:
parameters = {}
result = self.compute_client.virtual_machines.begin_create_or_update(
resource_group_name, instance_name, parameters
).wait()
AzureActions().tag_disks(resource_group_name, instance_name)
return result
except Exception as err:
logging.info(
"Unable to create instance: " + str(err) + "\n Traceback: " + traceback.print_exc(file=sys.stdout))
append_result(str({"error": "Unable to create instance",
"error_message": str(err) + "\n Traceback: " + traceback.print_exc(
file=sys.stdout)}))
traceback.print_exc(file=sys.stdout)