From 28dadc9e18e195fabdf7f246c590e1ddcb7f85aa Mon Sep 17 00:00:00 2001 From: Yunge Zhu <37337818+yungezz@users.noreply.github.com> Date: Fri, 22 Feb 2019 16:11:24 +0800 Subject: [PATCH] add application security group facts (#52629) --- ...azure_rm_applicationsecuritygroup_facts.py | 224 ++++++++++++++++++ .../azure_rm_networkinterface/tasks/main.yml | 14 ++ 2 files changed, 238 insertions(+) create mode 100644 lib/ansible/modules/cloud/azure/azure_rm_applicationsecuritygroup_facts.py diff --git a/lib/ansible/modules/cloud/azure/azure_rm_applicationsecuritygroup_facts.py b/lib/ansible/modules/cloud/azure/azure_rm_applicationsecuritygroup_facts.py new file mode 100644 index 00000000000..777b0c0bc83 --- /dev/null +++ b/lib/ansible/modules/cloud/azure/azure_rm_applicationsecuritygroup_facts.py @@ -0,0 +1,224 @@ +#!/usr/bin/python +# +# Copyright (c) 2019 Yunge Zhu, +# +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function +__metaclass__ = type + + +ANSIBLE_METADATA = {'metadata_version': '1.1', + 'status': ['preview'], + 'supported_by': 'community'} + + +DOCUMENTATION = ''' +--- +module: azure_rm_applicationsecuritygroup_facts +version_added: "2.8" +short_description: Get Azure Application Security Group facts. +description: + - Get facts of Azure Application Security Group. + +options: + resource_group: + description: + - The name of the resource group. + name: + description: + - The name of the application security group. + tags: + description: + - Limit results by providing a list of tags. Format tags as 'key' or 'key:value'. + +extends_documentation_fragment: + - azure + +author: + - "Yunge Zhu (@yungezz)" + +''' + +EXAMPLES = ''' + - name: List application security groups in specific resource group + azure_rm_applicationsecuritygroup_facts: + resource_group: myResourceGroup + + - name: List application security groups in specific subscription + azure_rm_applicationsecuritygroup_facts: + + - name: Get application security group by name + azure_rm_applicationsecuritygroup_facts: + resource_group: myResourceGroup + name: myApplicationSecurityGroup + tags: + - foo +''' + +RETURN = ''' +applicationsecuritygroups: + description: + - List of application security groups. + returned: always + type: complex + contains: + id: + description: Id of the application security group. + type: str + returned: always + sample: + "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.Network/applicationSecurityGroups/MyAsg" + location: + description: + - Loation of the application security group. + type: str + returned: always + sample: eastus + name: + description: + - Name of the resource. + type: str + returned: always + sample: myAsg + provisioning_state: + description: + - Provisioning state of application security group. + type: str + returned: always + sample: Succeeded +''' + +from ansible.module_utils.azure_rm_common import AzureRMModuleBase + +try: + from msrestazure.azure_exceptions import CloudError + from msrest.polling import LROPoller + from msrestazure.azure_operation import AzureOperationPoller +except ImportError: + # This is handled in azure_rm_common + pass + + +def applicationsecuritygroup_to_dict(asg): + return dict( + id=asg.id, + location=asg.location, + name=asg.name, + tags=asg.tags, + provisioning_state=asg.provisioning_state + ) + + +class AzureRMApplicationSecurityGroupFacts(AzureRMModuleBase): + + def __init__(self): + self.module_arg_spec = dict( + resource_group=dict( + type='str' + ), + name=dict( + type='str' + ), + tags=dict(type='list') + ) + + self.resource_group = None + self.name = None + self.tags = None + + self.results = dict(changed=False) + + super(AzureRMApplicationSecurityGroupFacts, self).__init__(derived_arg_spec=self.module_arg_spec, + supports_check_mode=False, + supports_tags=False) + + def exec_module(self, **kwargs): + """Main module execution method""" + + for key in list(self.module_arg_spec.keys()) + ['tags']: + if hasattr(self, key): + setattr(self, key, kwargs[key]) + + if self.name: + if self.resource_group: + self.results['applicationsecuritygroups'] = self.get() + else: + self.fail("resource_group is required when filtering by name") + elif self.resource_group: + self.results['applicationsecuritygroups'] = self.list_by_resource_group() + else: + self.results['applicationsecuritygroups'] = self.list_all() + + return self.results + + def get(self): + ''' + Gets the properties of the specified Application Security Group. + + :return: deserialized Application Security Group instance state dictionary + ''' + self.log("Get the Application Security Group instance {0}".format(self.name)) + + results = [] + try: + response = self.network_client.application_security_groups.get(resource_group_name=self.resource_group, + application_security_group_name=self.name) + self.log("Response : {0}".format(response)) + + if response and self.has_tags(response.tags, self.tags): + results.append(applicationsecuritygroup_to_dict(response)) + except CloudError as e: + self.fail('Did not find the Application Security Group instance.') + return results + + def list_by_resource_group(self): + ''' + Lists the properties of Application Security Groups in specific resource group. + + :return: deserialized Application Security Group instance state dictionary + ''' + self.log("Get the Application Security Groups in resource group {0}".format(self.resource_group)) + + results = [] + try: + response = list(self.network_client.application_security_groups.list(resource_group_name=self.resource_group)) + self.log("Response : {0}".format(response)) + + if response: + for item in response: + if self.has_tags(item.tags, self.tags): + results.append(applicationsecuritygroup_to_dict(item)) + except CloudError as e: + self.log('Did not find the Application Security Group instance.') + return results + + def list_all(self): + ''' + Lists the properties of Application Security Groups in specific subscription. + + :return: deserialized Application Security Group instance state dictionary + ''' + self.log("Get the Application Security Groups in current subscription") + + results = [] + try: + response = list(self.network_client.application_security_groups.list_all()) + self.log("Response : {0}".format(response)) + + if response: + for item in response: + if self.has_tags(item.tags, self.tags): + results.append(applicationsecuritygroup_to_dict(item)) + except CloudError as e: + self.log('Did not find the Application Security Group instance.') + return results + + +def main(): + """Main execution""" + AzureRMApplicationSecurityGroupFacts() + + +if __name__ == '__main__': + main() diff --git a/test/integration/targets/azure_rm_networkinterface/tasks/main.yml b/test/integration/targets/azure_rm_networkinterface/tasks/main.yml index 5d5b0b443f7..2dbb338b1cf 100644 --- a/test/integration/targets/azure_rm_networkinterface/tasks/main.yml +++ b/test/integration/targets/azure_rm_networkinterface/tasks/main.yml @@ -350,6 +350,20 @@ - output.changed - output.id != '' +- name: Get Application security group + azure_rm_applicationsecuritygroup_facts: + resource_group: "{{ resource_group }}" + name: "{{ applicationsecuritygroup_name1 }}" + register: facts + +- name: Assert facts + assert: + that: + - facts['applicationsecuritygroups'] | length == 1 + - facts['applicationsecuritygroups'][0]['name'] != None + - facts['applicationsecuritygroups'][0]['location'] != None + - facts['applicationsecuritygroups'][0]['provisioning_state'] != None + - name: Create application security group (idempotent) azure_rm_applicationsecuritygroup: resource_group: "{{ resource_group }}"