def _build_os_profile(): os_profile = { 'computerName': name, 'adminUsername': admin_username } if admin_password: os_profile['adminPassword'] = admin_password if custom_data: os_profile['customData'] = b64encode(custom_data) if ssh_key_value and ssh_key_path: os_profile['linuxConfiguration'] = { 'disablePasswordAuthentication': True, 'ssh': { 'publicKeys': [ { 'keyData': ssh_key_value, 'path': ssh_key_path } ] } } return os_profile
def build_vmss_resource(name, naming_prefix, location, tags, overprovision, upgrade_policy_mode, vm_sku, instance_count, ip_config_name, nic_name, subnet_id, admin_username, authentication_type, storage_profile, os_disk_name, storage_caching, storage_sku, data_disk_sizes_gb, image_data_disks, os_type, image=None, admin_password=None, ssh_key_value=None, ssh_key_path=None, os_publisher=None, os_offer=None, os_sku=None, os_version=None, backend_address_pool_id=None, inbound_nat_pool_id=None, single_placement_group=None, custom_data=None): # Build IP configuration ip_configuration = { 'name': ip_config_name, 'properties': { 'subnet': {'id': subnet_id} } } if backend_address_pool_id: ip_configuration['properties']['loadBalancerBackendAddressPools'] = [ {'id': backend_address_pool_id} ] if inbound_nat_pool_id: ip_configuration['properties']['loadBalancerInboundNatPools'] = [ {'id': inbound_nat_pool_id} ] # Build storage profile storage_properties = {} if storage_profile in [StorageProfile.SACustomImage, StorageProfile.SAPirImage]: storage_properties['osDisk'] = { 'name': os_disk_name, 'caching': storage_caching, 'createOption': 'FromImage', } if storage_profile == StorageProfile.SACustomImage: storage_properties['osDisk'].update({ 'osType': os_type, 'image': { 'uri': image } }) else: storage_properties['osDisk']['vhdContainers'] = "[variables('vhdContainers')]" elif storage_profile in [StorageProfile.ManagedPirImage, StorageProfile.ManagedPirImage]: storage_properties['osDisk'] = { 'createOption': 'FromImage', 'caching': storage_caching, 'managedDisk': {'storageAccountType': storage_sku} } if storage_profile in [StorageProfile.SAPirImage, StorageProfile.ManagedPirImage]: storage_properties['imageReference'] = { 'publisher': os_publisher, 'offer': os_offer, 'sku': os_sku, 'version': os_version } if storage_profile == StorageProfile.ManagedCustomImage: storage_properties['imageReference'] = { 'id': image } storage_profile = _build_data_disks(storage_properties, data_disk_sizes_gb, image_data_disks, storage_caching, storage_sku) # Build OS Profile os_profile = { 'computerNamePrefix': naming_prefix, 'adminUsername': admin_username } if authentication_type == 'password': os_profile['adminPassword'] = admin_password else: os_profile['linuxConfiguration'] = { 'disablePasswordAuthentication': True, 'ssh': { 'publicKeys': [ { 'path': ssh_key_path, 'keyData': ssh_key_value } ] } } if custom_data: os_profile['customData'] = b64encode(custom_data) if single_placement_group is None: # this should never happen, but just in case raise ValueError('single_placement_group was not set by validators') # Build VMSS vmss_properties = { 'overprovision': overprovision, 'singlePlacementGroup': single_placement_group, 'upgradePolicy': { 'mode': upgrade_policy_mode }, 'virtualMachineProfile': { 'storageProfile': storage_properties, 'osProfile': os_profile, 'networkProfile': { 'networkInterfaceConfigurations': [{ 'name': nic_name, 'properties': { 'primary': 'true', 'ipConfigurations': [ip_configuration] } }] } } } vmss = { 'type': 'Microsoft.Compute/virtualMachineScaleSets', 'name': name, 'location': location, 'tags': tags, 'apiVersion': '2016-04-30-preview', 'dependsOn': [], 'sku': { 'name': vm_sku, 'tier': 'Standard', 'capacity': instance_count }, 'properties': vmss_properties } return vmss