1
0
Fork 0
mirror of https://github.com/ansible-collections/community.general.git synced 2024-09-14 20:13:21 +02:00

Improved scaleset facts (#39722)

* improved scaleset facts

* scaleset facts fix some errors

* adding version_added for format param

* trying to break lines

* fixed syntax

* small code restructuring

* fix syntax

* fixed now

* add new test to scaleset / scaleset facts

* make scaleset test more clear

* temporarily comment out...

* try to retrieve scaleset facts

* try to add postfix

* fixed mistake

* fixed problem when no loadbalancer attached

* fixed another bug

* fixed sanity and a few other

* fixed pep8

* another try

* changed ansible to curated

* updated tests

* updated example and a few other mods

* small fixes

* removed unnecessary pass

* removed some items from ignore.txt

* remove file added by mistake
This commit is contained in:
Zim Kalinowski 2018-05-17 11:28:30 +08:00 committed by Jordan Borean
parent ee2adb45a8
commit db8f10e9cb
2 changed files with 159 additions and 76 deletions

View file

@ -29,6 +29,17 @@ options:
resource_group:
description:
- The resource group to search for the desired virtual machine scale set
format:
description:
- Format of the data returned.
- If C(raw) is selected information will be returned in raw format from Azure Python SDK.
- If C(curated) is selected the structure will be identical to input parameters of azure_rm_virtualmachine_scaleset module.
- In Ansible 2.5 and lower facts are always returned in raw format.
default: 'raw'
choices:
- 'curated'
- 'raw'
version_added: "2.6"
extends_documentation_fragment:
- azure
@ -42,6 +53,7 @@ EXAMPLES = '''
azure_rm_virtualmachine_scaleset_facts:
resource_group: Testing
name: testvmss001
format: curated
- name: Get facts for all virtual networks
azure_rm_virtualmachine_scaleset_facts:
@ -60,81 +72,41 @@ azure_vmss:
returned: always
type: list
example: [{
"location": "eastus",
"properties": {
"overprovision": true,
"singlePlacementGroup": true,
"upgradePolicy": {
"mode": "Manual"
},
"virtualMachineProfile": {
"networkProfile": {
"networkInterfaceConfigurations": [
{
"name": "testvmss",
"properties": {
"dnsSettings": {
"dnsServers": []
},
"enableAcceleratedNetworking": false,
"ipConfigurations": [
{
"name": "default",
"properties": {
"privateIPAddressVersion": "IPv4",
"subnet": {
"id": "/subscriptions/XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXX/resourceGroups/Testing/providers/Microsoft.Network/virtualNetworks/testvnet/subnets/testsubnet"
}
}
}
],
"primary": true
}
}
]
},
"osProfile": {
"adminUsername": "testuser",
"computerNamePrefix": "testvmss",
"linuxConfiguration": {
"disablePasswordAuthentication": true,
"ssh": {
"publicKeys": [
{
"keyData": "",
"path": "/home/testuser/.ssh/authorized_keys"
}
]
}
},
"secrets": []
},
"storageProfile": {
"imageReference": {
"offer": "CoreOS",
"publisher": "CoreOS",
"sku": "Stable",
"version": "899.17.0"
},
"osDisk": {
"caching": "ReadWrite",
"createOption": "fromImage",
"managedDisk": {
"storageAccountType": "Standard_LRS"
}
}
}
"admin_username": "testuser",
"capacity": 2,
"data_disks": [
{
"caching": "ReadWrite",
"disk_size_gb": 64,
"lun": 0,
"managed_disk_type": "Standard_LRS"
}
],
"image": {
"offer": "CoreOS",
"publisher": "CoreOS",
"sku": "Stable",
"version": "899.17.0"
},
"sku": {
"capacity": 1,
"name": "Standard_DS1_v2",
"tier": "Standard"
}
"load_balancer": null,
"location": "eastus",
"managed_disk_type": "Standard_LRS",
"name": "testVMSSeb4fd3c704",
"os_disk_caching": "ReadWrite",
"os_type": "Linux",
"resource_group": "myresourcegroup",
"ssh_password_enabled": false,
"state": "present",
"subnet_name": null,
"tier": "Standard",
"upgrade_policy": "Manual",
"virtual_network_name": null,
"vm_size": "Standard_DS1_v2"
}]
''' # NOQA
from ansible.module_utils.azure_rm_common import AzureRMModuleBase
import re
try:
from msrestazure.azure_exceptions import CloudError
@ -155,7 +127,13 @@ class AzureRMVirtualMachineScaleSetFacts(AzureRMModuleBase):
self.module_args = dict(
name=dict(type='str'),
resource_group=dict(type='str'),
tags=dict(type='list')
tags=dict(type='list'),
format=dict(
type='str',
choices=['curated',
'raw'],
default='raw'
)
)
self.results = dict(
@ -167,6 +145,7 @@ class AzureRMVirtualMachineScaleSetFacts(AzureRMModuleBase):
self.name = None
self.resource_group = None
self.format = None
self.tags = None
super(AzureRMVirtualMachineScaleSetFacts, self).__init__(
@ -187,6 +166,71 @@ class AzureRMVirtualMachineScaleSetFacts(AzureRMModuleBase):
else:
self.results['ansible_facts']['azure_vmss'] = self.list_items()
if self.format == 'curated':
for index in range(len(self.results['ansible_facts']['azure_vmss'])):
vmss = self.results['ansible_facts']['azure_vmss'][index]
subnet_name = None
load_balancer_name = None
virtual_network_name = None
ssh_password_enabled = False
try:
subnet_id = (vmss['properties']['virtualMachineProfile']['networkProfile']['networkInterfaceConfigurations'][0]
['properties']['ipConfigurations'][0]['properties']['subnet']['id'])
subnet_name = re.sub('.*subnets\\/', '', subnet_id)
except:
self.log('Could not extract subnet name')
try:
backend_address_pool_id = (vmss['properties']['virtualMachineProfile']['networkProfile']['networkInterfaceConfigurations'][0]
['properties']['ipConfigurations'][0]['properties']['loadBalancerBackendAddressPools'][0]['id'])
load_balancer_name = re.sub('\\/backendAddressPools.*', '', re.sub('.*loadBalancers\\/', '', backend_address_pool_id))
virtual_network_name = re.sub('.*virtualNetworks\\/', '', re.sub('\\/subnets.*', '', subnet_id))
except:
self.log('Could not extract load balancer / virtual network name')
try:
ssh_password_enabled = (not vmss['properties']['virtualMachineProfile']['osProfile'],
['linuxConfiguration']['disablePasswordAuthentication'])
except:
self.log('Could not extract SSH password enabled')
data_disks = vmss['properties']['virtualMachineProfile']['storageProfile'].get('dataDisks', [])
for disk_index in range(len(data_disks)):
old_disk = data_disks[disk_index]
new_disk = {
'lun': old_disk['lun'],
'disk_size_gb': old_disk['diskSizeGB'],
'managed_disk_type': old_disk['managedDisk']['storageAccountType'],
'caching': old_disk['caching']
}
data_disks[disk_index] = new_disk
updated = {
'resource_group': self.resource_group,
'name': vmss['name'],
'state': 'present',
'location': vmss['location'],
'vm_size': vmss['sku']['name'],
'capacity': vmss['sku']['capacity'],
'tier': vmss['sku']['tier'],
'upgrade_policy': vmss['properties']['upgradePolicy']['mode'],
'admin_username': vmss['properties']['virtualMachineProfile']['osProfile']['adminUsername'],
'admin_password': vmss['properties']['virtualMachineProfile']['osProfile'].get('adminPassword'),
'ssh_password_enabled': ssh_password_enabled,
'image': vmss['properties']['virtualMachineProfile']['storageProfile']['imageReference'],
'os_disk_caching': vmss['properties']['virtualMachineProfile']['storageProfile']['osDisk']['caching'],
'os_type': 'Linux' if (vmss['properties']['virtualMachineProfile']['osProfile'].get('linuxConfiguration') is not None) else 'Windows',
'managed_disk_type': vmss['properties']['virtualMachineProfile']['storageProfile']['osDisk']['managedDisk']['storageAccountType'],
'data_disks': data_disks,
'virtual_network_name': virtual_network_name,
'subnet_name': subnet_name,
'load_balancer': load_balancer_name
}
self.results['ansible_facts']['azure_vmss'][index] = updated
return self.results
def get_item(self):

View file

@ -1,3 +1,8 @@
- name: Prepare random number
set_fact:
rpfx: "{{ resource_group | hash('md5') | truncate(7, True, '') }}{{ 1000 | random }}"
run_once: yes
- name: Create virtual network
azure_rm_virtualnetwork:
resource_group: "{{ resource_group }}"
@ -26,7 +31,7 @@
- name: Create VMSS
azure_rm_virtualmachine_scaleset:
resource_group: "{{ resource_group }}"
name: testVMSS
name: testVMSS{{ rpfx }}
vm_size: Standard_DS1_v2
admin_username: testuser
ssh_password_enabled: true
@ -50,14 +55,48 @@
managed_disk_type: Standard_LRS
register: results
- name: Assert that VMSS ran
- name: Assert that VMSS was created
assert:
that: results.changed
- name: Retrieve scaleset facts
azure_rm_virtualmachine_scaleset_facts:
resource_group: "{{ resource_group }}"
name: testVMSS{{ rpfx }}
format: curated
register: output_scaleset
- name: Get scaleset body
set_fact:
body: "{{ output_scaleset.ansible_facts.azure_vmss[0] }}"
- name: Try to update VMSS using output as input
azure_rm_virtualmachine_scaleset:
resource_group: "{{ body.resource_group }}"
name: "{{ body.name }}"
vm_size: "{{ body.vm_size }}"
admin_username: "{{ body.admin_username }}"
ssh_password_enabled: "{{ body.ssh_password_enabled }}"
admin_password: "Password1234!"
capacity: "{{ body.capacity }}"
virtual_network_name: "{{ body.virtual_network_name }}"
subnet_name: "{{ body.subnet_name }}"
upgrade_policy: "{{ body.upgrade_policy }}"
tier: "{{ body.tier }}"
managed_disk_type: "{{ body.managed_disk_type }}"
os_disk_caching: "{{ body.os_disk_caching }}"
image: "{{ body.image }}"
data_disks: "{{ body.data_disks }}"
register: results
- name: Assert that VMSS was updated
assert:
that: not results.changed
- name: Delete VMSS
azure_rm_virtualmachine_scaleset:
resource_group: "{{ resource_group }}"
name: testVMSS
name: testVMSS{{ rpfx }}
state: absent
remove_on_absent: ['all']
vm_size: Standard_DS1_v2
@ -82,7 +121,7 @@
- name: Create VMSS (check mode)
azure_rm_virtualmachine_scaleset:
resource_group: "{{ resource_group }}"
name: testVMSS1
name: testVMSS{{ rpfx }}1
vm_size: Standard_DS1_v2
admin_username: testuser
ssh_password_enabled: true
@ -115,7 +154,7 @@
- name: Create VMSS (check mode)
azure_rm_virtualmachine_scaleset:
resource_group: "{{ resource_group }}"
name: testVMSS1
name: testVMSS{{ rpfx }}1
vm_size: Standard_DS1_v2
admin_username: testuser
ssh_password_enabled: true
@ -147,7 +186,7 @@
- name: Delete VMSS
azure_rm_virtualmachine_scaleset:
resource_group: "{{ resource_group }}"
name: testVMSS1
name: testVMSS{{ rpfx }}1
state: absent
remove_on_absent: ['all']
vm_size: Standard_DS1_v2