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:
Julien Stroheker 2017-08-17 16:04:33 -07:00 committed by Matt Davis
parent 472d3c3c86
commit d9ee3c09ca
3 changed files with 105 additions and 24 deletions

View file

@ -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:

View file

@ -1,4 +1,2 @@
cloud/azure cloud/azure
posix/ci/cloud/azure
posix/ci/cloud/smoketest
destructive destructive

View file

@ -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: