diff --git a/lib/ansible/modules/cloud/azure/azure_rm_virtualmachine.py b/lib/ansible/modules/cloud/azure/azure_rm_virtualmachine.py index 650205673a0..a5fe3422b77 100644 --- a/lib/ansible/modules/cloud/azure/azure_rm_virtualmachine.py +++ b/lib/ansible/modules/cloud/azure/azure_rm_virtualmachine.py @@ -46,7 +46,6 @@ options: state. - State 'absent' will remove the virtual machine. default: present - required: false choices: - absent - present @@ -54,28 +53,21 @@ options: description: - Use with state 'present' to start the machine. Set to false to have the machine be 'stopped'. default: true - required: false allocated: description: - Toggle that controls if the machine is allocated/deallocated, only useful with state='present'. default: True - required: false restarted: description: - Use with state 'present' to restart a running VM. default: false - required: false location: description: - Valid Azure location. Defaults to location of the resource group. - default: null - required: false short_hostname: description: - Name assigned internally to the host. On a linux VM this is the name returned by the `hostname` command. When creating a virtual machine, short_hostname defaults to name. - default: null - required: false vm_size: description: - A valid Azure VM size value. For example, 'Standard_D4'. The list of choices varies depending on the @@ -84,28 +76,21 @@ options: admin_username: description: - Admin username used to access the host after it is created. Required when creating a VM. - default: null - required: false admin_password: description: - Password for the admin username. Not required if the os_type is Linux and SSH password authentication is disabled by setting ssh_password_enabled to false. - default: null - required: false ssh_password_enabled: description: - When the os_type is Linux, setting ssh_password_enabled to false will disable SSH password authentication and require use of SSH keys. default: true - required: false ssh_public_keys: description: - "For os_type Linux provide a list of SSH keys. Each item in the list should be a dictionary where the dictionary contains two keys: path and key_data. Set the path to the default location of the authorized_keys files. On an Enterprise Linux host, for example, the path will be /home//.ssh/authorized_keys. Set key_data to the actual value of the public key." - default: null - required: false image: description: - "A dictionary describing the Marketplace image used to build the VM. Will contain keys: publisher, @@ -116,22 +101,17 @@ options: description: - Name of an existing storage account that supports creation of VHD blobs. If not specified for a new VM, a new storage account named 01 will be created using storage type 'Standard_LRS'. - default: null - required: false storage_container_name: description: - Name of the container to use within the storage account to store VHD blobs. If no name is specified a default container will created. default: vhds - required: false storage_blob_name: description: - Name fo the storage blob used to hold the VM's OS disk image. If no name is provided, defaults to the VM name + '.vhd'. If you provide a name, it must end with '.vhd' aliases: - storage_blob - default: null - required: false os_disk_caching: description: - Type of OS disk caching. @@ -141,7 +121,6 @@ options: default: ReadOnly aliases: - disk_caching - required: false os_type: description: - Base type of operating system. @@ -150,7 +129,6 @@ options: - Linux default: - Linux - required: false public_ip_allocation_method: description: - If a public IP address is created when creating the VM (because a Network Interface was not provided), @@ -163,22 +141,22 @@ options: - Static aliases: - public_ip_allocation - required: false open_ports: description: - If a network interface is created when creating the VM, a security group will be created as well. For Linux hosts a rule will be added to the security group allowing inbound TCP connections to the default SSH port 22, and for Windows hosts ports 3389 and 5986 will be opened. Override the default open ports by providing a list of ports. - default: null - required: false network_interface_names: description: - List of existing network interface names to add to the VM. If a network interface name is not provided when the VM is created, a default network interface will be created. In order for the module to create a network interface, at least one Virtual Network with one Subnet must exist. - default: null - required: false + virtual_network_resource_group: + description: + - When creating a virtual machine, if a specific virtual network from another resource group should be + used, use this parameter to specify the resource group to use. + version_added: "2.4" virtual_network_name: description: - When creating a virtual machine, if a network interface name is not provided, one will be created. @@ -186,8 +164,6 @@ options: Use this parameter to provide a specific virtual network instead. aliases: - virtual_network - default: null - required: false subnet_name: description: - When creating a virtual machine, if a network interface name is not provided, one will be created. @@ -195,15 +171,12 @@ options: Use this parameter to provide a specific subnet instead. aliases: - virtual_network - default: null - required: false remove_on_absent: description: - When removing a VM using state 'absent', also remove associated resources - "It can be 'all' or a list with any of the following: ['network_interfaces', 'virtual_storage', 'public_ips']" - Any other input will be ignored default: ['all'] - required: false extends_documentation_fragment: - azure @@ -494,6 +467,7 @@ class AzureRMVirtualMachine(AzureRMModuleBase): open_ports=dict(type='list'), network_interface_names=dict(type='list', aliases=['network_interfaces']), remove_on_absent=dict(type='list', default=['all']), + virtual_network_resource_group=dict(type = 'str'), virtual_network_name=dict(type='str', aliases=['virtual_network']), subnet_name=dict(type='str', aliases=['subnet']), allocated=dict(type='bool', default=True), @@ -523,6 +497,7 @@ class AzureRMVirtualMachine(AzureRMModuleBase): self.force = None self.public_ip_allocation_method = None self.open_ports = None + self.virtual_network_resource_group = None self.virtual_network_name = None self.subnet_name = None self.allocated = None @@ -1200,12 +1175,19 @@ class AzureRMVirtualMachine(AzureRMModuleBase): self.log("NIC {0} does not exist.".format(network_interface_name)) + virtual_network_resource_group = None + if self.virtual_network_resource_group: + virtual_network_resource_group = self.virtual_network_resource_group + else: + virtual_network_resource_group = self.resource_group + if self.virtual_network_name: try: - self.network_client.virtual_networks.list(self.resource_group, self.virtual_network_name) + self.network_client.virtual_networks.list(virtual_network_resource_group, self.virtual_network_name) virtual_network_name = self.virtual_network_name - except Exception as exc: + except CloudError: self.fail("Error: fetching virtual network {0} - {1}".format(self.virtual_network_name, str(exc))) + else: # Find a virtual network no_vnets_msg = "Error: unable to find virtual network in resource group {0}. A virtual network " \ @@ -1240,7 +1222,7 @@ class AzureRMVirtualMachine(AzureRMModuleBase): subnet_id = None try: - subnets = self.network_client.subnets.list(self.resource_group, virtual_network_name) + subnets = self.network_client.subnets.list(virtual_network_resource_group, virtual_network_name) except CloudError: self.fail(no_subnets_msg)