Fix #26755 by ensuring that the first nic in the nic list is primary (#38994)

* Fix #26755 by ensuring that the first nic in the nic list has primary set to True, and all other nics have primary set to False.

* Fix sanity issues and add test for two nics

* Fix typo in test

* fix nic list

* Ensure the niclist variable is used rather than a niclist string

* Add tests just for dual nic, reverting changes to single nic VM creation tests

* Correct idempotency test
This commit is contained in:
Jasper Aorangi 2018-04-26 18:16:25 +12:00 committed by Yunge Zhu
parent 32d786af65
commit 08f071eb7a
2 changed files with 92 additions and 10 deletions

View file

@ -819,7 +819,8 @@ class AzureRMVirtualMachine(AzureRMModuleBase):
if set(current_nics) != set(network_interfaces):
self.log('CHANGED: virtual machine {0} - network interfaces are different.'.format(self.name))
differences.append('Network Interfaces')
updated_nics = [dict(id=id) for id in network_interfaces]
updated_nics = [dict(id=id, primary=(i is 0))
for i, id in enumerate(network_interfaces)]
vm_dict['properties']['networkProfile']['networkInterfaces'] = updated_nics
changed = True
@ -928,7 +929,8 @@ class AzureRMVirtualMachine(AzureRMModuleBase):
if not self.short_hostname:
self.short_hostname = self.name
nics = [self.compute_models.NetworkInterfaceReference(id=id) for id in network_interfaces]
nics = [self.compute_models.NetworkInterfaceReference(id=id, primary=(i is 0))
for i, id in enumerate(network_interfaces)]
# os disk
if self.managed_disk_type:
@ -1057,9 +1059,8 @@ class AzureRMVirtualMachine(AzureRMModuleBase):
self.log("Update virtual machine {0}".format(self.name))
self.results['actions'].append('Updated VM {0}'.format(self.name))
nics = [self.compute_models.NetworkInterfaceReference(id=interface['id'])
for interface in vm_dict['properties']['networkProfile']['networkInterfaces']]
nics = [self.compute_models.NetworkInterfaceReference(id=interface['id'], primary=(i is 0))
for i, interface in enumerate(vm_dict['properties']['networkProfile']['networkInterfaces'])]
# os disk
if not vm_dict['properties']['storageProfile']['osDisk'].get('managedDisk'):

View file

@ -1,9 +1,14 @@
- name: Delete virtual machine
- name: Delete virtual machines
azure_rm_virtualmachine:
resource_group: "{{ resource_group }}"
name: testvm002
name: "{{ vms }}"
state: absent
vm_size: Standard_A0
loop:
- testvm002
- testvm003
loop_control:
loop_var: vms
register: output
- name: Create storage account name
@ -59,7 +64,7 @@
priority: 110
direction: Inbound
- name: Create NIC
- name: Create NIC for single nic VM
azure_rm_networkinterface:
resource_group: "{{ resource_group }}"
name: testvm001
@ -68,7 +73,7 @@
public_ip_name: testvm001
security_group: testvm001
- name: Create virtual machine
- name: Create virtual machine with a single NIC
register: output
azure_rm_virtualmachine:
resource_group: "{{ resource_group }}"
@ -173,7 +178,7 @@
- "azure_vm.powerstate in ['starting', 'running']"
- output.changed
- name: Should be idempotent
- name: Should be idempotent with a single NIC
azure_rm_virtualmachine:
resource_group: "{{ resource_group }}"
name: testvm002
@ -251,6 +256,82 @@
state: absent
vm_size: Standard_A0
- name: Create NICs for dual nic VM
azure_rm_networkinterface:
resource_group: "{{ resource_group }}"
name: "{{ item }}"
virtual_network: testvm001
subnet: testvm001
security_group: testvm001
loop:
- testvm011
- testvm012
- name: Create virtual machine with two NICs
register: output
vars:
niclist:
- testvm011
- testvm012
azure_rm_virtualmachine:
resource_group: "{{ resource_group }}"
name: testvm003
vm_size: Standard_A0
storage_account: "{{ storage_account }}"
storage_container: testvm001
storage_blob: testvm003.vhd
admin_username: adminuser
admin_password: Password123!
short_hostname: testvm
os_type: Linux
network_interfaces: "{{ niclist }}"
availability_set: "avbs{{ resource_group | hash('md5') | truncate(7, True, '') }}"
image:
offer: UbuntuServer
publisher: Canonical
sku: 16.04-LTS
version: latest
- assert:
that:
- azure_vm.properties.availabilitySet.id
- name: Should be idempotent with a dual NICs
vars:
niclist:
- testvm011
- testvm012
azure_rm_virtualmachine:
resource_group: "{{ resource_group }}"
name: testvm003
vm_size: Standard_A0
storage_account: "{{ storage_account }}"
storage_container: testvm001
storage_blob: testvm003.vhd
admin_username: adminuser
admin_password: Password123!
short_hostname: testvm
os_type: Linux
network_interfaces: "{{ niclist }}"
availability_set: "avbs{{ resource_group | hash('md5') | truncate(7, True, '') }}"
image:
offer: UbuntuServer
publisher: Canonical
sku: 16.04-LTS
version: latest
register: output
- assert:
that: not output.changed
- name: Delete dual NIC VM
azure_rm_virtualmachine:
resource_group: "{{ resource_group }}"
name: testvm003
state: absent
vm_size: Standard_A0
register: output
# TODO: Until we have a module to create/delete images this is the best tests
# I can do
- name: assert error thrown with invalid image dict