From 72a93a30b76d17bda62b3da74a3e66475e1c99b9 Mon Sep 17 00:00:00 2001 From: Maxence Date: Wed, 25 Aug 2021 04:34:53 +0000 Subject: [PATCH 1/3] Add proximity_placement_group support to availabilityset --- plugins/modules/azure_rm_availabilityset.py | 39 ++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/plugins/modules/azure_rm_availabilityset.py b/plugins/modules/azure_rm_availabilityset.py index a94d5df29..da03fccaa 100644 --- a/plugins/modules/azure_rm_availabilityset.py +++ b/plugins/modules/azure_rm_availabilityset.py @@ -51,6 +51,10 @@ - Should be between C(1) and C(3). type: int default: 3 + proximity_placement_group: + description: + - The proximity placement group that the availability set should be assigned to. + type: str sku: description: - Define if the availability set supports managed disks. @@ -80,6 +84,7 @@ resource_group: myResourceGroup platform_update_domain_count: 5 platform_fault_domain_count: 3 + proximity_placement_group: myProximityPlacementGroup sku: Aligned - name: Delete an availability set @@ -121,6 +126,11 @@ - Update domains values. type: int sample: 5 + proximity_placement_group: + description: + - The proximity placement group that the availability is assigned to. + type: str + sample: myProximityPlacementGroup sku: description: - The availability set supports managed disks. @@ -143,6 +153,7 @@ try: from msrestazure.azure_exceptions import CloudError + from msrestazure.tools import parse_resource_id except ImportError: # This is handled in azure_rm_common pass @@ -159,6 +170,7 @@ def availability_set_to_dict(avaset): location=avaset.location, platform_update_domain_count=avaset.platform_update_domain_count, platform_fault_domain_count=avaset.platform_fault_domain_count, + proximity_placement_group=avaset.proximity_placement_group.id if avaset.proximity_placement_group else None, tags=avaset.tags, sku=avaset.sku.name ) @@ -193,6 +205,10 @@ def __init__(self): type='int', default=3 ), + proximity_placement_group=dict( + type='str', + required=False + ), sku=dict( type='str', default='Classic', @@ -206,6 +222,8 @@ def __init__(self): self.tags = None self.platform_update_domain_count = None self.platform_fault_domain_count = None + self.proximity_placement_group = None + self.proximity_placement_group_resource = None self.sku = None self.state = None self.warning = False @@ -225,6 +243,7 @@ def exec_module(self, **kwargs): resource_group = None response = None to_be_updated = False + proximity_placement_group_id = None resource_group = self.get_resource_group(self.resource_group) if not self.location: @@ -235,10 +254,18 @@ def exec_module(self, **kwargs): response = self.get_availabilityset() self.results['state'] = response + if self.proximity_placement_group is not None: + parsed_proximity_placement_group = parse_resource_id(self.proximity_placement_group) + proximity_placement_group = self.get_proximity_placement_group(parsed_proximity_placement_group.get('resource_group', self.resource_group), + parsed_proximity_placement_group.get('name')) + self.proximity_placement_group_resource = self.compute_models.SubResource(id=proximity_placement_group.id) + proximity_placement_group_id = proximity_placement_group.id.lower() + if not response: to_be_updated = True else: update_tags, response['tags'] = self.update_tags(response['tags']) + response_proximity_placement_group = response['proximity_placement_group'].lower() if response.get('proximity_placement_group') is not None else None if update_tags: self.log("Tags has to be updated") @@ -250,6 +277,9 @@ def exec_module(self, **kwargs): if response['platform_fault_domain_count'] != self.platform_fault_domain_count: self.faildeploy('platform_fault_domain_count') + if response_proximity_placement_group != proximity_placement_group_id: + self.faildeploy('proximity_placement_group') + if response['sku'] != self.sku: self.faildeploy('sku') @@ -291,6 +321,7 @@ def create_or_update_availabilityset(self): tags=self.tags, platform_update_domain_count=self.platform_update_domain_count, platform_fault_domain_count=self.platform_fault_domain_count, + proximity_placement_group=self.proximity_placement_group_resource, sku=params_sku ) response = self.compute_client.availability_sets.create_or_update(self.resource_group, self.name, params) @@ -331,6 +362,12 @@ def get_availabilityset(self): else: return False + def get_proximity_placement_group(self, resource_group, name): + try: + return self.compute_client.proximity_placement_groups.get(resource_group, name) + except Exception as exc: + self.fail("Error fetching proximity placement group {0} - {1}".format(name, str(exc))) + def main(): """Main execution""" @@ -338,4 +375,4 @@ def main(): if __name__ == '__main__': - main() + main() \ No newline at end of file From e1bd09293cab7eb62a0217ecb2cf00c5c5603d17 Mon Sep 17 00:00:00 2001 From: Maxence Date: Wed, 25 Aug 2021 13:05:15 +0000 Subject: [PATCH 2/3] Coding style in azure_rm_availabilityset --- plugins/modules/azure_rm_availabilityset.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/plugins/modules/azure_rm_availabilityset.py b/plugins/modules/azure_rm_availabilityset.py index da03fccaa..1af19d15c 100644 --- a/plugins/modules/azure_rm_availabilityset.py +++ b/plugins/modules/azure_rm_availabilityset.py @@ -265,7 +265,9 @@ def exec_module(self, **kwargs): to_be_updated = True else: update_tags, response['tags'] = self.update_tags(response['tags']) - response_proximity_placement_group = response['proximity_placement_group'].lower() if response.get('proximity_placement_group') is not None else None + response_proximity_placement_group = ( + response['proximity_placement_group'].lower() if response.get('proximity_placement_group') is not None else None + ) if update_tags: self.log("Tags has to be updated") @@ -375,4 +377,4 @@ def main(): if __name__ == '__main__': - main() \ No newline at end of file + main() From 8f62a043fd85a443b1aa08dc4743221cc2409f60 Mon Sep 17 00:00:00 2001 From: Maxence Date: Wed, 25 Aug 2021 13:27:02 +0000 Subject: [PATCH 3/3] Add proximity group case test in availabilityset tests --- .../azure_rm_availabilityset/tasks/main.yml | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/tests/integration/targets/azure_rm_availabilityset/tasks/main.yml b/tests/integration/targets/azure_rm_availabilityset/tasks/main.yml index 8127d3c13..76c157dc6 100644 --- a/tests/integration/targets/azure_rm_availabilityset/tasks/main.yml +++ b/tests/integration/targets/azure_rm_availabilityset/tasks/main.yml @@ -9,12 +9,25 @@ - assert: that: results.changed +- name: Create proximity placement group name + set_fact: + ppgroup_name: "ppg{{ resource_group | hash('md5') | truncate(22, True, '') }}" + +- name: Create a proximity placement group + azure_rm_proximityplacementgroup: + resource_group: "{{ resource_group }}" + location: eastus + name: "{{ ppgroup_name }}" + state: present + register: results + - name: Create an availability set with advanced options azure_rm_availabilityset: name: myavailabilityset2 resource_group: "{{ resource_group }}" platform_update_domain_count: 5 platform_fault_domain_count: 2 + proximity_placement_group: "{{ ppgroup_name }}" sku: Aligned register: results @@ -27,6 +40,7 @@ resource_group: "{{ resource_group }}" platform_update_domain_count: 2 platform_fault_domain_count: 2 + proximity_placement_group: "{{ ppgroup_name }}" sku: Aligned register: results ignore_errors: yes @@ -42,6 +56,7 @@ resource_group: "{{ resource_group }}" platform_update_domain_count: 2 platform_fault_domain_count: 2 + proximity_placement_group: "{{ ppgroup_name }}" sku: Aligned tags: test1: modified @@ -59,6 +74,7 @@ resource_group: "{{ resource_group }}" platform_update_domain_count: 5 platform_fault_domain_count: 2 + proximity_placement_group: "{{ ppgroup_name }}" sku: Aligned tags: test2: modified @@ -87,6 +103,7 @@ resource_group: "{{ resource_group }}" platform_update_domain_count: 5 platform_fault_domain_count: 2 + proximity_placement_group: "{{ ppgroup_name }}" sku: Aligned tags: checktest1: modified1 @@ -115,6 +132,7 @@ - results.ansible_info.azure_availabilitysets[0].properties.platformFaultDomainCount == 2 - results.ansible_info.azure_availabilitysets[0].properties.platformUpdateDomainCount == 5 - results.ansible_info.azure_availabilitysets[0].sku == 'Aligned' + - results.ansible_info.azure_availabilitysets[0].properties.proximityPlacementGroup.id.split('/')[-1] == ppgroup_name - name: Delete an availability set @@ -134,3 +152,9 @@ name: myavailabilityset3 resource_group: "{{ resource_group }}" state: absent + +- name: Delete proximity placement group + azure_rm_proximityplacementgroup: + resource_group: "{{ resource_group }}" + name: "{{ ppgroup_name }}" + state: absent