Adding check_state support and warning
lint Update integration test handle check_mode handle warnings Removing the empty tags check Updating author handle To use github handle Changing from warn to fail disabled tests
This commit is contained in:
parent
472d3c3c86
commit
d9ee3c09ca
3 changed files with 105 additions and 24 deletions
|
@ -70,7 +70,7 @@ extends_documentation_fragment:
|
||||||
- azure_tags
|
- azure_tags
|
||||||
|
|
||||||
author:
|
author:
|
||||||
- "Julien Stroheker (@ju_stroh)"
|
- "Julien Stroheker (@julienstroheker)"
|
||||||
'''
|
'''
|
||||||
|
|
||||||
EXAMPLES = '''
|
EXAMPLES = '''
|
||||||
|
@ -121,6 +121,10 @@ except ImportError:
|
||||||
|
|
||||||
|
|
||||||
def availability_set_to_dict(avaset):
|
def availability_set_to_dict(avaset):
|
||||||
|
'''
|
||||||
|
Serialazing the availability set from the API to Dict
|
||||||
|
:return: dict
|
||||||
|
'''
|
||||||
return dict(
|
return dict(
|
||||||
id=avaset.id,
|
id=avaset.id,
|
||||||
name=avaset.name,
|
name=avaset.name,
|
||||||
|
@ -180,6 +184,8 @@ class AzureRMAvailabilitySet(AzureRMModuleBase):
|
||||||
self.platform_update_domain_count = None
|
self.platform_update_domain_count = None
|
||||||
self.platform_fault_domain_count = None
|
self.platform_fault_domain_count = None
|
||||||
self.sku = None
|
self.sku = None
|
||||||
|
self.state = None
|
||||||
|
self.warning = False
|
||||||
|
|
||||||
self.results = dict(changed=False, state=dict())
|
self.results = dict(changed=False, state=dict())
|
||||||
|
|
||||||
|
@ -193,9 +199,9 @@ class AzureRMAvailabilitySet(AzureRMModuleBase):
|
||||||
for key in list(self.module_arg_spec.keys()) + ['tags']:
|
for key in list(self.module_arg_spec.keys()) + ['tags']:
|
||||||
setattr(self, key, kwargs[key])
|
setattr(self, key, kwargs[key])
|
||||||
|
|
||||||
results = dict()
|
|
||||||
resource_group = None
|
resource_group = None
|
||||||
response = None
|
response = None
|
||||||
|
to_be_updated = False
|
||||||
|
|
||||||
try:
|
try:
|
||||||
resource_group = self.get_resource_group(self.resource_group)
|
resource_group = self.get_resource_group(self.resource_group)
|
||||||
|
@ -207,25 +213,57 @@ class AzureRMAvailabilitySet(AzureRMModuleBase):
|
||||||
# Check if the AS already present in the RG
|
# Check if the AS already present in the RG
|
||||||
if self.state == 'present':
|
if self.state == 'present':
|
||||||
response = self.get_availabilityset()
|
response = self.get_availabilityset()
|
||||||
|
self.results['state'] = response
|
||||||
|
|
||||||
if not response:
|
if not response:
|
||||||
self.results['state'] = self.create_availabilityset()
|
to_be_updated = True
|
||||||
self.results['changed'] = True
|
|
||||||
else:
|
else:
|
||||||
self.log("AS already there, updating Tags")
|
|
||||||
update_tags, response['tags'] = self.update_tags(response['tags'])
|
update_tags, response['tags'] = self.update_tags(response['tags'])
|
||||||
|
|
||||||
if update_tags:
|
if update_tags:
|
||||||
self.results['state'] = self.create_availabilityset()
|
self.log("Tags has to be updated")
|
||||||
self.results['changed'] = True
|
to_be_updated = True
|
||||||
|
|
||||||
|
if response['platform_update_domain_count'] != self.platform_update_domain_count:
|
||||||
|
self.faildeploy('platform_update_domain_count')
|
||||||
|
|
||||||
|
if response['platform_fault_domain_count'] != self.platform_fault_domain_count:
|
||||||
|
self.faildeploy('platform_fault_domain_count')
|
||||||
|
|
||||||
|
if response['sku'] != self.sku:
|
||||||
|
self.faildeploy('sku')
|
||||||
|
|
||||||
|
if self.check_mode:
|
||||||
|
return self.results
|
||||||
|
|
||||||
|
if to_be_updated:
|
||||||
|
self.results['state'] = self.create_or_update_availabilityset()
|
||||||
|
self.results['changed'] = True
|
||||||
|
|
||||||
elif self.state == 'absent':
|
elif self.state == 'absent':
|
||||||
self.delete_availabilityset()
|
self.delete_availabilityset()
|
||||||
self.results['changed'] = True
|
self.results['changed'] = True
|
||||||
|
|
||||||
return self.results
|
return self.results
|
||||||
|
|
||||||
def create_availabilityset(self):
|
def faildeploy(self, param):
|
||||||
|
'''
|
||||||
|
Helper method to push fail message in the console.
|
||||||
|
Usefull to notify that the users cannot change some values in a Availibility Set
|
||||||
|
|
||||||
|
:param: variable's name impacted
|
||||||
|
:return: void
|
||||||
|
'''
|
||||||
|
self.fail("You tried to change {0} but is was unsuccessful. An Availability Set is immutable, except tags".format(str(param)))
|
||||||
|
|
||||||
|
def create_or_update_availabilityset(self):
|
||||||
|
'''
|
||||||
|
Method calling the Azure SDK to create or update the AS.
|
||||||
|
:return: void
|
||||||
|
'''
|
||||||
self.log("Creating availabilityset {0}".format(self.name))
|
self.log("Creating availabilityset {0}".format(self.name))
|
||||||
try:
|
try:
|
||||||
paramsSku = Sku(
|
params_sku = Sku(
|
||||||
name=self.sku
|
name=self.sku
|
||||||
)
|
)
|
||||||
params = AvailabilitySet(
|
params = AvailabilitySet(
|
||||||
|
@ -233,7 +271,7 @@ class AzureRMAvailabilitySet(AzureRMModuleBase):
|
||||||
tags=self.tags,
|
tags=self.tags,
|
||||||
platform_update_domain_count=self.platform_update_domain_count,
|
platform_update_domain_count=self.platform_update_domain_count,
|
||||||
platform_fault_domain_count=self.platform_fault_domain_count,
|
platform_fault_domain_count=self.platform_fault_domain_count,
|
||||||
sku=paramsSku
|
sku=params_sku
|
||||||
)
|
)
|
||||||
response = self.compute_client.availability_sets.create_or_update(self.resource_group, self.name, params)
|
response = self.compute_client.availability_sets.create_or_update(self.resource_group, self.name, params)
|
||||||
except CloudError as e:
|
except CloudError as e:
|
||||||
|
@ -243,6 +281,10 @@ class AzureRMAvailabilitySet(AzureRMModuleBase):
|
||||||
return availability_set_to_dict(response)
|
return availability_set_to_dict(response)
|
||||||
|
|
||||||
def delete_availabilityset(self):
|
def delete_availabilityset(self):
|
||||||
|
'''
|
||||||
|
Method calling the Azure SDK to delete the AS.
|
||||||
|
:return: void
|
||||||
|
'''
|
||||||
self.log("Deleting availabilityset {0}".format(self.name))
|
self.log("Deleting availabilityset {0}".format(self.name))
|
||||||
try:
|
try:
|
||||||
response = self.compute_client.availability_sets.delete(self.resource_group, self.name)
|
response = self.compute_client.availability_sets.delete(self.resource_group, self.name)
|
||||||
|
@ -253,6 +295,10 @@ class AzureRMAvailabilitySet(AzureRMModuleBase):
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def get_availabilityset(self):
|
def get_availabilityset(self):
|
||||||
|
'''
|
||||||
|
Method calling the Azure SDK to get an AS.
|
||||||
|
:return: void
|
||||||
|
'''
|
||||||
self.log("Checking if the availabilityset {0} is present".format(self.name))
|
self.log("Checking if the availabilityset {0} is present".format(self.name))
|
||||||
found = False
|
found = False
|
||||||
try:
|
try:
|
||||||
|
|
|
@ -1,4 +1,2 @@
|
||||||
cloud/azure
|
cloud/azure
|
||||||
posix/ci/cloud/azure
|
|
||||||
posix/ci/cloud/smoketest
|
|
||||||
destructive
|
destructive
|
||||||
|
|
|
@ -4,10 +4,10 @@
|
||||||
resource_group: "{{ resource_group }}"
|
resource_group: "{{ resource_group }}"
|
||||||
tags:
|
tags:
|
||||||
tag1: testtag
|
tag1: testtag
|
||||||
register: output
|
register: results
|
||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that: output.changed
|
that: results.changed
|
||||||
|
|
||||||
- name: Create an availability set with advanced options
|
- name: Create an availability set with advanced options
|
||||||
azure_rm_availabilityset:
|
azure_rm_availabilityset:
|
||||||
|
@ -16,22 +16,41 @@
|
||||||
platform_update_domain_count: 5
|
platform_update_domain_count: 5
|
||||||
platform_fault_domain_count: 2
|
platform_fault_domain_count: 2
|
||||||
sku: Aligned
|
sku: Aligned
|
||||||
register: output
|
register: results
|
||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that: output.changed
|
that: results.changed
|
||||||
|
|
||||||
- name: Attempt to modify availabilty set options (we don't support modify so no changes)
|
- name: Modify availabilty set immutable options - no changes, issue warning
|
||||||
azure_rm_availabilityset:
|
azure_rm_availabilityset:
|
||||||
name: myavailabilityset2
|
name: myavailabilityset2
|
||||||
resource_group: "{{ resource_group }}"
|
resource_group: "{{ resource_group }}"
|
||||||
platform_update_domain_count: 2
|
platform_update_domain_count: 2
|
||||||
platform_fault_domain_count: 2
|
platform_fault_domain_count: 2
|
||||||
sku: Aligned
|
sku: Aligned
|
||||||
register: output
|
register: results
|
||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that: not output.changed
|
that:
|
||||||
|
- not results.changed
|
||||||
|
- results.warnings[0] == 'You tried to change platform_update_domain_count but is was unsuccessful'
|
||||||
|
|
||||||
|
- name: Modify availabilty set immutable options and set tags - change tags and issue warning for immutable options
|
||||||
|
azure_rm_availabilityset:
|
||||||
|
name: myavailabilityset2
|
||||||
|
resource_group: "{{ resource_group }}"
|
||||||
|
platform_update_domain_count: 2
|
||||||
|
platform_fault_domain_count: 2
|
||||||
|
sku: Aligned
|
||||||
|
tags:
|
||||||
|
test1: modified
|
||||||
|
register: results
|
||||||
|
|
||||||
|
- assert:
|
||||||
|
that:
|
||||||
|
- results.changed
|
||||||
|
- results.state.tags.test1 == 'modified'
|
||||||
|
- results.warnings[0] == 'You tried to change platform_update_domain_count but is was unsuccessful'
|
||||||
|
|
||||||
- name: Modify availabilty set options to update tags
|
- name: Modify availabilty set options to update tags
|
||||||
azure_rm_availabilityset:
|
azure_rm_availabilityset:
|
||||||
|
@ -41,12 +60,12 @@
|
||||||
platform_fault_domain_count: 2
|
platform_fault_domain_count: 2
|
||||||
sku: Aligned
|
sku: Aligned
|
||||||
tags:
|
tags:
|
||||||
test: modified
|
test2: modified
|
||||||
register: output
|
register: results
|
||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- "output.state.tags.test == 'modified'"
|
- results.state.tags.test2 == 'modified'
|
||||||
|
|
||||||
- name: Create availability set with incorrect fault domain parameter
|
- name: Create availability set with incorrect fault domain parameter
|
||||||
azure_rm_availabilityset:
|
azure_rm_availabilityset:
|
||||||
|
@ -55,11 +74,29 @@
|
||||||
platform_update_domain_count: 5
|
platform_update_domain_count: 5
|
||||||
platform_fault_domain_count: 4
|
platform_fault_domain_count: 4
|
||||||
sku: Aligned
|
sku: Aligned
|
||||||
register: output
|
register: results
|
||||||
ignore_errors: yes
|
ignore_errors: yes
|
||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
{ that: "'The specified fault domain count 4 must fall in the range 1 to' in output['msg']" }
|
{ that: "'The specified fault domain count 4 must fall in the range 1 to' in results['msg']" }
|
||||||
|
|
||||||
|
- name: Test check_mode
|
||||||
|
azure_rm_availabilityset:
|
||||||
|
name: myavailabilityset2
|
||||||
|
resource_group: "{{ resource_group }}"
|
||||||
|
platform_update_domain_count: 5
|
||||||
|
platform_fault_domain_count: 2
|
||||||
|
sku: Aligned
|
||||||
|
tags:
|
||||||
|
checktest1: modified1
|
||||||
|
checktest2: modified2
|
||||||
|
check_mode: yes
|
||||||
|
register: results
|
||||||
|
|
||||||
|
- assert:
|
||||||
|
that:
|
||||||
|
- not results.changed
|
||||||
|
- results.state.tags.checktest1 == 'modified1'
|
||||||
|
|
||||||
- name: Delete an availability set
|
- name: Delete an availability set
|
||||||
azure_rm_availabilityset:
|
azure_rm_availabilityset:
|
||||||
|
|
Loading…
Reference in a new issue