Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import argparse
import re
import os
from azure.mgmt.compute import ComputeManagementClient, ComputeManagementClientConfiguration
from azure.mgmt.compute.operations import (AvailabilitySetsOperations,
VirtualMachineExtensionImagesOperations,
Expand Down Expand Up @@ -211,11 +212,25 @@ def __call__(self, parser, namespace, values, option_string=None):
else:
namespace.os_type = image

class VMSSHFieldAction(argparse.Action): #pylint: disable=too-few-public-methods
def __call__(self, parser, namespace, values, option_string=None):
ssh_value = values

if os.path.exists(ssh_value):
with open(ssh_value, 'r') as f:
namespace.ssh_key_value = f.read()
else:
namespace.ssh_key_value = ssh_value

extra_parameters = [
{
'name': '--image',
'help': 'The OS image. Supported values: Common OS (e.g. Win2012R2Datacenter), URN (e.g. "publisher:offer:sku:version"), or existing VHD URI.',
'action': VMImageFieldAction
},
{
'name': '--ssh-key-value',
'action': VMSSHFieldAction
}
]

Expand Down Expand Up @@ -248,7 +263,7 @@ def __call__(self, parser, namespace, values, option_string=None):
--virtual-network-type existing --virtual-network-name myvnet --subnet-name default
--availability-set-type existing --availability-set-id myavailset
--public-ip-address-type new --dns-name-for-public-ip myGloballyUniqueVmDnsName
-l "West US" -g myvms --name myvm18o --ssh-key-value "<ssh-rsa-key>"
-l "West US" -g myvms --name myvm18o --ssh-key-value "<ssh-rsa-key or key-file-path>"
"""

build_operation('vm',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,9 @@
},
"adminPassword": {
"type": "securestring",
"defaultValue": "",
"metadata": {
"description": "Password for the Virtual Machine."
"description": "Password for the Virtual Machine. Required if SSH (Linux only) is not specified."
}
},
"adminUsername": {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,8 @@ class DeploymentVM(Model):
used to access the Virtual Machine.
:type dns_name_for_public_ip: str
:param storage_account_type: Whether to use an existing storage account
or create a new one.
or create a new one. Possible values include: 'new', 'existing'. Default
value: "new" .
:type storage_account_type: str
:param os_disk_uri: URI for a custom VHD image.
:type os_disk_uri: str
Expand All @@ -48,16 +49,21 @@ class DeploymentVM(Model):
:param name: The VM resource name.
:type name: str
:param virtual_network_type: Whether to use an existing VNet or create a
new one.
new one. Possible values include: 'new', 'existing'. Default value:
"new" .
:type virtual_network_type: str
:param admin_password: Password for the Virtual Machine.
:param admin_password: Password for the Virtual Machine. Required if SSH
(Linux only) is not specified.
:type admin_password: str
:param os_sku: The OS SKU to install.
:type os_sku: str
:param subnet_name: The subnet name.
:type subnet_name: str
:param os_type: Common OS choices. Choose 'Custom' to specify an image
with the osPublisher, osOffer, osSKU, and osVersion parameters.
with the osPublisher, osOffer, osSKU, and osVersion parameters. Possible
values include: 'CentOS', 'CoreOS', 'Debian', 'openSUSE', 'RHEL',
'SLES', 'UbuntuLTS', 'Win2012R2Datacenter', 'Win2012Datacenter',
'Win2008R2SP1', 'Custom'. Default value: "Win2012R2Datacenter" .
:type os_type: str
:param admin_username: Username for the Virtual Machine.
:type admin_username: str
Expand All @@ -70,10 +76,12 @@ class DeploymentVM(Model):
:param os_offer: The OS Offer to install.
:type os_offer: str
:param public_ip_address_allocation: Dynamic or Static public IP address
allocation.
allocation. Possible values include: 'Dynamic', 'Static'. Default value:
"Dynamic" .
:type public_ip_address_allocation: str
:param authentication_type: Authentication method: password-only or add
ssh-keys (Linux-only).
ssh-keys (Linux-only). Possible values include: 'password', 'sshkey'.
Default value: "password" .
:type authentication_type: str
:param storage_account_name: Name of storage account for the VM OS disk.
:type storage_account_name: str
Expand All @@ -82,7 +90,8 @@ class DeploymentVM(Model):
:param size: The VM Size that should be created (e.g. Standard_A2)
:type size: str
:param public_ip_address_type: Use a public IP Address for the VM Nic.
(new, existing or none).
(new, existing or none). Possible values include: 'none', 'new',
'existing'. Default value: "none" .
:type public_ip_address_type: str
:param virtual_network_ip_address_prefix: The IP address prefix.
:type virtual_network_ip_address_prefix: str
Expand All @@ -95,12 +104,14 @@ class DeploymentVM(Model):
:param os_publisher: The OS publisher of the OS image.
:type os_publisher: str
:param availability_set_type: Flag to add the VM to an existing
availability set.
availability set. Possible values include: 'none', 'existing'. Default
value: "none" .
:type availability_set_type: str
:param public_ip_address_name: Name of public IP address to use.
:type public_ip_address_name: str
:param dns_name_type: Associate VMs with a public IP address to a DNS
name (new or none).
name (new or none). Possible values include: 'none', 'new'. Default
value: "none" .
:type dns_name_type: str
:ivar mode: Gets or sets the deployment mode. Default value:
"Incremental" .
Expand All @@ -111,7 +122,6 @@ class DeploymentVM(Model):
'uri': {'required': True, 'constant': True},
'_artifacts_location': {'constant': True},
'name': {'required': True},
'admin_password': {'required': True},
'admin_username': {'required': True},
'mode': {'required': True, 'constant': True},
}
Expand Down Expand Up @@ -161,7 +171,7 @@ class DeploymentVM(Model):

mode = "Incremental"

def __init__(self, name, admin_password, admin_username, content_version=None, storage_container_name=None, virtual_network_name=None, subnet_ip_address_prefix=None, private_ip_address_allocation=None, dns_name_for_public_ip=None, storage_account_type=None, os_disk_uri=None, virtual_network_type=None, os_sku=None, subnet_name=None, os_type=None, os_version=None, os_disk_name=None, ssh_key_path=None, os_offer=None, public_ip_address_allocation=None, authentication_type=None, storage_account_name=None, storage_redundancy_type=None, size=None, public_ip_address_type=None, virtual_network_ip_address_prefix=None, availability_set_id=None, ssh_key_value=None, location=None, os_publisher=None, availability_set_type=None, public_ip_address_name=None, dns_name_type=None):
def __init__(self, name, admin_username, content_version=None, storage_container_name=None, virtual_network_name=None, subnet_ip_address_prefix=None, private_ip_address_allocation=None, dns_name_for_public_ip=None, storage_account_type="new", os_disk_uri=None, virtual_network_type="new", admin_password=None, os_sku=None, subnet_name=None, os_type="Win2012R2Datacenter", os_version=None, os_disk_name=None, ssh_key_path=None, os_offer=None, public_ip_address_allocation="Dynamic", authentication_type="password", storage_account_name=None, storage_redundancy_type=None, size=None, public_ip_address_type="none", virtual_network_ip_address_prefix=None, availability_set_id=None, ssh_key_value=None, location=None, os_publisher=None, availability_set_type="none", public_ip_address_name=None, dns_name_type="none"):
self.content_version = content_version
self.storage_container_name = storage_container_name
self.virtual_network_name = virtual_network_name
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ def __init__(self, client, config, serializer, deserializer):
self.config = config

def create_or_update(
self, resource_group_name, deployment_name, name, admin_password, admin_username, content_version=None, storage_container_name=None, virtual_network_name=None, subnet_ip_address_prefix=None, private_ip_address_allocation=None, dns_name_for_public_ip=None, storage_account_type=None, os_disk_uri=None, virtual_network_type=None, os_sku=None, subnet_name=None, os_type=None, os_version=None, os_disk_name=None, ssh_key_path=None, os_offer=None, public_ip_address_allocation=None, authentication_type=None, storage_account_name=None, storage_redundancy_type=None, size=None, public_ip_address_type=None, virtual_network_ip_address_prefix=None, availability_set_id=None, ssh_key_value=None, location=None, os_publisher=None, availability_set_type=None, public_ip_address_name=None, dns_name_type=None, custom_headers={}, raw=False, **operation_config):
self, resource_group_name, deployment_name, name, admin_username, content_version=None, storage_container_name=None, virtual_network_name=None, subnet_ip_address_prefix=None, private_ip_address_allocation=None, dns_name_for_public_ip=None, storage_account_type="new", os_disk_uri=None, virtual_network_type="new", admin_password=None, os_sku=None, subnet_name=None, os_type="Win2012R2Datacenter", os_version=None, os_disk_name=None, ssh_key_path=None, os_offer=None, public_ip_address_allocation="Dynamic", authentication_type="password", storage_account_name=None, storage_redundancy_type=None, size=None, public_ip_address_type="none", virtual_network_ip_address_prefix=None, availability_set_id=None, ssh_key_value=None, location=None, os_publisher=None, availability_set_type="none", public_ip_address_name=None, dns_name_type="none", custom_headers={}, raw=False, **operation_config):
"""
Create or update a virtual machine.

Expand All @@ -43,8 +43,6 @@ def create_or_update(
:type deployment_name: str
:param name: The VM resource name.
:type name: str
:param admin_password: Password for the Virtual Machine.
:type admin_password: str
:param admin_username: Username for the Virtual Machine.
:type admin_username: str
:param content_version: If included it must match the ContentVersion
Expand All @@ -64,19 +62,26 @@ def create_or_update(
Public IP used to access the Virtual Machine.
:type dns_name_for_public_ip: str
:param storage_account_type: Whether to use an existing storage
account or create a new one.
account or create a new one. Possible values include: 'new',
'existing'
:type storage_account_type: str
:param os_disk_uri: URI for a custom VHD image.
:type os_disk_uri: str
:param virtual_network_type: Whether to use an existing VNet or
create a new one.
create a new one. Possible values include: 'new', 'existing'
:type virtual_network_type: str
:param admin_password: Password for the Virtual Machine. Required if
SSH (Linux only) is not specified.
:type admin_password: str
:param os_sku: The OS SKU to install.
:type os_sku: str
:param subnet_name: The subnet name.
:type subnet_name: str
:param os_type: Common OS choices. Choose 'Custom' to specify an
image with the osPublisher, osOffer, osSKU, and osVersion parameters.
image with the osPublisher, osOffer, osSKU, and osVersion
parameters. Possible values include: 'CentOS', 'CoreOS', 'Debian',
'openSUSE', 'RHEL', 'SLES', 'UbuntuLTS', 'Win2012R2Datacenter',
'Win2012Datacenter', 'Win2008R2SP1', 'Custom'
:type os_type: str
:param os_version: The OS version to install.
:type os_version: str
Expand All @@ -87,10 +92,11 @@ def create_or_update(
:param os_offer: The OS Offer to install.
:type os_offer: str
:param public_ip_address_allocation: Dynamic or Static public IP
address allocation.
address allocation. Possible values include: 'Dynamic', 'Static'
:type public_ip_address_allocation: str
:param authentication_type: Authentication method: password-only or
add ssh-keys (Linux-only).
add ssh-keys (Linux-only). Possible values include: 'password',
'sshkey'
:type authentication_type: str
:param storage_account_name: Name of storage account for the VM OS
disk.
Expand All @@ -100,7 +106,8 @@ def create_or_update(
:param size: The VM Size that should be created (e.g. Standard_A2)
:type size: str
:param public_ip_address_type: Use a public IP Address for the VM
Nic. (new, existing or none).
Nic. (new, existing or none). Possible values include: 'none',
'new', 'existing'
:type public_ip_address_type: str
:param virtual_network_ip_address_prefix: The IP address prefix.
:type virtual_network_ip_address_prefix: str
Expand All @@ -113,12 +120,12 @@ def create_or_update(
:param os_publisher: The OS publisher of the OS image.
:type os_publisher: str
:param availability_set_type: Flag to add the VM to an existing
availability set.
availability set. Possible values include: 'none', 'existing'
:type availability_set_type: str
:param public_ip_address_name: Name of public IP address to use.
:type public_ip_address_name: str
:param dns_name_type: Associate VMs with a public IP address to a DNS
name (new or none).
name (new or none). Possible values include: 'none', 'new'
:type dns_name_type: str
:param dict custom_headers: headers that will be added to the request
:param bool raw: returns the direct response alongside the
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,6 @@
"osProfile": {
"computerName": "[variables('vmName')]",
"adminUsername": "[parameters('adminUsername')]",
"adminPassword": "[parameters('adminPassword')]",
"linuxConfiguration": {
"disablePasswordAuthentication": true,
"ssh": {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,6 @@
"osProfile": {
"computerName": "[variables('vmName')]",
"adminUsername": "[parameters('adminUsername')]",
"adminPassword": "[parameters('adminPassword')]",
"linuxConfiguration": {
"disablePasswordAuthentication": true,
"ssh": {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -327,7 +327,6 @@
}
},
"required": [
"adminPassword",
"adminUsername",
"virtualMachineName"
]
Expand Down Expand Up @@ -382,6 +381,11 @@
"value": {
"type": "string",
"description": "Whether to use an existing storage account or create a new one.",
"enum": [
"new",
"existing"
],
"default": "new",
"x-ms-client-name": "storageAccountType"
}
}
Expand Down Expand Up @@ -427,6 +431,11 @@
"value": {
"type": "string",
"description": "Whether to use an existing VNet or create a new one.",
"enum": [
"new",
"existing"
],
"default": "new",
"x-ms-client-name": "virtualNetworkType"
}
}
Expand All @@ -435,14 +444,10 @@
"properties": {
"value": {
"type": "string",
"description": "Password for the Virtual Machine.",
"description": "Password for the Virtual Machine. Required if SSH (Linux only) is not specified.",
"x-ms-client-name": "adminPassword"
}
},
"required": [
"value"
]

}
},
"DeploymentParameter_osSKU": {
"properties": {
Expand All @@ -467,6 +472,20 @@
"value": {
"type": "string",
"description": "Common OS choices. Choose 'Custom' to specify an image with the osPublisher, osOffer, osSKU, and osVersion parameters.",
"enum": [
"CentOS",
"CoreOS",
"Debian",
"openSUSE",
"RHEL",
"SLES",
"UbuntuLTS",
"Win2012R2Datacenter",
"Win2012Datacenter",
"Win2008R2SP1",
"Custom"
],
"default": "Win2012R2Datacenter",
"x-ms-client-name": "osType"
}
}
Expand Down Expand Up @@ -525,6 +544,11 @@
"value": {
"type": "string",
"description": "Dynamic or Static public IP address allocation.",
"enum": [
"Dynamic",
"Static"
],
"default": "Dynamic",
"x-ms-client-name": "publicIpAddressAllocation"
}
}
Expand All @@ -534,6 +558,11 @@
"value": {
"type": "string",
"description": "Authentication method: password-only or add ssh-keys (Linux-only).",
"enum": [
"password",
"sshkey"
],
"default": "password",
"x-ms-client-name": "authenticationType"
}
}
Expand Down Expand Up @@ -570,6 +599,12 @@
"value": {
"type": "string",
"description": "Use a public IP Address for the VM Nic. (new, existing or none).",
"enum": [
"none",
"new",
"existing"
],
"default": "none",
"x-ms-client-name": "publicIpAddressType"
}
}
Expand Down Expand Up @@ -624,6 +659,11 @@
"value": {
"type": "string",
"description": "Flag to add the VM to an existing availability set.",
"enum": [
"none",
"existing"
],
"default": "none",
"x-ms-client-name": "availabilitySetType"
}
}
Expand All @@ -642,6 +682,11 @@
"value": {
"type": "string",
"description": "Associate VMs with a public IP address to a DNS name (new or none).",
"enum": [
"none",
"new"
],
"default": "none",
"x-ms-client-name": "dnsNameType"
}
}
Expand Down