Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add ProximityPlacementGroup to azure_rm_availabilityset #612

Merged
merged 4 commits into from
Aug 27, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 39 additions & 0 deletions plugins/modules/azure_rm_availabilityset.py
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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.
Expand All @@ -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
Expand All @@ -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
)
Expand Down Expand Up @@ -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',
Expand All @@ -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
Expand All @@ -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:
Expand All @@ -235,10 +254,20 @@ 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")
Expand All @@ -250,6 +279,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')

Expand Down Expand Up @@ -291,6 +323,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)
Expand Down Expand Up @@ -331,6 +364,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"""
Expand Down
24 changes: 24 additions & 0 deletions tests/integration/targets/azure_rm_availabilityset/tasks/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand All @@ -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
Expand All @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand All @@ -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