diff --git a/azure-cli.pyproj b/azure-cli.pyproj index 3bb66f4e7..f8435b097 100644 --- a/azure-cli.pyproj +++ b/azure-cli.pyproj @@ -132,9 +132,11 @@ + + @@ -170,6 +172,7 @@ + diff --git a/src/command_modules/azure-cli-vm/azure/cli/command_modules/vm/__init__.py b/src/command_modules/azure-cli-vm/azure/cli/command_modules/vm/__init__.py index 53d0ea4c0..ac753dc3a 100644 --- a/src/command_modules/azure-cli-vm/azure/cli/command_modules/vm/__init__.py +++ b/src/command_modules/azure-cli-vm/azure/cli/command_modules/vm/__init__.py @@ -208,7 +208,35 @@ VM_SPECIFIC_PARAMS = { 'deployment_parameter_ssh_key_path_value': { 'name': '--ssh-key-path', 'metavar': 'SSHPATH', - } + }, + 'deployment_parameter_add_to_availability_set_value': { + 'name': '--add-to-availability-set', + 'metavar': 'AVAILSETTYPE', + }, + 'deployment_parameter_availability_set_id_value': { + 'name': '--availability-set-name', + 'metavar': 'AVAILSETNAME', + }, + 'deployment_parameter_new_or_existing_vnet_value': { + 'name': '--new-or-existing-vnet', + 'metavar': 'VNET', + }, + 'deployment_parameter_subnet_ip_address_prefix_value': { + 'name': '--subnet-ip-prefix', + 'metavar': 'SUBNETPREFIX', + }, + 'deployment_parameter_subnet_name_value': { + 'name': '--subnet-name', + 'metavar': 'NAME', + }, + 'deployment_parameter_virtual_network_ip_address_type_value': { + 'name': '--vnet-ip-address-type', + 'metavar': 'ADDRESSTYPE', + }, + 'deployment_parameter_virtual_network_name_value': { + 'name': '--vnet-name', + 'metavar': 'NAME', + }, } build_operation('vm', diff --git a/src/command_modules/azure-cli-vm/azure/cli/command_modules/vm/mgmt/azuredeploy.json b/src/command_modules/azure-cli-vm/azure/cli/command_modules/vm/mgmt/azuredeploy.json index 4562ee0f9..030a5b765 100644 --- a/src/command_modules/azure-cli-vm/azure/cli/command_modules/vm/mgmt/azuredeploy.json +++ b/src/command_modules/azure-cli-vm/azure/cli/command_modules/vm/mgmt/azuredeploy.json @@ -142,14 +142,14 @@ "existing" ], "metadata": { - "description": "An existing availability set to add this VM to." + "description": "Flag to add the VM to an existing availability set." } }, "availabilitySetId": { "type": "string", "defaultValue": "", "metadata": { - "description": "An existing availability set to add this VM to." + "description": "Existing availability set for the VM." } }, "authenticationMethod": { @@ -165,11 +165,17 @@ }, "sshKeyValue": { "type": "string", - "defaultValue": "" + "defaultValue": "", + "metadata": { + "description": "SSH key file data." + } }, "sshKeyPath": { "type": "string", - "defaultValue": "[concat('/home/',parameters('adminUsername'),'/.ssh/authorized_keys')]" + "defaultValue": "[concat('/home/',parameters('adminUsername'),'/.ssh/authorized_keys')]", + "metadata": { + "description": "VM file path for SSH key." + } }, "_artifactsLocation": { "type": "string", @@ -218,7 +224,7 @@ "vnetId": "[resourceId('Microsoft.Network/virtualNetworks', variables('vnetName'))]", "subnetRef": "[concat(variables('vnetId'), '/subnets/', variables('subnetName'))]", "vhdStorageName": "[concat('vhdstorage', uniqueString(parameters('dnsNameForPublicIP')))]", - "availSetId": "[parameters('availabilitySetId')]", + "availSetId": "[resourceId('Microsoft.Compute/availabilitySets', parameters('availabilitySetId'))]", "vnetTemplateFilePaths": { "new": "nested_templates/NewVNet.json", "existing": "nested_templates/ExistingVNet.json" @@ -327,7 +333,8 @@ "size": { "value": "[variables('vmSize')]" }, "storageType": { "value": "[variables('vhdStorageType')]" }, "sshKeyValue": { "value": "[parameters('sshKeyValue')]" }, - "sshKeyPath": { "value": "[parameters('sshKeyPath')]" } + "sshKeyPath": { "value": "[parameters('sshKeyPath')]" }, + "availabilitySetId": { "value": "[variables('availSetId')]" } } } } diff --git a/src/command_modules/azure-cli-vm/azure/cli/command_modules/vm/mgmt/lib/models/__init__.py b/src/command_modules/azure-cli-vm/azure/cli/command_modules/vm/mgmt/lib/models/__init__.py index c35b8ca55..da5550bef 100644 --- a/src/command_modules/azure-cli-vm/azure/cli/command_modules/vm/mgmt/lib/models/__init__.py +++ b/src/command_modules/azure-cli-vm/azure/cli/command_modules/vm/mgmt/lib/models/__init__.py @@ -8,6 +8,7 @@ from .deployment_vm import DeploymentVM from .template_link import TemplateLink +from .deployment_parameter_virtual_network_ip_address_prefix import DeploymentParameterVirtualNetworkIpAddressPrefix from .parameters_link import ParametersLink from .provider_resource_type import ProviderResourceType from .provider import Provider @@ -22,6 +23,7 @@ from .resource_management_client_enums import ( __all__ = [ 'DeploymentVM', 'TemplateLink', + 'DeploymentParameterVirtualNetworkIpAddressPrefix', 'ParametersLink', 'ProviderResourceType', 'Provider', diff --git a/src/command_modules/azure-cli-vm/azure/cli/command_modules/vm/mgmt/lib/models/deployment_parameter_virtual_network_ip_address_prefix.py b/src/command_modules/azure-cli-vm/azure/cli/command_modules/vm/mgmt/lib/models/deployment_parameter_virtual_network_ip_address_prefix.py new file mode 100644 index 000000000..c5892779e --- /dev/null +++ b/src/command_modules/azure-cli-vm/azure/cli/command_modules/vm/mgmt/lib/models/deployment_parameter_virtual_network_ip_address_prefix.py @@ -0,0 +1,23 @@ +#pylint: skip-file +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator 0.15.0.0 +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- + +from msrest.serialization import Model + + +class DeploymentParameterVirtualNetworkIpAddressPrefix(Model): + """DeploymentParameterVirtualNetworkIpAddressPrefix + + :param str value: + """ + + _attribute_map = { + 'value': {'key': 'value', 'type': 'str'}, + } + + def __init__(self, value=None, **kwargs): + self.value = value diff --git a/src/command_modules/azure-cli-vm/azure/cli/command_modules/vm/mgmt/lib/models/deployment_vm.py b/src/command_modules/azure-cli-vm/azure/cli/command_modules/vm/mgmt/lib/models/deployment_vm.py index a1562e5b5..0dfbc68fd 100644 --- a/src/command_modules/azure-cli-vm/azure/cli/command_modules/vm/mgmt/lib/models/deployment_vm.py +++ b/src/command_modules/azure-cli-vm/azure/cli/command_modules/vm/mgmt/lib/models/deployment_vm.py @@ -37,8 +37,6 @@ class DeploymentVM(Model): prefix. :param str deployment_parameter_virtual_machine_name_value: The VM name that is displayed in the portal. - :param str deployment_parameter_subnet_prefix_value: The subnet address - type. :param str deployment_parameter_os_sku_value: The OS SKU to install. :param str deployment_parameter_os_offer_value: The OS Offer to install. :param str deployment_parameter_os_version_value: The OS version to @@ -50,6 +48,20 @@ class DeploymentVM(Model): an SSH public key. :param str deployment_parameter_ssh_key_path_value: The VM file path to save the SSh key to. + :param str deployment_parameter_add_to_availability_set_value: Whether or + not to add the VM to an availability set. Possible values include: + 'none', 'existing' + :param str deployment_parameter_availability_set_id_value: ID of the + availability set the VM should be added to. + :param str deployment_parameter_subnet_name_value: The subnet name. + :param str deployment_parameter_virtual_network_name_value: Name of + virtual network to add VM to. + :param str deployment_parameter_new_or_existing_vnet_value: Whether to + use an existing VNet or create a new one. + :param str deployment_parameter_virtual_network_ip_address_type_value: + Dynamic or Static IP address allocation. + :param str deployment_parameter_subnet_ip_address_prefix_value: The + subnet address type. :param str mode: Gets or sets the deployment mode. Default value: "Incremental" . """ @@ -72,17 +84,23 @@ class DeploymentVM(Model): 'deployment_parameter_dns_name_for_public_ip_value': {'key': 'properties.parameters.dnsNameForPublicIP.value', 'type': 'str'}, 'deployment_parameter_ip_address_prefix_value': {'key': 'properties.parameters.ipAddressPrefix.value', 'type': 'str'}, 'deployment_parameter_virtual_machine_name_value': {'key': 'properties.parameters.virtualMachineName.value', 'type': 'str'}, - 'deployment_parameter_subnet_prefix_value': {'key': 'properties.parameters.subnetPrefix.value', 'type': 'str'}, 'deployment_parameter_os_sku_value': {'key': 'properties.parameters.osSKU.value', 'type': 'str'}, 'deployment_parameter_os_offer_value': {'key': 'properties.parameters.osOffer.value', 'type': 'str'}, 'deployment_parameter_os_version_value': {'key': 'properties.parameters.osVersion.value', 'type': 'str'}, 'deployment_parameter_authentication_method_value': {'key': 'properties.parameters.authenticationMethod.value', 'type': 'str'}, 'deployment_parameter_ssh_key_value_value': {'key': 'properties.parameters.sshKeyValue.value', 'type': 'str'}, 'deployment_parameter_ssh_key_path_value': {'key': 'properties.parameters.sshKeyPath.value', 'type': 'str'}, + 'deployment_parameter_add_to_availability_set_value': {'key': 'properties.parameters.addToAvailabilitySet.value', 'type': 'str'}, + 'deployment_parameter_availability_set_id_value': {'key': 'properties.parameters.availabilitySetId.value', 'type': 'str'}, + 'deployment_parameter_subnet_name_value': {'key': 'properties.parameters.subnetName.value', 'type': 'str'}, + 'deployment_parameter_virtual_network_name_value': {'key': 'properties.parameters.virtualNetworkName.value', 'type': 'str'}, + 'deployment_parameter_new_or_existing_vnet_value': {'key': 'properties.parameters.newOrExistingVNet.value', 'type': 'str'}, + 'deployment_parameter_virtual_network_ip_address_type_value': {'key': 'properties.parameters.virtualNetworkIpAddressType.value', 'type': 'str'}, + 'deployment_parameter_subnet_ip_address_prefix_value': {'key': 'properties.parameters.subnetIpAddressPrefix.value', 'type': 'str'}, 'mode': {'key': 'properties.mode', 'type': 'str'}, } - def __init__(self, content_version=None, deployment_parameter_os_value=None, deployment_parameter_os_publisher_value=None, deployment_parameter_admin_password_value=None, deployment_parameter_ip_address_type_value=None, deployment_parameter_storage_type_value=None, deployment_parameter_size_value=None, deployment_parameter_admin_username_value=None, deployment_parameter_dns_name_for_public_ip_value=None, deployment_parameter_ip_address_prefix_value=None, deployment_parameter_virtual_machine_name_value=None, deployment_parameter_subnet_prefix_value=None, deployment_parameter_os_sku_value=None, deployment_parameter_os_offer_value=None, deployment_parameter_os_version_value=None, deployment_parameter_authentication_method_value=None, deployment_parameter_ssh_key_value_value=None, deployment_parameter_ssh_key_path_value=None, **kwargs): + def __init__(self, content_version=None, deployment_parameter_os_value=None, deployment_parameter_os_publisher_value=None, deployment_parameter_admin_password_value=None, deployment_parameter_ip_address_type_value=None, deployment_parameter_storage_type_value=None, deployment_parameter_size_value=None, deployment_parameter_admin_username_value=None, deployment_parameter_dns_name_for_public_ip_value=None, deployment_parameter_ip_address_prefix_value=None, deployment_parameter_virtual_machine_name_value=None, deployment_parameter_os_sku_value=None, deployment_parameter_os_offer_value=None, deployment_parameter_os_version_value=None, deployment_parameter_authentication_method_value=None, deployment_parameter_ssh_key_value_value=None, deployment_parameter_ssh_key_path_value=None, deployment_parameter_add_to_availability_set_value=None, deployment_parameter_availability_set_id_value=None, deployment_parameter_subnet_name_value=None, deployment_parameter_virtual_network_name_value=None, deployment_parameter_new_or_existing_vnet_value=None, deployment_parameter_virtual_network_ip_address_type_value=None, deployment_parameter_subnet_ip_address_prefix_value=None, **kwargs): self.uri = "https://azuretemplatehost.blob.core.windows.net/templatehost/CreateVM/azuredeploy.json" self.content_version = content_version self.deployment_parameter_os_value = deployment_parameter_os_value @@ -95,11 +113,17 @@ class DeploymentVM(Model): self.deployment_parameter_dns_name_for_public_ip_value = deployment_parameter_dns_name_for_public_ip_value self.deployment_parameter_ip_address_prefix_value = deployment_parameter_ip_address_prefix_value self.deployment_parameter_virtual_machine_name_value = deployment_parameter_virtual_machine_name_value - self.deployment_parameter_subnet_prefix_value = deployment_parameter_subnet_prefix_value self.deployment_parameter_os_sku_value = deployment_parameter_os_sku_value self.deployment_parameter_os_offer_value = deployment_parameter_os_offer_value self.deployment_parameter_os_version_value = deployment_parameter_os_version_value self.deployment_parameter_authentication_method_value = deployment_parameter_authentication_method_value self.deployment_parameter_ssh_key_value_value = deployment_parameter_ssh_key_value_value self.deployment_parameter_ssh_key_path_value = deployment_parameter_ssh_key_path_value + self.deployment_parameter_add_to_availability_set_value = deployment_parameter_add_to_availability_set_value + self.deployment_parameter_availability_set_id_value = deployment_parameter_availability_set_id_value + self.deployment_parameter_subnet_name_value = deployment_parameter_subnet_name_value + self.deployment_parameter_virtual_network_name_value = deployment_parameter_virtual_network_name_value + self.deployment_parameter_new_or_existing_vnet_value = deployment_parameter_new_or_existing_vnet_value + self.deployment_parameter_virtual_network_ip_address_type_value = deployment_parameter_virtual_network_ip_address_type_value + self.deployment_parameter_subnet_ip_address_prefix_value = deployment_parameter_subnet_ip_address_prefix_value self.mode = "Incremental" diff --git a/src/command_modules/azure-cli-vm/azure/cli/command_modules/vm/mgmt/lib/models/deployment_vnet.py b/src/command_modules/azure-cli-vm/azure/cli/command_modules/vm/mgmt/lib/models/deployment_vnet.py new file mode 100644 index 000000000..1e4195e5b --- /dev/null +++ b/src/command_modules/azure-cli-vm/azure/cli/command_modules/vm/mgmt/lib/models/deployment_vnet.py @@ -0,0 +1,68 @@ +#pylint: skip-file +#pylint: skip-file +#pylint: skip-file +#pylint: skip-file +#pylint: skip-file +#pylint: skip-file +#pylint: skip-file +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator 0.15.0.0 +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- + +from msrest.serialization import Model + + +class DeploymentVNet(Model): + """ + Deployment operation parameters. + + :param str uri: URI referencing the template. Default value: + "https://azuretemplatedeploy.blob.core.windows.net/templatehost/CreateVNet/azuredeploy.json" + . + :param str content_version: If included it must match the ContentVersion + in the template. + :param str deployment_parameter_virtual_network_prefix_value: IP address + prefix for the virtual network. + :param str deployment_parameter_subnet_prefix_value: IP address prefix + for the subnet. + :param str deployment_parameter_virtual_network_name_value: Name of the + virtual network. + :param str deployment_parameter_subnet_name_value: Name of the subnet. + :param str deployment_parameter_location_value: Location of the virtual + network. + :param str mode: Gets or sets the deployment mode. Default value: + "Incremental" . + """ + + _validation = { + 'uri': {'required': True}, + 'deployment_parameter_virtual_network_prefix_value': {'pattern': '^[\d\./]+$'}, + 'deployment_parameter_subnet_prefix_value': {'pattern': '^[\d\./]+$'}, + 'deployment_parameter_virtual_network_name_value': {'required': True, 'max_length': 80, 'min_length': 2, 'pattern': '^[-\w\._]+$'}, + 'deployment_parameter_subnet_name_value': {'max_length': 80, 'min_length': 2, 'pattern': '^[-\w\._]+$'}, + 'mode': {'required': True}, + } + + _attribute_map = { + 'uri': {'key': 'properties.templateLink.uri', 'type': 'str'}, + 'content_version': {'key': 'properties.templateLink.contentVersion', 'type': 'str'}, + 'deployment_parameter_virtual_network_prefix_value': {'key': 'properties.parameters.virtualNetworkPrefix.value', 'type': 'str'}, + 'deployment_parameter_subnet_prefix_value': {'key': 'properties.parameters.subnetPrefix.value', 'type': 'str'}, + 'deployment_parameter_virtual_network_name_value': {'key': 'properties.parameters.virtualNetworkName.value', 'type': 'str'}, + 'deployment_parameter_subnet_name_value': {'key': 'properties.parameters.subnetName.value', 'type': 'str'}, + 'deployment_parameter_location_value': {'key': 'properties.parameters.location.value', 'type': 'str'}, + 'mode': {'key': 'properties.mode', 'type': 'str'}, + } + + def __init__(self, deployment_parameter_virtual_network_name_value, content_version=None, deployment_parameter_virtual_network_prefix_value=None, deployment_parameter_subnet_prefix_value=None, deployment_parameter_subnet_name_value=None, deployment_parameter_location_value=None, **kwargs): + self.uri = "https://azuretemplatedeploy.blob.core.windows.net/templatehost/CreateVNet/azuredeploy.json" + self.content_version = content_version + self.deployment_parameter_virtual_network_prefix_value = deployment_parameter_virtual_network_prefix_value + self.deployment_parameter_subnet_prefix_value = deployment_parameter_subnet_prefix_value + self.deployment_parameter_virtual_network_name_value = deployment_parameter_virtual_network_name_value + self.deployment_parameter_subnet_name_value = deployment_parameter_subnet_name_value + self.deployment_parameter_location_value = deployment_parameter_location_value + self.mode = "Incremental" diff --git a/src/command_modules/azure-cli-vm/azure/cli/command_modules/vm/mgmt/lib/operations/vm_operations.py b/src/command_modules/azure-cli-vm/azure/cli/command_modules/vm/mgmt/lib/operations/vm_operations.py index 475c8fb0e..ab0c65f7a 100644 --- a/src/command_modules/azure-cli-vm/azure/cli/command_modules/vm/mgmt/lib/operations/vm_operations.py +++ b/src/command_modules/azure-cli-vm/azure/cli/command_modules/vm/mgmt/lib/operations/vm_operations.py @@ -32,7 +32,7 @@ class VMOperations(object): self.config = config def create_or_update( - self, resource_group_name, deployment_name, content_version=None, deployment_parameter_os_value=None, deployment_parameter_os_publisher_value=None, deployment_parameter_admin_password_value=None, deployment_parameter_ip_address_type_value=None, deployment_parameter_storage_type_value=None, deployment_parameter_size_value=None, deployment_parameter_admin_username_value=None, deployment_parameter_dns_name_for_public_ip_value=None, deployment_parameter_ip_address_prefix_value=None, deployment_parameter_virtual_machine_name_value=None, deployment_parameter_subnet_prefix_value=None, deployment_parameter_os_sku_value=None, deployment_parameter_os_offer_value=None, deployment_parameter_os_version_value=None, deployment_parameter_authentication_method_value=None, deployment_parameter_ssh_key_value_value=None, deployment_parameter_ssh_key_path_value=None, custom_headers={}, raw=False, **operation_config): + self, resource_group_name, deployment_name, content_version=None, deployment_parameter_os_value=None, deployment_parameter_os_publisher_value=None, deployment_parameter_admin_password_value=None, deployment_parameter_ip_address_type_value=None, deployment_parameter_storage_type_value=None, deployment_parameter_size_value=None, deployment_parameter_admin_username_value=None, deployment_parameter_dns_name_for_public_ip_value=None, deployment_parameter_ip_address_prefix_value=None, deployment_parameter_virtual_machine_name_value=None, deployment_parameter_os_sku_value=None, deployment_parameter_os_offer_value=None, deployment_parameter_os_version_value=None, deployment_parameter_authentication_method_value=None, deployment_parameter_ssh_key_value_value=None, deployment_parameter_ssh_key_path_value=None, deployment_parameter_add_to_availability_set_value=None, deployment_parameter_availability_set_id_value=None, deployment_parameter_subnet_name_value=None, deployment_parameter_virtual_network_name_value=None, deployment_parameter_new_or_existing_vnet_value=None, deployment_parameter_virtual_network_ip_address_type_value=None, deployment_parameter_subnet_ip_address_prefix_value=None, custom_headers={}, raw=False, **operation_config): """ Create a named template deployment using a template. @@ -73,9 +73,6 @@ class VMOperations(object): :param deployment_parameter_virtual_machine_name_value: The VM name that is displayed in the portal. :type deployment_parameter_virtual_machine_name_value: str - :param deployment_parameter_subnet_prefix_value: The subnet address - type. - :type deployment_parameter_subnet_prefix_value: str :param deployment_parameter_os_sku_value: The OS SKU to install. :type deployment_parameter_os_sku_value: str :param deployment_parameter_os_offer_value: The OS Offer to install. @@ -94,13 +91,34 @@ class VMOperations(object): :param deployment_parameter_ssh_key_path_value: The VM file path to save the SSh key to. :type deployment_parameter_ssh_key_path_value: str + :param deployment_parameter_add_to_availability_set_value: Whether or + not to add the VM to an availability set. Possible values include: + 'none', 'existing' + :type deployment_parameter_add_to_availability_set_value: str + :param deployment_parameter_availability_set_id_value: ID of the + availability set the VM should be added to. + :type deployment_parameter_availability_set_id_value: str + :param deployment_parameter_subnet_name_value: The subnet name. + :type deployment_parameter_subnet_name_value: str + :param deployment_parameter_virtual_network_name_value: Name of + virtual network to add VM to. + :type deployment_parameter_virtual_network_name_value: str + :param deployment_parameter_new_or_existing_vnet_value: Whether to + use an existing VNet or create a new one. + :type deployment_parameter_new_or_existing_vnet_value: str + :param deployment_parameter_virtual_network_ip_address_type_value: + Dynamic or Static IP address allocation. + :type deployment_parameter_virtual_network_ip_address_type_value: str + :param deployment_parameter_subnet_ip_address_prefix_value: The + subnet address type. + :type deployment_parameter_subnet_ip_address_prefix_value: str :param dict custom_headers: headers that will be added to the request :param boolean raw: returns the direct response alongside the deserialized response :rtype: DeploymentExtended :rtype: msrest.pipeline.ClientRawResponse if raw=True """ - parameters = models.DeploymentVM(content_version=content_version, deployment_parameter_os_value=deployment_parameter_os_value, deployment_parameter_os_publisher_value=deployment_parameter_os_publisher_value, deployment_parameter_admin_password_value=deployment_parameter_admin_password_value, deployment_parameter_ip_address_type_value=deployment_parameter_ip_address_type_value, deployment_parameter_storage_type_value=deployment_parameter_storage_type_value, deployment_parameter_size_value=deployment_parameter_size_value, deployment_parameter_admin_username_value=deployment_parameter_admin_username_value, deployment_parameter_dns_name_for_public_ip_value=deployment_parameter_dns_name_for_public_ip_value, deployment_parameter_ip_address_prefix_value=deployment_parameter_ip_address_prefix_value, deployment_parameter_virtual_machine_name_value=deployment_parameter_virtual_machine_name_value, deployment_parameter_subnet_prefix_value=deployment_parameter_subnet_prefix_value, deployment_parameter_os_sku_value=deployment_parameter_os_sku_value, deployment_parameter_os_offer_value=deployment_parameter_os_offer_value, deployment_parameter_os_version_value=deployment_parameter_os_version_value, deployment_parameter_authentication_method_value=deployment_parameter_authentication_method_value, deployment_parameter_ssh_key_value_value=deployment_parameter_ssh_key_value_value, deployment_parameter_ssh_key_path_value=deployment_parameter_ssh_key_path_value) + parameters = models.DeploymentVM(content_version=content_version, deployment_parameter_os_value=deployment_parameter_os_value, deployment_parameter_os_publisher_value=deployment_parameter_os_publisher_value, deployment_parameter_admin_password_value=deployment_parameter_admin_password_value, deployment_parameter_ip_address_type_value=deployment_parameter_ip_address_type_value, deployment_parameter_storage_type_value=deployment_parameter_storage_type_value, deployment_parameter_size_value=deployment_parameter_size_value, deployment_parameter_admin_username_value=deployment_parameter_admin_username_value, deployment_parameter_dns_name_for_public_ip_value=deployment_parameter_dns_name_for_public_ip_value, deployment_parameter_ip_address_prefix_value=deployment_parameter_ip_address_prefix_value, deployment_parameter_virtual_machine_name_value=deployment_parameter_virtual_machine_name_value, deployment_parameter_os_sku_value=deployment_parameter_os_sku_value, deployment_parameter_os_offer_value=deployment_parameter_os_offer_value, deployment_parameter_os_version_value=deployment_parameter_os_version_value, deployment_parameter_authentication_method_value=deployment_parameter_authentication_method_value, deployment_parameter_ssh_key_value_value=deployment_parameter_ssh_key_value_value, deployment_parameter_ssh_key_path_value=deployment_parameter_ssh_key_path_value, deployment_parameter_add_to_availability_set_value=deployment_parameter_add_to_availability_set_value, deployment_parameter_availability_set_id_value=deployment_parameter_availability_set_id_value, deployment_parameter_subnet_name_value=deployment_parameter_subnet_name_value, deployment_parameter_virtual_network_name_value=deployment_parameter_virtual_network_name_value, deployment_parameter_new_or_existing_vnet_value=deployment_parameter_new_or_existing_vnet_value, deployment_parameter_virtual_network_ip_address_type_value=deployment_parameter_virtual_network_ip_address_type_value, deployment_parameter_subnet_ip_address_prefix_value=deployment_parameter_subnet_ip_address_prefix_value) # Construct URL url = '/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/Microsoft.Resources/deployments/{deploymentName}' diff --git a/src/command_modules/azure-cli-vm/azure/cli/command_modules/vm/mgmt/lib/operations/vnet_operations.py b/src/command_modules/azure-cli-vm/azure/cli/command_modules/vm/mgmt/lib/operations/vnet_operations.py new file mode 100644 index 000000000..c0a0e9827 --- /dev/null +++ b/src/command_modules/azure-cli-vm/azure/cli/command_modules/vm/mgmt/lib/operations/vnet_operations.py @@ -0,0 +1,140 @@ +#pylint: skip-file +#pylint: skip-file +#pylint: skip-file +#pylint: skip-file +#pylint: skip-file +#pylint: skip-file +#pylint: skip-file +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator 0.15.0.0 +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- + +from msrest.pipeline import ClientRawResponse +from msrestazure.azure_exceptions import CloudError +from msrestazure.azure_operation import AzureOperationPoller +import uuid + +from .. import models + + +class VNetOperations(object): + """VNetOperations operations. + + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An objec model deserializer. + """ + + def __init__(self, client, config, serializer, deserializer): + + self._client = client + self._serialize = serializer + self._deserialize = deserializer + + self.config = config + + def create( + self, resource_group_name, deployment_name, deployment_parameter_virtual_network_name_value, content_version=None, deployment_parameter_virtual_network_prefix_value=None, deployment_parameter_subnet_prefix_value=None, deployment_parameter_subnet_name_value=None, deployment_parameter_location_value=None, custom_headers={}, raw=False, **operation_config): + """ + Create a named template deployment using a template. + + :param resource_group_name: The name of the resource group. The name + is case insensitive. + :type resource_group_name: str + :param deployment_name: The name of the deployment. + :type deployment_name: str + :param deployment_parameter_virtual_network_name_value: Name of the + virtual network. + :type deployment_parameter_virtual_network_name_value: str + :param content_version: If included it must match the ContentVersion + in the template. + :type content_version: str + :param deployment_parameter_virtual_network_prefix_value: IP address + prefix for the virtual network. + :type deployment_parameter_virtual_network_prefix_value: str + :param deployment_parameter_subnet_prefix_value: IP address prefix + for the subnet. + :type deployment_parameter_subnet_prefix_value: str + :param deployment_parameter_subnet_name_value: Name of the subnet. + :type deployment_parameter_subnet_name_value: str + :param deployment_parameter_location_value: Location of the virtual + network. + :type deployment_parameter_location_value: str + :param dict custom_headers: headers that will be added to the request + :param boolean raw: returns the direct response alongside the + deserialized response + :rtype: DeploymentExtended + :rtype: msrest.pipeline.ClientRawResponse if raw=True + """ + parameters = models.DeploymentVNet(content_version=content_version, deployment_parameter_virtual_network_prefix_value=deployment_parameter_virtual_network_prefix_value, deployment_parameter_subnet_prefix_value=deployment_parameter_subnet_prefix_value, deployment_parameter_virtual_network_name_value=deployment_parameter_virtual_network_name_value, deployment_parameter_subnet_name_value=deployment_parameter_subnet_name_value, deployment_parameter_location_value=deployment_parameter_location_value) + + # Construct URL + url = '/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/Microsoft.Resources/deployments/{deploymentName}' + path_format_arguments = { + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=64, min_length=1, pattern='^[-\w\._]+$'), + 'deploymentName': self._serialize.url("deployment_name", deployment_name, 'str', max_length=64, min_length=1, pattern='^[-\w\._]+$'), + 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str') + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} + query_parameters['api-version'] = self._serialize.query("self.config.api_version", self.config.api_version, 'str') + + # Construct headers + header_parameters = {} + header_parameters['Content-Type'] = 'application/json; charset=utf-8' + if self.config.generate_client_request_id: + header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) + if custom_headers: + header_parameters.update(custom_headers) + if self.config.accept_language is not None: + header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') + + # Construct body + body_content = self._serialize.body(parameters, 'DeploymentVNet') + + # Construct and send request + def long_running_send(): + + request = self._client.put(url, query_parameters) + return self._client.send( + request, header_parameters, body_content, **operation_config) + + def get_long_running_status(status_link, headers={}): + + request = self._client.get(status_link) + request.headers.update(headers) + return self._client.send( + request, header_parameters, **operation_config) + + def get_long_running_output(response): + + if response.status_code not in [200, 201]: + exp = CloudError(response) + exp.request_id = response.headers.get('x-ms-request-id') + raise exp + + deserialized = None + + if response.status_code == 200: + deserialized = self._deserialize('DeploymentExtended', response) + if response.status_code == 201: + deserialized = self._deserialize('DeploymentExtended', response) + + if raw: + client_raw_response = ClientRawResponse(deserialized, response) + return client_raw_response + + return deserialized + + long_running_operation_timeout = operation_config.get( + 'long_running_operation_timeout', + self.config.long_running_operation_timeout) + return AzureOperationPoller( + long_running_send, get_long_running_output, + get_long_running_status, long_running_operation_timeout) diff --git a/src/command_modules/azure-cli-vm/azure/cli/command_modules/vm/mgmt/nested_templates/vm_existing_password.json b/src/command_modules/azure-cli-vm/azure/cli/command_modules/vm/mgmt/nested_templates/vm_existing_password.json index e385e7b50..7d7dcce4e 100644 --- a/src/command_modules/azure-cli-vm/azure/cli/command_modules/vm/mgmt/nested_templates/vm_existing_password.json +++ b/src/command_modules/azure-cli-vm/azure/cli/command_modules/vm/mgmt/nested_templates/vm_existing_password.json @@ -2,26 +2,116 @@ "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { - "vnetName": { + "adminUsername": { "type": "string" }, - "vnetIpAddressType": { + "adminPassword": { + "type": "securestring" + }, + "dnsNameForPublicIP": { "type": "string" }, - "vnetIpAddressPrefix": { + "virtualMachineName": { "type": "string" }, - "subnetIpAddressPrefix": { + "osPublisher": { "type": "string" }, - "subnetName": { + "osOffer": { + "type": "string" + }, + "osSKU": { + "type": "string" + }, + "osVersion": { + "type": "string" + }, + "size": { + "type": "string" + }, + "storageType": { + "type": "string" + }, + "sshKeyValue": { + "type": "string", + "defaultValue": "" + }, + "sshKeyPath": { + "type": "string", + "defaultValue": "" + }, + "availabilitySetId": { "type": "string" } }, "variables": { + "imagePublisher": "[parameters('osPublisher')]", + "imageOffer": "[parameters('osOffer')]", + "imageSku": "[parameters('osSKU')]", + "imageVersion": "[parameters('osVersion')]", + "OSDiskName": "osdiskimage", + "vmName": "[parameters('virtualMachineName')]", + "vmSize": "[parameters('size')]", + "vhdStorageName": "[concat('vhdstorage', uniqueString(parameters('dnsNameForPublicIP')))]", + "vhdStorageType": "[parameters('storageType')]", + "vhdStorageContainerName": "vhds", + "nicName": "[concat('MyVMNic', uniqueString(parameters('dnsNameForPublicIP')))]" }, "resources": [ + { + "apiVersion": "2015-06-15", + "type": "Microsoft.Compute/virtualMachines", + "name": "[variables('vmName')]", + "location": "[resourceGroup().location]", + "tags": { + "displayName": "VirtualMachine" + }, + "dependsOn": [ ], + "properties": { + "availabilitySet": { + "id": "[parameters('availabilitySetId')]" + }, + "hardwareProfile": { + "vmSize": "[variables('vmSize')]" + }, + "osProfile": { + "computerName": "[variables('vmName')]", + "adminUsername": "[parameters('adminUsername')]", + "adminPassword": "[parameters('adminPassword')]" + }, + "storageProfile": { + "imageReference": { + "publisher": "[variables('imagePublisher')]", + "offer": "[variables('imageOffer')]", + "sku": "[variables('imageSku')]", + "version": "[variables('imageVersion')]" + }, + "osDisk": { + "name": "[concat('osdisk', uniqueString(parameters('dnsNameForPublicIP')))]", + "vhd": { + "uri": "[concat('http://', variables('vhdStorageName'), '.blob.core.windows.net/', variables('vhdStorageContainerName'), '/', variables('OSDiskName'), '.vhd')]" + }, + "caching": "ReadWrite", + "createOption": "FromImage" + } + }, + "networkProfile": { + "networkInterfaces": [ + { + "id": "[resourceId('Microsoft.Network/networkInterfaces', variables('nicName'))]" + } + ] + } + }, + "resources": [ + + ] + } ], "outputs": { + "NewVM": { + "type": "object", + "value": "[reference(variables('vmName'))]" + } } } \ No newline at end of file diff --git a/src/command_modules/azure-cli-vm/azure/cli/command_modules/vm/mgmt/nested_templates/vm_existing_sshkey.json b/src/command_modules/azure-cli-vm/azure/cli/command_modules/vm/mgmt/nested_templates/vm_existing_sshkey.json index e385e7b50..9f676efb4 100644 --- a/src/command_modules/azure-cli-vm/azure/cli/command_modules/vm/mgmt/nested_templates/vm_existing_sshkey.json +++ b/src/command_modules/azure-cli-vm/azure/cli/command_modules/vm/mgmt/nested_templates/vm_existing_sshkey.json @@ -2,25 +2,120 @@ "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { - "vnetName": { + "adminUsername": { "type": "string" }, - "vnetIpAddressType": { + "adminPassword": { + "type": "securestring" + }, + "dnsNameForPublicIP": { "type": "string" }, - "vnetIpAddressPrefix": { + "virtualMachineName": { "type": "string" }, - "subnetIpAddressPrefix": { + "osPublisher": { "type": "string" }, - "subnetName": { + "osOffer": { + "type": "string" + }, + "osSKU": { + "type": "string" + }, + "osVersion": { + "type": "string" + }, + "size": { + "type": "string" + }, + "storageType": { + "type": "string" + }, + "sshKeyValue": { + "type": "string" + }, + "sshKeyPath": { + "type": "string" + }, + "availabilitySetId": { "type": "string" } }, "variables": { + "imagePublisher": "[parameters('osPublisher')]", + "imageOffer": "[parameters('osOffer')]", + "imageSku": "[parameters('osSKU')]", + "imageVersion": "[parameters('osVersion')]", + "OSDiskName": "osdiskimage", + "vmName": "[parameters('virtualMachineName')]", + "vmSize": "[parameters('size')]", + "vhdStorageName": "[concat('vhdstorage', uniqueString(parameters('dnsNameForPublicIP')))]", + "vhdStorageType": "[parameters('storageType')]", + "vhdStorageContainerName": "vhds", + "nicName": "[concat('MyVMNic', uniqueString(parameters('dnsNameForPublicIP')))]", }, "resources": [ + { + "apiVersion": "2015-06-15", + "type": "Microsoft.Compute/virtualMachines", + "name": "[variables('vmName')]", + "location": "[resourceGroup().location]", + "tags": { + "displayName": "VirtualMachine" + }, + "dependsOn": [ ], + "properties": { + "availabilitySet": { + "id": "[parameters('availabilitySetId')]" + }, + "hardwareProfile": { + "vmSize": "[variables('vmSize')]" + }, + "osProfile": { + "computerName": "[variables('vmName')]", + "adminUsername": "[parameters('adminUsername')]", + "adminPassword": "[parameters('adminPassword')]", + "linuxConfiguration": { + "disablePasswordAuthentication": true, + "ssh": { + "publicKeys": [ + { + "keyData": "[parameters('sshKeyValue')]", + "path": "[parameters('sshKeyPath')]" + } + ] + } + } + }, + "storageProfile": { + "imageReference": { + "publisher": "[variables('imagePublisher')]", + "offer": "[variables('imageOffer')]", + "sku": "[variables('imageSku')]", + "version": "[variables('imageVersion')]" + }, + "osDisk": { + "name": "[concat('osdisk', uniqueString(parameters('dnsNameForPublicIP')))]", + "vhd": { + "uri": "[concat('http://', variables('vhdStorageName'), '.blob.core.windows.net/', variables('vhdStorageContainerName'), '/', variables('OSDiskName'), '.vhd')]" + }, + "caching": "ReadWrite", + "createOption": "FromImage" + } + }, + "networkProfile": { + "networkInterfaces": [ + { + "id": "[resourceId('Microsoft.Network/networkInterfaces', variables('nicName'))]" + } + ] + } + }, + "resources": [ + + ] + } ], "outputs": { } diff --git a/src/command_modules/azure-cli-vm/azure/cli/command_modules/vm/mgmt/nested_templates/vm_none_password.json b/src/command_modules/azure-cli-vm/azure/cli/command_modules/vm/mgmt/nested_templates/vm_none_password.json index 8149d2acc..2d40e49b5 100644 --- a/src/command_modules/azure-cli-vm/azure/cli/command_modules/vm/mgmt/nested_templates/vm_none_password.json +++ b/src/command_modules/azure-cli-vm/azure/cli/command_modules/vm/mgmt/nested_templates/vm_none_password.json @@ -39,6 +39,10 @@ "sshKeyPath": { "type": "string", "defaultValue": "" + }, + "availabilitySetId": { + "type": "string", + "defaultValue": "" } }, "variables": { diff --git a/src/command_modules/azure-cli-vm/azure/cli/command_modules/vm/mgmt/nested_templates/vm_none_sshkey.json b/src/command_modules/azure-cli-vm/azure/cli/command_modules/vm/mgmt/nested_templates/vm_none_sshkey.json index 5b28e514f..f7fbdb77e 100644 --- a/src/command_modules/azure-cli-vm/azure/cli/command_modules/vm/mgmt/nested_templates/vm_none_sshkey.json +++ b/src/command_modules/azure-cli-vm/azure/cli/command_modules/vm/mgmt/nested_templates/vm_none_sshkey.json @@ -37,6 +37,10 @@ }, "sshKeyPath": { "type": "string" + }, + "availabilitySetId": { + "type": "string", + "defaultValue": "" } }, "variables": { diff --git a/src/command_modules/azure-cli-vm/azure/cli/command_modules/vm/mgmt/swagger_create_vm.json b/src/command_modules/azure-cli-vm/azure/cli/command_modules/vm/mgmt/swagger_create_vm.json index 08530072f..25e296e70 100644 --- a/src/command_modules/azure-cli-vm/azure/cli/command_modules/vm/mgmt/swagger_create_vm.json +++ b/src/command_modules/azure-cli-vm/azure/cli/command_modules/vm/mgmt/swagger_create_vm.json @@ -211,11 +211,6 @@ "$ref": "#/definitions/DeploymentParameter_virtualMachineName", "x-ms-client-flatten": true }, - "subnetPrefix": { - "type": "object", - "$ref": "#/definitions/DeploymentParameter_subnetPrefix", - "x-ms-client-flatten": true - }, "osSKU": { "type": "object", "$ref": "#/definitions/DeploymentParameter_osSKU", @@ -245,6 +240,41 @@ "type": "object", "$ref": "#/definitions/DeploymentParameter_sshKeyPath", "x-ms-client-flatten": true + }, + "addToAvailabilitySet": { + "type": "object", + "$ref": "#/definitions/DeploymentParameter_addToAvailabilitySet", + "x-ms-client-flatten": true + }, + "availabilitySetId": { + "type": "object", + "$ref": "#/definitions/DeploymentParameter_availabilitySetId", + "x-ms-client-flatten": true + }, + "subnetName": { + "type": "object", + "$ref": "#/definitions/DeploymentParameter_subnetName", + "x-ms-client-flatten": true + }, + "virtualNetworkName": { + "type": "object", + "$ref": "#/definitions/DeploymentParameter_virtualNetworkName", + "x-ms-client-flatten": true + }, + "newOrExistingVNet": { + "type": "object", + "$ref": "#/definitions/DeploymentParameter_newOrExistingVNet", + "x-ms-client-flatten": true + }, + "virtualNetworkIpAddressType": { + "type": "object", + "$ref": "#/definitions/DeploymentParameter_virtualNetworkIpAddressType", + "x-ms-client-flatten": true + }, + "subnetIpAddressPrefix": { + "type": "object", + "$ref": "#/definitions/DeploymentParameter_subnetIpAddressPrefix", + "x-ms-client-flatten": true } }, "required": [ @@ -339,7 +369,39 @@ } } }, - "DeploymentParameter_subnetPrefix": { + "DeploymentParameter_subnetName": { + "properties": { + "value": { + "type": "string", + "description": "The subnet name." + } + } + }, + "DeploymentParameter_virtualNetworkName": { + "properties": { + "value": { + "type": "string", + "description": "Name of virtual network to add VM to." + } + } + }, + "DeploymentParameter_newOrExistingVNet": { + "properties": { + "value": { + "type": "string", + "description": "Whether to use an existing VNet or create a new one." + } + } + }, + "DeploymentParameter_virtualNetworkIpAddressType": { + "properties": { + "value": { + "type": "string", + "description": "Dynamic or Static IP address allocation." + } + } + }, + "DeploymentParameter_subnetIpAddressPrefix": { "properties": { "value": { "type": "string", @@ -347,6 +409,14 @@ } } }, + "DeploymentParameter_virtualNetworkIpAddressPrefix": { + "properties": { + "value": { + "type": "string", + "description": "IP address prefixe for the virtual network." + } + } + }, "DeploymentParameter_dnsNameForPublicIP": { "properties": { "value": { @@ -399,6 +469,26 @@ } } }, + "DeploymentParameter_addToAvailabilitySet": { + "properties": { + "value": { + "type": "string", + "description": "Whether or not to add the VM to an availability set.", + "enum": [ + "none", + "existing" + ] + } + } + }, + "DeploymentParameter_availabilitySetId": { + "properties": { + "value": { + "type": "string", + "description": "ID of the availability set the VM should be added to." + } + } + }, "ParametersLink": { "properties": { "uri": {