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:
parent
ee2adb45a8
commit
db8f10e9cb
2 changed files with 159 additions and 76 deletions
|
@ -29,6 +29,17 @@ options:
|
||||||
resource_group:
|
resource_group:
|
||||||
description:
|
description:
|
||||||
- The resource group to search for the desired virtual machine scale set
|
- 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:
|
extends_documentation_fragment:
|
||||||
- azure
|
- azure
|
||||||
|
@ -42,6 +53,7 @@ EXAMPLES = '''
|
||||||
azure_rm_virtualmachine_scaleset_facts:
|
azure_rm_virtualmachine_scaleset_facts:
|
||||||
resource_group: Testing
|
resource_group: Testing
|
||||||
name: testvmss001
|
name: testvmss001
|
||||||
|
format: curated
|
||||||
|
|
||||||
- name: Get facts for all virtual networks
|
- name: Get facts for all virtual networks
|
||||||
azure_rm_virtualmachine_scaleset_facts:
|
azure_rm_virtualmachine_scaleset_facts:
|
||||||
|
@ -60,81 +72,41 @@ azure_vmss:
|
||||||
returned: always
|
returned: always
|
||||||
type: list
|
type: list
|
||||||
example: [{
|
example: [{
|
||||||
"location": "eastus",
|
"admin_username": "testuser",
|
||||||
"properties": {
|
"capacity": 2,
|
||||||
"overprovision": true,
|
"data_disks": [
|
||||||
"singlePlacementGroup": true,
|
{
|
||||||
"upgradePolicy": {
|
"caching": "ReadWrite",
|
||||||
"mode": "Manual"
|
"disk_size_gb": 64,
|
||||||
},
|
"lun": 0,
|
||||||
"virtualMachineProfile": {
|
"managed_disk_type": "Standard_LRS"
|
||||||
"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"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
],
|
||||||
|
"image": {
|
||||||
|
"offer": "CoreOS",
|
||||||
|
"publisher": "CoreOS",
|
||||||
|
"sku": "Stable",
|
||||||
|
"version": "899.17.0"
|
||||||
},
|
},
|
||||||
"sku": {
|
"load_balancer": null,
|
||||||
"capacity": 1,
|
"location": "eastus",
|
||||||
"name": "Standard_DS1_v2",
|
"managed_disk_type": "Standard_LRS",
|
||||||
"tier": "Standard"
|
"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
|
''' # NOQA
|
||||||
|
|
||||||
from ansible.module_utils.azure_rm_common import AzureRMModuleBase
|
from ansible.module_utils.azure_rm_common import AzureRMModuleBase
|
||||||
|
import re
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from msrestazure.azure_exceptions import CloudError
|
from msrestazure.azure_exceptions import CloudError
|
||||||
|
@ -155,7 +127,13 @@ class AzureRMVirtualMachineScaleSetFacts(AzureRMModuleBase):
|
||||||
self.module_args = dict(
|
self.module_args = dict(
|
||||||
name=dict(type='str'),
|
name=dict(type='str'),
|
||||||
resource_group=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(
|
self.results = dict(
|
||||||
|
@ -167,6 +145,7 @@ class AzureRMVirtualMachineScaleSetFacts(AzureRMModuleBase):
|
||||||
|
|
||||||
self.name = None
|
self.name = None
|
||||||
self.resource_group = None
|
self.resource_group = None
|
||||||
|
self.format = None
|
||||||
self.tags = None
|
self.tags = None
|
||||||
|
|
||||||
super(AzureRMVirtualMachineScaleSetFacts, self).__init__(
|
super(AzureRMVirtualMachineScaleSetFacts, self).__init__(
|
||||||
|
@ -187,6 +166,71 @@ class AzureRMVirtualMachineScaleSetFacts(AzureRMModuleBase):
|
||||||
else:
|
else:
|
||||||
self.results['ansible_facts']['azure_vmss'] = self.list_items()
|
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
|
return self.results
|
||||||
|
|
||||||
def get_item(self):
|
def get_item(self):
|
||||||
|
|
|
@ -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
|
- name: Create virtual network
|
||||||
azure_rm_virtualnetwork:
|
azure_rm_virtualnetwork:
|
||||||
resource_group: "{{ resource_group }}"
|
resource_group: "{{ resource_group }}"
|
||||||
|
@ -26,7 +31,7 @@
|
||||||
- name: Create VMSS
|
- name: Create VMSS
|
||||||
azure_rm_virtualmachine_scaleset:
|
azure_rm_virtualmachine_scaleset:
|
||||||
resource_group: "{{ resource_group }}"
|
resource_group: "{{ resource_group }}"
|
||||||
name: testVMSS
|
name: testVMSS{{ rpfx }}
|
||||||
vm_size: Standard_DS1_v2
|
vm_size: Standard_DS1_v2
|
||||||
admin_username: testuser
|
admin_username: testuser
|
||||||
ssh_password_enabled: true
|
ssh_password_enabled: true
|
||||||
|
@ -50,14 +55,48 @@
|
||||||
managed_disk_type: Standard_LRS
|
managed_disk_type: Standard_LRS
|
||||||
register: results
|
register: results
|
||||||
|
|
||||||
- name: Assert that VMSS ran
|
- name: Assert that VMSS was created
|
||||||
assert:
|
assert:
|
||||||
that: results.changed
|
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
|
- name: Delete VMSS
|
||||||
azure_rm_virtualmachine_scaleset:
|
azure_rm_virtualmachine_scaleset:
|
||||||
resource_group: "{{ resource_group }}"
|
resource_group: "{{ resource_group }}"
|
||||||
name: testVMSS
|
name: testVMSS{{ rpfx }}
|
||||||
state: absent
|
state: absent
|
||||||
remove_on_absent: ['all']
|
remove_on_absent: ['all']
|
||||||
vm_size: Standard_DS1_v2
|
vm_size: Standard_DS1_v2
|
||||||
|
@ -82,7 +121,7 @@
|
||||||
- name: Create VMSS (check mode)
|
- name: Create VMSS (check mode)
|
||||||
azure_rm_virtualmachine_scaleset:
|
azure_rm_virtualmachine_scaleset:
|
||||||
resource_group: "{{ resource_group }}"
|
resource_group: "{{ resource_group }}"
|
||||||
name: testVMSS1
|
name: testVMSS{{ rpfx }}1
|
||||||
vm_size: Standard_DS1_v2
|
vm_size: Standard_DS1_v2
|
||||||
admin_username: testuser
|
admin_username: testuser
|
||||||
ssh_password_enabled: true
|
ssh_password_enabled: true
|
||||||
|
@ -115,7 +154,7 @@
|
||||||
- name: Create VMSS (check mode)
|
- name: Create VMSS (check mode)
|
||||||
azure_rm_virtualmachine_scaleset:
|
azure_rm_virtualmachine_scaleset:
|
||||||
resource_group: "{{ resource_group }}"
|
resource_group: "{{ resource_group }}"
|
||||||
name: testVMSS1
|
name: testVMSS{{ rpfx }}1
|
||||||
vm_size: Standard_DS1_v2
|
vm_size: Standard_DS1_v2
|
||||||
admin_username: testuser
|
admin_username: testuser
|
||||||
ssh_password_enabled: true
|
ssh_password_enabled: true
|
||||||
|
@ -147,7 +186,7 @@
|
||||||
- name: Delete VMSS
|
- name: Delete VMSS
|
||||||
azure_rm_virtualmachine_scaleset:
|
azure_rm_virtualmachine_scaleset:
|
||||||
resource_group: "{{ resource_group }}"
|
resource_group: "{{ resource_group }}"
|
||||||
name: testVMSS1
|
name: testVMSS{{ rpfx }}1
|
||||||
state: absent
|
state: absent
|
||||||
remove_on_absent: ['all']
|
remove_on_absent: ['all']
|
||||||
vm_size: Standard_DS1_v2
|
vm_size: Standard_DS1_v2
|
||||||
|
|
Loading…
Reference in a new issue