From 4f0ad579346e073df1b0b63b1e31ed2541c8ecb6 Mon Sep 17 00:00:00 2001 From: Zim Kalinowski Date: Wed, 3 Apr 2019 23:03:47 +0800 Subject: renaming info -> facts (#54573) --- .../azure_rm_applicationsecuritygroup_facts.py | 224 +++++++++ .../azure_rm_applicationsecuritygroup_info.py | 224 --------- .../cloud/azure/azure_rm_appserviceplan_facts.py | 18 +- .../cloud/azure/azure_rm_cdnendpoint_facts.py | 311 +++++++++++++ .../cloud/azure/azure_rm_cdnendpoint_info.py | 311 ------------- .../cloud/azure/azure_rm_cdnprofile_facts.py | 264 +++++++++++ .../cloud/azure/azure_rm_cdnprofile_info.py | 264 ----------- .../azure/azure_rm_containerinstance_facts.py | 315 +++++++++++++ .../cloud/azure/azure_rm_containerinstance_info.py | 315 ------------- .../cloud/azure/azure_rm_cosmosdbaccount_facts.py | 515 +++++++++++++++++++++ .../cloud/azure/azure_rm_cosmosdbaccount_info.py | 515 --------------------- .../cloud/azure/azure_rm_deployment_facts.py | 243 ++++++++++ .../cloud/azure/azure_rm_deployment_info.py | 243 ---------- .../cloud/azure/azure_rm_devtestlab_facts.py | 264 +++++++++++ .../cloud/azure/azure_rm_devtestlab_info.py | 264 ----------- .../azure/azure_rm_devtestlabarmtemplate_facts.py | 217 +++++++++ .../azure/azure_rm_devtestlabarmtemplate_info.py | 217 --------- .../azure/azure_rm_devtestlabartifact_facts.py | 245 ++++++++++ .../azure/azure_rm_devtestlabartifact_info.py | 245 ---------- .../azure_rm_devtestlabartifactsource_facts.py | 248 ++++++++++ .../azure_rm_devtestlabartifactsource_info.py | 248 ---------- .../azure_rm_devtestlabvirtualmachine_facts.py | 319 +++++++++++++ .../azure_rm_devtestlabvirtualmachine_info.py | 319 ------------- .../azure_rm_devtestlabvirtualnetwork_facts.py | 212 +++++++++ .../azure_rm_devtestlabvirtualnetwork_info.py | 212 --------- .../modules/cloud/azure/azure_rm_image_facts.py | 302 ++++++++++++ .../modules/cloud/azure/azure_rm_image_info.py | 302 ------------ .../azure/azure_rm_mariadbconfiguration_facts.py | 208 +++++++++ .../azure/azure_rm_mariadbconfiguration_info.py | 208 --------- .../cloud/azure/azure_rm_mariadbdatabase_facts.py | 203 ++++++++ .../cloud/azure/azure_rm_mariadbdatabase_info.py | 203 -------- .../azure/azure_rm_mariadbfirewallrule_facts.py | 199 ++++++++ .../azure/azure_rm_mariadbfirewallrule_info.py | 199 -------- .../cloud/azure/azure_rm_mariadbserver_facts.py | 255 ++++++++++ .../cloud/azure/azure_rm_mariadbserver_info.py | 255 ---------- .../azure/azure_rm_mysqlconfiguration_facts.py | 206 +++++++++ .../azure/azure_rm_mysqlconfiguration_info.py | 206 --------- .../azure/azure_rm_mysqlfirewallrule_facts.py | 197 ++++++++ .../cloud/azure/azure_rm_mysqlfirewallrule_info.py | 197 -------- .../azure_rm_postgresqlconfiguration_facts.py | 208 +++++++++ .../azure/azure_rm_postgresqlconfiguration_info.py | 208 --------- .../azure/azure_rm_postgresqlfirewallrule_facts.py | 196 ++++++++ .../azure/azure_rm_postgresqlfirewallrule_info.py | 196 -------- .../cloud/azure/azure_rm_rediscache_facts.py | 334 +++++++++++++ .../cloud/azure/azure_rm_rediscache_info.py | 334 ------------- .../cloud/azure/azure_rm_roleassignment_facts.py | 250 ++++++++++ .../cloud/azure/azure_rm_roleassignment_info.py | 250 ---------- .../cloud/azure/azure_rm_roledefinition_facts.py | 301 ++++++++++++ .../cloud/azure/azure_rm_roledefinition_info.py | 301 ------------ .../cloud/azure/azure_rm_sqldatabase_facts.py | 286 ++++++++++++ .../cloud/azure/azure_rm_sqldatabase_info.py | 286 ------------ .../cloud/azure/azure_rm_sqlfirewallrule_facts.py | 210 +++++++++ .../cloud/azure/azure_rm_sqlfirewallrule_info.py | 210 --------- .../modules/cloud/azure/azure_rm_subnet_facts.py | 237 ++++++++++ .../modules/cloud/azure/azure_rm_subnet_info.py | 237 ---------- .../modules/cloud/azure/azure_rm_virtualmachine.py | 4 +- .../azure_rm_virtualmachineextension_facts.py | 242 ++++++++++ .../azure/azure_rm_virtualmachineextension_info.py | 242 ---------- ...ure_rm_virtualmachinescalesetextension_facts.py | 221 +++++++++ ...zure_rm_virtualmachinescalesetextension_info.py | 221 --------- ...zure_rm_virtualmachinescalesetinstance_facts.py | 227 +++++++++ ...azure_rm_virtualmachinescalesetinstance_info.py | 227 --------- 62 files changed, 7670 insertions(+), 7670 deletions(-) create mode 100644 lib/ansible/modules/cloud/azure/azure_rm_applicationsecuritygroup_facts.py delete mode 100644 lib/ansible/modules/cloud/azure/azure_rm_applicationsecuritygroup_info.py create mode 100644 lib/ansible/modules/cloud/azure/azure_rm_cdnendpoint_facts.py delete mode 100644 lib/ansible/modules/cloud/azure/azure_rm_cdnendpoint_info.py create mode 100644 lib/ansible/modules/cloud/azure/azure_rm_cdnprofile_facts.py delete mode 100644 lib/ansible/modules/cloud/azure/azure_rm_cdnprofile_info.py create mode 100644 lib/ansible/modules/cloud/azure/azure_rm_containerinstance_facts.py delete mode 100644 lib/ansible/modules/cloud/azure/azure_rm_containerinstance_info.py create mode 100644 lib/ansible/modules/cloud/azure/azure_rm_cosmosdbaccount_facts.py delete mode 100644 lib/ansible/modules/cloud/azure/azure_rm_cosmosdbaccount_info.py create mode 100644 lib/ansible/modules/cloud/azure/azure_rm_deployment_facts.py delete mode 100644 lib/ansible/modules/cloud/azure/azure_rm_deployment_info.py create mode 100644 lib/ansible/modules/cloud/azure/azure_rm_devtestlab_facts.py delete mode 100644 lib/ansible/modules/cloud/azure/azure_rm_devtestlab_info.py create mode 100644 lib/ansible/modules/cloud/azure/azure_rm_devtestlabarmtemplate_facts.py delete mode 100644 lib/ansible/modules/cloud/azure/azure_rm_devtestlabarmtemplate_info.py create mode 100644 lib/ansible/modules/cloud/azure/azure_rm_devtestlabartifact_facts.py delete mode 100644 lib/ansible/modules/cloud/azure/azure_rm_devtestlabartifact_info.py create mode 100644 lib/ansible/modules/cloud/azure/azure_rm_devtestlabartifactsource_facts.py delete mode 100644 lib/ansible/modules/cloud/azure/azure_rm_devtestlabartifactsource_info.py create mode 100644 lib/ansible/modules/cloud/azure/azure_rm_devtestlabvirtualmachine_facts.py delete mode 100644 lib/ansible/modules/cloud/azure/azure_rm_devtestlabvirtualmachine_info.py create mode 100644 lib/ansible/modules/cloud/azure/azure_rm_devtestlabvirtualnetwork_facts.py delete mode 100644 lib/ansible/modules/cloud/azure/azure_rm_devtestlabvirtualnetwork_info.py create mode 100644 lib/ansible/modules/cloud/azure/azure_rm_image_facts.py delete mode 100644 lib/ansible/modules/cloud/azure/azure_rm_image_info.py create mode 100644 lib/ansible/modules/cloud/azure/azure_rm_mariadbconfiguration_facts.py delete mode 100644 lib/ansible/modules/cloud/azure/azure_rm_mariadbconfiguration_info.py create mode 100644 lib/ansible/modules/cloud/azure/azure_rm_mariadbdatabase_facts.py delete mode 100644 lib/ansible/modules/cloud/azure/azure_rm_mariadbdatabase_info.py create mode 100644 lib/ansible/modules/cloud/azure/azure_rm_mariadbfirewallrule_facts.py delete mode 100644 lib/ansible/modules/cloud/azure/azure_rm_mariadbfirewallrule_info.py create mode 100644 lib/ansible/modules/cloud/azure/azure_rm_mariadbserver_facts.py delete mode 100644 lib/ansible/modules/cloud/azure/azure_rm_mariadbserver_info.py create mode 100644 lib/ansible/modules/cloud/azure/azure_rm_mysqlconfiguration_facts.py delete mode 100644 lib/ansible/modules/cloud/azure/azure_rm_mysqlconfiguration_info.py create mode 100644 lib/ansible/modules/cloud/azure/azure_rm_mysqlfirewallrule_facts.py delete mode 100644 lib/ansible/modules/cloud/azure/azure_rm_mysqlfirewallrule_info.py create mode 100644 lib/ansible/modules/cloud/azure/azure_rm_postgresqlconfiguration_facts.py delete mode 100644 lib/ansible/modules/cloud/azure/azure_rm_postgresqlconfiguration_info.py create mode 100644 lib/ansible/modules/cloud/azure/azure_rm_postgresqlfirewallrule_facts.py delete mode 100644 lib/ansible/modules/cloud/azure/azure_rm_postgresqlfirewallrule_info.py create mode 100644 lib/ansible/modules/cloud/azure/azure_rm_rediscache_facts.py delete mode 100644 lib/ansible/modules/cloud/azure/azure_rm_rediscache_info.py create mode 100644 lib/ansible/modules/cloud/azure/azure_rm_roleassignment_facts.py delete mode 100644 lib/ansible/modules/cloud/azure/azure_rm_roleassignment_info.py create mode 100644 lib/ansible/modules/cloud/azure/azure_rm_roledefinition_facts.py delete mode 100644 lib/ansible/modules/cloud/azure/azure_rm_roledefinition_info.py create mode 100644 lib/ansible/modules/cloud/azure/azure_rm_sqldatabase_facts.py delete mode 100644 lib/ansible/modules/cloud/azure/azure_rm_sqldatabase_info.py create mode 100644 lib/ansible/modules/cloud/azure/azure_rm_sqlfirewallrule_facts.py delete mode 100644 lib/ansible/modules/cloud/azure/azure_rm_sqlfirewallrule_info.py create mode 100644 lib/ansible/modules/cloud/azure/azure_rm_subnet_facts.py delete mode 100644 lib/ansible/modules/cloud/azure/azure_rm_subnet_info.py create mode 100644 lib/ansible/modules/cloud/azure/azure_rm_virtualmachineextension_facts.py delete mode 100644 lib/ansible/modules/cloud/azure/azure_rm_virtualmachineextension_info.py create mode 100644 lib/ansible/modules/cloud/azure/azure_rm_virtualmachinescalesetextension_facts.py delete mode 100644 lib/ansible/modules/cloud/azure/azure_rm_virtualmachinescalesetextension_info.py create mode 100644 lib/ansible/modules/cloud/azure/azure_rm_virtualmachinescalesetinstance_facts.py delete mode 100644 lib/ansible/modules/cloud/azure/azure_rm_virtualmachinescalesetinstance_info.py (limited to 'lib/ansible') 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 0000000000..777b0c0bc8 --- /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/lib/ansible/modules/cloud/azure/azure_rm_applicationsecuritygroup_info.py b/lib/ansible/modules/cloud/azure/azure_rm_applicationsecuritygroup_info.py deleted file mode 100644 index 1c9b4d3bd9..0000000000 --- a/lib/ansible/modules/cloud/azure/azure_rm_applicationsecuritygroup_info.py +++ /dev/null @@ -1,224 +0,0 @@ -#!/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_info -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_info: - resource_group: myResourceGroup - - - name: List application security groups in specific subscription - azure_rm_applicationsecuritygroup_info: - - - name: Get application security group by name - azure_rm_applicationsecuritygroup_info: - 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/lib/ansible/modules/cloud/azure/azure_rm_appserviceplan_facts.py b/lib/ansible/modules/cloud/azure/azure_rm_appserviceplan_facts.py index 21c3068660..b5f198f317 100644 --- a/lib/ansible/modules/cloud/azure/azure_rm_appserviceplan_facts.py +++ b/lib/ansible/modules/cloud/azure/azure_rm_appserviceplan_facts.py @@ -211,19 +211,19 @@ class AzureRMAppServicePlanFacts(AzureRMModuleBase): return results def construct_curated_plan(self, plan): - plan_info = self.serialize_obj(plan, AZURE_OBJECT_CLASS) + plan_facts = self.serialize_obj(plan, AZURE_OBJECT_CLASS) curated_output = dict() - curated_output['id'] = plan_info['id'] - curated_output['name'] = plan_info['name'] - curated_output['resource_group'] = plan_info['properties']['resourceGroup'] - curated_output['location'] = plan_info['location'] - curated_output['tags'] = plan_info.get('tags', None) + curated_output['id'] = plan_facts['id'] + curated_output['name'] = plan_facts['name'] + curated_output['resource_group'] = plan_facts['properties']['resourceGroup'] + curated_output['location'] = plan_facts['location'] + curated_output['tags'] = plan_facts.get('tags', None) curated_output['is_linux'] = False - curated_output['kind'] = plan_info['kind'] - curated_output['sku'] = plan_info['sku'] + curated_output['kind'] = plan_facts['kind'] + curated_output['sku'] = plan_facts['sku'] - if plan_info['properties'].get('reserved', None): + if plan_facts['properties'].get('reserved', None): curated_output['is_linux'] = True return curated_output diff --git a/lib/ansible/modules/cloud/azure/azure_rm_cdnendpoint_facts.py b/lib/ansible/modules/cloud/azure/azure_rm_cdnendpoint_facts.py new file mode 100644 index 0000000000..a351ba8c6f --- /dev/null +++ b/lib/ansible/modules/cloud/azure/azure_rm_cdnendpoint_facts.py @@ -0,0 +1,311 @@ +#!/usr/bin/python +# +# Copyright (c) 2019 Hai Cao, +# +# 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_cdnendpoint_facts + +version_added: "2.8" + +short_description: Get Azure CDN endpoint facts + +description: + - Get facts for a specific Azure CDN endpoint or all Azure CDN endpoints. + +options: + resource_group: + description: + - Name of resource group where this CDN profile belongs to. + required: true + profile_name: + description: + - Name of CDN profile. + required: true + name: + description: + - Limit results to a specific Azure CDN endpoint. + tags: + description: + - Limit results by providing a list of tags. Format tags as 'key' or 'key:value'. + +extends_documentation_fragment: + - azure + +author: + - "Hai Cao (@caohai)" + - "Yunge zhu (@yungezz)" +''' + +EXAMPLES = ''' + - name: Get facts for all endpoints in CDN profile + azure_rm_cdnendpoint_facts: + resource_group: myResourceGroup + profile_name: myCDNProfile + + - name: Get facts of specific CDN endpoint + azure_rm_cdnendpoint_facts: + resource_group: myResourceGroup + profile_name: myCDNProfile + name: myEndpoint1 +''' + +RETURN = ''' +cdnendpoints: + description: List of Azure CDN endpoints. + returned: always + type: complex + contains: + resource_group: + description: + - Name of a resource group where the Azure CDN endpoint exists. + returned: always + type: str + sample: myResourceGroup + name: + description: + - Name of the Azure CDN endpoint. + returned: always + type: str + sample: myEndpoint + profile_name: + description: + - Name of the Azure CDN profile that this endpoint is attached to. + returned: always + type: str + sample: myProfile + location: + description: + - Location of the Azure CDN endpoint. + type: str + sample: WestUS + id: + description: + - ID of the Azure CDN endpoint. + type: str + sample: + "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/myCDN/providers/Microsoft.Cdn/profiles/myProfile/endpoints/myEndpoint1" + provisioning_state: + description: + - Provisioning status of the Azure CDN endpoint. + type: str + sample: Succeeded + resource_state: + description: + - Resource status of the profile. + type: str + sample: Running + is_compression_enabled: + description: + - Indicates whether content compression is enabled on CDN. + type: bool + sample: true + is_http_allowed: + description: + - Indicates whether HTTP traffic is allowed on the endpoint. + type: bool + sample: true + is_https_allowed: + description: + - Indicates whether HTTPS traffic is allowed on the endpoint. + type: bool + sample: true + query_string_caching_behavior: + description: + - Defines how CDN caches requests that include query strings. + type: str + sample: IgnoreQueryString + content_types_to_compress: + description: + - List of content types on which compression applies. + type: list + sample: [ + "text/plain", + "text/html", + "text/css", + "text/javascript", + "application/x-javascript", + "application/javascript", + "application/json", + "application/xml" + ] + origins: + description: + - The source of the content being delivered via CDN. + sample: { + "host_name": "xxxxxxxx.blob.core.windows.net", + "http_port": null, + "https_port": null, + "name": "xxxxxxxx-blob-core-windows-net" + } + origin_host_header: + description: + - The host header value sent to the origin with each request. + type: str + sample: xxxxxxxx.blob.core.windows.net + origin_path: + description: + - A directory path on the origin that CDN can use to retreive content from. + type: str + sample: /pic/ + tags: + description: + - The tags of the Azure CDN endpoint. + type: list + sample: foo +''' + +from ansible.module_utils.azure_rm_common import AzureRMModuleBase + +try: + from azure.mgmt.cdn import CdnManagementClient + from azure.mgmt.cdn.models import ErrorResponseException + from azure.common import AzureHttpError +except ImportError: + # handled in azure_rm_common + pass + +import re + +AZURE_OBJECT_CLASS = 'endpoints' + + +class AzureRMCdnEndpointFacts(AzureRMModuleBase): + """Utility class to get Azure Azure CDN endpoint facts""" + + def __init__(self): + + self.module_args = dict( + name=dict(type='str'), + resource_group=dict( + type='str', + required=True + ), + profile_name=dict( + type='str', + required=True + ), + tags=dict(type='list') + ) + + self.results = dict( + changed=False, + cdnendpoints=[] + ) + + self.name = None + self.resource_group = None + self.profile_name = None + self.tags = None + + super(AzureRMCdnEndpointFacts, self).__init__( + derived_arg_spec=self.module_args, + supports_tags=False, + facts_module=True + ) + + def exec_module(self, **kwargs): + + for key in self.module_args: + setattr(self, key, kwargs[key]) + + self.cdn_client = self.get_mgmt_svc_client(CdnManagementClient, + base_url=self._cloud_environment.endpoints.resource_manager, + api_version='2017-04-02') + + if self.name: + self.results['cdnendpoints'] = self.get_item() + else: + self.results['cdnendpoints'] = self.list_by_profile() + + return self.results + + def get_item(self): + """Get a single Azure Azure CDN endpoint""" + + self.log('Get properties for {0}'.format(self.name)) + + item = None + result = [] + + try: + item = self.cdn_client.endpoints.get( + self.resource_group, self.profile_name, self.name) + except ErrorResponseException: + pass + + if item and self.has_tags(item.tags, self.tags): + result = [self.serialize_cdnendpoint(item)] + + return result + + def list_by_profile(self): + """Get all Azure Azure CDN endpoints within an Azure CDN profile""" + + self.log('List all Azure CDN endpoints within an Azure CDN profile') + + try: + response = self.cdn_client.endpoints.list_by_profile( + self.resource_group, self.profile_name) + except ErrorResponseException as exc: + self.fail('Failed to list all items - {0}'.format(str(exc))) + + results = [] + for item in response: + if self.has_tags(item.tags, self.tags): + results.append(self.serialize_cdnendpoint(item)) + + return results + + def serialize_cdnendpoint(self, cdnendpoint): + ''' + Convert a Azure CDN endpoint object to dict. + :param cdn: Azure CDN endpoint object + :return: dict + ''' + result = self.serialize_obj(cdnendpoint, AZURE_OBJECT_CLASS) + + new_result = {} + new_result['id'] = cdnendpoint.id + new_result['resource_group'] = re.sub('\\/.*', '', re.sub('.*resourcegroups\\/', '', result['id'])) + new_result['profile_name'] = re.sub('\\/.*', '', re.sub('.*profiles\\/', '', result['id'])) + new_result['name'] = cdnendpoint.name + new_result['type'] = cdnendpoint.type + new_result['location'] = cdnendpoint.location + new_result['resource_state'] = cdnendpoint.resource_state + new_result['provisioning_state'] = cdnendpoint.provisioning_state + new_result['query_string_caching_behavior'] = cdnendpoint.query_string_caching_behavior + new_result['is_compression_enabled'] = cdnendpoint.is_compression_enabled + new_result['is_http_allowed'] = cdnendpoint.is_http_allowed + new_result['is_https_allowed'] = cdnendpoint.is_https_allowed + new_result['content_types_to_compress'] = cdnendpoint.content_types_to_compress + new_result['origin_host_header'] = cdnendpoint.origin_host_header + new_result['origin_path'] = cdnendpoint.origin_path + new_result['origin'] = dict( + name=cdnendpoint.origins[0].name, + host_name=cdnendpoint.origins[0].host_name, + http_port=cdnendpoint.origins[0].http_port, + https_port=cdnendpoint.origins[0].https_port + ) + new_result['tags'] = cdnendpoint.tags + return new_result + + +def main(): + """Main module execution code path""" + + AzureRMCdnEndpointFacts() + + +if __name__ == '__main__': + main() diff --git a/lib/ansible/modules/cloud/azure/azure_rm_cdnendpoint_info.py b/lib/ansible/modules/cloud/azure/azure_rm_cdnendpoint_info.py deleted file mode 100644 index 67df4787ba..0000000000 --- a/lib/ansible/modules/cloud/azure/azure_rm_cdnendpoint_info.py +++ /dev/null @@ -1,311 +0,0 @@ -#!/usr/bin/python -# -# Copyright (c) 2019 Hai Cao, -# -# 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_cdnendpoint_info - -version_added: "2.8" - -short_description: Get Azure CDN endpoint facts - -description: - - Get facts for a specific Azure CDN endpoint or all Azure CDN endpoints. - -options: - resource_group: - description: - - Name of resource group where this CDN profile belongs to. - required: true - profile_name: - description: - - Name of CDN profile. - required: true - name: - description: - - Limit results to a specific Azure CDN endpoint. - tags: - description: - - Limit results by providing a list of tags. Format tags as 'key' or 'key:value'. - -extends_documentation_fragment: - - azure - -author: - - "Hai Cao (@caohai)" - - "Yunge zhu (@yungezz)" -''' - -EXAMPLES = ''' - - name: Get facts for all endpoints in CDN profile - azure_rm_cdnendpoint_info: - resource_group: myResourceGroup - profile_name: myCDNProfile - - - name: Get facts of specific CDN endpoint - azure_rm_cdnendpoint_info: - resource_group: myResourceGroup - profile_name: myCDNProfile - name: myEndpoint1 -''' - -RETURN = ''' -cdnendpoints: - description: List of Azure CDN endpoints. - returned: always - type: complex - contains: - resource_group: - description: - - Name of a resource group where the Azure CDN endpoint exists. - returned: always - type: str - sample: myResourceGroup - name: - description: - - Name of the Azure CDN endpoint. - returned: always - type: str - sample: myEndpoint - profile_name: - description: - - Name of the Azure CDN profile that this endpoint is attached to. - returned: always - type: str - sample: myProfile - location: - description: - - Location of the Azure CDN endpoint. - type: str - sample: WestUS - id: - description: - - ID of the Azure CDN endpoint. - type: str - sample: - "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/myCDN/providers/Microsoft.Cdn/profiles/myProfile/endpoints/myEndpoint1" - provisioning_state: - description: - - Provisioning status of the Azure CDN endpoint. - type: str - sample: Succeeded - resource_state: - description: - - Resource status of the profile. - type: str - sample: Running - is_compression_enabled: - description: - - Indicates whether content compression is enabled on CDN. - type: bool - sample: true - is_http_allowed: - description: - - Indicates whether HTTP traffic is allowed on the endpoint. - type: bool - sample: true - is_https_allowed: - description: - - Indicates whether HTTPS traffic is allowed on the endpoint. - type: bool - sample: true - query_string_caching_behavior: - description: - - Defines how CDN caches requests that include query strings. - type: str - sample: IgnoreQueryString - content_types_to_compress: - description: - - List of content types on which compression applies. - type: list - sample: [ - "text/plain", - "text/html", - "text/css", - "text/javascript", - "application/x-javascript", - "application/javascript", - "application/json", - "application/xml" - ] - origins: - description: - - The source of the content being delivered via CDN. - sample: { - "host_name": "xxxxxxxx.blob.core.windows.net", - "http_port": null, - "https_port": null, - "name": "xxxxxxxx-blob-core-windows-net" - } - origin_host_header: - description: - - The host header value sent to the origin with each request. - type: str - sample: xxxxxxxx.blob.core.windows.net - origin_path: - description: - - A directory path on the origin that CDN can use to retreive content from. - type: str - sample: /pic/ - tags: - description: - - The tags of the Azure CDN endpoint. - type: list - sample: foo -''' - -from ansible.module_utils.azure_rm_common import AzureRMModuleBase - -try: - from azure.mgmt.cdn import CdnManagementClient - from azure.mgmt.cdn.models import ErrorResponseException - from azure.common import AzureHttpError -except ImportError: - # handled in azure_rm_common - pass - -import re - -AZURE_OBJECT_CLASS = 'endpoints' - - -class AzureRMCdnEndpointFacts(AzureRMModuleBase): - """Utility class to get Azure Azure CDN endpoint facts""" - - def __init__(self): - - self.module_args = dict( - name=dict(type='str'), - resource_group=dict( - type='str', - required=True - ), - profile_name=dict( - type='str', - required=True - ), - tags=dict(type='list') - ) - - self.results = dict( - changed=False, - cdnendpoints=[] - ) - - self.name = None - self.resource_group = None - self.profile_name = None - self.tags = None - - super(AzureRMCdnEndpointFacts, self).__init__( - derived_arg_spec=self.module_args, - supports_tags=False, - facts_module=True - ) - - def exec_module(self, **kwargs): - - for key in self.module_args: - setattr(self, key, kwargs[key]) - - self.cdn_client = self.get_mgmt_svc_client(CdnManagementClient, - base_url=self._cloud_environment.endpoints.resource_manager, - api_version='2017-04-02') - - if self.name: - self.results['cdnendpoints'] = self.get_item() - else: - self.results['cdnendpoints'] = self.list_by_profile() - - return self.results - - def get_item(self): - """Get a single Azure Azure CDN endpoint""" - - self.log('Get properties for {0}'.format(self.name)) - - item = None - result = [] - - try: - item = self.cdn_client.endpoints.get( - self.resource_group, self.profile_name, self.name) - except ErrorResponseException: - pass - - if item and self.has_tags(item.tags, self.tags): - result = [self.serialize_cdnendpoint(item)] - - return result - - def list_by_profile(self): - """Get all Azure Azure CDN endpoints within an Azure CDN profile""" - - self.log('List all Azure CDN endpoints within an Azure CDN profile') - - try: - response = self.cdn_client.endpoints.list_by_profile( - self.resource_group, self.profile_name) - except ErrorResponseException as exc: - self.fail('Failed to list all items - {0}'.format(str(exc))) - - results = [] - for item in response: - if self.has_tags(item.tags, self.tags): - results.append(self.serialize_cdnendpoint(item)) - - return results - - def serialize_cdnendpoint(self, cdnendpoint): - ''' - Convert a Azure CDN endpoint object to dict. - :param cdn: Azure CDN endpoint object - :return: dict - ''' - result = self.serialize_obj(cdnendpoint, AZURE_OBJECT_CLASS) - - new_result = {} - new_result['id'] = cdnendpoint.id - new_result['resource_group'] = re.sub('\\/.*', '', re.sub('.*resourcegroups\\/', '', result['id'])) - new_result['profile_name'] = re.sub('\\/.*', '', re.sub('.*profiles\\/', '', result['id'])) - new_result['name'] = cdnendpoint.name - new_result['type'] = cdnendpoint.type - new_result['location'] = cdnendpoint.location - new_result['resource_state'] = cdnendpoint.resource_state - new_result['provisioning_state'] = cdnendpoint.provisioning_state - new_result['query_string_caching_behavior'] = cdnendpoint.query_string_caching_behavior - new_result['is_compression_enabled'] = cdnendpoint.is_compression_enabled - new_result['is_http_allowed'] = cdnendpoint.is_http_allowed - new_result['is_https_allowed'] = cdnendpoint.is_https_allowed - new_result['content_types_to_compress'] = cdnendpoint.content_types_to_compress - new_result['origin_host_header'] = cdnendpoint.origin_host_header - new_result['origin_path'] = cdnendpoint.origin_path - new_result['origin'] = dict( - name=cdnendpoint.origins[0].name, - host_name=cdnendpoint.origins[0].host_name, - http_port=cdnendpoint.origins[0].http_port, - https_port=cdnendpoint.origins[0].https_port - ) - new_result['tags'] = cdnendpoint.tags - return new_result - - -def main(): - """Main module execution code path""" - - AzureRMCdnEndpointFacts() - - -if __name__ == '__main__': - main() diff --git a/lib/ansible/modules/cloud/azure/azure_rm_cdnprofile_facts.py b/lib/ansible/modules/cloud/azure/azure_rm_cdnprofile_facts.py new file mode 100644 index 0000000000..f4566df013 --- /dev/null +++ b/lib/ansible/modules/cloud/azure/azure_rm_cdnprofile_facts.py @@ -0,0 +1,264 @@ +#!/usr/bin/python +# +# Copyright (c) 2018 Hai Cao, , 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_cdnprofile_facts + +version_added: "2.8" + +short_description: Get Azure CDN profile facts + +description: + - Get facts for a specific Azure CDN profile or all CDN profiles. + +options: + name: + description: + - Limit results to a specific CDN profile. + resource_group: + description: + - The resource group to search for the desired CDN profile + tags: + description: + - Limit results by providing a list of tags. Format tags as 'key' or 'key:value'. + +extends_documentation_fragment: + - azure + +author: + - "Hai Cao (@caohai) " + - "Yunge Zhu (@yungezz) " +''' + +EXAMPLES = ''' + - name: Get facts for one CDN profile + azure_rm_cdnprofile_facts: + name: Testing + resource_group: myResourceGroup + + - name: Get facts for all CDN profiles + azure_rm_cdnprofile_facts: + + - name: Get facts by tags + azure_rm_cdnprofile_facts: + tags: + - Environment:Test +''' + +RETURN = ''' +cdnprofiles: + description: List of CDN profiles. + returned: always + type: complex + contains: + resource_group: + description: + - Name of a resource group where the CDN profile exists. + returned: always + type: str + sample: myResourceGroup + name: + description: + - Name of the CDN profile. + returned: always + type: str + sample: Testing + location: + description: + - Location of the CDN profile. + type: str + sample: WestUS + id: + description: + - ID of the CDN profile. + type: str + sample: /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/myResourceGroup/providers/Microsoft.Cdn/profiles/cdntest + provisioning_state: + description: + - Provisioning status of the profile. + type: str + sample: Succeeded + resource_state: + description: + - Resource status of the profile. + type: str + sample: Active + sku: + description: + - The pricing tier, defines a CDN provider, feature list and rate of the CDN profile. + type: str + sample: standard_verizon + type: + description: + - The type of the CDN profile. + type: str + sample: Microsoft.Cdn/profiles + tags: + description: + - The tags of the CDN profile. + type: list + sample: [ + {"foo": "bar"} + ] +''' + +from ansible.module_utils.azure_rm_common import AzureRMModuleBase + +try: + from azure.mgmt.cdn.models import ErrorResponseException + from azure.common import AzureHttpError + from azure.mgmt.cdn import CdnManagementClient +except Exception: + # handled in azure_rm_common + pass + +import re + +AZURE_OBJECT_CLASS = 'profiles' + + +class AzureRMCdnprofileFacts(AzureRMModuleBase): + """Utility class to get Azure CDN profile facts""" + + def __init__(self): + + self.module_args = dict( + name=dict(type='str'), + resource_group=dict(type='str'), + tags=dict(type='list') + ) + + self.results = dict( + changed=False, + cdnprofiles=[] + ) + + self.name = None + self.resource_group = None + self.tags = None + self.cdn_client = None + + super(AzureRMCdnprofileFacts, self).__init__( + derived_arg_spec=self.module_args, + supports_tags=False, + facts_module=True + ) + + def exec_module(self, **kwargs): + + for key in self.module_args: + setattr(self, key, kwargs[key]) + + self.cdn_client = self.get_cdn_client() + + if self.name and not self.resource_group: + self.fail("Parameter error: resource group required when filtering by name.") + + if self.name: + self.results['cdnprofiles'] = self.get_item() + elif self.resource_group: + self.results['cdnprofiles'] = self.list_resource_group() + else: + self.results['cdnprofiles'] = self.list_all() + + return self.results + + def get_item(self): + """Get a single Azure CDN profile""" + + self.log('Get properties for {0}'.format(self.name)) + + item = None + result = [] + + try: + item = self.cdn_client.profiles.get( + self.resource_group, self.name) + except ErrorResponseException: + pass + + if item and self.has_tags(item.tags, self.tags): + result = [self.serialize_cdnprofile(item)] + + return result + + def list_resource_group(self): + """Get all Azure CDN profiles within a resource group""" + + self.log('List all Azure CDNs within a resource group') + + try: + response = self.cdn_client.profiles.list_by_resource_group( + self.resource_group) + except AzureHttpError as exc: + self.fail('Failed to list all items - {0}'.format(str(exc))) + + results = [] + for item in response: + if self.has_tags(item.tags, self.tags): + results.append(self.serialize_cdnprofile(item)) + + return results + + def list_all(self): + """Get all Azure CDN profiles within a subscription""" + self.log('List all CDN profiles within a subscription') + try: + response = self.cdn_client.profiles.list() + except Exception as exc: + self.fail("Error listing all items - {0}".format(str(exc))) + + results = [] + for item in response: + if self.has_tags(item.tags, self.tags): + results.append(self.serialize_cdnprofile(item)) + return results + + def serialize_cdnprofile(self, cdnprofile): + ''' + Convert a CDN profile object to dict. + :param cdn: CDN profile object + :return: dict + ''' + result = self.serialize_obj(cdnprofile, AZURE_OBJECT_CLASS) + + new_result = {} + new_result['id'] = cdnprofile.id + new_result['resource_group'] = re.sub('\\/.*', '', re.sub('.*resourcegroups\\/', '', result['id'])) + new_result['name'] = cdnprofile.name + new_result['type'] = cdnprofile.type + new_result['location'] = cdnprofile.location + new_result['resource_state'] = cdnprofile.resource_state + new_result['sku'] = cdnprofile.sku.name + new_result['provisioning_state'] = cdnprofile.provisioning_state + new_result['tags'] = cdnprofile.tags + return new_result + + def get_cdn_client(self): + if not self.cdn_client: + self.cdn_client = self.get_mgmt_svc_client(CdnManagementClient, + base_url=self._cloud_environment.endpoints.resource_manager, + api_version='2017-04-02') + return self.cdn_client + + +def main(): + """Main module execution code path""" + + AzureRMCdnprofileFacts() + + +if __name__ == '__main__': + main() diff --git a/lib/ansible/modules/cloud/azure/azure_rm_cdnprofile_info.py b/lib/ansible/modules/cloud/azure/azure_rm_cdnprofile_info.py deleted file mode 100644 index a62fd237b4..0000000000 --- a/lib/ansible/modules/cloud/azure/azure_rm_cdnprofile_info.py +++ /dev/null @@ -1,264 +0,0 @@ -#!/usr/bin/python -# -# Copyright (c) 2018 Hai Cao, , 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_cdnprofile_info - -version_added: "2.8" - -short_description: Get Azure CDN profile facts - -description: - - Get facts for a specific Azure CDN profile or all CDN profiles. - -options: - name: - description: - - Limit results to a specific CDN profile. - resource_group: - description: - - The resource group to search for the desired CDN profile - tags: - description: - - Limit results by providing a list of tags. Format tags as 'key' or 'key:value'. - -extends_documentation_fragment: - - azure - -author: - - "Hai Cao (@caohai) " - - "Yunge Zhu (@yungezz) " -''' - -EXAMPLES = ''' - - name: Get facts for one CDN profile - azure_rm_cdnprofile_info: - name: Testing - resource_group: myResourceGroup - - - name: Get facts for all CDN profiles - azure_rm_cdnprofile_info: - - - name: Get facts by tags - azure_rm_cdnprofile_info: - tags: - - Environment:Test -''' - -RETURN = ''' -cdnprofiles: - description: List of CDN profiles. - returned: always - type: complex - contains: - resource_group: - description: - - Name of a resource group where the CDN profile exists. - returned: always - type: str - sample: myResourceGroup - name: - description: - - Name of the CDN profile. - returned: always - type: str - sample: Testing - location: - description: - - Location of the CDN profile. - type: str - sample: WestUS - id: - description: - - ID of the CDN profile. - type: str - sample: /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/myResourceGroup/providers/Microsoft.Cdn/profiles/cdntest - provisioning_state: - description: - - Provisioning status of the profile. - type: str - sample: Succeeded - resource_state: - description: - - Resource status of the profile. - type: str - sample: Active - sku: - description: - - The pricing tier, defines a CDN provider, feature list and rate of the CDN profile. - type: str - sample: standard_verizon - type: - description: - - The type of the CDN profile. - type: str - sample: Microsoft.Cdn/profiles - tags: - description: - - The tags of the CDN profile. - type: list - sample: [ - {"foo": "bar"} - ] -''' - -from ansible.module_utils.azure_rm_common import AzureRMModuleBase - -try: - from azure.mgmt.cdn.models import ErrorResponseException - from azure.common import AzureHttpError - from azure.mgmt.cdn import CdnManagementClient -except Exception: - # handled in azure_rm_common - pass - -import re - -AZURE_OBJECT_CLASS = 'profiles' - - -class AzureRMCdnprofileFacts(AzureRMModuleBase): - """Utility class to get Azure CDN profile facts""" - - def __init__(self): - - self.module_args = dict( - name=dict(type='str'), - resource_group=dict(type='str'), - tags=dict(type='list') - ) - - self.results = dict( - changed=False, - cdnprofiles=[] - ) - - self.name = None - self.resource_group = None - self.tags = None - self.cdn_client = None - - super(AzureRMCdnprofileFacts, self).__init__( - derived_arg_spec=self.module_args, - supports_tags=False, - facts_module=True - ) - - def exec_module(self, **kwargs): - - for key in self.module_args: - setattr(self, key, kwargs[key]) - - self.cdn_client = self.get_cdn_client() - - if self.name and not self.resource_group: - self.fail("Parameter error: resource group required when filtering by name.") - - if self.name: - self.results['cdnprofiles'] = self.get_item() - elif self.resource_group: - self.results['cdnprofiles'] = self.list_resource_group() - else: - self.results['cdnprofiles'] = self.list_all() - - return self.results - - def get_item(self): - """Get a single Azure CDN profile""" - - self.log('Get properties for {0}'.format(self.name)) - - item = None - result = [] - - try: - item = self.cdn_client.profiles.get( - self.resource_group, self.name) - except ErrorResponseException: - pass - - if item and self.has_tags(item.tags, self.tags): - result = [self.serialize_cdnprofile(item)] - - return result - - def list_resource_group(self): - """Get all Azure CDN profiles within a resource group""" - - self.log('List all Azure CDNs within a resource group') - - try: - response = self.cdn_client.profiles.list_by_resource_group( - self.resource_group) - except AzureHttpError as exc: - self.fail('Failed to list all items - {0}'.format(str(exc))) - - results = [] - for item in response: - if self.has_tags(item.tags, self.tags): - results.append(self.serialize_cdnprofile(item)) - - return results - - def list_all(self): - """Get all Azure CDN profiles within a subscription""" - self.log('List all CDN profiles within a subscription') - try: - response = self.cdn_client.profiles.list() - except Exception as exc: - self.fail("Error listing all items - {0}".format(str(exc))) - - results = [] - for item in response: - if self.has_tags(item.tags, self.tags): - results.append(self.serialize_cdnprofile(item)) - return results - - def serialize_cdnprofile(self, cdnprofile): - ''' - Convert a CDN profile object to dict. - :param cdn: CDN profile object - :return: dict - ''' - result = self.serialize_obj(cdnprofile, AZURE_OBJECT_CLASS) - - new_result = {} - new_result['id'] = cdnprofile.id - new_result['resource_group'] = re.sub('\\/.*', '', re.sub('.*resourcegroups\\/', '', result['id'])) - new_result['name'] = cdnprofile.name - new_result['type'] = cdnprofile.type - new_result['location'] = cdnprofile.location - new_result['resource_state'] = cdnprofile.resource_state - new_result['sku'] = cdnprofile.sku.name - new_result['provisioning_state'] = cdnprofile.provisioning_state - new_result['tags'] = cdnprofile.tags - return new_result - - def get_cdn_client(self): - if not self.cdn_client: - self.cdn_client = self.get_mgmt_svc_client(CdnManagementClient, - base_url=self._cloud_environment.endpoints.resource_manager, - api_version='2017-04-02') - return self.cdn_client - - -def main(): - """Main module execution code path""" - - AzureRMCdnprofileFacts() - - -if __name__ == '__main__': - main() diff --git a/lib/ansible/modules/cloud/azure/azure_rm_containerinstance_facts.py b/lib/ansible/modules/cloud/azure/azure_rm_containerinstance_facts.py new file mode 100644 index 0000000000..ac9c39a339 --- /dev/null +++ b/lib/ansible/modules/cloud/azure/azure_rm_containerinstance_facts.py @@ -0,0 +1,315 @@ +#!/usr/bin/python +# +# Copyright (c) 2017 Zim Kalinowski, +# +# 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_containerinstance_facts +version_added: "2.8" +short_description: Get Azure Container Instance facts. +description: + - Get facts of Container Instance. + +options: + resource_group: + description: + - The name of the resource group. + required: True + name: + description: + - The name of the container instance. + tags: + description: + - Limit results by providing a list of tags. Format tags as 'key' or 'key:value'. + +extends_documentation_fragment: + - azure + +author: + - "Zim Kalinowski (@zikalino)" + +''' + +EXAMPLES = ''' + - name: Get specific Container Instance facts + azure_rm_containerinstance_facts: + resource_group: myResourceGroup + name: container_group_name + + - name: List Container Instances in a specified resource group name + azure_rm_containerinstance_facts: + resource_group: myResourceGroup +''' + +RETURN = ''' +container_groups: + description: A list of Container Instance dictionaries. + returned: always + type: complex + contains: + id: + description: + - The resource id. + returned: always + type: str + sample: "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.ContainerInstance/contain + erGroups/myContainer" + resource_group: + description: + - Resource group where the container exists. + returned: always + type: str + sample: testrg + name: + description: + - The resource name. + returned: always + type: str + sample: mycontainers + location: + description: + - The resource location. + returned: always + type: str + sample: westus + os_type: + description: + - The OS type of containers. + returned: always + type: str + sample: linux + ip_address: + description: + - IP address of the container instance. + returned: always + type: str + sample: 173.15.18.1 + dns_name_label: + description: + - The Dns name label for the IP. + returned: always + type: str + sample: mydomain + ports: + description: + - List of ports exposed by the container instance. + returned: always + type: list + sample: [ 80, 81 ] + containers: + description: + - The containers within the container group. + returned: always + type: complex + sample: containers + contains: + name: + description: + - The name of the container instance. + returned: always + type: str + sample: "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.ContainerInstance + /containerGroups/myContainer" + image: + description: + - The container image name. + returned: always + type: str + sample: "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.ContainerInstance + /containerGroups/myContainer" + memory: + description: + - The required memory of the containers in GB. + returned: always + type: float + sample: 1.5 + cpu: + description: + - The required number of CPU cores of the containers. + returned: always + type: int + sample: 1 + ports: + description: + - List of ports exposed within the container group. + returned: always + type: list + sample: [ 80, 81 ] + commands: + description: + - List of commands to execute within the container instance in exec form. + returned: always + type: list + sample: [ "pip install abc" ] + environment_variables: + description: + - List of container environment variables. + type: complex + contains: + name: + description: + - Environment variable name. + type: str + value: + description: + - Environment variable value. + type: str + tags: + description: Tags assigned to the resource. Dictionary of string:string pairs. + type: dict + sample: { "tag1": "abc" } +''' + +from ansible.module_utils.azure_rm_common import AzureRMModuleBase +from ansible.module_utils.common.dict_transformations import _camel_to_snake + +try: + from msrestazure.azure_exceptions import CloudError + from msrestazure.azure_operation import AzureOperationPoller + from azure.mgmt.containerinstance import ContainerInstanceManagementClient + from msrest.serialization import Model +except ImportError: + # This is handled in azure_rm_common + pass + + +class AzureRMContainerInstanceFacts(AzureRMModuleBase): + def __init__(self): + # define user inputs into argument + self.module_arg_spec = dict( + resource_group=dict( + type='str', + required=True + ), + name=dict( + type='str' + ), + tags=dict( + type='list' + ) + ) + # store the results of the module operation + self.results = dict( + changed=False, + ansible_facts=dict() + ) + self.resource_group = None + self.name = None + super(AzureRMContainerInstanceFacts, self).__init__(self.module_arg_spec, supports_tags=False) + + def exec_module(self, **kwargs): + for key in self.module_arg_spec: + setattr(self, key, kwargs[key]) + + if (self.name is not None): + self.results['containerinstances'] = self.get() + elif (self.resource_group is not None): + self.results['containerinstances'] = self.list_by_resource_group() + else: + self.results['containerinstances'] = self.list_all() + return self.results + + def get(self): + response = None + results = [] + try: + response = self.containerinstance_client.container_groups.get(resource_group_name=self.resource_group, + container_group_name=self.name) + self.log("Response : {0}".format(response)) + except CloudError as e: + self.log('Could not get facts for Container Instances.') + + if response is not None and self.has_tags(response.tags, self.tags): + results.append(self.format_item(response)) + + return results + + def list_by_resource_group(self): + response = None + results = [] + try: + response = self.containerinstance_client.container_groups.list_by_resource_group(resource_group_name=self.resource_group) + self.log("Response : {0}".format(response)) + except CloudError as e: + self.fail('Could not list facts for Container Instances.') + + if response is not None: + for item in response: + if self.has_tags(item.tags, self.tags): + results.append(self.format_item(item)) + + return results + + def list_all(self): + response = None + results = [] + try: + response = self.containerinstance_client.container_groups.list() + self.log("Response : {0}".format(response)) + except CloudError as e: + self.fail('Could not list facts for Container Instances.') + + if response is not None: + for item in response: + if self.has_tags(item.tags, self.tags): + results.append(self.format_item(item)) + + return results + + def format_item(self, item): + d = item.as_dict() + containers = d['containers'] + ports = d['ip_address']['ports'] if 'ip_address' in d else [] + resource_group = d['id'].split('resourceGroups/')[1].split('/')[0] + + for port_index in range(len(ports)): + ports[port_index] = ports[port_index]['port'] + + for container_index in range(len(containers)): + old_container = containers[container_index] + new_container = { + 'name': old_container['name'], + 'image': old_container['image'], + 'memory': old_container['resources']['requests']['memory_in_gb'], + 'cpu': old_container['resources']['requests']['cpu'], + 'ports': [], + 'commands': old_container.get('command'), + 'environment_variables': old_container.get('environment_variables') + } + for port_index in range(len(old_container['ports'])): + new_container['ports'].append(old_container['ports'][port_index]['port']) + containers[container_index] = new_container + + d = { + 'id': d['id'], + 'resource_group': resource_group, + 'name': d['name'], + 'os_type': d['os_type'], + 'dns_name_label': d['ip_address'].get('dns_name_label'), + 'ip_address': d['ip_address']['ip'] if 'ip_address' in d else '', + 'ports': ports, + 'location': d['location'], + 'containers': containers, + 'restart_policy': _camel_to_snake(d.get('restart_policy')) if d.get('restart_policy') else None, + 'tags': d.get('tags', None) + } + return d + + +def main(): + AzureRMContainerInstanceFacts() + + +if __name__ == '__main__': + main() diff --git a/lib/ansible/modules/cloud/azure/azure_rm_containerinstance_info.py b/lib/ansible/modules/cloud/azure/azure_rm_containerinstance_info.py deleted file mode 100644 index 73024ca646..0000000000 --- a/lib/ansible/modules/cloud/azure/azure_rm_containerinstance_info.py +++ /dev/null @@ -1,315 +0,0 @@ -#!/usr/bin/python -# -# Copyright (c) 2017 Zim Kalinowski, -# -# 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_containerinstance_info -version_added: "2.8" -short_description: Get Azure Container Instance facts. -description: - - Get facts of Container Instance. - -options: - resource_group: - description: - - The name of the resource group. - required: True - name: - description: - - The name of the container instance. - tags: - description: - - Limit results by providing a list of tags. Format tags as 'key' or 'key:value'. - -extends_documentation_fragment: - - azure - -author: - - "Zim Kalinowski (@zikalino)" - -''' - -EXAMPLES = ''' - - name: Get specific Container Instance facts - azure_rm_containerinstance_info: - resource_group: myResourceGroup - name: container_group_name - - - name: List Container Instances in a specified resource group name - azure_rm_containerinstance_info: - resource_group: myResourceGroup -''' - -RETURN = ''' -container_groups: - description: A list of Container Instance dictionaries. - returned: always - type: complex - contains: - id: - description: - - The resource id. - returned: always - type: str - sample: "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.ContainerInstance/contain - erGroups/myContainer" - resource_group: - description: - - Resource group where the container exists. - returned: always - type: str - sample: testrg - name: - description: - - The resource name. - returned: always - type: str - sample: mycontainers - location: - description: - - The resource location. - returned: always - type: str - sample: westus - os_type: - description: - - The OS type of containers. - returned: always - type: str - sample: linux - ip_address: - description: - - IP address of the container instance. - returned: always - type: str - sample: 173.15.18.1 - dns_name_label: - description: - - The Dns name label for the IP. - returned: always - type: str - sample: mydomain - ports: - description: - - List of ports exposed by the container instance. - returned: always - type: list - sample: [ 80, 81 ] - containers: - description: - - The containers within the container group. - returned: always - type: complex - sample: containers - contains: - name: - description: - - The name of the container instance. - returned: always - type: str - sample: "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.ContainerInstance - /containerGroups/myContainer" - image: - description: - - The container image name. - returned: always - type: str - sample: "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.ContainerInstance - /containerGroups/myContainer" - memory: - description: - - The required memory of the containers in GB. - returned: always - type: float - sample: 1.5 - cpu: - description: - - The required number of CPU cores of the containers. - returned: always - type: int - sample: 1 - ports: - description: - - List of ports exposed within the container group. - returned: always - type: list - sample: [ 80, 81 ] - commands: - description: - - List of commands to execute within the container instance in exec form. - returned: always - type: list - sample: [ "pip install abc" ] - environment_variables: - description: - - List of container environment variables. - type: complex - contains: - name: - description: - - Environment variable name. - type: str - value: - description: - - Environment variable value. - type: str - tags: - description: Tags assigned to the resource. Dictionary of string:string pairs. - type: dict - sample: { "tag1": "abc" } -''' - -from ansible.module_utils.azure_rm_common import AzureRMModuleBase -from ansible.module_utils.common.dict_transformations import _camel_to_snake - -try: - from msrestazure.azure_exceptions import CloudError - from msrestazure.azure_operation import AzureOperationPoller - from azure.mgmt.containerinstance import ContainerInstanceManagementClient - from msrest.serialization import Model -except ImportError: - # This is handled in azure_rm_common - pass - - -class AzureRMContainerInstanceFacts(AzureRMModuleBase): - def __init__(self): - # define user inputs into argument - self.module_arg_spec = dict( - resource_group=dict( - type='str', - required=True - ), - name=dict( - type='str' - ), - tags=dict( - type='list' - ) - ) - # store the results of the module operation - self.results = dict( - changed=False, - ansible_facts=dict() - ) - self.resource_group = None - self.name = None - super(AzureRMContainerInstanceFacts, self).__init__(self.module_arg_spec, supports_tags=False) - - def exec_module(self, **kwargs): - for key in self.module_arg_spec: - setattr(self, key, kwargs[key]) - - if (self.name is not None): - self.results['containerinstances'] = self.get() - elif (self.resource_group is not None): - self.results['containerinstances'] = self.list_by_resource_group() - else: - self.results['containerinstances'] = self.list_all() - return self.results - - def get(self): - response = None - results = [] - try: - response = self.containerinstance_client.container_groups.get(resource_group_name=self.resource_group, - container_group_name=self.name) - self.log("Response : {0}".format(response)) - except CloudError as e: - self.log('Could not get facts for Container Instances.') - - if response is not None and self.has_tags(response.tags, self.tags): - results.append(self.format_item(response)) - - return results - - def list_by_resource_group(self): - response = None - results = [] - try: - response = self.containerinstance_client.container_groups.list_by_resource_group(resource_group_name=self.resource_group) - self.log("Response : {0}".format(response)) - except CloudError as e: - self.fail('Could not list facts for Container Instances.') - - if response is not None: - for item in response: - if self.has_tags(item.tags, self.tags): - results.append(self.format_item(item)) - - return results - - def list_all(self): - response = None - results = [] - try: - response = self.containerinstance_client.container_groups.list() - self.log("Response : {0}".format(response)) - except CloudError as e: - self.fail('Could not list facts for Container Instances.') - - if response is not None: - for item in response: - if self.has_tags(item.tags, self.tags): - results.append(self.format_item(item)) - - return results - - def format_item(self, item): - d = item.as_dict() - containers = d['containers'] - ports = d['ip_address']['ports'] if 'ip_address' in d else [] - resource_group = d['id'].split('resourceGroups/')[1].split('/')[0] - - for port_index in range(len(ports)): - ports[port_index] = ports[port_index]['port'] - - for container_index in range(len(containers)): - old_container = containers[container_index] - new_container = { - 'name': old_container['name'], - 'image': old_container['image'], - 'memory': old_container['resources']['requests']['memory_in_gb'], - 'cpu': old_container['resources']['requests']['cpu'], - 'ports': [], - 'commands': old_container.get('command'), - 'environment_variables': old_container.get('environment_variables') - } - for port_index in range(len(old_container['ports'])): - new_container['ports'].append(old_container['ports'][port_index]['port']) - containers[container_index] = new_container - - d = { - 'id': d['id'], - 'resource_group': resource_group, - 'name': d['name'], - 'os_type': d['os_type'], - 'dns_name_label': d['ip_address'].get('dns_name_label'), - 'ip_address': d['ip_address']['ip'] if 'ip_address' in d else '', - 'ports': ports, - 'location': d['location'], - 'containers': containers, - 'restart_policy': _camel_to_snake(d.get('restart_policy')) if d.get('restart_policy') else None, - 'tags': d.get('tags', None) - } - return d - - -def main(): - AzureRMContainerInstanceFacts() - - -if __name__ == '__main__': - main() diff --git a/lib/ansible/modules/cloud/azure/azure_rm_cosmosdbaccount_facts.py b/lib/ansible/modules/cloud/azure/azure_rm_cosmosdbaccount_facts.py new file mode 100644 index 0000000000..bb43c856ed --- /dev/null +++ b/lib/ansible/modules/cloud/azure/azure_rm_cosmosdbaccount_facts.py @@ -0,0 +1,515 @@ +#!/usr/bin/python +# +# Copyright (c) 2019 Zim Kalinowski, (@zikalino) +# +# 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_cosmosdbaccount_facts +version_added: "2.8" +short_description: Get Azure Cosmos DB Account facts. +description: + - Get facts of Azure Cosmos DB Account. + +options: + resource_group: + description: + - Name of an Azure resource group. + name: + description: + - Cosmos DB database account name. + tags: + description: + - Limit results by providing a list of tags. Format tags as 'key' or 'key:value'. + retrieve_keys: + description: + - Retrieve keys and connection strings. + type: str + choices: + - all + - readonly + retrieve_connection_strings: + description: + - Retrieve connection strings. + type: bool + +extends_documentation_fragment: + - azure + +author: + - "Zim Kalinowski (@zikalino)" + +''' + +EXAMPLES = ''' + - name: Get instance of Database Account + azure_rm_cosmosdbaccount_facts: + resource_group: myResourceGroup + name: testaccount + + - name: List instances of Database Account + azure_rm_cosmosdbaccousnt_facts: + resource_group: myResourceGroup +''' + +RETURN = ''' +accounts: + description: A list of dictionaries containing facts for Database Account. + returned: always + type: complex + contains: + id: + description: + - The unique resource identifier of the database account. + returned: always + type: str + sample: "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.DocumentDB/databaseAccount + s/testaccount" + resource_group: + description: + - Name of an Azure resource group. + returned: always + type: str + sample: myResourceGroup + name: + description: + - The name of the database account. + returned: always + type: str + sample: testaccount + location: + description: + - The location of the resource group to which the resource belongs. + returned: always + type: str + sample: westus + kind: + description: + - Indicates the type of database account. + returned: always + type: str + sample: global_document_db + consistency_policy: + description: + - Consistency policy. + returned: always + type: complex + contains: + default_consistency_level: + description: + - Default consistency level. + returned: always + type: str + sample: session + max_interval_in_seconds: + description: + - Maximum interval in seconds. + returned: always + type: int + sample: 5 + max_staleness_prefix: + description: + - Maximum staleness prefix. + returned: always + type: int + sample: 100 + failover_policies: + description: + - Read locations + returned: always + type: complex + contains: + name: + description: + - Location name. + returned: always + type: str + sample: eastus + failover_priority: + description: + - Failover priority. + returned: always + type: int + sample: 0 + id: + description: + - Read location ID. + returned: always + type: str + sample: testaccount-eastus + read_locations: + description: + - Read locations + returned: always + type: complex + contains: + name: + description: + - Location name. + returned: always + type: str + sample: eastus + failover_priority: + description: + - Failover priority. + returned: always + type: int + sample: 0 + id: + description: + - Read location ID. + returned: always + type: str + sample: testaccount-eastus + document_endpoint: + description: + - Document endpoint. + returned: always + type: str + sample: https://testaccount-eastus.documents.azure.com:443/ + provisioning_state: + description: + - Provisioning state. + returned: always + type: str + sample: Succeeded + write_locations: + description: + - Write locations + returned: always + type: complex + contains: + name: + description: + - Location name. + returned: always + type: str + sample: eastus + failover_priority: + description: + - Failover priority. + returned: always + type: int + sample: 0 + id: + description: + - Read location ID. + returned: always + type: str + sample: testaccount-eastus + document_endpoint: + description: + - Document endpoint. + returned: always + type: str + sample: https://testaccount-eastus.documents.azure.com:443/ + provisioning_state: + description: + - Provisioning state. + returned: always + type: str + sample: Succeeded + database_account_offer_type: + description: + - Offer type. + returned: always + type: str + sample: Standard + ip_range_filter: + description: + - Enable IP range filter. + returned: always + type: str + sample: 10.10.10.10 + is_virtual_network_filter_enabled: + description: + - Enable virtual network filter. + returned: always + type: bool + sample: true + enable_automatic_failover: + description: + - Enable automatic failover. + returned: always + type: bool + sample: true + enable_cassandra: + description: + - Enable Cassandra + returned: always + type: bool + sample: true + enable_table: + description: + - Enable Table. + returned: always + type: bool + sample: true + enable_gremlin: + description: + - Enable Gremlin. + returned: always + type: bool + sample: true + virtual_network_rules: + description: + - List of Virtual Network ACL rules configured for the Cosmos DB account. + type: list + contains: + subnet: + description: + - Resource id of a subnet. + type: str + sample: "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.Network/virtualNet + works/testvnet/subnets/testsubnet1" + ignore_missing_vnet_service_endpoint: + description: + - Create Cosmos DB account without existing virtual network service endpoint. + type: bool + enable_multiple_write_locations: + description: + - Enable multiple write locations. + returned: always + type: bool + sample: true + document_endpoint: + description: + - Document endpoint. + returned: always + type: str + sample: https://testaccount.documents.azure.com:443/ + provisioning_state: + description: + - Provisioning state of Cosmos DB. + returned: always + type: str + sample: Succeeded + primary_master_key: + description: + - Primary master key. + returned: when requested + type: str + sample: UIWoYD4YaD4LxW6k3Jy69qcHDMLX4aSttECQkEcwWF1RflLd6crWSGJs0R9kJwujehtfLGeQx4ISVSJfTpJkYw== + secondary_master_key: + description: + - Primary master key. + returned: when requested + type: str + sample: UIWoYD4YaD4LxW6k3Jy69qcHDMLX4aSttECQkEcwWF1RflLd6crWSGJs0R9kJwujehtfLGeQx4ISVSJfTpJkYw== + primary_readonly_master_key: + description: + - Primary master key. + returned: when requested + type: str + sample: UIWoYD4YaD4LxW6k3Jy69qcHDMLX4aSttECQkEcwWF1RflLd6crWSGJs0R9kJwujehtfLGeQx4ISVSJfTpJkYw== + secondary_readonly_master_key: + description: + - Primary master key. + returned: when requested + type: str + sample: UIWoYD4YaD4LxW6k3Jy69qcHDMLX4aSttECQkEcwWF1RflLd6crWSGJs0R9kJwujehtfLGeQx4ISVSJfTpJkYw== + connection_strings: + description: + - List of connection strings. + type: list + returned: when requested + contains: + connection_string: + description: + - Description of connection string. + type: str + returned: always + sample: Primary SQL Connection String + description: + description: + - Connection string. + type: str + returned: always + sample: "AccountEndpoint=https://testaccount.documents.azure.com:443/;AccountKey=fSEjathnk6ZeBTrXkud9j5kfhtSEQ + q3dpJxJga76h9BZkK2BJJrDzSO6DDn6yKads017OZBZ1YZWyq1cW4iuvA==" + tags: + description: + - Tags + returned: always + type: complex + sample: {} +''' + +from ansible.module_utils.azure_rm_common import AzureRMModuleBase +from ansible.module_utils.common.dict_transformations import _camel_to_snake + +try: + from msrestazure.azure_exceptions import CloudError + from azure.mgmt.cosmosdb import CosmosDB + from msrest.serialization import Model +except ImportError: + # This is handled in azure_rm_common + pass + + +class AzureRMCosmosDBAccountFacts(AzureRMModuleBase): + def __init__(self): + # define user inputs into argument + self.module_arg_spec = dict( + resource_group=dict( + type='str' + ), + name=dict( + type='str' + ), + tags=dict( + type='list' + ), + retrieve_keys=dict( + type='str', + choices=['all', 'readonly'] + ), + retrieve_connection_strings=dict( + type='bool' + ) + ) + # store the results of the module operation + self.results = dict( + changed=False + ) + self.mgmt_client = None + self.resource_group = None + self.name = None + self.tags = None + self.retrieve_keys = None + self.retrieve_connection_strings = None + + super(AzureRMCosmosDBAccountFacts, self).__init__(self.module_arg_spec, supports_tags=False) + + def exec_module(self, **kwargs): + for key in self.module_arg_spec: + setattr(self, key, kwargs[key]) + self.mgmt_client = self.get_mgmt_svc_client(CosmosDB, + base_url=self._cloud_environment.endpoints.resource_manager) + + if self.name is not None: + self.results['accounts'] = self.get() + elif self.resource_group is not None: + self.results['accounts'] = self.list_all() + return self.results + + def get(self): + response = None + results = [] + try: + response = self.mgmt_client.database_accounts.get(resource_group_name=self.resource_group, + account_name=self.name) + self.log("Response : {0}".format(response)) + except CloudError as e: + self.log('Could not get facts for Database Account.') + + if response and self.has_tags(response.tags, self.tags): + results.append(self.format_response(response)) + + return results + + def list_by_resource_group(self): + response = None + results = [] + try: + response = self.mgmt_client.database_accounts.list_by_resource_group(resource_group_name=self.resource_group) + self.log("Response : {0}".format(response)) + except CloudError as e: + self.log('Could not get facts for Database Account.') + + if response is not None: + for item in response: + if self.has_tags(item.tags, self.tags): + results.append(self.format_response(item)) + + return results + + def list_all(self): + response = None + results = [] + try: + response = self.mgmt_client.database_accounts.list() + self.log("Response : {0}".format(response)) + except CloudError as e: + self.log('Could not get facts for Database Account.') + + if response is not None: + for item in response: + if self.has_tags(item.tags, self.tags): + results.append(self.format_response(item)) + + return results + + def format_response(self, item): + d = item.as_dict() + d = { + 'id': d.get('id'), + 'resource_group': self.parse_resource_to_dict(d.get('id')).get('resource_group'), + 'name': d.get('name', None), + 'location': d.get('location', '').replace(' ', '').lower(), + 'kind': _camel_to_snake(d.get('kind', None)), + 'consistency_policy': {'default_consistency_level': _camel_to_snake(d['consistency_policy']['default_consistency_level']), + 'max_interval_in_seconds': d['consistency_policy']['max_interval_in_seconds'], + 'max_staleness_prefix': d['consistency_policy']['max_staleness_prefix']}, + 'failover_policies': [{'name': fp['location_name'].replace(' ', '').lower(), + 'failover_priority': fp['failover_priority'], + 'id': fp['id']} for fp in d['failover_policies']], + 'read_locations': [{'name': rl['location_name'].replace(' ', '').lower(), + 'failover_priority': rl['failover_priority'], + 'id': rl['id'], + 'document_endpoint': rl['document_endpoint'], + 'provisioning_state': rl['provisioning_state']} for rl in d['read_locations']], + 'write_locations': [{'name': wl['location_name'].replace(' ', '').lower(), + 'failover_priority': wl['failover_priority'], + 'id': wl['id'], + 'document_endpoint': wl['document_endpoint'], + 'provisioning_state': wl['provisioning_state']} for wl in d['write_locations']], + 'database_account_offer_type': d.get('database_account_offer_type'), + 'ip_range_filter': d['ip_range_filter'], + 'is_virtual_network_filter_enabled': d.get('is_virtual_network_filter_enabled'), + 'enable_automatic_failover': d.get('enable_automatic_failover'), + 'enable_cassandra': 'EnableCassandra' in d.get('capabilities', []), + 'enable_table': 'EnableTable' in d.get('capabilities', []), + 'enable_gremlin': 'EnableGremlin' in d.get('capabilities', []), + 'virtual_network_rules': d.get('virtual_network_rules'), + 'enable_multiple_write_locations': d.get('enable_multiple_write_locations'), + 'document_endpoint': d.get('document_endpoint'), + 'provisioning_state': d.get('provisioning_state'), + 'tags': d.get('tags', None) + } + + if self.retrieve_keys == 'all': + keys = self.mgmt_client.database_accounts.list_keys(resource_group_name=self.resource_group, + account_name=self.name) + d['primary_master_key'] = keys.primary_master_key + d['secondary_master_key'] = keys.secondary_master_key + d['primary_readonly_master_key'] = keys.primary_readonly_master_key + d['secondary_readonly_master_key'] = keys.secondary_readonly_master_key + elif self.retrieve_keys == 'readonly': + keys = self.mgmt_client.database_accounts.get_read_only_keys(resource_group_name=self.resource_group, + account_name=self.name) + d['primary_readonly_master_key'] = keys.primary_readonly_master_key + d['secondary_readonly_master_key'] = keys.secondary_readonly_master_key + if self.retrieve_connection_strings: + connection_strings = self.mgmt_client.database_accounts.list_connection_strings(resource_group_name=self.resource_group, + account_name=self.name) + d['connection_strings'] = connection_strings.as_dict() + return d + + +def main(): + AzureRMCosmosDBAccountFacts() + + +if __name__ == '__main__': + main() diff --git a/lib/ansible/modules/cloud/azure/azure_rm_cosmosdbaccount_info.py b/lib/ansible/modules/cloud/azure/azure_rm_cosmosdbaccount_info.py deleted file mode 100644 index fa51bba4fd..0000000000 --- a/lib/ansible/modules/cloud/azure/azure_rm_cosmosdbaccount_info.py +++ /dev/null @@ -1,515 +0,0 @@ -#!/usr/bin/python -# -# Copyright (c) 2019 Zim Kalinowski, (@zikalino) -# -# 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_cosmosdbaccount_info -version_added: "2.8" -short_description: Get Azure Cosmos DB Account facts. -description: - - Get facts of Azure Cosmos DB Account. - -options: - resource_group: - description: - - Name of an Azure resource group. - name: - description: - - Cosmos DB database account name. - tags: - description: - - Limit results by providing a list of tags. Format tags as 'key' or 'key:value'. - retrieve_keys: - description: - - Retrieve keys and connection strings. - type: str - choices: - - all - - readonly - retrieve_connection_strings: - description: - - Retrieve connection strings. - type: bool - -extends_documentation_fragment: - - azure - -author: - - "Zim Kalinowski (@zikalino)" - -''' - -EXAMPLES = ''' - - name: Get instance of Database Account - azure_rm_cosmosdbaccount_info: - resource_group: myResourceGroup - name: testaccount - - - name: List instances of Database Account - azure_rm_cosmosdbaccousnt_facts: - resource_group: myResourceGroup -''' - -RETURN = ''' -accounts: - description: A list of dictionaries containing facts for Database Account. - returned: always - type: complex - contains: - id: - description: - - The unique resource identifier of the database account. - returned: always - type: str - sample: "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.DocumentDB/databaseAccount - s/testaccount" - resource_group: - description: - - Name of an Azure resource group. - returned: always - type: str - sample: myResourceGroup - name: - description: - - The name of the database account. - returned: always - type: str - sample: testaccount - location: - description: - - The location of the resource group to which the resource belongs. - returned: always - type: str - sample: westus - kind: - description: - - Indicates the type of database account. - returned: always - type: str - sample: global_document_db - consistency_policy: - description: - - Consistency policy. - returned: always - type: complex - contains: - default_consistency_level: - description: - - Default consistency level. - returned: always - type: str - sample: session - max_interval_in_seconds: - description: - - Maximum interval in seconds. - returned: always - type: int - sample: 5 - max_staleness_prefix: - description: - - Maximum staleness prefix. - returned: always - type: int - sample: 100 - failover_policies: - description: - - Read locations - returned: always - type: complex - contains: - name: - description: - - Location name. - returned: always - type: str - sample: eastus - failover_priority: - description: - - Failover priority. - returned: always - type: int - sample: 0 - id: - description: - - Read location ID. - returned: always - type: str - sample: testaccount-eastus - read_locations: - description: - - Read locations - returned: always - type: complex - contains: - name: - description: - - Location name. - returned: always - type: str - sample: eastus - failover_priority: - description: - - Failover priority. - returned: always - type: int - sample: 0 - id: - description: - - Read location ID. - returned: always - type: str - sample: testaccount-eastus - document_endpoint: - description: - - Document endpoint. - returned: always - type: str - sample: https://testaccount-eastus.documents.azure.com:443/ - provisioning_state: - description: - - Provisioning state. - returned: always - type: str - sample: Succeeded - write_locations: - description: - - Write locations - returned: always - type: complex - contains: - name: - description: - - Location name. - returned: always - type: str - sample: eastus - failover_priority: - description: - - Failover priority. - returned: always - type: int - sample: 0 - id: - description: - - Read location ID. - returned: always - type: str - sample: testaccount-eastus - document_endpoint: - description: - - Document endpoint. - returned: always - type: str - sample: https://testaccount-eastus.documents.azure.com:443/ - provisioning_state: - description: - - Provisioning state. - returned: always - type: str - sample: Succeeded - database_account_offer_type: - description: - - Offer type. - returned: always - type: str - sample: Standard - ip_range_filter: - description: - - Enable IP range filter. - returned: always - type: str - sample: 10.10.10.10 - is_virtual_network_filter_enabled: - description: - - Enable virtual network filter. - returned: always - type: bool - sample: true - enable_automatic_failover: - description: - - Enable automatic failover. - returned: always - type: bool - sample: true - enable_cassandra: - description: - - Enable Cassandra - returned: always - type: bool - sample: true - enable_table: - description: - - Enable Table. - returned: always - type: bool - sample: true - enable_gremlin: - description: - - Enable Gremlin. - returned: always - type: bool - sample: true - virtual_network_rules: - description: - - List of Virtual Network ACL rules configured for the Cosmos DB account. - type: list - contains: - subnet: - description: - - Resource id of a subnet. - type: str - sample: "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.Network/virtualNet - works/testvnet/subnets/testsubnet1" - ignore_missing_vnet_service_endpoint: - description: - - Create Cosmos DB account without existing virtual network service endpoint. - type: bool - enable_multiple_write_locations: - description: - - Enable multiple write locations. - returned: always - type: bool - sample: true - document_endpoint: - description: - - Document endpoint. - returned: always - type: str - sample: https://testaccount.documents.azure.com:443/ - provisioning_state: - description: - - Provisioning state of Cosmos DB. - returned: always - type: str - sample: Succeeded - primary_master_key: - description: - - Primary master key. - returned: when requested - type: str - sample: UIWoYD4YaD4LxW6k3Jy69qcHDMLX4aSttECQkEcwWF1RflLd6crWSGJs0R9kJwujehtfLGeQx4ISVSJfTpJkYw== - secondary_master_key: - description: - - Primary master key. - returned: when requested - type: str - sample: UIWoYD4YaD4LxW6k3Jy69qcHDMLX4aSttECQkEcwWF1RflLd6crWSGJs0R9kJwujehtfLGeQx4ISVSJfTpJkYw== - primary_readonly_master_key: - description: - - Primary master key. - returned: when requested - type: str - sample: UIWoYD4YaD4LxW6k3Jy69qcHDMLX4aSttECQkEcwWF1RflLd6crWSGJs0R9kJwujehtfLGeQx4ISVSJfTpJkYw== - secondary_readonly_master_key: - description: - - Primary master key. - returned: when requested - type: str - sample: UIWoYD4YaD4LxW6k3Jy69qcHDMLX4aSttECQkEcwWF1RflLd6crWSGJs0R9kJwujehtfLGeQx4ISVSJfTpJkYw== - connection_strings: - description: - - List of connection strings. - type: list - returned: when requested - contains: - connection_string: - description: - - Description of connection string. - type: str - returned: always - sample: Primary SQL Connection String - description: - description: - - Connection string. - type: str - returned: always - sample: "AccountEndpoint=https://testaccount.documents.azure.com:443/;AccountKey=fSEjathnk6ZeBTrXkud9j5kfhtSEQ - q3dpJxJga76h9BZkK2BJJrDzSO6DDn6yKads017OZBZ1YZWyq1cW4iuvA==" - tags: - description: - - Tags - returned: always - type: complex - sample: {} -''' - -from ansible.module_utils.azure_rm_common import AzureRMModuleBase -from ansible.module_utils.common.dict_transformations import _camel_to_snake - -try: - from msrestazure.azure_exceptions import CloudError - from azure.mgmt.cosmosdb import CosmosDB - from msrest.serialization import Model -except ImportError: - # This is handled in azure_rm_common - pass - - -class AzureRMCosmosDBAccountFacts(AzureRMModuleBase): - def __init__(self): - # define user inputs into argument - self.module_arg_spec = dict( - resource_group=dict( - type='str' - ), - name=dict( - type='str' - ), - tags=dict( - type='list' - ), - retrieve_keys=dict( - type='str', - choices=['all', 'readonly'] - ), - retrieve_connection_strings=dict( - type='bool' - ) - ) - # store the results of the module operation - self.results = dict( - changed=False - ) - self.mgmt_client = None - self.resource_group = None - self.name = None - self.tags = None - self.retrieve_keys = None - self.retrieve_connection_strings = None - - super(AzureRMCosmosDBAccountFacts, self).__init__(self.module_arg_spec, supports_tags=False) - - def exec_module(self, **kwargs): - for key in self.module_arg_spec: - setattr(self, key, kwargs[key]) - self.mgmt_client = self.get_mgmt_svc_client(CosmosDB, - base_url=self._cloud_environment.endpoints.resource_manager) - - if self.name is not None: - self.results['accounts'] = self.get() - elif self.resource_group is not None: - self.results['accounts'] = self.list_all() - return self.results - - def get(self): - response = None - results = [] - try: - response = self.mgmt_client.database_accounts.get(resource_group_name=self.resource_group, - account_name=self.name) - self.log("Response : {0}".format(response)) - except CloudError as e: - self.log('Could not get facts for Database Account.') - - if response and self.has_tags(response.tags, self.tags): - results.append(self.format_response(response)) - - return results - - def list_by_resource_group(self): - response = None - results = [] - try: - response = self.mgmt_client.database_accounts.list_by_resource_group(resource_group_name=self.resource_group) - self.log("Response : {0}".format(response)) - except CloudError as e: - self.log('Could not get facts for Database Account.') - - if response is not None: - for item in response: - if self.has_tags(item.tags, self.tags): - results.append(self.format_response(item)) - - return results - - def list_all(self): - response = None - results = [] - try: - response = self.mgmt_client.database_accounts.list() - self.log("Response : {0}".format(response)) - except CloudError as e: - self.log('Could not get facts for Database Account.') - - if response is not None: - for item in response: - if self.has_tags(item.tags, self.tags): - results.append(self.format_response(item)) - - return results - - def format_response(self, item): - d = item.as_dict() - d = { - 'id': d.get('id'), - 'resource_group': self.parse_resource_to_dict(d.get('id')).get('resource_group'), - 'name': d.get('name', None), - 'location': d.get('location', '').replace(' ', '').lower(), - 'kind': _camel_to_snake(d.get('kind', None)), - 'consistency_policy': {'default_consistency_level': _camel_to_snake(d['consistency_policy']['default_consistency_level']), - 'max_interval_in_seconds': d['consistency_policy']['max_interval_in_seconds'], - 'max_staleness_prefix': d['consistency_policy']['max_staleness_prefix']}, - 'failover_policies': [{'name': fp['location_name'].replace(' ', '').lower(), - 'failover_priority': fp['failover_priority'], - 'id': fp['id']} for fp in d['failover_policies']], - 'read_locations': [{'name': rl['location_name'].replace(' ', '').lower(), - 'failover_priority': rl['failover_priority'], - 'id': rl['id'], - 'document_endpoint': rl['document_endpoint'], - 'provisioning_state': rl['provisioning_state']} for rl in d['read_locations']], - 'write_locations': [{'name': wl['location_name'].replace(' ', '').lower(), - 'failover_priority': wl['failover_priority'], - 'id': wl['id'], - 'document_endpoint': wl['document_endpoint'], - 'provisioning_state': wl['provisioning_state']} for wl in d['write_locations']], - 'database_account_offer_type': d.get('database_account_offer_type'), - 'ip_range_filter': d['ip_range_filter'], - 'is_virtual_network_filter_enabled': d.get('is_virtual_network_filter_enabled'), - 'enable_automatic_failover': d.get('enable_automatic_failover'), - 'enable_cassandra': 'EnableCassandra' in d.get('capabilities', []), - 'enable_table': 'EnableTable' in d.get('capabilities', []), - 'enable_gremlin': 'EnableGremlin' in d.get('capabilities', []), - 'virtual_network_rules': d.get('virtual_network_rules'), - 'enable_multiple_write_locations': d.get('enable_multiple_write_locations'), - 'document_endpoint': d.get('document_endpoint'), - 'provisioning_state': d.get('provisioning_state'), - 'tags': d.get('tags', None) - } - - if self.retrieve_keys == 'all': - keys = self.mgmt_client.database_accounts.list_keys(resource_group_name=self.resource_group, - account_name=self.name) - d['primary_master_key'] = keys.primary_master_key - d['secondary_master_key'] = keys.secondary_master_key - d['primary_readonly_master_key'] = keys.primary_readonly_master_key - d['secondary_readonly_master_key'] = keys.secondary_readonly_master_key - elif self.retrieve_keys == 'readonly': - keys = self.mgmt_client.database_accounts.get_read_only_keys(resource_group_name=self.resource_group, - account_name=self.name) - d['primary_readonly_master_key'] = keys.primary_readonly_master_key - d['secondary_readonly_master_key'] = keys.secondary_readonly_master_key - if self.retrieve_connection_strings: - connection_strings = self.mgmt_client.database_accounts.list_connection_strings(resource_group_name=self.resource_group, - account_name=self.name) - d['connection_strings'] = connection_strings.as_dict() - return d - - -def main(): - AzureRMCosmosDBAccountFacts() - - -if __name__ == '__main__': - main() diff --git a/lib/ansible/modules/cloud/azure/azure_rm_deployment_facts.py b/lib/ansible/modules/cloud/azure/azure_rm_deployment_facts.py new file mode 100644 index 0000000000..912f5b6097 --- /dev/null +++ b/lib/ansible/modules/cloud/azure/azure_rm_deployment_facts.py @@ -0,0 +1,243 @@ +#!/usr/bin/python +# +# Copyright (c) 2019 Zim Kalinowski, (@zikalino) +# +# 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_deployment_facts +version_added: "2.8" +short_description: Get Azure Deployment facts. +description: + - Get facts of Azure Deployment. + +options: + resource_group: + description: + - The name of the resource group. + required: True + name: + description: + - The name of the deployment. + +extends_documentation_fragment: + - azure + +author: + - "Zim Kalinowski (@zikalino)" + +''' + +EXAMPLES = ''' + - name: Get instance of Deployment + azure_rm_deployment_facts: + resource_group: myResourceGroup + name: myDeployment +''' + +RETURN = ''' +deployments: + description: A list of dictionaries containing facts for deployments. + returned: always + type: complex + contains: + id: + description: + - The identifier of the resource. + returned: always + type: str + sample: "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.Resources/deployments/myD + eployment" + resource_group: + description: + - Resource group name. + returned: always + sample: myResourceGroup + name: + description: + - Deployment name. + returned: always + sample: myDeployment + provisioning_state: + description: + - Provisioning state of the deployment. + returned: always + sample: Succeeded + template_link: + description: + - Link to the template. + returned: always + sample: "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/d01a5c06f4f1bc03a049ca17bbbd6e06d62657b3/101-vm-simple-linux/ + azuredeploy.json" + parameters: + description: + - Dictionary containing deployment parameters. + returned: always + type: complex + outputs: + description: + - Dictionary containing deployment outputs. + returned: always + output_resources: + description: + - List of resources. + returned: always + type: complex + contains: + id: + description: + - Resource id. + returned: always + type: str + sample: "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkI + nterfaces/myNetworkInterface" + name: + description: + - Resource name. + returned: always + type: str + sample: myNetworkInterface + type: + description: + - Resource type. + returned: always + type: str + sample: Microsoft.Network/networkInterfaces + depends_on: + description: + - List of resource ids. + type: list + returned: always + sample: + - "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGropup/providers/Microsoft.Network/virtualNet + works/myVirtualNetwork" +''' + +from ansible.module_utils.azure_rm_common import AzureRMModuleBase + +try: + from msrestazure.azure_exceptions import CloudError + from azure.mgmt.devtestlabs import DevTestLabsClient + from msrest.serialization import Model +except ImportError: + # This is handled in azure_rm_common + pass + + +class AzureRMDeploymentFacts(AzureRMModuleBase): + def __init__(self): + self.module_arg_spec = dict( + resource_group=dict( + type='str', + required=True + ), + name=dict( + type='str' + ) + ) + self.results = dict( + changed=False + ) + self.resource_group = None + self.name = None + super(AzureRMDeploymentFacts, self).__init__(self.module_arg_spec, supports_tags=False) + + def exec_module(self, **kwargs): + for key in self.module_arg_spec: + setattr(self, key, kwargs[key]) + + if self.name: + self.results['deployments'] = self.get() + else: + self.results['deployments'] = self.list() + + return self.results + + def get(self): + response = None + results = [] + try: + response = self.rm_client.deployments.get(self.resource_group, deployment_name=self.name) + self.log("Response : {0}".format(response)) + except CloudError as e: + self.log('Could not get facts for Deployment.') + + if response: + results.append(self.format_response(response)) + + return results + + def list(self): + response = None + results = [] + try: + response = self.rm_client.deployments.list(self.resource_group) + self.log("Response : {0}".format(response)) + except CloudError as e: + self.log('Could not get facts for Deployment.') + + if response is not None: + for item in response: + results.append(self.format_response(item)) + + return results + + def format_response(self, item): + d = item.as_dict() + output_resources = {} + for dependency in d.get('properties', {}).get('dependencies'): + # go through dependent resources + depends_on = [] + for depends_on_resource in dependency['depends_on']: + depends_on.append(depends_on_resource['id']) + # append if not in list + if not output_resources.get(depends_on_resource['id']): + sub_resource = { + 'id': depends_on_resource['id'], + 'name': depends_on_resource['resource_name'], + 'type': depends_on_resource['resource_type'], + 'depends_on': [] + } + output_resources[depends_on_resource['id']] = sub_resource + resource = { + 'id': dependency['id'], + 'name': dependency['resource_name'], + 'type': dependency['resource_type'], + 'depends_on': depends_on + } + output_resources[dependency['id']] = resource + + # convert dictionary to list + output_resources_list = [] + for r in output_resources: + output_resources_list.append(output_resources[r]) + + d = { + 'id': d.get('id'), + 'resource_group': self.resource_group, + 'name': d.get('name'), + 'provisioning_state': d.get('properties', {}).get('provisioning_state'), + 'parameters': d.get('properties', {}).get('parameters'), + 'outputs': d.get('properties', {}).get('outputs'), + 'output_resources': output_resources_list, + 'template_link': d.get('properties', {}).get('template_link').get('uri') + } + return d + + +def main(): + AzureRMDeploymentFacts() + + +if __name__ == '__main__': + main() diff --git a/lib/ansible/modules/cloud/azure/azure_rm_deployment_info.py b/lib/ansible/modules/cloud/azure/azure_rm_deployment_info.py deleted file mode 100644 index c8f5c1d809..0000000000 --- a/lib/ansible/modules/cloud/azure/azure_rm_deployment_info.py +++ /dev/null @@ -1,243 +0,0 @@ -#!/usr/bin/python -# -# Copyright (c) 2019 Zim Kalinowski, (@zikalino) -# -# 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_deployment_info -version_added: "2.8" -short_description: Get Azure Deployment facts. -description: - - Get facts of Azure Deployment. - -options: - resource_group: - description: - - The name of the resource group. - required: True - name: - description: - - The name of the deployment. - -extends_documentation_fragment: - - azure - -author: - - "Zim Kalinowski (@zikalino)" - -''' - -EXAMPLES = ''' - - name: Get instance of Deployment - azure_rm_deployment_info: - resource_group: myResourceGroup - name: myDeployment -''' - -RETURN = ''' -deployments: - description: A list of dictionaries containing facts for deployments. - returned: always - type: complex - contains: - id: - description: - - The identifier of the resource. - returned: always - type: str - sample: "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.Resources/deployments/myD - eployment" - resource_group: - description: - - Resource group name. - returned: always - sample: myResourceGroup - name: - description: - - Deployment name. - returned: always - sample: myDeployment - provisioning_state: - description: - - Provisioning state of the deployment. - returned: always - sample: Succeeded - template_link: - description: - - Link to the template. - returned: always - sample: "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/d01a5c06f4f1bc03a049ca17bbbd6e06d62657b3/101-vm-simple-linux/ - azuredeploy.json" - parameters: - description: - - Dictionary containing deployment parameters. - returned: always - type: complex - outputs: - description: - - Dictionary containing deployment outputs. - returned: always - output_resources: - description: - - List of resources. - returned: always - type: complex - contains: - id: - description: - - Resource id. - returned: always - type: str - sample: "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkI - nterfaces/myNetworkInterface" - name: - description: - - Resource name. - returned: always - type: str - sample: myNetworkInterface - type: - description: - - Resource type. - returned: always - type: str - sample: Microsoft.Network/networkInterfaces - depends_on: - description: - - List of resource ids. - type: list - returned: always - sample: - - "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGropup/providers/Microsoft.Network/virtualNet - works/myVirtualNetwork" -''' - -from ansible.module_utils.azure_rm_common import AzureRMModuleBase - -try: - from msrestazure.azure_exceptions import CloudError - from azure.mgmt.devtestlabs import DevTestLabsClient - from msrest.serialization import Model -except ImportError: - # This is handled in azure_rm_common - pass - - -class AzureRMDeploymentFacts(AzureRMModuleBase): - def __init__(self): - self.module_arg_spec = dict( - resource_group=dict( - type='str', - required=True - ), - name=dict( - type='str' - ) - ) - self.results = dict( - changed=False - ) - self.resource_group = None - self.name = None - super(AzureRMDeploymentFacts, self).__init__(self.module_arg_spec, supports_tags=False) - - def exec_module(self, **kwargs): - for key in self.module_arg_spec: - setattr(self, key, kwargs[key]) - - if self.name: - self.results['deployments'] = self.get() - else: - self.results['deployments'] = self.list() - - return self.results - - def get(self): - response = None - results = [] - try: - response = self.rm_client.deployments.get(self.resource_group, deployment_name=self.name) - self.log("Response : {0}".format(response)) - except CloudError as e: - self.log('Could not get facts for Deployment.') - - if response: - results.append(self.format_response(response)) - - return results - - def list(self): - response = None - results = [] - try: - response = self.rm_client.deployments.list(self.resource_group) - self.log("Response : {0}".format(response)) - except CloudError as e: - self.log('Could not get facts for Deployment.') - - if response is not None: - for item in response: - results.append(self.format_response(item)) - - return results - - def format_response(self, item): - d = item.as_dict() - output_resources = {} - for dependency in d.get('properties', {}).get('dependencies'): - # go through dependent resources - depends_on = [] - for depends_on_resource in dependency['depends_on']: - depends_on.append(depends_on_resource['id']) - # append if not in list - if not output_resources.get(depends_on_resource['id']): - sub_resource = { - 'id': depends_on_resource['id'], - 'name': depends_on_resource['resource_name'], - 'type': depends_on_resource['resource_type'], - 'depends_on': [] - } - output_resources[depends_on_resource['id']] = sub_resource - resource = { - 'id': dependency['id'], - 'name': dependency['resource_name'], - 'type': dependency['resource_type'], - 'depends_on': depends_on - } - output_resources[dependency['id']] = resource - - # convert dictionary to list - output_resources_list = [] - for r in output_resources: - output_resources_list.append(output_resources[r]) - - d = { - 'id': d.get('id'), - 'resource_group': self.resource_group, - 'name': d.get('name'), - 'provisioning_state': d.get('properties', {}).get('provisioning_state'), - 'parameters': d.get('properties', {}).get('parameters'), - 'outputs': d.get('properties', {}).get('outputs'), - 'output_resources': output_resources_list, - 'template_link': d.get('properties', {}).get('template_link').get('uri') - } - return d - - -def main(): - AzureRMDeploymentFacts() - - -if __name__ == '__main__': - main() diff --git a/lib/ansible/modules/cloud/azure/azure_rm_devtestlab_facts.py b/lib/ansible/modules/cloud/azure/azure_rm_devtestlab_facts.py new file mode 100644 index 0000000000..a19f1da18e --- /dev/null +++ b/lib/ansible/modules/cloud/azure/azure_rm_devtestlab_facts.py @@ -0,0 +1,264 @@ +#!/usr/bin/python +# +# Copyright (c) 2019 Zim Kalinowski, (@zikalino) +# +# 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_devtestlab_facts +version_added: "2.8" +short_description: Get Azure DevTest Lab facts. +description: + - Get facts of Azure DevTest Lab. + +options: + resource_group: + description: + - The name of the resource group. + name: + description: + - The name of the lab. + tags: + description: + - Limit results by providing a list of tags. Format tags as 'key' or 'key:value'. + +extends_documentation_fragment: + - azure + +author: + - "Zim Kalinowski (@zikalino)" +''' + +EXAMPLES = ''' + - name: List instances of DevTest Lab by resource group + azure_rm_devtestlab_facts: + resource_group: testrg + + - name: List instances of DevTest Lab in subscription + azure_rm_devtestlab_facts: + + - name: Get instance of DevTest Lab + azure_rm_devtestlab_facts: + resource_group: testrg + name: testlab +''' + +RETURN = ''' +labs: + description: A list of dictionaries containing facts for Lab. + returned: always + type: complex + contains: + id: + description: + - The identifier of the resource. + returned: always + type: str + sample: /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/myResourceGroup/providers/microsoft.devtestlab/labs/myLab + resource_group: + description: + - The name of the resource. + returned: always + type: str + sample: testrg + name: + description: + - The name of the resource. + returned: always + type: str + sample: testlab + location: + description: + - The location of the resource. + returned: always + type: str + sample: eastus + storage_type: + description: + - Lab storage type. + returned: always + type: str + sample: standard + premium_data_disks: + description: + - Are premium data disks allowed. + returned: always + type: bool + sample: false + provisioning_state: + description: + - Lab provisioning state. + returned: always + type: str + sample: Succeeded + artifacts_storage_account: + description: + - Artifacts storage account ID. + returned: always + type: str + sample: /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.Storage/storageAccounts/myLab6346 + default_premium_storage_account: + description: + - Default premium storage account ID. + returned: always + type: str + sample: /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.Storage/storageAccounts/myLab6346 + default_storage_account: + description: + - Default storage account ID. + returned: always + type: str + sample: /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.Storage/storageAccounts/myLab6346 + premium_data_disk_storage_account: + description: + - Default storage account ID. + returned: always + type: str + sample: /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.Storage/storageAccounts/myLab6346 + vault_name: + description: + - Key vault ID. + returned: always + type: str + sample: /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.KeyVault/vaults/myLab6788 + tags: + description: + - The tags of the resource. + returned: always + type: complex + sample: "{ 'MyTag': 'MyValue' }" +''' + +from ansible.module_utils.azure_rm_common import AzureRMModuleBase + +try: + from msrestazure.azure_exceptions import CloudError + from azure.mgmt.devtestlabs import DevTestLabsClient + from msrest.serialization import Model +except ImportError: + # This is handled in azure_rm_common + pass + + +class AzureRMDevTestLabFacts(AzureRMModuleBase): + def __init__(self): + # define user inputs into argument + self.module_arg_spec = dict( + resource_group=dict( + type='str' + ), + name=dict( + type='str' + ), + tags=dict( + type='list' + ) + ) + # store the results of the module operation + self.results = dict( + changed=False + ) + self.mgmt_client = None + self.resource_group = None + self.name = None + self.tags = None + super(AzureRMDevTestLabFacts, self).__init__(self.module_arg_spec, supports_tags=False) + + def exec_module(self, **kwargs): + for key in self.module_arg_spec: + setattr(self, key, kwargs[key]) + self.mgmt_client = self.get_mgmt_svc_client(DevTestLabsClient, + base_url=self._cloud_environment.endpoints.resource_manager) + + if self.resource_group is not None: + if self.name is not None: + self.results['labs'] = self.get() + else: + self.results['labs'] = self.list_by_resource_group() + else: + self.results['labs'] = self.list_by_subscription() + return self.results + + def list_by_resource_group(self): + response = None + results = [] + try: + response = self.mgmt_client.labs.list_by_resource_group(resource_group_name=self.resource_group) + self.log("Response : {0}".format(response)) + except CloudError as e: + self.log('Could not get facts for Lab.') + + if response is not None: + for item in response: + if self.has_tags(item.tags, self.tags): + results.append(self.format_response(item)) + + return results + + def list_by_subscription(self): + response = None + results = [] + try: + response = self.mgmt_client.labs.list_by_subscription() + self.log("Response : {0}".format(response)) + except CloudError as e: + self.log('Could not get facts for Lab.') + + if response is not None: + for item in response: + if self.has_tags(item.tags, self.tags): + results.append(self.format_response(item)) + + return results + + def get(self): + response = None + results = [] + try: + response = self.mgmt_client.labs.get(resource_group_name=self.resource_group, + name=self.name) + self.log("Response : {0}".format(response)) + except CloudError as e: + self.log('Could not get facts for Lab.') + + if response and self.has_tags(response.tags, self.tags): + results.append(self.format_response(response)) + + return results + + def format_response(self, item): + d = item.as_dict() + d = { + 'id': d.get('id', None), + 'resource_group': self.resource_group, + 'name': d.get('name', None), + 'location': d.get('location', '').replace(' ', '').lower(), + 'storage_type': d.get('lab_storage_type', '').lower(), + 'premium_data_disks': d.get('premium_data_disks') == 'Enabled', + 'provisioning_state': d.get('provisioning_state'), + 'artifacts_storage_account': d.get('artifacts_storage_account'), + 'default_premium_storage_account': d.get('default_premium_storage_account'), + 'default_storage_account': d.get('default_storage_account'), + 'premium_data_disk_storage_account': d.get('premium_data_disk_storage_account'), + 'vault_name': d.get('vault_name'), + 'tags': d.get('tags', None) + } + return d + + +def main(): + AzureRMDevTestLabFacts() + + +if __name__ == '__main__': + main() diff --git a/lib/ansible/modules/cloud/azure/azure_rm_devtestlab_info.py b/lib/ansible/modules/cloud/azure/azure_rm_devtestlab_info.py deleted file mode 100644 index 8cd07ea4b1..0000000000 --- a/lib/ansible/modules/cloud/azure/azure_rm_devtestlab_info.py +++ /dev/null @@ -1,264 +0,0 @@ -#!/usr/bin/python -# -# Copyright (c) 2019 Zim Kalinowski, (@zikalino) -# -# 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_devtestlab_info -version_added: "2.8" -short_description: Get Azure DevTest Lab facts. -description: - - Get facts of Azure DevTest Lab. - -options: - resource_group: - description: - - The name of the resource group. - name: - description: - - The name of the lab. - tags: - description: - - Limit results by providing a list of tags. Format tags as 'key' or 'key:value'. - -extends_documentation_fragment: - - azure - -author: - - "Zim Kalinowski (@zikalino)" -''' - -EXAMPLES = ''' - - name: List instances of DevTest Lab by resource group - azure_rm_devtestlab_info: - resource_group: testrg - - - name: List instances of DevTest Lab in subscription - azure_rm_devtestlab_info: - - - name: Get instance of DevTest Lab - azure_rm_devtestlab_info: - resource_group: testrg - name: testlab -''' - -RETURN = ''' -labs: - description: A list of dictionaries containing facts for Lab. - returned: always - type: complex - contains: - id: - description: - - The identifier of the resource. - returned: always - type: str - sample: /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/myResourceGroup/providers/microsoft.devtestlab/labs/myLab - resource_group: - description: - - The name of the resource. - returned: always - type: str - sample: testrg - name: - description: - - The name of the resource. - returned: always - type: str - sample: testlab - location: - description: - - The location of the resource. - returned: always - type: str - sample: eastus - storage_type: - description: - - Lab storage type. - returned: always - type: str - sample: standard - premium_data_disks: - description: - - Are premium data disks allowed. - returned: always - type: bool - sample: false - provisioning_state: - description: - - Lab provisioning state. - returned: always - type: str - sample: Succeeded - artifacts_storage_account: - description: - - Artifacts storage account ID. - returned: always - type: str - sample: /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.Storage/storageAccounts/myLab6346 - default_premium_storage_account: - description: - - Default premium storage account ID. - returned: always - type: str - sample: /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.Storage/storageAccounts/myLab6346 - default_storage_account: - description: - - Default storage account ID. - returned: always - type: str - sample: /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.Storage/storageAccounts/myLab6346 - premium_data_disk_storage_account: - description: - - Default storage account ID. - returned: always - type: str - sample: /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.Storage/storageAccounts/myLab6346 - vault_name: - description: - - Key vault ID. - returned: always - type: str - sample: /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.KeyVault/vaults/myLab6788 - tags: - description: - - The tags of the resource. - returned: always - type: complex - sample: "{ 'MyTag': 'MyValue' }" -''' - -from ansible.module_utils.azure_rm_common import AzureRMModuleBase - -try: - from msrestazure.azure_exceptions import CloudError - from azure.mgmt.devtestlabs import DevTestLabsClient - from msrest.serialization import Model -except ImportError: - # This is handled in azure_rm_common - pass - - -class AzureRMDevTestLabFacts(AzureRMModuleBase): - def __init__(self): - # define user inputs into argument - self.module_arg_spec = dict( - resource_group=dict( - type='str' - ), - name=dict( - type='str' - ), - tags=dict( - type='list' - ) - ) - # store the results of the module operation - self.results = dict( - changed=False - ) - self.mgmt_client = None - self.resource_group = None - self.name = None - self.tags = None - super(AzureRMDevTestLabFacts, self).__init__(self.module_arg_spec, supports_tags=False) - - def exec_module(self, **kwargs): - for key in self.module_arg_spec: - setattr(self, key, kwargs[key]) - self.mgmt_client = self.get_mgmt_svc_client(DevTestLabsClient, - base_url=self._cloud_environment.endpoints.resource_manager) - - if self.resource_group is not None: - if self.name is not None: - self.results['labs'] = self.get() - else: - self.results['labs'] = self.list_by_resource_group() - else: - self.results['labs'] = self.list_by_subscription() - return self.results - - def list_by_resource_group(self): - response = None - results = [] - try: - response = self.mgmt_client.labs.list_by_resource_group(resource_group_name=self.resource_group) - self.log("Response : {0}".format(response)) - except CloudError as e: - self.log('Could not get facts for Lab.') - - if response is not None: - for item in response: - if self.has_tags(item.tags, self.tags): - results.append(self.format_response(item)) - - return results - - def list_by_subscription(self): - response = None - results = [] - try: - response = self.mgmt_client.labs.list_by_subscription() - self.log("Response : {0}".format(response)) - except CloudError as e: - self.log('Could not get facts for Lab.') - - if response is not None: - for item in response: - if self.has_tags(item.tags, self.tags): - results.append(self.format_response(item)) - - return results - - def get(self): - response = None - results = [] - try: - response = self.mgmt_client.labs.get(resource_group_name=self.resource_group, - name=self.name) - self.log("Response : {0}".format(response)) - except CloudError as e: - self.log('Could not get facts for Lab.') - - if response and self.has_tags(response.tags, self.tags): - results.append(self.format_response(response)) - - return results - - def format_response(self, item): - d = item.as_dict() - d = { - 'id': d.get('id', None), - 'resource_group': self.resource_group, - 'name': d.get('name', None), - 'location': d.get('location', '').replace(' ', '').lower(), - 'storage_type': d.get('lab_storage_type', '').lower(), - 'premium_data_disks': d.get('premium_data_disks') == 'Enabled', - 'provisioning_state': d.get('provisioning_state'), - 'artifacts_storage_account': d.get('artifacts_storage_account'), - 'default_premium_storage_account': d.get('default_premium_storage_account'), - 'default_storage_account': d.get('default_storage_account'), - 'premium_data_disk_storage_account': d.get('premium_data_disk_storage_account'), - 'vault_name': d.get('vault_name'), - 'tags': d.get('tags', None) - } - return d - - -def main(): - AzureRMDevTestLabFacts() - - -if __name__ == '__main__': - main() diff --git a/lib/ansible/modules/cloud/azure/azure_rm_devtestlabarmtemplate_facts.py b/lib/ansible/modules/cloud/azure/azure_rm_devtestlabarmtemplate_facts.py new file mode 100644 index 0000000000..81698ccdd3 --- /dev/null +++ b/lib/ansible/modules/cloud/azure/azure_rm_devtestlabarmtemplate_facts.py @@ -0,0 +1,217 @@ +#!/usr/bin/python +# +# Copyright (c) 2019 Zim Kalinowski, (@zikalino) +# +# 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_devtestlabarmtemplate_facts +version_added: "2.8" +short_description: Get Azure DevTest Lab ARM Template facts. +description: + - Get facts of Azure DevTest Lab ARM Template. + +options: + resource_group: + description: + - The name of the resource group. + required: True + lab_name: + description: + - The name of the lab. + required: True + artifact_source_name: + description: + - The name of the artifact source. + required: True + name: + description: + - The name of the ARM template. + +extends_documentation_fragment: + - azure + +author: + - "Zim Kalinowski (@zikalino)" + +''' + +EXAMPLES = ''' + - name: Get information on DevTest Lab ARM Template + azure_rm_devtestlabarmtemplate_facts: + resource_group: myResourceGroup + lab_name: myLab + artifact_source_name: public environment repo + name: WebApp +''' + +RETURN = ''' +arm_templates: + description: A list of dictionaries containing facts for DevTest Lab ARM Template. + returned: always + type: complex + contains: + id: + description: + - The identifier of the resource. + returned: always + type: str + sample: "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.DevTestLab/labs/myLab/art + ifactSources/public environment repo/armTemplates/WebApp" + resource_group: + description: + - Resource group name. + returned: always + sample: myResourceGroup + lab_name: + description: + - DevTest Lab name. + returned: always + sample: myLab + artifact_source_name: + description: + - Artifact source name. + returned: always + sample: public environment repo + name: + description: + - ARM Template name. + returned: always + sample: WebApp + display_name: + description: + - The tags of the resource. + returned: always + sample: Web App + description: + description: + - The tags of the resource. + returned: always + sample: This template creates an Azure Web App without a data store. + publisher: + description: + - The tags of the resource. + returned: always + sample: Microsoft +''' + +from ansible.module_utils.azure_rm_common import AzureRMModuleBase + +try: + from msrestazure.azure_exceptions import CloudError + from azure.mgmt.devtestlabs import DevTestLabsClient + from msrest.serialization import Model +except ImportError: + # This is handled in azure_rm_common + pass + + +class AzureRMDtlArmTemplateFacts(AzureRMModuleBase): + def __init__(self): + # define user inputs into argument + self.module_arg_spec = dict( + resource_group=dict( + type='str', + required=True + ), + lab_name=dict( + type='str', + required=True + ), + artifact_source_name=dict( + type='str', + required=True + ), + name=dict( + type='str' + ) + ) + # store the results of the module operation + self.results = dict( + changed=False + ) + self.mgmt_client = None + self.resource_group = None + self.lab_name = None + self.artifact_source_name = None + self.name = None + super(AzureRMDtlArmTemplateFacts, self).__init__(self.module_arg_spec, supports_tags=False) + + def exec_module(self, **kwargs): + for key in self.module_arg_spec: + setattr(self, key, kwargs[key]) + self.mgmt_client = self.get_mgmt_svc_client(DevTestLabsClient, + base_url=self._cloud_environment.endpoints.resource_manager) + + if self.name: + self.results['armtemplates'] = self.get() + else: + self.results['armtemplates'] = self.list() + + return self.results + + def list(self): + response = None + results = [] + try: + response = self.mgmt_client.arm_templates.list(resource_group_name=self.resource_group, + lab_name=self.lab_name, + artifact_source_name=self.artifact_source_name) + self.log("Response : {0}".format(response)) + except CloudError as e: + self.fail('Could not get facts for DTL ARM Template.') + + if response is not None: + for item in response: + results.append(self.format_response(item)) + + return results + + def get(self): + response = None + results = [] + try: + response = self.mgmt_client.arm_templates.get(resource_group_name=self.resource_group, + lab_name=self.lab_name, + artifact_source_name=self.artifact_source_name, + name=self.name) + self.log("Response : {0}".format(response)) + except CloudError as e: + self.fail('Could not get facts for DTL ARM Template.') + + if response: + results.append(self.format_response(response)) + + return results + + def format_response(self, item): + d = item.as_dict() + d = { + 'resource_group': self.parse_resource_to_dict(d.get('id')).get('resource_group'), + 'lab_name': self.parse_resource_to_dict(d.get('id')).get('name'), + 'artifact_source_name': self.parse_resource_to_dict(d.get('id')).get('child_name_1'), + 'id': d.get('id', None), + 'name': d.get('name'), + 'display_name': d.get('display_name'), + 'description': d.get('description'), + 'publisher': d.get('publisher') + } + return d + + +def main(): + AzureRMDtlArmTemplateFacts() + + +if __name__ == '__main__': + main() diff --git a/lib/ansible/modules/cloud/azure/azure_rm_devtestlabarmtemplate_info.py b/lib/ansible/modules/cloud/azure/azure_rm_devtestlabarmtemplate_info.py deleted file mode 100644 index e98ea5da8d..0000000000 --- a/lib/ansible/modules/cloud/azure/azure_rm_devtestlabarmtemplate_info.py +++ /dev/null @@ -1,217 +0,0 @@ -#!/usr/bin/python -# -# Copyright (c) 2019 Zim Kalinowski, (@zikalino) -# -# 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_devtestlabarmtemplate_info -version_added: "2.8" -short_description: Get Azure DevTest Lab ARM Template facts. -description: - - Get facts of Azure DevTest Lab ARM Template. - -options: - resource_group: - description: - - The name of the resource group. - required: True - lab_name: - description: - - The name of the lab. - required: True - artifact_source_name: - description: - - The name of the artifact source. - required: True - name: - description: - - The name of the ARM template. - -extends_documentation_fragment: - - azure - -author: - - "Zim Kalinowski (@zikalino)" - -''' - -EXAMPLES = ''' - - name: Get information on DevTest Lab ARM Template - azure_rm_devtestlabarmtemplate_info: - resource_group: myResourceGroup - lab_name: myLab - artifact_source_name: public environment repo - name: WebApp -''' - -RETURN = ''' -arm_templates: - description: A list of dictionaries containing facts for DevTest Lab ARM Template. - returned: always - type: complex - contains: - id: - description: - - The identifier of the resource. - returned: always - type: str - sample: "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.DevTestLab/labs/myLab/art - ifactSources/public environment repo/armTemplates/WebApp" - resource_group: - description: - - Resource group name. - returned: always - sample: myResourceGroup - lab_name: - description: - - DevTest Lab name. - returned: always - sample: myLab - artifact_source_name: - description: - - Artifact source name. - returned: always - sample: public environment repo - name: - description: - - ARM Template name. - returned: always - sample: WebApp - display_name: - description: - - The tags of the resource. - returned: always - sample: Web App - description: - description: - - The tags of the resource. - returned: always - sample: This template creates an Azure Web App without a data store. - publisher: - description: - - The tags of the resource. - returned: always - sample: Microsoft -''' - -from ansible.module_utils.azure_rm_common import AzureRMModuleBase - -try: - from msrestazure.azure_exceptions import CloudError - from azure.mgmt.devtestlabs import DevTestLabsClient - from msrest.serialization import Model -except ImportError: - # This is handled in azure_rm_common - pass - - -class AzureRMDtlArmTemplateFacts(AzureRMModuleBase): - def __init__(self): - # define user inputs into argument - self.module_arg_spec = dict( - resource_group=dict( - type='str', - required=True - ), - lab_name=dict( - type='str', - required=True - ), - artifact_source_name=dict( - type='str', - required=True - ), - name=dict( - type='str' - ) - ) - # store the results of the module operation - self.results = dict( - changed=False - ) - self.mgmt_client = None - self.resource_group = None - self.lab_name = None - self.artifact_source_name = None - self.name = None - super(AzureRMDtlArmTemplateFacts, self).__init__(self.module_arg_spec, supports_tags=False) - - def exec_module(self, **kwargs): - for key in self.module_arg_spec: - setattr(self, key, kwargs[key]) - self.mgmt_client = self.get_mgmt_svc_client(DevTestLabsClient, - base_url=self._cloud_environment.endpoints.resource_manager) - - if self.name: - self.results['armtemplates'] = self.get() - else: - self.results['armtemplates'] = self.list() - - return self.results - - def list(self): - response = None - results = [] - try: - response = self.mgmt_client.arm_templates.list(resource_group_name=self.resource_group, - lab_name=self.lab_name, - artifact_source_name=self.artifact_source_name) - self.log("Response : {0}".format(response)) - except CloudError as e: - self.fail('Could not get facts for DTL ARM Template.') - - if response is not None: - for item in response: - results.append(self.format_response(item)) - - return results - - def get(self): - response = None - results = [] - try: - response = self.mgmt_client.arm_templates.get(resource_group_name=self.resource_group, - lab_name=self.lab_name, - artifact_source_name=self.artifact_source_name, - name=self.name) - self.log("Response : {0}".format(response)) - except CloudError as e: - self.fail('Could not get facts for DTL ARM Template.') - - if response: - results.append(self.format_response(response)) - - return results - - def format_response(self, item): - d = item.as_dict() - d = { - 'resource_group': self.parse_resource_to_dict(d.get('id')).get('resource_group'), - 'lab_name': self.parse_resource_to_dict(d.get('id')).get('name'), - 'artifact_source_name': self.parse_resource_to_dict(d.get('id')).get('child_name_1'), - 'id': d.get('id', None), - 'name': d.get('name'), - 'display_name': d.get('display_name'), - 'description': d.get('description'), - 'publisher': d.get('publisher') - } - return d - - -def main(): - AzureRMDtlArmTemplateFacts() - - -if __name__ == '__main__': - main() diff --git a/lib/ansible/modules/cloud/azure/azure_rm_devtestlabartifact_facts.py b/lib/ansible/modules/cloud/azure/azure_rm_devtestlabartifact_facts.py new file mode 100644 index 0000000000..f28dcbaea4 --- /dev/null +++ b/lib/ansible/modules/cloud/azure/azure_rm_devtestlabartifact_facts.py @@ -0,0 +1,245 @@ +#!/usr/bin/python +# +# Copyright (c) 2019 Zim Kalinowski, (@zikalino) +# +# 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_devtestlabartifact_facts +version_added: "2.8" +short_description: Get Azure DevTest Lab Artifact facts. +description: + - Get facts of Azure DevTest Lab Artifact. + +options: + resource_group: + description: + - The name of the resource group. + required: True + lab_name: + description: + - The name of the lab. + required: True + artifact_source_name: + description: + - The name of the artifact source. + required: True + name: + description: + - The name of the artifact. + +extends_documentation_fragment: + - azure + +author: + - "Zim Kalinowski (@zikalino)" + +''' + +EXAMPLES = ''' + - name: Get instance of DevTest Lab Artifact + azure_rm_devtestlabartifact_facts: + resource_group: myResourceGroup + lab_name: myLab + artifact_source_name: myArtifactSource + name: myArtifact +''' + +RETURN = ''' +artifacts: + description: A list of dictionaries containing facts for DevTest Lab Artifact. + returned: always + type: complex + contains: + id: + description: + - The identifier of the artifact. + returned: always + type: str + sample: "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.DevTestLab/labs/myLab/ar + tifactSources/myArtifactSource/artifacts/myArtifact" + resource_group: + description: + - Name of the resource group. + returned: always + type: str + sample: myResourceGroup + lab_name: + description: + - Name of the lab. + returned: always + type: str + sample: myLab + artifact_source_name: + description: + - The name of the artifact source. + returned: always + type: str + sample: myArtifactSource + name: + description: + - The name of the artifact. + returned: always + type: str + sample: myArtifact + description: + description: + - Description of the artifact. + returned: always + type: str + sample: Installs My Software + file_path: + description: + - "Artifact's path in the repo." + returned: always + type: str + sample: Artifacts/myArtifact + publisher: + description: + - Publisher name. + returned: always + type: str + sample: MyPublisher + target_os_type: + description: + - Target OS type. + returned: always + type: str + sample: Linux + title: + description: + - Title of the artifact. + returned: always + type: str + sample: My Software + parameters: + description: + - A dictionary containing parameters definition of the artifact. + returned: always + type: complex + sample: {} +''' + +from ansible.module_utils.azure_rm_common import AzureRMModuleBase + +try: + from msrestazure.azure_exceptions import CloudError + from azure.mgmt.devtestlabs import DevTestLabsClient + from msrest.serialization import Model +except ImportError: + # This is handled in azure_rm_common + pass + + +class AzureRMArtifactFacts(AzureRMModuleBase): + def __init__(self): + # define user inputs into argument + self.module_arg_spec = dict( + resource_group=dict( + type='str', + required=True + ), + lab_name=dict( + type='str', + required=True + ), + artifact_source_name=dict( + type='str', + required=True + ), + name=dict( + type='str' + ) + ) + # store the results of the module operation + self.results = dict( + changed=False + ) + self.mgmt_client = None + self.resource_group = None + self.lab_name = None + self.artifact_source_name = None + self.name = None + super(AzureRMArtifactFacts, self).__init__(self.module_arg_spec, supports_tags=False) + + def exec_module(self, **kwargs): + for key in self.module_arg_spec: + setattr(self, key, kwargs[key]) + self.mgmt_client = self.get_mgmt_svc_client(DevTestLabsClient, + base_url=self._cloud_environment.endpoints.resource_manager) + + if self.name: + self.results['artifacts'] = self.get() + else: + self.results['artifacts'] = self.list() + + return self.results + + def get(self): + response = None + results = [] + try: + response = self.mgmt_client.artifacts.get(resource_group_name=self.resource_group, + lab_name=self.lab_name, + artifact_source_name=self.artifact_source_name, + name=self.name) + self.log("Response : {0}".format(response)) + except CloudError as e: + self.log('Could not get facts for Artifact.') + + if response: + results.append(self.format_response(response)) + + return results + + def list(self): + response = None + results = [] + try: + response = self.mgmt_client.artifacts.list(resource_group_name=self.resource_group, + lab_name=self.lab_name, + artifact_source_name=self.artifact_source_name) + self.log("Response : {0}".format(response)) + except CloudError as e: + self.log('Could not get facts for Artifact.') + + if response is not None: + for item in response: + results.append(self.format_response(item)) + + return results + + def format_response(self, item): + d = item.as_dict() + d = { + 'resource_group': self.parse_resource_to_dict(d.get('id')).get('resource_group'), + 'lab_name': self.parse_resource_to_dict(d.get('id')).get('name'), + 'artifact_source_name': self.parse_resource_to_dict(d.get('id')).get('child_name_1'), + 'id': d.get('id'), + 'description': d.get('description'), + 'file_path': d.get('file_path'), + 'name': d.get('name'), + 'parameters': d.get('parameters'), + 'publisher': d.get('publisher'), + 'target_os_type': d.get('target_os_type'), + 'title': d.get('title') + } + return d + + +def main(): + AzureRMArtifactFacts() + + +if __name__ == '__main__': + main() diff --git a/lib/ansible/modules/cloud/azure/azure_rm_devtestlabartifact_info.py b/lib/ansible/modules/cloud/azure/azure_rm_devtestlabartifact_info.py deleted file mode 100644 index 64c54a93e2..0000000000 --- a/lib/ansible/modules/cloud/azure/azure_rm_devtestlabartifact_info.py +++ /dev/null @@ -1,245 +0,0 @@ -#!/usr/bin/python -# -# Copyright (c) 2019 Zim Kalinowski, (@zikalino) -# -# 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_devtestlabartifact_info -version_added: "2.8" -short_description: Get Azure DevTest Lab Artifact facts. -description: - - Get facts of Azure DevTest Lab Artifact. - -options: - resource_group: - description: - - The name of the resource group. - required: True - lab_name: - description: - - The name of the lab. - required: True - artifact_source_name: - description: - - The name of the artifact source. - required: True - name: - description: - - The name of the artifact. - -extends_documentation_fragment: - - azure - -author: - - "Zim Kalinowski (@zikalino)" - -''' - -EXAMPLES = ''' - - name: Get instance of DevTest Lab Artifact - azure_rm_devtestlabartifact_info: - resource_group: myResourceGroup - lab_name: myLab - artifact_source_name: myArtifactSource - name: myArtifact -''' - -RETURN = ''' -artifacts: - description: A list of dictionaries containing facts for DevTest Lab Artifact. - returned: always - type: complex - contains: - id: - description: - - The identifier of the artifact. - returned: always - type: str - sample: "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.DevTestLab/labs/myLab/ar - tifactSources/myArtifactSource/artifacts/myArtifact" - resource_group: - description: - - Name of the resource group. - returned: always - type: str - sample: myResourceGroup - lab_name: - description: - - Name of the lab. - returned: always - type: str - sample: myLab - artifact_source_name: - description: - - The name of the artifact source. - returned: always - type: str - sample: myArtifactSource - name: - description: - - The name of the artifact. - returned: always - type: str - sample: myArtifact - description: - description: - - Description of the artifact. - returned: always - type: str - sample: Installs My Software - file_path: - description: - - "Artifact's path in the repo." - returned: always - type: str - sample: Artifacts/myArtifact - publisher: - description: - - Publisher name. - returned: always - type: str - sample: MyPublisher - target_os_type: - description: - - Target OS type. - returned: always - type: str - sample: Linux - title: - description: - - Title of the artifact. - returned: always - type: str - sample: My Software - parameters: - description: - - A dictionary containing parameters definition of the artifact. - returned: always - type: complex - sample: {} -''' - -from ansible.module_utils.azure_rm_common import AzureRMModuleBase - -try: - from msrestazure.azure_exceptions import CloudError - from azure.mgmt.devtestlabs import DevTestLabsClient - from msrest.serialization import Model -except ImportError: - # This is handled in azure_rm_common - pass - - -class AzureRMArtifactFacts(AzureRMModuleBase): - def __init__(self): - # define user inputs into argument - self.module_arg_spec = dict( - resource_group=dict( - type='str', - required=True - ), - lab_name=dict( - type='str', - required=True - ), - artifact_source_name=dict( - type='str', - required=True - ), - name=dict( - type='str' - ) - ) - # store the results of the module operation - self.results = dict( - changed=False - ) - self.mgmt_client = None - self.resource_group = None - self.lab_name = None - self.artifact_source_name = None - self.name = None - super(AzureRMArtifactFacts, self).__init__(self.module_arg_spec, supports_tags=False) - - def exec_module(self, **kwargs): - for key in self.module_arg_spec: - setattr(self, key, kwargs[key]) - self.mgmt_client = self.get_mgmt_svc_client(DevTestLabsClient, - base_url=self._cloud_environment.endpoints.resource_manager) - - if self.name: - self.results['artifacts'] = self.get() - else: - self.results['artifacts'] = self.list() - - return self.results - - def get(self): - response = None - results = [] - try: - response = self.mgmt_client.artifacts.get(resource_group_name=self.resource_group, - lab_name=self.lab_name, - artifact_source_name=self.artifact_source_name, - name=self.name) - self.log("Response : {0}".format(response)) - except CloudError as e: - self.log('Could not get facts for Artifact.') - - if response: - results.append(self.format_response(response)) - - return results - - def list(self): - response = None - results = [] - try: - response = self.mgmt_client.artifacts.list(resource_group_name=self.resource_group, - lab_name=self.lab_name, - artifact_source_name=self.artifact_source_name) - self.log("Response : {0}".format(response)) - except CloudError as e: - self.log('Could not get facts for Artifact.') - - if response is not None: - for item in response: - results.append(self.format_response(item)) - - return results - - def format_response(self, item): - d = item.as_dict() - d = { - 'resource_group': self.parse_resource_to_dict(d.get('id')).get('resource_group'), - 'lab_name': self.parse_resource_to_dict(d.get('id')).get('name'), - 'artifact_source_name': self.parse_resource_to_dict(d.get('id')).get('child_name_1'), - 'id': d.get('id'), - 'description': d.get('description'), - 'file_path': d.get('file_path'), - 'name': d.get('name'), - 'parameters': d.get('parameters'), - 'publisher': d.get('publisher'), - 'target_os_type': d.get('target_os_type'), - 'title': d.get('title') - } - return d - - -def main(): - AzureRMArtifactFacts() - - -if __name__ == '__main__': - main() diff --git a/lib/ansible/modules/cloud/azure/azure_rm_devtestlabartifactsource_facts.py b/lib/ansible/modules/cloud/azure/azure_rm_devtestlabartifactsource_facts.py new file mode 100644 index 0000000000..5fad2de3f6 --- /dev/null +++ b/lib/ansible/modules/cloud/azure/azure_rm_devtestlabartifactsource_facts.py @@ -0,0 +1,248 @@ +#!/usr/bin/python +# +# Copyright (c) 2019 Zim Kalinowski, (@zikalino) +# +# 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_devtestlabartifactsource_facts +version_added: "2.8" +short_description: Get Azure DevTest Lab Artifact Source facts. +description: + - Get facts of Azure DevTest Lab Artifact Source. + +options: + resource_group: + description: + - The name of the resource group. + required: True + lab_name: + description: + - The name of DevTest Lab. + required: True + name: + description: + - The name of DevTest Lab Artifact Source. + tags: + description: + - Limit results by providing a list of tags. Format tags as 'key' or 'key:value'. + +extends_documentation_fragment: + - azure + +author: + - "Zim Kalinowski (@zikalino)" + +''' + +EXAMPLES = ''' + - name: Get instance of DevTest Lab Artifact Source + azure_rm_devtestlabartifactsource_facts: + resource_group: myResourceGroup + lab_name: myLab + name: myArtifactSource +''' + +RETURN = ''' +artifactsources: + description: A list of dictionaries containing facts for DevTest Lab Artifact Source. + returned: always + type: complex + contains: + id: + description: + - The identifier of the artifact source. + returned: always + type: str + sample: "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.DevTestLab/labs/myLab/ar + tifactSources/myArtifactSource" + resource_group: + description: + - Name of the resource group. + returned: always + type: str + sample: myResourceGroup + lab_name: + description: + - Name of the lab. + returned: always + type: str + sample: myLab + name: + description: + - The name of the artifact source. + returned: always + type: str + sample: myArtifactSource + display_name: + description: + - "The artifact source's display name." + returned: always + type: str + sample: Public Artifact Repo + source_type: + description: + - "The artifact source's type." + returned: always + type: str + sample: github + is_enabled: + description: + - Is the artifact source enabled. + returned: always + type: str + sample: True + uri: + description: + - URI of the artifact source. + returned: always + type: str + sample: https://github.com/Azure/azure-devtestlab.git + folder_path: + description: + - The folder containing artifacts. + returned: always + type: str + sample: /Artifacts + arm_template_folder_path: + description: + - The folder containing Azure Resource Manager templates. + returned: always + type: str + sample: /Environments + provisioning_state: + description: + - Provisioning state of artifact source. + returned: always + type: str + sample: Succeeded + tags: + description: + - The tags of the resource. + returned: always + type: complex + sample: "{ 'MyTag': 'MyValue' }" +''' + +from ansible.module_utils.azure_rm_common import AzureRMModuleBase + +try: + from msrestazure.azure_exceptions import CloudError + from azure.mgmt.devtestlabs import DevTestLabsClient + from msrest.serialization import Model +except ImportError: + # This is handled in azure_rm_common + pass + + +class AzureRMDtlArtifactSourceFacts(AzureRMModuleBase): + def __init__(self): + # define user inputs into argument + self.module_arg_spec = dict( + resource_group=dict( + type='str', + required=True + ), + lab_name=dict( + type='str', + required=True + ), + name=dict( + type='str' + ), + tags=dict( + type='list' + ) + ) + # store the results of the module operation + self.results = dict( + changed=False + ) + self.mgmt_client = None + self.resource_group = None + self.lab_name = None + self.name = None + self.tags = None + super(AzureRMDtlArtifactSourceFacts, self).__init__(self.module_arg_spec, supports_tags=False) + + def exec_module(self, **kwargs): + for key in self.module_arg_spec: + setattr(self, key, kwargs[key]) + self.mgmt_client = self.get_mgmt_svc_client(DevTestLabsClient, + base_url=self._cloud_environment.endpoints.resource_manager) + + if self.name: + self.results['artifactsources'] = self.get() + else: + self.results['artifactsources'] = self.list() + + return self.results + + def get(self): + response = None + results = [] + try: + response = self.mgmt_client.artifact_sources.get(resource_group_name=self.resource_group, + lab_name=self.lab_name, + name=self.name) + self.log("Response : {0}".format(response)) + except CloudError as e: + self.fail('Could not get facts for Artifact Source.') + + if response and self.has_tags(response.tags, self.tags): + results.append(self.format_response(response)) + + return results + + def list(self): + response = None + results = [] + try: + response = self.mgmt_client.artifact_sources.list(resource_group_name=self.resource_group, + lab_name=self.lab_name) + self.log("Response : {0}".format(response)) + except CloudError as e: + self.fail('Could not get facts for Artifact Source.') + + if response is not None: + for item in response: + if self.has_tags(item.tags, self.tags): + results.append(self.format_response(item)) + + return results + + def format_response(self, item): + d = item.as_dict() + d = { + 'id': d.get('id'), + 'resource_group': self.parse_resource_to_dict(d.get('id')).get('resource_group'), + 'lab_name': self.parse_resource_to_dict(d.get('id')).get('name'), + 'name': d.get('name'), + 'display_name': d.get('display_name'), + 'tags': d.get('tags'), + 'source_type': d.get('source_type').lower(), + 'is_enabled': d.get('status') == 'Enabled', + 'uri': d.get('uri'), + 'arm_template_folder_path': d.get('arm_template_folder_path'), + 'folder_path': d.get('folder_path'), + 'provisioning_state': d.get('provisioning_state') + } + return d + + +def main(): + AzureRMDtlArtifactSourceFacts() + + +if __name__ == '__main__': + main() diff --git a/lib/ansible/modules/cloud/azure/azure_rm_devtestlabartifactsource_info.py b/lib/ansible/modules/cloud/azure/azure_rm_devtestlabartifactsource_info.py deleted file mode 100644 index 0f46c948bb..0000000000 --- a/lib/ansible/modules/cloud/azure/azure_rm_devtestlabartifactsource_info.py +++ /dev/null @@ -1,248 +0,0 @@ -#!/usr/bin/python -# -# Copyright (c) 2019 Zim Kalinowski, (@zikalino) -# -# 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_devtestlabartifactsource_info -version_added: "2.8" -short_description: Get Azure DevTest Lab Artifact Source facts. -description: - - Get facts of Azure DevTest Lab Artifact Source. - -options: - resource_group: - description: - - The name of the resource group. - required: True - lab_name: - description: - - The name of DevTest Lab. - required: True - name: - description: - - The name of DevTest Lab Artifact Source. - tags: - description: - - Limit results by providing a list of tags. Format tags as 'key' or 'key:value'. - -extends_documentation_fragment: - - azure - -author: - - "Zim Kalinowski (@zikalino)" - -''' - -EXAMPLES = ''' - - name: Get instance of DevTest Lab Artifact Source - azure_rm_devtestlabartifactsource_info: - resource_group: myResourceGroup - lab_name: myLab - name: myArtifactSource -''' - -RETURN = ''' -artifactsources: - description: A list of dictionaries containing facts for DevTest Lab Artifact Source. - returned: always - type: complex - contains: - id: - description: - - The identifier of the artifact source. - returned: always - type: str - sample: "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.DevTestLab/labs/myLab/ar - tifactSources/myArtifactSource" - resource_group: - description: - - Name of the resource group. - returned: always - type: str - sample: myResourceGroup - lab_name: - description: - - Name of the lab. - returned: always - type: str - sample: myLab - name: - description: - - The name of the artifact source. - returned: always - type: str - sample: myArtifactSource - display_name: - description: - - "The artifact source's display name." - returned: always - type: str - sample: Public Artifact Repo - source_type: - description: - - "The artifact source's type." - returned: always - type: str - sample: github - is_enabled: - description: - - Is the artifact source enabled. - returned: always - type: str - sample: True - uri: - description: - - URI of the artifact source. - returned: always - type: str - sample: https://github.com/Azure/azure-devtestlab.git - folder_path: - description: - - The folder containing artifacts. - returned: always - type: str - sample: /Artifacts - arm_template_folder_path: - description: - - The folder containing Azure Resource Manager templates. - returned: always - type: str - sample: /Environments - provisioning_state: - description: - - Provisioning state of artifact source. - returned: always - type: str - sample: Succeeded - tags: - description: - - The tags of the resource. - returned: always - type: complex - sample: "{ 'MyTag': 'MyValue' }" -''' - -from ansible.module_utils.azure_rm_common import AzureRMModuleBase - -try: - from msrestazure.azure_exceptions import CloudError - from azure.mgmt.devtestlabs import DevTestLabsClient - from msrest.serialization import Model -except ImportError: - # This is handled in azure_rm_common - pass - - -class AzureRMDtlArtifactSourceFacts(AzureRMModuleBase): - def __init__(self): - # define user inputs into argument - self.module_arg_spec = dict( - resource_group=dict( - type='str', - required=True - ), - lab_name=dict( - type='str', - required=True - ), - name=dict( - type='str' - ), - tags=dict( - type='list' - ) - ) - # store the results of the module operation - self.results = dict( - changed=False - ) - self.mgmt_client = None - self.resource_group = None - self.lab_name = None - self.name = None - self.tags = None - super(AzureRMDtlArtifactSourceFacts, self).__init__(self.module_arg_spec, supports_tags=False) - - def exec_module(self, **kwargs): - for key in self.module_arg_spec: - setattr(self, key, kwargs[key]) - self.mgmt_client = self.get_mgmt_svc_client(DevTestLabsClient, - base_url=self._cloud_environment.endpoints.resource_manager) - - if self.name: - self.results['artifactsources'] = self.get() - else: - self.results['artifactsources'] = self.list() - - return self.results - - def get(self): - response = None - results = [] - try: - response = self.mgmt_client.artifact_sources.get(resource_group_name=self.resource_group, - lab_name=self.lab_name, - name=self.name) - self.log("Response : {0}".format(response)) - except CloudError as e: - self.fail('Could not get facts for Artifact Source.') - - if response and self.has_tags(response.tags, self.tags): - results.append(self.format_response(response)) - - return results - - def list(self): - response = None - results = [] - try: - response = self.mgmt_client.artifact_sources.list(resource_group_name=self.resource_group, - lab_name=self.lab_name) - self.log("Response : {0}".format(response)) - except CloudError as e: - self.fail('Could not get facts for Artifact Source.') - - if response is not None: - for item in response: - if self.has_tags(item.tags, self.tags): - results.append(self.format_response(item)) - - return results - - def format_response(self, item): - d = item.as_dict() - d = { - 'id': d.get('id'), - 'resource_group': self.parse_resource_to_dict(d.get('id')).get('resource_group'), - 'lab_name': self.parse_resource_to_dict(d.get('id')).get('name'), - 'name': d.get('name'), - 'display_name': d.get('display_name'), - 'tags': d.get('tags'), - 'source_type': d.get('source_type').lower(), - 'is_enabled': d.get('status') == 'Enabled', - 'uri': d.get('uri'), - 'arm_template_folder_path': d.get('arm_template_folder_path'), - 'folder_path': d.get('folder_path'), - 'provisioning_state': d.get('provisioning_state') - } - return d - - -def main(): - AzureRMDtlArtifactSourceFacts() - - -if __name__ == '__main__': - main() diff --git a/lib/ansible/modules/cloud/azure/azure_rm_devtestlabvirtualmachine_facts.py b/lib/ansible/modules/cloud/azure/azure_rm_devtestlabvirtualmachine_facts.py new file mode 100644 index 0000000000..450ff459f6 --- /dev/null +++ b/lib/ansible/modules/cloud/azure/azure_rm_devtestlabvirtualmachine_facts.py @@ -0,0 +1,319 @@ +#!/usr/bin/python +# +# Copyright (c) 2019 Zim Kalinowski, (@zikalino) +# +# 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_devtestlabvirtualmachine_facts +version_added: "2.8" +short_description: Get Azure DevTest Lab Virtual Machine facts. +description: + - Get facts of Azure DevTest Lab Virtual Machine. + +options: + resource_group: + description: + - The name of the resource group. + required: True + lab_name: + description: + - The name of the lab. + required: True + name: + description: + - The name of the virtual machine. + tags: + description: + - Limit results by providing a list of tags. Format tags as 'key' or 'key:value'. + +extends_documentation_fragment: + - azure + +author: + - "Zim Kalinowski (@zikalino)" + +''' + +EXAMPLES = ''' + - name: Get instance of DTL Virtual Machine + azure_rm_devtestlabvirtualmachine_facts: + resource_group: myResourceGroup + lab_name: myLab + name: myVm +''' + +RETURN = ''' +virtualmachines: + description: A list of dictionaries containing facts for DevTest Lab Virtual Machine. + returned: always + type: complex + contains: + id: + description: + - The identifier of the virtual machine. + returned: always + type: str + sample: "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/myResourceGroup/providers/microsoft.devtestlab/labs/myLab/virt + ualmachines/myVm" + resource_group: + description: + - Name of the resource group. + returned: always + type: str + sample: myResourceGroup + lab_name: + description: + - Name of the lab. + returned: always + type: str + sample: myLab + name: + description: + - Name of the virtual machine. + returned: always + type: str + sample: myVm + notes: + description: + - Notes of the virtual machine. + returned: always + type: str + sample: My VM notes + disallow_public_ip_address: + description: + - Whether public IP should be not allowed. + returned: always + type: bool + sample: false + expiration_date: + description: + - Virtual machine expiration date. + returned: always + type: str + sample: 2029-02-22T01:49:12.117974Z + image: + description: + - Gallery image reference. + returned: always + type: complex + contains: + offer: + description: + - Offer. + returned: when created from gallery image + type: str + sample: UbuntuServer + os_type: + description: + - Operating system type. + returned: when created from gallery image + type: str + sample: Linux + sku: + description: + - SKU. + returned: when created from gallery image + type: str + sample: 16.04-LTS + publisher: + description: + - Publisher. + returned: when created from gallery image + type: str + sample: Canonical + version: + description: + - Version. + returned: when created from gallery image + type: str + sample: latest + os_type: + description: + - Operating system type. + returned: always + type: str + sample: linux + vm_size: + description: + - Virtual machine size. + returned: always + type: str + sample: Standard_A2_v2 + user_name: + description: + - Admin user name. + returned: always + type: str + sample: dtl_admin + storage_type: + description: + - Storage type. + returned: always + type: str + sample: standard + compute_vm_id: + description: + - Resource id of compute virtual machine. + returned: always + type: str + sample: /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myLab-myVm-097933/providers/Microsoft.Compute/virtualMachines/myVm + compute_vm_resource_group: + description: + - Resource group where compute virtual machine is created. + returned: always + type: str + sample: myLab-myVm-097933 + compute_vm_name: + description: + - Name of compute virtual machine. + returned: always + type: str + sample: myVm + fqdn: + description: + - Fully qualified domain name. + returned: always + type: str + sample: myvm.eastus.cloudapp.azure.com + provisioning_state: + description: + - Provisioning state of the virtual network. + returned: always + type: str + sample: Succeeded + tags: + description: + - Tags + returned: always + type: complex + sample: { 'foo': 'bar' } +''' + +from ansible.module_utils.azure_rm_common import AzureRMModuleBase + +try: + from msrestazure.azure_exceptions import CloudError + from azure.mgmt.devtestlabs import DevTestLabsClient + from msrest.serialization import Model +except ImportError: + # This is handled in azure_rm_common + pass + + +class AzureRMDtlVirtualMachineFacts(AzureRMModuleBase): + def __init__(self): + # define user inputs into argument + self.module_arg_spec = dict( + resource_group=dict( + type='str', + required=True + ), + lab_name=dict( + type='str', + required=True + ), + name=dict( + type='str' + ), + tags=dict( + type='list' + ) + ) + # store the results of the module operation + self.results = dict( + changed=False + ) + self.mgmt_client = None + self.resource_group = None + self.lab_name = None + self.name = None + self.tags = None + super(AzureRMDtlVirtualMachineFacts, self).__init__(self.module_arg_spec, supports_tags=False) + + def exec_module(self, **kwargs): + for key in self.module_arg_spec: + setattr(self, key, kwargs[key]) + self.mgmt_client = self.get_mgmt_svc_client(DevTestLabsClient, + base_url=self._cloud_environment.endpoints.resource_manager) + + if self.name: + self.results['virtualmachines'] = self.get() + else: + self.results['virtualmachines'] = self.list() + + return self.results + + def get(self): + response = None + results = [] + try: + response = self.mgmt_client.virtual_machines.get(resource_group_name=self.resource_group, + lab_name=self.lab_name, + name=self.name) + self.log("Response : {0}".format(response)) + except CloudError as e: + self.fail('Could not get facts for Virtual Machine.') + + if response and self.has_tags(response.tags, self.tags): + results.append(self.format_response(response)) + + return results + + def list(self): + response = None + results = [] + try: + response = self.mgmt_client.virtual_machines.list(resource_group_name=self.resource_group, + lab_name=self.lab_name) + self.log("Response : {0}".format(response)) + except CloudError as e: + self.fail('Could not get facts for Virtual Machine.') + + if response is not None: + for item in response: + if self.has_tags(item.tags, self.tags): + results.append(self.format_response(item)) + return results + + def format_response(self, item): + d = item.as_dict() + d = { + 'id': d.get('id', None), + 'resource_group': self.parse_resource_to_dict(d.get('id')).get('resource_group'), + 'lab_name': self.parse_resource_to_dict(d.get('id')).get('name'), + 'name': d.get('name'), + 'notes': d.get('notes'), + 'disallow_public_ip_address': d.get('disallow_public_ip_address'), + 'expiration_date': d.get('expiration_date'), + 'image': d.get('gallery_image_reference'), + 'os_type': d.get('os_type').lower(), + 'vm_size': d.get('size'), + 'user_name': d.get('user_name'), + 'storage_type': d.get('storage_type').lower(), + 'compute_vm_id': d.get('compute_id'), + 'compute_vm_resource_group': self.parse_resource_to_dict(d.get('compute_id')).get('resource_group'), + 'compute_vm_name': self.parse_resource_to_dict(d.get('compute_id')).get('name'), + 'fqdn': d.get('fqdn'), + 'provisioning_state': d.get('provisioning_state'), + 'tags': d.get('tags', None) + } + return d + + +def main(): + AzureRMDtlVirtualMachineFacts() + + +if __name__ == '__main__': + main() diff --git a/lib/ansible/modules/cloud/azure/azure_rm_devtestlabvirtualmachine_info.py b/lib/ansible/modules/cloud/azure/azure_rm_devtestlabvirtualmachine_info.py deleted file mode 100644 index 21a7af2baa..0000000000 --- a/lib/ansible/modules/cloud/azure/azure_rm_devtestlabvirtualmachine_info.py +++ /dev/null @@ -1,319 +0,0 @@ -#!/usr/bin/python -# -# Copyright (c) 2019 Zim Kalinowski, (@zikalino) -# -# 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_devtestlabvirtualmachine_info -version_added: "2.8" -short_description: Get Azure DevTest Lab Virtual Machine facts. -description: - - Get facts of Azure DevTest Lab Virtual Machine. - -options: - resource_group: - description: - - The name of the resource group. - required: True - lab_name: - description: - - The name of the lab. - required: True - name: - description: - - The name of the virtual machine. - tags: - description: - - Limit results by providing a list of tags. Format tags as 'key' or 'key:value'. - -extends_documentation_fragment: - - azure - -author: - - "Zim Kalinowski (@zikalino)" - -''' - -EXAMPLES = ''' - - name: Get instance of DTL Virtual Machine - azure_rm_devtestlabvirtualmachine_info: - resource_group: myResourceGroup - lab_name: myLab - name: myVm -''' - -RETURN = ''' -virtualmachines: - description: A list of dictionaries containing facts for DevTest Lab Virtual Machine. - returned: always - type: complex - contains: - id: - description: - - The identifier of the virtual machine. - returned: always - type: str - sample: "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/myResourceGroup/providers/microsoft.devtestlab/labs/myLab/virt - ualmachines/myVm" - resource_group: - description: - - Name of the resource group. - returned: always - type: str - sample: myResourceGroup - lab_name: - description: - - Name of the lab. - returned: always - type: str - sample: myLab - name: - description: - - Name of the virtual machine. - returned: always - type: str - sample: myVm - notes: - description: - - Notes of the virtual machine. - returned: always - type: str - sample: My VM notes - disallow_public_ip_address: - description: - - Whether public IP should be not allowed. - returned: always - type: bool - sample: false - expiration_date: - description: - - Virtual machine expiration date. - returned: always - type: str - sample: 2029-02-22T01:49:12.117974Z - image: - description: - - Gallery image reference. - returned: always - type: complex - contains: - offer: - description: - - Offer. - returned: when created from gallery image - type: str - sample: UbuntuServer - os_type: - description: - - Operating system type. - returned: when created from gallery image - type: str - sample: Linux - sku: - description: - - SKU. - returned: when created from gallery image - type: str - sample: 16.04-LTS - publisher: - description: - - Publisher. - returned: when created from gallery image - type: str - sample: Canonical - version: - description: - - Version. - returned: when created from gallery image - type: str - sample: latest - os_type: - description: - - Operating system type. - returned: always - type: str - sample: linux - vm_size: - description: - - Virtual machine size. - returned: always - type: str - sample: Standard_A2_v2 - user_name: - description: - - Admin user name. - returned: always - type: str - sample: dtl_admin - storage_type: - description: - - Storage type. - returned: always - type: str - sample: standard - compute_vm_id: - description: - - Resource id of compute virtual machine. - returned: always - type: str - sample: /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myLab-myVm-097933/providers/Microsoft.Compute/virtualMachines/myVm - compute_vm_resource_group: - description: - - Resource group where compute virtual machine is created. - returned: always - type: str - sample: myLab-myVm-097933 - compute_vm_name: - description: - - Name of compute virtual machine. - returned: always - type: str - sample: myVm - fqdn: - description: - - Fully qualified domain name. - returned: always - type: str - sample: myvm.eastus.cloudapp.azure.com - provisioning_state: - description: - - Provisioning state of the virtual network. - returned: always - type: str - sample: Succeeded - tags: - description: - - Tags - returned: always - type: complex - sample: { 'foo': 'bar' } -''' - -from ansible.module_utils.azure_rm_common import AzureRMModuleBase - -try: - from msrestazure.azure_exceptions import CloudError - from azure.mgmt.devtestlabs import DevTestLabsClient - from msrest.serialization import Model -except ImportError: - # This is handled in azure_rm_common - pass - - -class AzureRMDtlVirtualMachineFacts(AzureRMModuleBase): - def __init__(self): - # define user inputs into argument - self.module_arg_spec = dict( - resource_group=dict( - type='str', - required=True - ), - lab_name=dict( - type='str', - required=True - ), - name=dict( - type='str' - ), - tags=dict( - type='list' - ) - ) - # store the results of the module operation - self.results = dict( - changed=False - ) - self.mgmt_client = None - self.resource_group = None - self.lab_name = None - self.name = None - self.tags = None - super(AzureRMDtlVirtualMachineFacts, self).__init__(self.module_arg_spec, supports_tags=False) - - def exec_module(self, **kwargs): - for key in self.module_arg_spec: - setattr(self, key, kwargs[key]) - self.mgmt_client = self.get_mgmt_svc_client(DevTestLabsClient, - base_url=self._cloud_environment.endpoints.resource_manager) - - if self.name: - self.results['virtualmachines'] = self.get() - else: - self.results['virtualmachines'] = self.list() - - return self.results - - def get(self): - response = None - results = [] - try: - response = self.mgmt_client.virtual_machines.get(resource_group_name=self.resource_group, - lab_name=self.lab_name, - name=self.name) - self.log("Response : {0}".format(response)) - except CloudError as e: - self.fail('Could not get facts for Virtual Machine.') - - if response and self.has_tags(response.tags, self.tags): - results.append(self.format_response(response)) - - return results - - def list(self): - response = None - results = [] - try: - response = self.mgmt_client.virtual_machines.list(resource_group_name=self.resource_group, - lab_name=self.lab_name) - self.log("Response : {0}".format(response)) - except CloudError as e: - self.fail('Could not get facts for Virtual Machine.') - - if response is not None: - for item in response: - if self.has_tags(item.tags, self.tags): - results.append(self.format_response(item)) - return results - - def format_response(self, item): - d = item.as_dict() - d = { - 'id': d.get('id', None), - 'resource_group': self.parse_resource_to_dict(d.get('id')).get('resource_group'), - 'lab_name': self.parse_resource_to_dict(d.get('id')).get('name'), - 'name': d.get('name'), - 'notes': d.get('notes'), - 'disallow_public_ip_address': d.get('disallow_public_ip_address'), - 'expiration_date': d.get('expiration_date'), - 'image': d.get('gallery_image_reference'), - 'os_type': d.get('os_type').lower(), - 'vm_size': d.get('size'), - 'user_name': d.get('user_name'), - 'storage_type': d.get('storage_type').lower(), - 'compute_vm_id': d.get('compute_id'), - 'compute_vm_resource_group': self.parse_resource_to_dict(d.get('compute_id')).get('resource_group'), - 'compute_vm_name': self.parse_resource_to_dict(d.get('compute_id')).get('name'), - 'fqdn': d.get('fqdn'), - 'provisioning_state': d.get('provisioning_state'), - 'tags': d.get('tags', None) - } - return d - - -def main(): - AzureRMDtlVirtualMachineFacts() - - -if __name__ == '__main__': - main() diff --git a/lib/ansible/modules/cloud/azure/azure_rm_devtestlabvirtualnetwork_facts.py b/lib/ansible/modules/cloud/azure/azure_rm_devtestlabvirtualnetwork_facts.py new file mode 100644 index 0000000000..2a630f0280 --- /dev/null +++ b/lib/ansible/modules/cloud/azure/azure_rm_devtestlabvirtualnetwork_facts.py @@ -0,0 +1,212 @@ +#!/usr/bin/python +# +# Copyright (c) 2019 Zim Kalinowski, (@zikalino) +# +# 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_devtestlabvirtualnetwork_facts +version_added: "2.8" +short_description: Get Azure DevTest Lab Virtual Network facts. +description: + - Get facts of Azure DevTest Lab Virtual Network. + +options: + resource_group: + description: + - The name of the resource group. + required: True + lab_name: + description: + - The name of DevTest Lab. + required: True + name: + description: + - The name of DevTest Lab Virtual Network. + +extends_documentation_fragment: + - azure + +author: + - "Zim Kalinowski (@zikalino)" + +''' + +EXAMPLES = ''' + - name: Get instance of DevTest Lab Virtual Network + azure_rm_devtestlabvirtualnetwork_facts: + resource_group: myResourceGroup + lab_name: myLab + name: myVirtualNetwork + + - name: List all Virtual Networks in DevTest Lab + azure_rm_devtestlabvirtualnetwork_facts: + resource_group: myResourceGroup + lab_name: myLab + name: myVirtualNetwork +''' + +RETURN = ''' +virtualnetworks: + description: A list of dictionaries containing facts for DevTest Lab Virtual Network. + returned: always + type: complex + contains: + id: + description: + - The identifier of the virtual network. + returned: always + type: str + sample: "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/myResourceGroup/providers/microsoft.devtestlab/labs/myLab/virt + ualnetworks/myVirtualNetwork" + resource_group: + description: + - Name of the resource group. + returned: always + type: str + sample: myResourceGroup + lab_name: + description: + - Name of the lab. + returned: always + type: str + sample: myLab + name: + description: + - Name of the virtual network. + returned: always + type: str + sample: myVirtualNetwork + description: + description: + - Description of the virtual network. + returned: always + type: str + sample: My Virtual Network + external_provider_resource_id: + description: + - Resource id of an external virtual network. + returned: always + type: str + sample: "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.Network/virtualNetworks/my + VirtualNetwork" + provisioning_state: + description: + - Provisioning state of the virtual network. + returned: always + type: str + sample: Succeeded +''' + +from ansible.module_utils.azure_rm_common import AzureRMModuleBase + +try: + from msrestazure.azure_exceptions import CloudError + from azure.mgmt.devtestlabs import DevTestLabsClient + from msrest.serialization import Model +except ImportError: + # This is handled in azure_rm_common + pass + + +class AzureRMDevTestLabVirtualNetworkFacts(AzureRMModuleBase): + def __init__(self): + # define user inputs into argument + self.module_arg_spec = dict( + resource_group=dict( + type='str', + required=True + ), + lab_name=dict( + type='str', + required=True + ), + name=dict( + type='str' + ) + ) + # store the results of the module operation + self.results = dict( + changed=False + ) + self.mgmt_client = None + self.resource_group = None + self.lab_name = None + self.name = None + super(AzureRMDevTestLabVirtualNetworkFacts, self).__init__(self.module_arg_spec, supports_tags=False) + + def exec_module(self, **kwargs): + for key in self.module_arg_spec: + setattr(self, key, kwargs[key]) + self.mgmt_client = self.get_mgmt_svc_client(DevTestLabsClient, + base_url=self._cloud_environment.endpoints.resource_manager) + + if self.name: + self.results['virtualnetworks'] = self.get() + else: + self.results['virtualnetworks'] = self.list() + + return self.results + + def list(self): + response = None + results = [] + try: + response = self.mgmt_client.virtual_networks.list(resource_group_name=self.resource_group, + lab_name=self.lab_name) + self.log("Response : {0}".format(response)) + except CloudError as e: + self.fail('Could not list Virtual Networks for DevTest Lab.') + + if response is not None: + for item in response: + results.append(self.format_response(item)) + + return results + + def get(self): + response = None + results = [] + try: + response = self.mgmt_client.virtual_networks.get(resource_group_name=self.resource_group, + lab_name=self.lab_name, + name=self.name) + self.log("Response : {0}".format(response)) + except CloudError as e: + self.fail('Could not get facts for Virtual Network.') + + if response: + results.append(self.format_response(response)) + + return results + + def format_response(self, item): + d = item.as_dict() + d = { + 'resource_group': self.resource_group, + 'lab_name': self.lab_name, + 'name': d.get('name', None), + 'id': d.get('id', None), + 'external_provider_resource_id': d.get('external_provider_resource_id', None), + 'provisioning_state': d.get('provisioning_state', None), + 'description': d.get('description', None) + } + return d + + +def main(): + AzureRMDevTestLabVirtualNetworkFacts() + + +if __name__ == '__main__': + main() diff --git a/lib/ansible/modules/cloud/azure/azure_rm_devtestlabvirtualnetwork_info.py b/lib/ansible/modules/cloud/azure/azure_rm_devtestlabvirtualnetwork_info.py deleted file mode 100644 index d0f03205a2..0000000000 --- a/lib/ansible/modules/cloud/azure/azure_rm_devtestlabvirtualnetwork_info.py +++ /dev/null @@ -1,212 +0,0 @@ -#!/usr/bin/python -# -# Copyright (c) 2019 Zim Kalinowski, (@zikalino) -# -# 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_devtestlabvirtualnetwork_info -version_added: "2.8" -short_description: Get Azure DevTest Lab Virtual Network facts. -description: - - Get facts of Azure DevTest Lab Virtual Network. - -options: - resource_group: - description: - - The name of the resource group. - required: True - lab_name: - description: - - The name of DevTest Lab. - required: True - name: - description: - - The name of DevTest Lab Virtual Network. - -extends_documentation_fragment: - - azure - -author: - - "Zim Kalinowski (@zikalino)" - -''' - -EXAMPLES = ''' - - name: Get instance of DevTest Lab Virtual Network - azure_rm_devtestlabvirtualnetwork_info: - resource_group: myResourceGroup - lab_name: myLab - name: myVirtualNetwork - - - name: List all Virtual Networks in DevTest Lab - azure_rm_devtestlabvirtualnetwork_info: - resource_group: myResourceGroup - lab_name: myLab - name: myVirtualNetwork -''' - -RETURN = ''' -virtualnetworks: - description: A list of dictionaries containing facts for DevTest Lab Virtual Network. - returned: always - type: complex - contains: - id: - description: - - The identifier of the virtual network. - returned: always - type: str - sample: "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/myResourceGroup/providers/microsoft.devtestlab/labs/myLab/virt - ualnetworks/myVirtualNetwork" - resource_group: - description: - - Name of the resource group. - returned: always - type: str - sample: myResourceGroup - lab_name: - description: - - Name of the lab. - returned: always - type: str - sample: myLab - name: - description: - - Name of the virtual network. - returned: always - type: str - sample: myVirtualNetwork - description: - description: - - Description of the virtual network. - returned: always - type: str - sample: My Virtual Network - external_provider_resource_id: - description: - - Resource id of an external virtual network. - returned: always - type: str - sample: "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.Network/virtualNetworks/my - VirtualNetwork" - provisioning_state: - description: - - Provisioning state of the virtual network. - returned: always - type: str - sample: Succeeded -''' - -from ansible.module_utils.azure_rm_common import AzureRMModuleBase - -try: - from msrestazure.azure_exceptions import CloudError - from azure.mgmt.devtestlabs import DevTestLabsClient - from msrest.serialization import Model -except ImportError: - # This is handled in azure_rm_common - pass - - -class AzureRMDevTestLabVirtualNetworkFacts(AzureRMModuleBase): - def __init__(self): - # define user inputs into argument - self.module_arg_spec = dict( - resource_group=dict( - type='str', - required=True - ), - lab_name=dict( - type='str', - required=True - ), - name=dict( - type='str' - ) - ) - # store the results of the module operation - self.results = dict( - changed=False - ) - self.mgmt_client = None - self.resource_group = None - self.lab_name = None - self.name = None - super(AzureRMDevTestLabVirtualNetworkFacts, self).__init__(self.module_arg_spec, supports_tags=False) - - def exec_module(self, **kwargs): - for key in self.module_arg_spec: - setattr(self, key, kwargs[key]) - self.mgmt_client = self.get_mgmt_svc_client(DevTestLabsClient, - base_url=self._cloud_environment.endpoints.resource_manager) - - if self.name: - self.results['virtualnetworks'] = self.get() - else: - self.results['virtualnetworks'] = self.list() - - return self.results - - def list(self): - response = None - results = [] - try: - response = self.mgmt_client.virtual_networks.list(resource_group_name=self.resource_group, - lab_name=self.lab_name) - self.log("Response : {0}".format(response)) - except CloudError as e: - self.fail('Could not list Virtual Networks for DevTest Lab.') - - if response is not None: - for item in response: - results.append(self.format_response(item)) - - return results - - def get(self): - response = None - results = [] - try: - response = self.mgmt_client.virtual_networks.get(resource_group_name=self.resource_group, - lab_name=self.lab_name, - name=self.name) - self.log("Response : {0}".format(response)) - except CloudError as e: - self.fail('Could not get facts for Virtual Network.') - - if response: - results.append(self.format_response(response)) - - return results - - def format_response(self, item): - d = item.as_dict() - d = { - 'resource_group': self.resource_group, - 'lab_name': self.lab_name, - 'name': d.get('name', None), - 'id': d.get('id', None), - 'external_provider_resource_id': d.get('external_provider_resource_id', None), - 'provisioning_state': d.get('provisioning_state', None), - 'description': d.get('description', None) - } - return d - - -def main(): - AzureRMDevTestLabVirtualNetworkFacts() - - -if __name__ == '__main__': - main() diff --git a/lib/ansible/modules/cloud/azure/azure_rm_image_facts.py b/lib/ansible/modules/cloud/azure/azure_rm_image_facts.py new file mode 100644 index 0000000000..9911bef932 --- /dev/null +++ b/lib/ansible/modules/cloud/azure/azure_rm_image_facts.py @@ -0,0 +1,302 @@ +#!/usr/bin/python +# +# 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_image_facts + +version_added: "2.8" + +short_description: Get facts about azure custom images. + +description: + - List azure custom images. The images can be listed where scope of listing can be based on subscription, resource group, name or tags. + +options: + resource_group: + description: + - Name of resource group. + name: + description: + - Name of the image to filter from existing images. + tags: + description: + - List of tags to be matched. + +extends_documentation_fragment: + - azure + +author: + - "Madhura Naniwadekar (@Madhura-CSI)" +''' + + +EXAMPLES = ''' +- name: List images with name + azure_rm_image_facts: + name: test-image + resource_group: myResourceGroup + +- name: List images by resource group + azure_rm_image_facts: + resource_group: myResourceGroup + tags: + - testing + - foo:bar + +- name: List all available images under current subscription + azure_rm_image_facts: +''' + + +RETURN = ''' +images: + description: List of image dicts. + returned: always + type: complex + contains: + id: + description: + - Id of the image. + returned: always + type: str + sample: /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.Compute/images/xx + name: + description: + - Name of the image. + returned: always + type: str + resource_group: + description: + - Resource group of the image. + returned: always + type: str + sample: myResourceGroup + location: + description: + - Location of the image. + returned: always + type: str + os_disk: + description: + - Id of os disk for image. + type: str + sample: /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.Compute/disks/xx + os_disk_caching: + description: + - Specifies caching requirements for the image. + returned: always + type: str + os_state: + description: + - Specifies image operating system state. Possible values are 'Generalized' or 'Specialized'. + returned: always + type: str + sample: Generalized + os_storage_account_type: + description: + - Specifies the storage account type for the managed disk. + type: str + sample: Standard_LRS + os_type: + description: + - Type of OS for image. + returned: always + type: str + sample: Linux + provisioning_state: + description: + - State of image. + returned: always + type: str + sample: Succeeded + source: + description: + - Resource id of source VM from which the image is created + type: str + sample: /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/xx + tags: + description: + - Dictionary of tags associated with the image. + type: complex + data_disks: + description: + - List of data disks associated with the image. + type: complex + returned: always + contains: + caching: + description: + - Type of caching of data disk. + sample: read_only + disk_size_gb: + description: + - Specifies the size of empty data disks in gigabytes. + returned: always + type: int + sample: 50 + lun: + description: + - Specifies the logical unit number of the data disk. + returned: always + type: int + sample: 0 + storage_account_type: + description: + - Specifies the storage account type for the managed disk data disk. + type: str + sample: Standard_LRS + managed_disk_id: + description: + - Id of managed disk. + type: str + sample: /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.Compute/disks/xx + blob_uri: + description: + - The virtual hard disk. +''' + + +try: + from msrestazure.azure_exceptions import CloudError +except Exception: + # This is handled in azure_rm_common + pass + +from ansible.module_utils.azure_rm_common import AzureRMModuleBase + + +AZURE_ENUM_MODULES = ['azure.mgmt.compute.models'] + + +class AzureRMImageFacts(AzureRMModuleBase): + + def __init__(self, **kwargs): + + self.module_arg_spec = dict( + resource_group=dict(type='str'), + name=dict(type='str'), + tags=dict(type='list') + ) + + self.results = dict( + changed=False + ) + + self.resource_group = None + self.name = None + self.format = None + self.tags = None + + super(AzureRMImageFacts, self).__init__( + derived_arg_spec=self.module_arg_spec, + supports_tags=False, + facts_module=True + ) + + def exec_module(self, **kwargs): + + for key in self.module_arg_spec: + setattr(self, key, kwargs[key]) + + if self.name and self.resource_group: + self.results['images'] = self.get_image(self.resource_group, self.name) + elif self.name and not self.resource_group: + self.results['images'] = self.list_images(self.name) + elif not self.name and self.resource_group: + self.results['images'] = self.list_images_by_resource_group(self.resource_group) + elif not self.name and not self.resource_group: + self.results['images'] = self.list_images() + return self.results + + def get_image(self, resource_group, image_name): + ''' + Returns image details based on its name + ''' + + self.log('Get properties for {0}'.format(self.name)) + + result = [] + item = None + try: + item = self.compute_client.images.get(resource_group, image_name) + except CloudError as exc: + self.fail('Failed to list images - {0}'.format(str(exc))) + + result = [self.format_item(item)] + return result + + def list_images_by_resource_group(self, resource_group): + ''' + Returns image details based on its resource group + ''' + + self.log('List images filtered by resource group') + response = None + try: + response = self.compute_client.images.list_by_resource_group(resource_group) + except CloudError as exc: + self.fail("Failed to list images: {0}".format(str(exc))) + + return [self.format_item(x) for x in response if self.has_tags(x.tags, self.tags)] if response else [] + + def list_images(self, image_name=None): + ''' + Returns image details in current subscription + ''' + + self.log('List images within current subscription') + response = None + results = [] + try: + response = self.compute_client.images.list() + except CloudError as exc: + self.fail("Failed to list all images: {0}".format(str(exc))) + + results = [self.format_item(x) for x in response if self.has_tags(x.tags, self.tags)] if response else [] + if image_name: + results = [result for result in results if result['name'] == image_name] + return results + + def format_item(self, item): + d = item.as_dict() + + for data_disk in d['storage_profile']['data_disks']: + if 'managed_disk' in data_disk.keys(): + data_disk['managed_disk_id'] = data_disk['managed_disk']['id'] + data_disk.pop('managed_disk', None) + + d = { + 'id': d['id'], + 'resource_group': d['id'].split('/')[4], + 'name': d['name'], + 'location': d['location'], + 'tags': d.get('tags'), + 'source': d['source_virtual_machine']['id'] if 'source_virtual_machine' in d.keys() else None, + 'os_type': d['storage_profile']['os_disk']['os_type'], + 'os_state': d['storage_profile']['os_disk']['os_state'], + 'os_disk_caching': d['storage_profile']['os_disk']['caching'], + 'os_storage_account_type': d['storage_profile']['os_disk']['storage_account_type'], + 'os_disk': d['storage_profile']['os_disk']['managed_disk']['id'] if 'managed_disk' in d['storage_profile']['os_disk'].keys() else None, + 'os_blob_uri': d['storage_profile']['os_disk']['blob_uri'] if 'blob_uri' in d['storage_profile']['os_disk'].keys() else None, + 'provisioning_state': d['provisioning_state'], + 'data_disks': d['storage_profile']['data_disks'] + } + return d + + +def main(): + AzureRMImageFacts() + + +if __name__ == '__main__': + main() diff --git a/lib/ansible/modules/cloud/azure/azure_rm_image_info.py b/lib/ansible/modules/cloud/azure/azure_rm_image_info.py deleted file mode 100644 index 10faa6b2e8..0000000000 --- a/lib/ansible/modules/cloud/azure/azure_rm_image_info.py +++ /dev/null @@ -1,302 +0,0 @@ -#!/usr/bin/python -# -# 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_image_info - -version_added: "2.8" - -short_description: Get facts about azure custom images. - -description: - - List azure custom images. The images can be listed where scope of listing can be based on subscription, resource group, name or tags. - -options: - resource_group: - description: - - Name of resource group. - name: - description: - - Name of the image to filter from existing images. - tags: - description: - - List of tags to be matched. - -extends_documentation_fragment: - - azure - -author: - - "Madhura Naniwadekar (@Madhura-CSI)" -''' - - -EXAMPLES = ''' -- name: List images with name - azure_rm_image_info: - name: test-image - resource_group: myResourceGroup - -- name: List images by resource group - azure_rm_image_info: - resource_group: myResourceGroup - tags: - - testing - - foo:bar - -- name: List all available images under current subscription - azure_rm_image_info: -''' - - -RETURN = ''' -images: - description: List of image dicts. - returned: always - type: complex - contains: - id: - description: - - Id of the image. - returned: always - type: str - sample: /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.Compute/images/xx - name: - description: - - Name of the image. - returned: always - type: str - resource_group: - description: - - Resource group of the image. - returned: always - type: str - sample: myResourceGroup - location: - description: - - Location of the image. - returned: always - type: str - os_disk: - description: - - Id of os disk for image. - type: str - sample: /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.Compute/disks/xx - os_disk_caching: - description: - - Specifies caching requirements for the image. - returned: always - type: str - os_state: - description: - - Specifies image operating system state. Possible values are 'Generalized' or 'Specialized'. - returned: always - type: str - sample: Generalized - os_storage_account_type: - description: - - Specifies the storage account type for the managed disk. - type: str - sample: Standard_LRS - os_type: - description: - - Type of OS for image. - returned: always - type: str - sample: Linux - provisioning_state: - description: - - State of image. - returned: always - type: str - sample: Succeeded - source: - description: - - Resource id of source VM from which the image is created - type: str - sample: /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/xx - tags: - description: - - Dictionary of tags associated with the image. - type: complex - data_disks: - description: - - List of data disks associated with the image. - type: complex - returned: always - contains: - caching: - description: - - Type of caching of data disk. - sample: read_only - disk_size_gb: - description: - - Specifies the size of empty data disks in gigabytes. - returned: always - type: int - sample: 50 - lun: - description: - - Specifies the logical unit number of the data disk. - returned: always - type: int - sample: 0 - storage_account_type: - description: - - Specifies the storage account type for the managed disk data disk. - type: str - sample: Standard_LRS - managed_disk_id: - description: - - Id of managed disk. - type: str - sample: /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.Compute/disks/xx - blob_uri: - description: - - The virtual hard disk. -''' - - -try: - from msrestazure.azure_exceptions import CloudError -except Exception: - # This is handled in azure_rm_common - pass - -from ansible.module_utils.azure_rm_common import AzureRMModuleBase - - -AZURE_ENUM_MODULES = ['azure.mgmt.compute.models'] - - -class AzureRMImageFacts(AzureRMModuleBase): - - def __init__(self, **kwargs): - - self.module_arg_spec = dict( - resource_group=dict(type='str'), - name=dict(type='str'), - tags=dict(type='list') - ) - - self.results = dict( - changed=False - ) - - self.resource_group = None - self.name = None - self.format = None - self.tags = None - - super(AzureRMImageFacts, self).__init__( - derived_arg_spec=self.module_arg_spec, - supports_tags=False, - facts_module=True - ) - - def exec_module(self, **kwargs): - - for key in self.module_arg_spec: - setattr(self, key, kwargs[key]) - - if self.name and self.resource_group: - self.results['images'] = self.get_image(self.resource_group, self.name) - elif self.name and not self.resource_group: - self.results['images'] = self.list_images(self.name) - elif not self.name and self.resource_group: - self.results['images'] = self.list_images_by_resource_group(self.resource_group) - elif not self.name and not self.resource_group: - self.results['images'] = self.list_images() - return self.results - - def get_image(self, resource_group, image_name): - ''' - Returns image details based on its name - ''' - - self.log('Get properties for {0}'.format(self.name)) - - result = [] - item = None - try: - item = self.compute_client.images.get(resource_group, image_name) - except CloudError as exc: - self.fail('Failed to list images - {0}'.format(str(exc))) - - result = [self.format_item(item)] - return result - - def list_images_by_resource_group(self, resource_group): - ''' - Returns image details based on its resource group - ''' - - self.log('List images filtered by resource group') - response = None - try: - response = self.compute_client.images.list_by_resource_group(resource_group) - except CloudError as exc: - self.fail("Failed to list images: {0}".format(str(exc))) - - return [self.format_item(x) for x in response if self.has_tags(x.tags, self.tags)] if response else [] - - def list_images(self, image_name=None): - ''' - Returns image details in current subscription - ''' - - self.log('List images within current subscription') - response = None - results = [] - try: - response = self.compute_client.images.list() - except CloudError as exc: - self.fail("Failed to list all images: {0}".format(str(exc))) - - results = [self.format_item(x) for x in response if self.has_tags(x.tags, self.tags)] if response else [] - if image_name: - results = [result for result in results if result['name'] == image_name] - return results - - def format_item(self, item): - d = item.as_dict() - - for data_disk in d['storage_profile']['data_disks']: - if 'managed_disk' in data_disk.keys(): - data_disk['managed_disk_id'] = data_disk['managed_disk']['id'] - data_disk.pop('managed_disk', None) - - d = { - 'id': d['id'], - 'resource_group': d['id'].split('/')[4], - 'name': d['name'], - 'location': d['location'], - 'tags': d.get('tags'), - 'source': d['source_virtual_machine']['id'] if 'source_virtual_machine' in d.keys() else None, - 'os_type': d['storage_profile']['os_disk']['os_type'], - 'os_state': d['storage_profile']['os_disk']['os_state'], - 'os_disk_caching': d['storage_profile']['os_disk']['caching'], - 'os_storage_account_type': d['storage_profile']['os_disk']['storage_account_type'], - 'os_disk': d['storage_profile']['os_disk']['managed_disk']['id'] if 'managed_disk' in d['storage_profile']['os_disk'].keys() else None, - 'os_blob_uri': d['storage_profile']['os_disk']['blob_uri'] if 'blob_uri' in d['storage_profile']['os_disk'].keys() else None, - 'provisioning_state': d['provisioning_state'], - 'data_disks': d['storage_profile']['data_disks'] - } - return d - - -def main(): - AzureRMImageFacts() - - -if __name__ == '__main__': - main() diff --git a/lib/ansible/modules/cloud/azure/azure_rm_mariadbconfiguration_facts.py b/lib/ansible/modules/cloud/azure/azure_rm_mariadbconfiguration_facts.py new file mode 100644 index 0000000000..fd49a964c0 --- /dev/null +++ b/lib/ansible/modules/cloud/azure/azure_rm_mariadbconfiguration_facts.py @@ -0,0 +1,208 @@ +#!/usr/bin/python +# +# Copyright (c) 2019 Zim Kalinowski, (@zikalino) +# Copyright (c) 2019 Matti Ranta, (@techknowlogick) +# +# 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_mariadbconfiguration_facts +version_added: "2.8" +short_description: Get Azure MariaDB Configuration facts. +description: + - Get facts of Azure MariaDB Configuration. + +options: + resource_group: + description: + - The name of the resource group that contains the resource. You can obtain this value from the Azure Resource Manager API or the portal. + required: True + server_name: + description: + - The name of the server. + required: True + name: + description: + - Setting name. + +extends_documentation_fragment: + - azure + +author: + - "Zim Kalinowski (@zikalino)" + - "Matti Ranta (@techknowlogick)" + +''' + +EXAMPLES = ''' + - name: Get specific setting of MariaDB Server + azure_rm_mariadbconfiguration_facts: + resource_group: myResourceGroup + server_name: testserver + name: deadlock_timeout + + - name: Get all settings of MariaDB Server + azure_rm_mariadbconfiguration_facts: + resource_group: myResourceGroup + server_name: server_name +''' + +RETURN = ''' +settings: + description: A list of dictionaries containing MariaDB Server settings. + returned: always + type: complex + contains: + id: + description: + - Setting resource ID + returned: always + type: str + sample: "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.DBforMariaDB/servers/testserver + /configurations/deadlock_timeout" + name: + description: + - Setting name. + returned: always + type: str + sample: deadlock_timeout + value: + description: + - Setting value. + returned: always + type: raw + sample: 1000 + description: + description: + - Description of the configuration. + returned: always + type: str + sample: Deadlock timeout. + source: + description: + - Source of the configuration. + returned: always + type: str + sample: system-default +''' + +from ansible.module_utils.azure_rm_common import AzureRMModuleBase + +try: + from msrestazure.azure_exceptions import CloudError + from msrestazure.azure_operation import AzureOperationPoller + from azure.mgmt.rdbms.mariadb import MariaDBManagementClient + from msrest.serialization import Model +except ImportError: + # This is handled in azure_rm_common + pass + + +class AzureRMMariaDbConfigurationFacts(AzureRMModuleBase): + def __init__(self): + # define user inputs into argument + self.module_arg_spec = dict( + resource_group=dict( + type='str', + required=True + ), + server_name=dict( + type='str', + required=True + ), + name=dict( + type='str' + ) + ) + # store the results of the module operation + self.results = dict(changed=False) + self.mgmt_client = None + self.resource_group = None + self.server_name = None + self.name = None + super(AzureRMMariaDbConfigurationFacts, self).__init__(self.module_arg_spec, supports_tags=False) + + def exec_module(self, **kwargs): + for key in self.module_arg_spec: + setattr(self, key, kwargs[key]) + self.mgmt_client = self.get_mgmt_svc_client(MariaDBManagementClient, + base_url=self._cloud_environment.endpoints.resource_manager) + + if self.name is not None: + self.results['settings'] = self.get() + else: + self.results['settings'] = self.list_by_server() + return self.results + + def get(self): + ''' + Gets facts of the specified MariaDB Configuration. + + :return: deserialized MariaDB Configurationinstance state dictionary + ''' + response = None + results = [] + try: + response = self.mgmt_client.configurations.get(resource_group_name=self.resource_group, + server_name=self.server_name, + configuration_name=self.name) + self.log("Response : {0}".format(response)) + except CloudError as e: + self.log('Could not get facts for Configurations.') + + if response is not None: + results.append(self.format_item(response)) + + return results + + def list_by_server(self): + ''' + Gets facts of the specified MariaDB Configuration. + + :return: deserialized MariaDB Configurationinstance state dictionary + ''' + response = None + results = [] + try: + response = self.mgmt_client.configurations.list_by_server(resource_group_name=self.resource_group, + server_name=self.server_name) + self.log("Response : {0}".format(response)) + except CloudError as e: + self.log('Could not get facts for Configurations.') + + if response is not None: + for item in response: + results.append(self.format_item(item)) + + return results + + def format_item(self, item): + d = item.as_dict() + d = { + 'resource_group': self.resource_group, + 'server_name': self.server_name, + 'id': d['id'], + 'name': d['name'], + 'value': d['value'], + 'description': d['description'], + 'source': d['source'] + } + return d + + +def main(): + AzureRMMariaDbConfigurationFacts() + + +if __name__ == '__main__': + main() diff --git a/lib/ansible/modules/cloud/azure/azure_rm_mariadbconfiguration_info.py b/lib/ansible/modules/cloud/azure/azure_rm_mariadbconfiguration_info.py deleted file mode 100644 index 9bb657325e..0000000000 --- a/lib/ansible/modules/cloud/azure/azure_rm_mariadbconfiguration_info.py +++ /dev/null @@ -1,208 +0,0 @@ -#!/usr/bin/python -# -# Copyright (c) 2019 Zim Kalinowski, (@zikalino) -# Copyright (c) 2019 Matti Ranta, (@techknowlogick) -# -# 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_mariadbconfiguration_info -version_added: "2.8" -short_description: Get Azure MariaDB Configuration facts. -description: - - Get facts of Azure MariaDB Configuration. - -options: - resource_group: - description: - - The name of the resource group that contains the resource. You can obtain this value from the Azure Resource Manager API or the portal. - required: True - server_name: - description: - - The name of the server. - required: True - name: - description: - - Setting name. - -extends_documentation_fragment: - - azure - -author: - - "Zim Kalinowski (@zikalino)" - - "Matti Ranta (@techknowlogick)" - -''' - -EXAMPLES = ''' - - name: Get specific setting of MariaDB Server - azure_rm_mariadbconfiguration_info: - resource_group: myResourceGroup - server_name: testserver - name: deadlock_timeout - - - name: Get all settings of MariaDB Server - azure_rm_mariadbconfiguration_info: - resource_group: myResourceGroup - server_name: server_name -''' - -RETURN = ''' -settings: - description: A list of dictionaries containing MariaDB Server settings. - returned: always - type: complex - contains: - id: - description: - - Setting resource ID - returned: always - type: str - sample: "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.DBforMariaDB/servers/testserver - /configurations/deadlock_timeout" - name: - description: - - Setting name. - returned: always - type: str - sample: deadlock_timeout - value: - description: - - Setting value. - returned: always - type: raw - sample: 1000 - description: - description: - - Description of the configuration. - returned: always - type: str - sample: Deadlock timeout. - source: - description: - - Source of the configuration. - returned: always - type: str - sample: system-default -''' - -from ansible.module_utils.azure_rm_common import AzureRMModuleBase - -try: - from msrestazure.azure_exceptions import CloudError - from msrestazure.azure_operation import AzureOperationPoller - from azure.mgmt.rdbms.mariadb import MariaDBManagementClient - from msrest.serialization import Model -except ImportError: - # This is handled in azure_rm_common - pass - - -class AzureRMMariaDbConfigurationFacts(AzureRMModuleBase): - def __init__(self): - # define user inputs into argument - self.module_arg_spec = dict( - resource_group=dict( - type='str', - required=True - ), - server_name=dict( - type='str', - required=True - ), - name=dict( - type='str' - ) - ) - # store the results of the module operation - self.results = dict(changed=False) - self.mgmt_client = None - self.resource_group = None - self.server_name = None - self.name = None - super(AzureRMMariaDbConfigurationFacts, self).__init__(self.module_arg_spec, supports_tags=False) - - def exec_module(self, **kwargs): - for key in self.module_arg_spec: - setattr(self, key, kwargs[key]) - self.mgmt_client = self.get_mgmt_svc_client(MariaDBManagementClient, - base_url=self._cloud_environment.endpoints.resource_manager) - - if self.name is not None: - self.results['settings'] = self.get() - else: - self.results['settings'] = self.list_by_server() - return self.results - - def get(self): - ''' - Gets facts of the specified MariaDB Configuration. - - :return: deserialized MariaDB Configurationinstance state dictionary - ''' - response = None - results = [] - try: - response = self.mgmt_client.configurations.get(resource_group_name=self.resource_group, - server_name=self.server_name, - configuration_name=self.name) - self.log("Response : {0}".format(response)) - except CloudError as e: - self.log('Could not get facts for Configurations.') - - if response is not None: - results.append(self.format_item(response)) - - return results - - def list_by_server(self): - ''' - Gets facts of the specified MariaDB Configuration. - - :return: deserialized MariaDB Configurationinstance state dictionary - ''' - response = None - results = [] - try: - response = self.mgmt_client.configurations.list_by_server(resource_group_name=self.resource_group, - server_name=self.server_name) - self.log("Response : {0}".format(response)) - except CloudError as e: - self.log('Could not get facts for Configurations.') - - if response is not None: - for item in response: - results.append(self.format_item(item)) - - return results - - def format_item(self, item): - d = item.as_dict() - d = { - 'resource_group': self.resource_group, - 'server_name': self.server_name, - 'id': d['id'], - 'name': d['name'], - 'value': d['value'], - 'description': d['description'], - 'source': d['source'] - } - return d - - -def main(): - AzureRMMariaDbConfigurationFacts() - - -if __name__ == '__main__': - main() diff --git a/lib/ansible/modules/cloud/azure/azure_rm_mariadbdatabase_facts.py b/lib/ansible/modules/cloud/azure/azure_rm_mariadbdatabase_facts.py new file mode 100644 index 0000000000..7a66e68e97 --- /dev/null +++ b/lib/ansible/modules/cloud/azure/azure_rm_mariadbdatabase_facts.py @@ -0,0 +1,203 @@ +#!/usr/bin/python +# +# Copyright (c) 2017 Zim Kalinowski, +# Copyright (c) 2019 Matti Ranta, (@techknowlogick) +# +# 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_mariadbdatabase_facts +version_added: "2.8" +short_description: Get Azure MariaDB Database facts. +description: + - Get facts of MariaDB Database. + +options: + resource_group: + description: + - The name of the resource group that contains the resource. You can obtain this value from the Azure Resource Manager API or the portal. + required: True + server_name: + description: + - The name of the server. + required: True + name: + description: + - The name of the database. + +extends_documentation_fragment: + - azure + +author: + - "Zim Kalinowski (@zikalino)" + - "Matti Ranta (@techknowlogick)" + +''' + +EXAMPLES = ''' + - name: Get instance of MariaDB Database + azure_rm_mariadbdatabase_facts: + resource_group: myResourceGroup + server_name: server_name + name: database_name + + - name: List instances of MariaDB Database + azure_rm_mariadbdatabase_facts: + resource_group: myResourceGroup + server_name: server_name +''' + +RETURN = ''' +databases: + description: A list of dictionaries containing facts for MariaDB Databases. + returned: always + type: complex + contains: + id: + description: + - Resource ID + returned: always + type: str + sample: "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.DBforMariaDB/servers/testser + ver/databases/db1" + resource_group: + description: + - Resource group name. + returned: always + type: str + sample: testrg + server_name: + description: + - Server name. + returned: always + type: str + sample: testserver + name: + description: + - Resource name. + returned: always + type: str + sample: db1 + charset: + description: + - The charset of the database. + returned: always + type: str + sample: UTF8 + collation: + description: + - The collation of the database. + returned: always + type: str + sample: English_United States.1252 +''' + +from ansible.module_utils.azure_rm_common import AzureRMModuleBase + +try: + from msrestazure.azure_exceptions import CloudError + from azure.mgmt.rdbms.mariadb import MariaDBManagementClient + from msrest.serialization import Model +except ImportError: + # This is handled in azure_rm_common + pass + + +class AzureRMMariaDbDatabaseFacts(AzureRMModuleBase): + def __init__(self): + # define user inputs into argument + self.module_arg_spec = dict( + resource_group=dict( + type='str', + required=True + ), + server_name=dict( + type='str', + required=True + ), + name=dict( + type='str' + ) + ) + # store the results of the module operation + self.results = dict( + changed=False + ) + self.resource_group = None + self.server_name = None + self.name = None + super(AzureRMMariaDbDatabaseFacts, self).__init__(self.module_arg_spec, supports_tags=False) + + def exec_module(self, **kwargs): + for key in self.module_arg_spec: + setattr(self, key, kwargs[key]) + + if (self.resource_group is not None and + self.server_name is not None and + self.name is not None): + self.results['databases'] = self.get() + elif (self.resource_group is not None and + self.server_name is not None): + self.results['databases'] = self.list_by_server() + return self.results + + def get(self): + response = None + results = [] + try: + response = self.mariadb_client.databases.get(resource_group_name=self.resource_group, + server_name=self.server_name, + database_name=self.name) + self.log("Response : {0}".format(response)) + except CloudError as e: + self.log('Could not get facts for Databases.') + + if response is not None: + results.append(self.format_item(response)) + + return results + + def list_by_server(self): + response = None + results = [] + try: + response = self.mariadb_client.databases.list_by_server(resource_group_name=self.resource_group, + server_name=self.server_name) + self.log("Response : {0}".format(response)) + except CloudError as e: + self.fail("Error listing for server {0} - {1}".format(self.server_name, str(e))) + + if response is not None: + for item in response: + results.append(self.format_item(item)) + + return results + + def format_item(self, item): + d = item.as_dict() + d = { + 'resource_group': self.resource_group, + 'server_name': self.server_name, + 'name': d['name'], + 'charset': d['charset'], + 'collation': d['collation'] + } + return d + + +def main(): + AzureRMMariaDbDatabaseFacts() + + +if __name__ == '__main__': + main() diff --git a/lib/ansible/modules/cloud/azure/azure_rm_mariadbdatabase_info.py b/lib/ansible/modules/cloud/azure/azure_rm_mariadbdatabase_info.py deleted file mode 100644 index dd9864b383..0000000000 --- a/lib/ansible/modules/cloud/azure/azure_rm_mariadbdatabase_info.py +++ /dev/null @@ -1,203 +0,0 @@ -#!/usr/bin/python -# -# Copyright (c) 2017 Zim Kalinowski, -# Copyright (c) 2019 Matti Ranta, (@techknowlogick) -# -# 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_mariadbdatabase_info -version_added: "2.8" -short_description: Get Azure MariaDB Database facts. -description: - - Get facts of MariaDB Database. - -options: - resource_group: - description: - - The name of the resource group that contains the resource. You can obtain this value from the Azure Resource Manager API or the portal. - required: True - server_name: - description: - - The name of the server. - required: True - name: - description: - - The name of the database. - -extends_documentation_fragment: - - azure - -author: - - "Zim Kalinowski (@zikalino)" - - "Matti Ranta (@techknowlogick)" - -''' - -EXAMPLES = ''' - - name: Get instance of MariaDB Database - azure_rm_mariadbdatabase_info: - resource_group: myResourceGroup - server_name: server_name - name: database_name - - - name: List instances of MariaDB Database - azure_rm_mariadbdatabase_info: - resource_group: myResourceGroup - server_name: server_name -''' - -RETURN = ''' -databases: - description: A list of dictionaries containing facts for MariaDB Databases. - returned: always - type: complex - contains: - id: - description: - - Resource ID - returned: always - type: str - sample: "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.DBforMariaDB/servers/testser - ver/databases/db1" - resource_group: - description: - - Resource group name. - returned: always - type: str - sample: testrg - server_name: - description: - - Server name. - returned: always - type: str - sample: testserver - name: - description: - - Resource name. - returned: always - type: str - sample: db1 - charset: - description: - - The charset of the database. - returned: always - type: str - sample: UTF8 - collation: - description: - - The collation of the database. - returned: always - type: str - sample: English_United States.1252 -''' - -from ansible.module_utils.azure_rm_common import AzureRMModuleBase - -try: - from msrestazure.azure_exceptions import CloudError - from azure.mgmt.rdbms.mariadb import MariaDBManagementClient - from msrest.serialization import Model -except ImportError: - # This is handled in azure_rm_common - pass - - -class AzureRMMariaDbDatabaseFacts(AzureRMModuleBase): - def __init__(self): - # define user inputs into argument - self.module_arg_spec = dict( - resource_group=dict( - type='str', - required=True - ), - server_name=dict( - type='str', - required=True - ), - name=dict( - type='str' - ) - ) - # store the results of the module operation - self.results = dict( - changed=False - ) - self.resource_group = None - self.server_name = None - self.name = None - super(AzureRMMariaDbDatabaseFacts, self).__init__(self.module_arg_spec, supports_tags=False) - - def exec_module(self, **kwargs): - for key in self.module_arg_spec: - setattr(self, key, kwargs[key]) - - if (self.resource_group is not None and - self.server_name is not None and - self.name is not None): - self.results['databases'] = self.get() - elif (self.resource_group is not None and - self.server_name is not None): - self.results['databases'] = self.list_by_server() - return self.results - - def get(self): - response = None - results = [] - try: - response = self.mariadb_client.databases.get(resource_group_name=self.resource_group, - server_name=self.server_name, - database_name=self.name) - self.log("Response : {0}".format(response)) - except CloudError as e: - self.log('Could not get facts for Databases.') - - if response is not None: - results.append(self.format_item(response)) - - return results - - def list_by_server(self): - response = None - results = [] - try: - response = self.mariadb_client.databases.list_by_server(resource_group_name=self.resource_group, - server_name=self.server_name) - self.log("Response : {0}".format(response)) - except CloudError as e: - self.fail("Error listing for server {0} - {1}".format(self.server_name, str(e))) - - if response is not None: - for item in response: - results.append(self.format_item(item)) - - return results - - def format_item(self, item): - d = item.as_dict() - d = { - 'resource_group': self.resource_group, - 'server_name': self.server_name, - 'name': d['name'], - 'charset': d['charset'], - 'collation': d['collation'] - } - return d - - -def main(): - AzureRMMariaDbDatabaseFacts() - - -if __name__ == '__main__': - main() diff --git a/lib/ansible/modules/cloud/azure/azure_rm_mariadbfirewallrule_facts.py b/lib/ansible/modules/cloud/azure/azure_rm_mariadbfirewallrule_facts.py new file mode 100644 index 0000000000..f4464179ce --- /dev/null +++ b/lib/ansible/modules/cloud/azure/azure_rm_mariadbfirewallrule_facts.py @@ -0,0 +1,199 @@ +#!/usr/bin/python +# +# Copyright (c) 2018 Zim Kalinowski, +# Copyright (c) 2019 Matti Ranta, (@techknowlogick) +# +# 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_mariadbfirewallrule_facts +version_added: "2.8" +short_description: Get Azure MariaDB Firewall Rule facts. +description: + - Get facts of Azure MariaDB Firewall Rule. + +options: + resource_group: + description: + - The name of the resource group. + required: True + server_name: + description: + - The name of the server. + required: True + name: + description: + - The name of the server firewall rule. + +extends_documentation_fragment: + - azure + +author: + - "Zim Kalinowski (@zikalino)" + - "Matti Ranta (@techknowlogick)" + +''' + +EXAMPLES = ''' + - name: Get instance of MariaDB Firewall Rule + azure_rm_mariadbfirewallrule_facts: + resource_group: myResourceGroup + server_name: server_name + name: firewall_rule_name + + - name: List instances of MariaDB Firewall Rule + azure_rm_mariadbfirewallrule_facts: + resource_group: myResourceGroup + server_name: server_name +''' + +RETURN = ''' +rules: + description: A list of dictionaries containing facts for MariaDB Firewall Rule. + returned: always + type: complex + contains: + id: + description: + - Resource ID + returned: always + type: str + sample: "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/TestGroup/providers/Microsoft.DBforMariaDB/servers/testserver/fire + wallRules/rule1" + server_name: + description: + - The name of the server. + returned: always + type: str + sample: testserver + name: + description: + - Resource name. + returned: always + type: str + sample: rule1 + start_ip_address: + description: + - The start IP address of the MariaDB firewall rule. + returned: always + type: str + sample: 10.0.0.16 + end_ip_address: + description: + - The end IP address of the MariaDB firewall rule. + returned: always + type: str + sample: 10.0.0.18 +''' + +from ansible.module_utils.azure_rm_common import AzureRMModuleBase + +try: + from msrestazure.azure_exceptions import CloudError + from msrestazure.azure_operation import AzureOperationPoller + from azure.mgmt.rdbms.mariadb import MariaDBManagementClient + from msrest.serialization import Model +except ImportError: + # This is handled in azure_rm_common + pass + + +class AzureRMMariaDbFirewallRuleFacts(AzureRMModuleBase): + def __init__(self): + # define user inputs into argument + self.module_arg_spec = dict( + resource_group=dict( + type='str', + required=True + ), + server_name=dict( + type='str', + required=True + ), + name=dict( + type='str' + ) + ) + # store the results of the module operation + self.results = dict( + changed=False + ) + self.mgmt_client = None + self.resource_group = None + self.server_name = None + self.name = None + super(AzureRMMariaDbFirewallRuleFacts, self).__init__(self.module_arg_spec, supports_tags=False) + + def exec_module(self, **kwargs): + for key in self.module_arg_spec: + setattr(self, key, kwargs[key]) + self.mgmt_client = self.get_mgmt_svc_client(MariaDBManagementClient, + base_url=self._cloud_environment.endpoints.resource_manager) + + if (self.name is not None): + self.results['rules'] = self.get() + else: + self.results['rules'] = self.list_by_server() + return self.results + + def get(self): + response = None + results = [] + try: + response = self.mgmt_client.firewall_rules.get(resource_group_name=self.resource_group, + server_name=self.server_name, + firewall_rule_name=self.name) + self.log("Response : {0}".format(response)) + except CloudError as e: + self.log('Could not get facts for FirewallRules.') + + if response is not None: + results.append(self.format_item(response)) + + return results + + def list_by_server(self): + response = None + results = [] + try: + response = self.mgmt_client.firewall_rules.list_by_server(resource_group_name=self.resource_group, + server_name=self.server_name) + self.log("Response : {0}".format(response)) + except CloudError as e: + self.log('Could not get facts for FirewallRules.') + + if response is not None: + for item in response: + results.append(self.format_item(item)) + + return results + + def format_item(self, item): + d = item.as_dict() + d = { + 'resource_group': self.resource_group, + 'id': d['id'], + 'server_name': self.server_name, + 'name': d['name'], + 'start_ip_address': d['start_ip_address'], + 'end_ip_address': d['end_ip_address'] + } + return d + + +def main(): + AzureRMMariaDbFirewallRuleFacts() + + +if __name__ == '__main__': + main() diff --git a/lib/ansible/modules/cloud/azure/azure_rm_mariadbfirewallrule_info.py b/lib/ansible/modules/cloud/azure/azure_rm_mariadbfirewallrule_info.py deleted file mode 100644 index d7c0d8fb98..0000000000 --- a/lib/ansible/modules/cloud/azure/azure_rm_mariadbfirewallrule_info.py +++ /dev/null @@ -1,199 +0,0 @@ -#!/usr/bin/python -# -# Copyright (c) 2018 Zim Kalinowski, -# Copyright (c) 2019 Matti Ranta, (@techknowlogick) -# -# 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_mariadbfirewallrule_info -version_added: "2.8" -short_description: Get Azure MariaDB Firewall Rule facts. -description: - - Get facts of Azure MariaDB Firewall Rule. - -options: - resource_group: - description: - - The name of the resource group. - required: True - server_name: - description: - - The name of the server. - required: True - name: - description: - - The name of the server firewall rule. - -extends_documentation_fragment: - - azure - -author: - - "Zim Kalinowski (@zikalino)" - - "Matti Ranta (@techknowlogick)" - -''' - -EXAMPLES = ''' - - name: Get instance of MariaDB Firewall Rule - azure_rm_mariadbfirewallrule_info: - resource_group: myResourceGroup - server_name: server_name - name: firewall_rule_name - - - name: List instances of MariaDB Firewall Rule - azure_rm_mariadbfirewallrule_info: - resource_group: myResourceGroup - server_name: server_name -''' - -RETURN = ''' -rules: - description: A list of dictionaries containing facts for MariaDB Firewall Rule. - returned: always - type: complex - contains: - id: - description: - - Resource ID - returned: always - type: str - sample: "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/TestGroup/providers/Microsoft.DBforMariaDB/servers/testserver/fire - wallRules/rule1" - server_name: - description: - - The name of the server. - returned: always - type: str - sample: testserver - name: - description: - - Resource name. - returned: always - type: str - sample: rule1 - start_ip_address: - description: - - The start IP address of the MariaDB firewall rule. - returned: always - type: str - sample: 10.0.0.16 - end_ip_address: - description: - - The end IP address of the MariaDB firewall rule. - returned: always - type: str - sample: 10.0.0.18 -''' - -from ansible.module_utils.azure_rm_common import AzureRMModuleBase - -try: - from msrestazure.azure_exceptions import CloudError - from msrestazure.azure_operation import AzureOperationPoller - from azure.mgmt.rdbms.mariadb import MariaDBManagementClient - from msrest.serialization import Model -except ImportError: - # This is handled in azure_rm_common - pass - - -class AzureRMMariaDbFirewallRuleFacts(AzureRMModuleBase): - def __init__(self): - # define user inputs into argument - self.module_arg_spec = dict( - resource_group=dict( - type='str', - required=True - ), - server_name=dict( - type='str', - required=True - ), - name=dict( - type='str' - ) - ) - # store the results of the module operation - self.results = dict( - changed=False - ) - self.mgmt_client = None - self.resource_group = None - self.server_name = None - self.name = None - super(AzureRMMariaDbFirewallRuleFacts, self).__init__(self.module_arg_spec, supports_tags=False) - - def exec_module(self, **kwargs): - for key in self.module_arg_spec: - setattr(self, key, kwargs[key]) - self.mgmt_client = self.get_mgmt_svc_client(MariaDBManagementClient, - base_url=self._cloud_environment.endpoints.resource_manager) - - if (self.name is not None): - self.results['rules'] = self.get() - else: - self.results['rules'] = self.list_by_server() - return self.results - - def get(self): - response = None - results = [] - try: - response = self.mgmt_client.firewall_rules.get(resource_group_name=self.resource_group, - server_name=self.server_name, - firewall_rule_name=self.name) - self.log("Response : {0}".format(response)) - except CloudError as e: - self.log('Could not get facts for FirewallRules.') - - if response is not None: - results.append(self.format_item(response)) - - return results - - def list_by_server(self): - response = None - results = [] - try: - response = self.mgmt_client.firewall_rules.list_by_server(resource_group_name=self.resource_group, - server_name=self.server_name) - self.log("Response : {0}".format(response)) - except CloudError as e: - self.log('Could not get facts for FirewallRules.') - - if response is not None: - for item in response: - results.append(self.format_item(item)) - - return results - - def format_item(self, item): - d = item.as_dict() - d = { - 'resource_group': self.resource_group, - 'id': d['id'], - 'server_name': self.server_name, - 'name': d['name'], - 'start_ip_address': d['start_ip_address'], - 'end_ip_address': d['end_ip_address'] - } - return d - - -def main(): - AzureRMMariaDbFirewallRuleFacts() - - -if __name__ == '__main__': - main() diff --git a/lib/ansible/modules/cloud/azure/azure_rm_mariadbserver_facts.py b/lib/ansible/modules/cloud/azure/azure_rm_mariadbserver_facts.py new file mode 100644 index 0000000000..81a451872d --- /dev/null +++ b/lib/ansible/modules/cloud/azure/azure_rm_mariadbserver_facts.py @@ -0,0 +1,255 @@ +#!/usr/bin/python +# +# Copyright (c) 2017 Zim Kalinowski, +# Copyright (c) 2019 Matti Ranta, (@techknowlogick) +# +# 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_mariadbserver_facts +version_added: "2.8" +short_description: Get Azure MariaDB Server facts. +description: + - Get facts of MariaDB Server. + +options: + resource_group: + description: + - The name of the resource group that contains the resource. You can obtain this value from the Azure Resource Manager API or the portal. + required: True + name: + description: + - The name of the server. + tags: + description: + - Limit results by providing a list of tags. Format tags as 'key' or 'key:value'. + +extends_documentation_fragment: + - azure + +author: + - "Zim Kalinowski (@zikalino)" + - "Matti Ranta (@techknowlogick)" + +''' + +EXAMPLES = ''' + - name: Get instance of MariaDB Server + azure_rm_mariadbserver_facts: + resource_group: myResourceGroup + name: server_name + + - name: List instances of MariaDB Server + azure_rm_mariadbserver_facts: + resource_group: myResourceGroup +''' + +RETURN = ''' +servers: + description: A list of dictionaries containing facts for MariaDB servers. + returned: always + type: complex + contains: + id: + description: + - Resource ID + returned: always + type: str + sample: /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.DBforMariaDB/servers/myabdud1223 + resource_group: + description: + - Resource group name. + returned: always + type: str + sample: myResourceGroup + name: + description: + - Resource name. + returned: always + type: str + sample: myabdud1223 + location: + description: + - The location the resource resides in. + returned: always + type: str + sample: eastus + sku: + description: + - The SKU of the server. + returned: always + type: complex + contains: + name: + description: + - The name of the SKU + returned: always + type: str + sample: GP_Gen4_2 + tier: + description: + - The tier of the particular SKU + returned: always + type: str + sample: GeneralPurpose + capacity: + description: + - The scale capacity. + returned: always + type: int + sample: 2 + storage_mb: + description: + - The maximum storage allowed for a server. + returned: always + type: int + sample: 128000 + enforce_ssl: + description: + - Enable SSL enforcement. + returned: always + type: bool + sample: False + admin_username: + description: + - "The administrator's login name of a server." + returned: always + type: str + sample: serveradmin + version: + description: + - Server version. + returned: always + type: str + sample: "9.6" + user_visible_state: + description: + - A state of a server that is visible to user. + returned: always + type: str + sample: Ready + fully_qualified_domain_name: + description: + - The fully qualified domain name of a server. + returned: always + type: str + sample: myabdud1223.mys.database.azure.com + tags: + description: Tags assigned to the resource. Dictionary of string:string pairs. + type: dict + sample: { tag1: abc } +''' + +from ansible.module_utils.azure_rm_common import AzureRMModuleBase + +try: + from msrestazure.azure_exceptions import CloudError + from azure.mgmt.rdbms.mariadb import MariaDBManagementClient + from msrest.serialization import Model +except ImportError: + # This is handled in azure_rm_common + pass + + +class AzureRMMariaDbServerFacts(AzureRMModuleBase): + def __init__(self): + # define user inputs into argument + self.module_arg_spec = dict( + resource_group=dict( + type='str', + required=True + ), + name=dict( + type='str' + ), + tags=dict( + type='list' + ) + ) + # store the results of the module operation + self.results = dict( + changed=False + ) + self.resource_group = None + self.name = None + self.tags = None + super(AzureRMMariaDbServerFacts, self).__init__(self.module_arg_spec, supports_tags=False) + + def exec_module(self, **kwargs): + for key in self.module_arg_spec: + setattr(self, key, kwargs[key]) + + if (self.resource_group is not None and + self.name is not None): + self.results['servers'] = self.get() + elif (self.resource_group is not None): + self.results['servers'] = self.list_by_resource_group() + return self.results + + def get(self): + response = None + results = [] + try: + response = self.mariadb_client.servers.get(resource_group_name=self.resource_group, + server_name=self.name) + self.log("Response : {0}".format(response)) + except CloudError as e: + self.log('Could not get facts for MariaDB Server.') + + if response and self.has_tags(response.tags, self.tags): + results.append(self.format_item(response)) + + return results + + def list_by_resource_group(self): + response = None + results = [] + try: + response = self.mariadb_client.servers.list_by_resource_group(resource_group_name=self.resource_group) + self.log("Response : {0}".format(response)) + except CloudError as e: + self.log('Could not get facts for MariaDB Servers.') + + if response is not None: + for item in response: + if self.has_tags(item.tags, self.tags): + results.append(self.format_item(item)) + + return results + + def format_item(self, item): + d = item.as_dict() + d = { + 'id': d['id'], + 'resource_group': self.resource_group, + 'name': d['name'], + 'sku': d['sku'], + 'location': d['location'], + 'storage_mb': d['storage_profile']['storage_mb'], + 'version': d['version'], + 'enforce_ssl': (d['ssl_enforcement'] == 'Enabled'), + 'admin_username': d['administrator_login'], + 'user_visible_state': d['user_visible_state'], + 'fully_qualified_domain_name': d['fully_qualified_domain_name'], + 'tags': d.get('tags') + } + + return d + + +def main(): + AzureRMMariaDbServerFacts() + + +if __name__ == '__main__': + main() diff --git a/lib/ansible/modules/cloud/azure/azure_rm_mariadbserver_info.py b/lib/ansible/modules/cloud/azure/azure_rm_mariadbserver_info.py deleted file mode 100644 index 7c9d26b321..0000000000 --- a/lib/ansible/modules/cloud/azure/azure_rm_mariadbserver_info.py +++ /dev/null @@ -1,255 +0,0 @@ -#!/usr/bin/python -# -# Copyright (c) 2017 Zim Kalinowski, -# Copyright (c) 2019 Matti Ranta, (@techknowlogick) -# -# 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_mariadbserver_info -version_added: "2.8" -short_description: Get Azure MariaDB Server facts. -description: - - Get facts of MariaDB Server. - -options: - resource_group: - description: - - The name of the resource group that contains the resource. You can obtain this value from the Azure Resource Manager API or the portal. - required: True - name: - description: - - The name of the server. - tags: - description: - - Limit results by providing a list of tags. Format tags as 'key' or 'key:value'. - -extends_documentation_fragment: - - azure - -author: - - "Zim Kalinowski (@zikalino)" - - "Matti Ranta (@techknowlogick)" - -''' - -EXAMPLES = ''' - - name: Get instance of MariaDB Server - azure_rm_mariadbserver_info: - resource_group: myResourceGroup - name: server_name - - - name: List instances of MariaDB Server - azure_rm_mariadbserver_info: - resource_group: myResourceGroup -''' - -RETURN = ''' -servers: - description: A list of dictionaries containing facts for MariaDB servers. - returned: always - type: complex - contains: - id: - description: - - Resource ID - returned: always - type: str - sample: /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.DBforMariaDB/servers/myabdud1223 - resource_group: - description: - - Resource group name. - returned: always - type: str - sample: myResourceGroup - name: - description: - - Resource name. - returned: always - type: str - sample: myabdud1223 - location: - description: - - The location the resource resides in. - returned: always - type: str - sample: eastus - sku: - description: - - The SKU of the server. - returned: always - type: complex - contains: - name: - description: - - The name of the SKU - returned: always - type: str - sample: GP_Gen4_2 - tier: - description: - - The tier of the particular SKU - returned: always - type: str - sample: GeneralPurpose - capacity: - description: - - The scale capacity. - returned: always - type: int - sample: 2 - storage_mb: - description: - - The maximum storage allowed for a server. - returned: always - type: int - sample: 128000 - enforce_ssl: - description: - - Enable SSL enforcement. - returned: always - type: bool - sample: False - admin_username: - description: - - "The administrator's login name of a server." - returned: always - type: str - sample: serveradmin - version: - description: - - Server version. - returned: always - type: str - sample: "9.6" - user_visible_state: - description: - - A state of a server that is visible to user. - returned: always - type: str - sample: Ready - fully_qualified_domain_name: - description: - - The fully qualified domain name of a server. - returned: always - type: str - sample: myabdud1223.mys.database.azure.com - tags: - description: Tags assigned to the resource. Dictionary of string:string pairs. - type: dict - sample: { tag1: abc } -''' - -from ansible.module_utils.azure_rm_common import AzureRMModuleBase - -try: - from msrestazure.azure_exceptions import CloudError - from azure.mgmt.rdbms.mariadb import MariaDBManagementClient - from msrest.serialization import Model -except ImportError: - # This is handled in azure_rm_common - pass - - -class AzureRMMariaDbServerFacts(AzureRMModuleBase): - def __init__(self): - # define user inputs into argument - self.module_arg_spec = dict( - resource_group=dict( - type='str', - required=True - ), - name=dict( - type='str' - ), - tags=dict( - type='list' - ) - ) - # store the results of the module operation - self.results = dict( - changed=False - ) - self.resource_group = None - self.name = None - self.tags = None - super(AzureRMMariaDbServerFacts, self).__init__(self.module_arg_spec, supports_tags=False) - - def exec_module(self, **kwargs): - for key in self.module_arg_spec: - setattr(self, key, kwargs[key]) - - if (self.resource_group is not None and - self.name is not None): - self.results['servers'] = self.get() - elif (self.resource_group is not None): - self.results['servers'] = self.list_by_resource_group() - return self.results - - def get(self): - response = None - results = [] - try: - response = self.mariadb_client.servers.get(resource_group_name=self.resource_group, - server_name=self.name) - self.log("Response : {0}".format(response)) - except CloudError as e: - self.log('Could not get facts for MariaDB Server.') - - if response and self.has_tags(response.tags, self.tags): - results.append(self.format_item(response)) - - return results - - def list_by_resource_group(self): - response = None - results = [] - try: - response = self.mariadb_client.servers.list_by_resource_group(resource_group_name=self.resource_group) - self.log("Response : {0}".format(response)) - except CloudError as e: - self.log('Could not get facts for MariaDB Servers.') - - if response is not None: - for item in response: - if self.has_tags(item.tags, self.tags): - results.append(self.format_item(item)) - - return results - - def format_item(self, item): - d = item.as_dict() - d = { - 'id': d['id'], - 'resource_group': self.resource_group, - 'name': d['name'], - 'sku': d['sku'], - 'location': d['location'], - 'storage_mb': d['storage_profile']['storage_mb'], - 'version': d['version'], - 'enforce_ssl': (d['ssl_enforcement'] == 'Enabled'), - 'admin_username': d['administrator_login'], - 'user_visible_state': d['user_visible_state'], - 'fully_qualified_domain_name': d['fully_qualified_domain_name'], - 'tags': d.get('tags') - } - - return d - - -def main(): - AzureRMMariaDbServerFacts() - - -if __name__ == '__main__': - main() diff --git a/lib/ansible/modules/cloud/azure/azure_rm_mysqlconfiguration_facts.py b/lib/ansible/modules/cloud/azure/azure_rm_mysqlconfiguration_facts.py new file mode 100644 index 0000000000..772f07dd4e --- /dev/null +++ b/lib/ansible/modules/cloud/azure/azure_rm_mysqlconfiguration_facts.py @@ -0,0 +1,206 @@ +#!/usr/bin/python +# +# Copyright (c) 2019 Zim Kalinowski, (@zikalino) +# +# 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_mysqlconfiguration_facts +version_added: "2.8" +short_description: Get Azure MySQL Configuration facts. +description: + - Get facts of Azure MySQL Configuration. + +options: + resource_group: + description: + - The name of the resource group that contains the resource. You can obtain this value from the Azure Resource Manager API or the portal. + required: True + server_name: + description: + - The name of the server. + required: True + name: + description: + - Setting name. + +extends_documentation_fragment: + - azure + +author: + - "Zim Kalinowski (@zikalino)" + +''' + +EXAMPLES = ''' + - name: Get specific setting of MySQL Server + azure_rm_mysqlconfiguration_facts: + resource_group: myResourceGroup + server_name: testmysqlserver + name: deadlock_timeout + + - name: Get all settings of MySQL Server + azure_rm_mysqlconfiguration_facts: + resource_group: myResourceGroup + server_name: server_name +''' + +RETURN = ''' +settings: + description: A list of dictionaries containing MySQL Server settings. + returned: always + type: complex + contains: + id: + description: + - Setting resource ID + returned: always + type: str + sample: "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.DBforMySQL/servers/testmysqlser + ver/configurations/deadlock_timeout" + name: + description: + - Setting name. + returned: always + type: str + sample: deadlock_timeout + value: + description: + - Setting value. + returned: always + type: raw + sample: 1000 + description: + description: + - Description of the configuration. + returned: always + type: str + sample: Deadlock timeout. + source: + description: + - Source of the configuration. + returned: always + type: str + sample: system-default +''' + +from ansible.module_utils.azure_rm_common import AzureRMModuleBase + +try: + from msrestazure.azure_exceptions import CloudError + from msrestazure.azure_operation import AzureOperationPoller + from azure.mgmt.rdbms.mysql import MySQLManagementClient + from msrest.serialization import Model +except ImportError: + # This is handled in azure_rm_common + pass + + +class AzureRMMySqlConfigurationFacts(AzureRMModuleBase): + def __init__(self): + # define user inputs into argument + self.module_arg_spec = dict( + resource_group=dict( + type='str', + required=True + ), + server_name=dict( + type='str', + required=True + ), + name=dict( + type='str' + ) + ) + # store the results of the module operation + self.results = dict(changed=False) + self.mgmt_client = None + self.resource_group = None + self.server_name = None + self.name = None + super(AzureRMMySqlConfigurationFacts, self).__init__(self.module_arg_spec, supports_tags=False) + + def exec_module(self, **kwargs): + for key in self.module_arg_spec: + setattr(self, key, kwargs[key]) + self.mgmt_client = self.get_mgmt_svc_client(MySQLManagementClient, + base_url=self._cloud_environment.endpoints.resource_manager) + + if self.name is not None: + self.results['settings'] = self.get() + else: + self.results['settings'] = self.list_by_server() + return self.results + + def get(self): + ''' + Gets facts of the specified MySQL Configuration. + + :return: deserialized MySQL Configurationinstance state dictionary + ''' + response = None + results = [] + try: + response = self.mgmt_client.configurations.get(resource_group_name=self.resource_group, + server_name=self.server_name, + configuration_name=self.name) + self.log("Response : {0}".format(response)) + except CloudError as e: + self.log('Could not get facts for Configurations.') + + if response is not None: + results.append(self.format_item(response)) + + return results + + def list_by_server(self): + ''' + Gets facts of the specified MySQL Configuration. + + :return: deserialized MySQL Configurationinstance state dictionary + ''' + response = None + results = [] + try: + response = self.mgmt_client.configurations.list_by_server(resource_group_name=self.resource_group, + server_name=self.server_name) + self.log("Response : {0}".format(response)) + except CloudError as e: + self.log('Could not get facts for Configurations.') + + if response is not None: + for item in response: + results.append(self.format_item(item)) + + return results + + def format_item(self, item): + d = item.as_dict() + d = { + 'resource_group': self.resource_group, + 'server_name': self.server_name, + 'id': d['id'], + 'name': d['name'], + 'value': d['value'], + 'description': d['description'], + 'source': d['source'] + } + return d + + +def main(): + AzureRMMySqlConfigurationFacts() + + +if __name__ == '__main__': + main() diff --git a/lib/ansible/modules/cloud/azure/azure_rm_mysqlconfiguration_info.py b/lib/ansible/modules/cloud/azure/azure_rm_mysqlconfiguration_info.py deleted file mode 100644 index 55e6fa43c7..0000000000 --- a/lib/ansible/modules/cloud/azure/azure_rm_mysqlconfiguration_info.py +++ /dev/null @@ -1,206 +0,0 @@ -#!/usr/bin/python -# -# Copyright (c) 2019 Zim Kalinowski, (@zikalino) -# -# 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_mysqlconfiguration_info -version_added: "2.8" -short_description: Get Azure MySQL Configuration facts. -description: - - Get facts of Azure MySQL Configuration. - -options: - resource_group: - description: - - The name of the resource group that contains the resource. You can obtain this value from the Azure Resource Manager API or the portal. - required: True - server_name: - description: - - The name of the server. - required: True - name: - description: - - Setting name. - -extends_documentation_fragment: - - azure - -author: - - "Zim Kalinowski (@zikalino)" - -''' - -EXAMPLES = ''' - - name: Get specific setting of MySQL Server - azure_rm_mysqlconfiguration_info: - resource_group: myResourceGroup - server_name: testmysqlserver - name: deadlock_timeout - - - name: Get all settings of MySQL Server - azure_rm_mysqlconfiguration_info: - resource_group: myResourceGroup - server_name: server_name -''' - -RETURN = ''' -settings: - description: A list of dictionaries containing MySQL Server settings. - returned: always - type: complex - contains: - id: - description: - - Setting resource ID - returned: always - type: str - sample: "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.DBforMySQL/servers/testmysqlser - ver/configurations/deadlock_timeout" - name: - description: - - Setting name. - returned: always - type: str - sample: deadlock_timeout - value: - description: - - Setting value. - returned: always - type: raw - sample: 1000 - description: - description: - - Description of the configuration. - returned: always - type: str - sample: Deadlock timeout. - source: - description: - - Source of the configuration. - returned: always - type: str - sample: system-default -''' - -from ansible.module_utils.azure_rm_common import AzureRMModuleBase - -try: - from msrestazure.azure_exceptions import CloudError - from msrestazure.azure_operation import AzureOperationPoller - from azure.mgmt.rdbms.mysql import MySQLManagementClient - from msrest.serialization import Model -except ImportError: - # This is handled in azure_rm_common - pass - - -class AzureRMMySqlConfigurationFacts(AzureRMModuleBase): - def __init__(self): - # define user inputs into argument - self.module_arg_spec = dict( - resource_group=dict( - type='str', - required=True - ), - server_name=dict( - type='str', - required=True - ), - name=dict( - type='str' - ) - ) - # store the results of the module operation - self.results = dict(changed=False) - self.mgmt_client = None - self.resource_group = None - self.server_name = None - self.name = None - super(AzureRMMySqlConfigurationFacts, self).__init__(self.module_arg_spec, supports_tags=False) - - def exec_module(self, **kwargs): - for key in self.module_arg_spec: - setattr(self, key, kwargs[key]) - self.mgmt_client = self.get_mgmt_svc_client(MySQLManagementClient, - base_url=self._cloud_environment.endpoints.resource_manager) - - if self.name is not None: - self.results['settings'] = self.get() - else: - self.results['settings'] = self.list_by_server() - return self.results - - def get(self): - ''' - Gets facts of the specified MySQL Configuration. - - :return: deserialized MySQL Configurationinstance state dictionary - ''' - response = None - results = [] - try: - response = self.mgmt_client.configurations.get(resource_group_name=self.resource_group, - server_name=self.server_name, - configuration_name=self.name) - self.log("Response : {0}".format(response)) - except CloudError as e: - self.log('Could not get facts for Configurations.') - - if response is not None: - results.append(self.format_item(response)) - - return results - - def list_by_server(self): - ''' - Gets facts of the specified MySQL Configuration. - - :return: deserialized MySQL Configurationinstance state dictionary - ''' - response = None - results = [] - try: - response = self.mgmt_client.configurations.list_by_server(resource_group_name=self.resource_group, - server_name=self.server_name) - self.log("Response : {0}".format(response)) - except CloudError as e: - self.log('Could not get facts for Configurations.') - - if response is not None: - for item in response: - results.append(self.format_item(item)) - - return results - - def format_item(self, item): - d = item.as_dict() - d = { - 'resource_group': self.resource_group, - 'server_name': self.server_name, - 'id': d['id'], - 'name': d['name'], - 'value': d['value'], - 'description': d['description'], - 'source': d['source'] - } - return d - - -def main(): - AzureRMMySqlConfigurationFacts() - - -if __name__ == '__main__': - main() diff --git a/lib/ansible/modules/cloud/azure/azure_rm_mysqlfirewallrule_facts.py b/lib/ansible/modules/cloud/azure/azure_rm_mysqlfirewallrule_facts.py new file mode 100644 index 0000000000..c47b5213ce --- /dev/null +++ b/lib/ansible/modules/cloud/azure/azure_rm_mysqlfirewallrule_facts.py @@ -0,0 +1,197 @@ +#!/usr/bin/python +# +# Copyright (c) 2018 Zim Kalinowski, +# +# 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_mysqlfirewallrule_facts +version_added: "2.8" +short_description: Get Azure MySQL Firewall Rule facts. +description: + - Get facts of Azure MySQL Firewall Rule. + +options: + resource_group: + description: + - The name of the resource group. + required: True + server_name: + description: + - The name of the server. + required: True + name: + description: + - The name of the server firewall rule. + +extends_documentation_fragment: + - azure + +author: + - "Zim Kalinowski (@zikalino)" + +''' + +EXAMPLES = ''' + - name: Get instance of MySQL Firewall Rule + azure_rm_mysqlfirewallrule_facts: + resource_group: myResourceGroup + server_name: server_name + name: firewall_rule_name + + - name: List instances of MySQL Firewall Rule + azure_rm_mysqlfirewallrule_facts: + resource_group: myResourceGroup + server_name: server_name +''' + +RETURN = ''' +rules: + description: A list of dictionaries containing facts for MySQL Firewall Rule. + returned: always + type: complex + contains: + id: + description: + - Resource ID + returned: always + type: str + sample: "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/TestGroup/providers/Microsoft.DBforMySQL/servers/testserver/fire + wallRules/rule1" + server_name: + description: + - The name of the server. + returned: always + type: str + sample: testserver + name: + description: + - Resource name. + returned: always + type: str + sample: rule1 + start_ip_address: + description: + - The start IP address of the MySQL firewall rule. + returned: always + type: str + sample: 10.0.0.16 + end_ip_address: + description: + - The end IP address of the MySQL firewall rule. + returned: always + type: str + sample: 10.0.0.18 +''' + +from ansible.module_utils.azure_rm_common import AzureRMModuleBase + +try: + from msrestazure.azure_exceptions import CloudError + from msrestazure.azure_operation import AzureOperationPoller + from azure.mgmt.rdbms.mysql import MySQLManagementClient + from msrest.serialization import Model +except ImportError: + # This is handled in azure_rm_common + pass + + +class AzureRMMySqlFirewallRuleFacts(AzureRMModuleBase): + def __init__(self): + # define user inputs into argument + self.module_arg_spec = dict( + resource_group=dict( + type='str', + required=True + ), + server_name=dict( + type='str', + required=True + ), + name=dict( + type='str' + ) + ) + # store the results of the module operation + self.results = dict( + changed=False + ) + self.mgmt_client = None + self.resource_group = None + self.server_name = None + self.name = None + super(AzureRMMySqlFirewallRuleFacts, self).__init__(self.module_arg_spec, supports_tags=False) + + def exec_module(self, **kwargs): + for key in self.module_arg_spec: + setattr(self, key, kwargs[key]) + self.mgmt_client = self.get_mgmt_svc_client(MySQLManagementClient, + base_url=self._cloud_environment.endpoints.resource_manager) + + if (self.name is not None): + self.results['rules'] = self.get() + else: + self.results['rules'] = self.list_by_server() + return self.results + + def get(self): + response = None + results = [] + try: + response = self.mgmt_client.firewall_rules.get(resource_group_name=self.resource_group, + server_name=self.server_name, + firewall_rule_name=self.name) + self.log("Response : {0}".format(response)) + except CloudError as e: + self.log('Could not get facts for FirewallRules.') + + if response is not None: + results.append(self.format_item(response)) + + return results + + def list_by_server(self): + response = None + results = [] + try: + response = self.mgmt_client.firewall_rules.list_by_server(resource_group_name=self.resource_group, + server_name=self.server_name) + self.log("Response : {0}".format(response)) + except CloudError as e: + self.log('Could not get facts for FirewallRules.') + + if response is not None: + for item in response: + results.append(self.format_item(item)) + + return results + + def format_item(self, item): + d = item.as_dict() + d = { + 'resource_group': self.resource_group, + 'id': d['id'], + 'server_name': self.server_name, + 'name': d['name'], + 'start_ip_address': d['start_ip_address'], + 'end_ip_address': d['end_ip_address'] + } + return d + + +def main(): + AzureRMMySqlFirewallRuleFacts() + + +if __name__ == '__main__': + main() diff --git a/lib/ansible/modules/cloud/azure/azure_rm_mysqlfirewallrule_info.py b/lib/ansible/modules/cloud/azure/azure_rm_mysqlfirewallrule_info.py deleted file mode 100644 index 65c59dbe03..0000000000 --- a/lib/ansible/modules/cloud/azure/azure_rm_mysqlfirewallrule_info.py +++ /dev/null @@ -1,197 +0,0 @@ -#!/usr/bin/python -# -# Copyright (c) 2018 Zim Kalinowski, -# -# 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_mysqlfirewallrule_info -version_added: "2.8" -short_description: Get Azure MySQL Firewall Rule facts. -description: - - Get facts of Azure MySQL Firewall Rule. - -options: - resource_group: - description: - - The name of the resource group. - required: True - server_name: - description: - - The name of the server. - required: True - name: - description: - - The name of the server firewall rule. - -extends_documentation_fragment: - - azure - -author: - - "Zim Kalinowski (@zikalino)" - -''' - -EXAMPLES = ''' - - name: Get instance of MySQL Firewall Rule - azure_rm_mysqlfirewallrule_info: - resource_group: myResourceGroup - server_name: server_name - name: firewall_rule_name - - - name: List instances of MySQL Firewall Rule - azure_rm_mysqlfirewallrule_info: - resource_group: myResourceGroup - server_name: server_name -''' - -RETURN = ''' -rules: - description: A list of dictionaries containing facts for MySQL Firewall Rule. - returned: always - type: complex - contains: - id: - description: - - Resource ID - returned: always - type: str - sample: "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/TestGroup/providers/Microsoft.DBforMySQL/servers/testserver/fire - wallRules/rule1" - server_name: - description: - - The name of the server. - returned: always - type: str - sample: testserver - name: - description: - - Resource name. - returned: always - type: str - sample: rule1 - start_ip_address: - description: - - The start IP address of the MySQL firewall rule. - returned: always - type: str - sample: 10.0.0.16 - end_ip_address: - description: - - The end IP address of the MySQL firewall rule. - returned: always - type: str - sample: 10.0.0.18 -''' - -from ansible.module_utils.azure_rm_common import AzureRMModuleBase - -try: - from msrestazure.azure_exceptions import CloudError - from msrestazure.azure_operation import AzureOperationPoller - from azure.mgmt.rdbms.mysql import MySQLManagementClient - from msrest.serialization import Model -except ImportError: - # This is handled in azure_rm_common - pass - - -class AzureRMMySqlFirewallRuleFacts(AzureRMModuleBase): - def __init__(self): - # define user inputs into argument - self.module_arg_spec = dict( - resource_group=dict( - type='str', - required=True - ), - server_name=dict( - type='str', - required=True - ), - name=dict( - type='str' - ) - ) - # store the results of the module operation - self.results = dict( - changed=False - ) - self.mgmt_client = None - self.resource_group = None - self.server_name = None - self.name = None - super(AzureRMMySqlFirewallRuleFacts, self).__init__(self.module_arg_spec, supports_tags=False) - - def exec_module(self, **kwargs): - for key in self.module_arg_spec: - setattr(self, key, kwargs[key]) - self.mgmt_client = self.get_mgmt_svc_client(MySQLManagementClient, - base_url=self._cloud_environment.endpoints.resource_manager) - - if (self.name is not None): - self.results['rules'] = self.get() - else: - self.results['rules'] = self.list_by_server() - return self.results - - def get(self): - response = None - results = [] - try: - response = self.mgmt_client.firewall_rules.get(resource_group_name=self.resource_group, - server_name=self.server_name, - firewall_rule_name=self.name) - self.log("Response : {0}".format(response)) - except CloudError as e: - self.log('Could not get facts for FirewallRules.') - - if response is not None: - results.append(self.format_item(response)) - - return results - - def list_by_server(self): - response = None - results = [] - try: - response = self.mgmt_client.firewall_rules.list_by_server(resource_group_name=self.resource_group, - server_name=self.server_name) - self.log("Response : {0}".format(response)) - except CloudError as e: - self.log('Could not get facts for FirewallRules.') - - if response is not None: - for item in response: - results.append(self.format_item(item)) - - return results - - def format_item(self, item): - d = item.as_dict() - d = { - 'resource_group': self.resource_group, - 'id': d['id'], - 'server_name': self.server_name, - 'name': d['name'], - 'start_ip_address': d['start_ip_address'], - 'end_ip_address': d['end_ip_address'] - } - return d - - -def main(): - AzureRMMySqlFirewallRuleFacts() - - -if __name__ == '__main__': - main() diff --git a/lib/ansible/modules/cloud/azure/azure_rm_postgresqlconfiguration_facts.py b/lib/ansible/modules/cloud/azure/azure_rm_postgresqlconfiguration_facts.py new file mode 100644 index 0000000000..a7a1933b88 --- /dev/null +++ b/lib/ansible/modules/cloud/azure/azure_rm_postgresqlconfiguration_facts.py @@ -0,0 +1,208 @@ +#!/usr/bin/python +# +# Copyright (c) 2019 Zim Kalinowski, (@zikalino) +# +# 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_postgresqlconfiguration_facts +version_added: "2.8" +short_description: Get Azure PostgreSQL Configuration facts. +description: + - Get facts of Azure PostgreSQL Configuration. + +options: + resource_group: + description: + - The name of the resource group that contains the resource. + required: True + server_name: + description: + - The name of the server. + required: True + name: + description: + - Setting name. + +extends_documentation_fragment: + - azure + +author: + - "Zim Kalinowski (@zikalino)" + +''' + +EXAMPLES = ''' + - name: Get specific setting of PostgreSQL configuration + azure_rm_postgresqlconfiguration_facts: + resource_group: myResourceGroup + server_name: testpostgresqlserver + name: deadlock_timeout + + - name: Get all settings of PostgreSQL Configuration + azure_rm_postgresqlconfiguration_facts: + resource_group: myResourceGroup + server_name: testpostgresqlserver +''' + +RETURN = ''' +settings: + description: A list of dictionaries containing MySQL Server settings. + returned: always + type: complex + contains: + id: + description: + - Setting resource ID + returned: always + type: str + sample: "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/testrg/providers/Microsoft.DBforPostgreSQL/servers/testpostgresqlser + ver/configurations/deadlock_timeout" + name: + description: + - Setting name. + returned: always + type: str + sample: deadlock_timeout + value: + description: + - Setting value. + returned: always + type: raw + sample: 1000 + description: + description: + - Description of the configuration. + returned: always + type: str + sample: Deadlock timeout. + source: + description: + - Source of the configuration. + returned: always + type: str + sample: system-default +''' + +from ansible.module_utils.azure_rm_common import AzureRMModuleBase + +try: + from msrestazure.azure_exceptions import CloudError + from msrestazure.azure_operation import AzureOperationPoller + from azure.mgmt.rdbms.postgresql import PostgreSQLManagementClient + from msrest.serialization import Model +except ImportError: + # This is handled in azure_rm_common + pass + + +class AzureRMPostgreSQLConfigurationFacts(AzureRMModuleBase): + def __init__(self): + # define user inputs into argument + self.module_arg_spec = dict( + resource_group=dict( + type='str', + required=True + ), + server_name=dict( + type='str', + required=True + ), + name=dict( + type='str' + ) + ) + # store the results of the module operation + self.results = dict( + changed=False + ) + self.mgmt_client = None + self.resource_group = None + self.server_name = None + self.name = None + super(AzureRMPostgreSQLConfigurationFacts, self).__init__(self.module_arg_spec, supports_tags=False) + + def exec_module(self, **kwargs): + for key in self.module_arg_spec: + setattr(self, key, kwargs[key]) + self.mgmt_client = self.get_mgmt_svc_client(PostgreSQLManagementClient, + base_url=self._cloud_environment.endpoints.resource_manager) + + if self.name is not None: + self.results['settings'] = self.get() + else: + self.results['settings'] = self.list_by_server() + return self.results + + def get(self): + ''' + Gets facts of the specified PostgreSQL Configuration. + + :return: deserialized PostgreSQL Configurationinstance state dictionary + ''' + response = None + results = [] + try: + response = self.mgmt_client.configurations.get(resource_group_name=self.resource_group, + server_name=self.server_name, + configuration_name=self.name) + self.log("Response : {0}".format(response)) + except CloudError as e: + self.fail('Could not get requested setting.') + + if response is not None: + results.append(self.format_item(response)) + + return results + + def list_by_server(self): + ''' + Gets facts of the specified PostgreSQL Configuration. + + :return: deserialized PostgreSQL Configurationinstance state dictionary + ''' + response = None + results = [] + try: + response = self.mgmt_client.configurations.list_by_server(resource_group_name=self.resource_group, + server_name=self.server_name) + self.log("Response : {0}".format(response)) + except CloudError as e: + self.fail('Could not get settings for server.') + + if response is not None: + for item in response: + results.append(self.format_item(item)) + + return results + + def format_item(self, item): + d = item.as_dict() + d = { + 'resource_group': self.resource_group, + 'server_name': self.server_name, + 'id': d['id'], + 'name': d['name'], + 'value': d['value'], + 'description': d['description'], + 'source': d['source'] + } + return d + + +def main(): + AzureRMPostgreSQLConfigurationFacts() + + +if __name__ == '__main__': + main() diff --git a/lib/ansible/modules/cloud/azure/azure_rm_postgresqlconfiguration_info.py b/lib/ansible/modules/cloud/azure/azure_rm_postgresqlconfiguration_info.py deleted file mode 100644 index 10e9daeb63..0000000000 --- a/lib/ansible/modules/cloud/azure/azure_rm_postgresqlconfiguration_info.py +++ /dev/null @@ -1,208 +0,0 @@ -#!/usr/bin/python -# -# Copyright (c) 2019 Zim Kalinowski, (@zikalino) -# -# 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_postgresqlconfiguration_info -version_added: "2.8" -short_description: Get Azure PostgreSQL Configuration facts. -description: - - Get facts of Azure PostgreSQL Configuration. - -options: - resource_group: - description: - - The name of the resource group that contains the resource. - required: True - server_name: - description: - - The name of the server. - required: True - name: - description: - - Setting name. - -extends_documentation_fragment: - - azure - -author: - - "Zim Kalinowski (@zikalino)" - -''' - -EXAMPLES = ''' - - name: Get specific setting of PostgreSQL configuration - azure_rm_postgresqlconfiguration_info: - resource_group: myResourceGroup - server_name: testpostgresqlserver - name: deadlock_timeout - - - name: Get all settings of PostgreSQL Configuration - azure_rm_postgresqlconfiguration_info: - resource_group: myResourceGroup - server_name: testpostgresqlserver -''' - -RETURN = ''' -settings: - description: A list of dictionaries containing MySQL Server settings. - returned: always - type: complex - contains: - id: - description: - - Setting resource ID - returned: always - type: str - sample: "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/testrg/providers/Microsoft.DBforPostgreSQL/servers/testpostgresqlser - ver/configurations/deadlock_timeout" - name: - description: - - Setting name. - returned: always - type: str - sample: deadlock_timeout - value: - description: - - Setting value. - returned: always - type: raw - sample: 1000 - description: - description: - - Description of the configuration. - returned: always - type: str - sample: Deadlock timeout. - source: - description: - - Source of the configuration. - returned: always - type: str - sample: system-default -''' - -from ansible.module_utils.azure_rm_common import AzureRMModuleBase - -try: - from msrestazure.azure_exceptions import CloudError - from msrestazure.azure_operation import AzureOperationPoller - from azure.mgmt.rdbms.postgresql import PostgreSQLManagementClient - from msrest.serialization import Model -except ImportError: - # This is handled in azure_rm_common - pass - - -class AzureRMPostgreSQLConfigurationFacts(AzureRMModuleBase): - def __init__(self): - # define user inputs into argument - self.module_arg_spec = dict( - resource_group=dict( - type='str', - required=True - ), - server_name=dict( - type='str', - required=True - ), - name=dict( - type='str' - ) - ) - # store the results of the module operation - self.results = dict( - changed=False - ) - self.mgmt_client = None - self.resource_group = None - self.server_name = None - self.name = None - super(AzureRMPostgreSQLConfigurationFacts, self).__init__(self.module_arg_spec, supports_tags=False) - - def exec_module(self, **kwargs): - for key in self.module_arg_spec: - setattr(self, key, kwargs[key]) - self.mgmt_client = self.get_mgmt_svc_client(PostgreSQLManagementClient, - base_url=self._cloud_environment.endpoints.resource_manager) - - if self.name is not None: - self.results['settings'] = self.get() - else: - self.results['settings'] = self.list_by_server() - return self.results - - def get(self): - ''' - Gets facts of the specified PostgreSQL Configuration. - - :return: deserialized PostgreSQL Configurationinstance state dictionary - ''' - response = None - results = [] - try: - response = self.mgmt_client.configurations.get(resource_group_name=self.resource_group, - server_name=self.server_name, - configuration_name=self.name) - self.log("Response : {0}".format(response)) - except CloudError as e: - self.fail('Could not get requested setting.') - - if response is not None: - results.append(self.format_item(response)) - - return results - - def list_by_server(self): - ''' - Gets facts of the specified PostgreSQL Configuration. - - :return: deserialized PostgreSQL Configurationinstance state dictionary - ''' - response = None - results = [] - try: - response = self.mgmt_client.configurations.list_by_server(resource_group_name=self.resource_group, - server_name=self.server_name) - self.log("Response : {0}".format(response)) - except CloudError as e: - self.fail('Could not get settings for server.') - - if response is not None: - for item in response: - results.append(self.format_item(item)) - - return results - - def format_item(self, item): - d = item.as_dict() - d = { - 'resource_group': self.resource_group, - 'server_name': self.server_name, - 'id': d['id'], - 'name': d['name'], - 'value': d['value'], - 'description': d['description'], - 'source': d['source'] - } - return d - - -def main(): - AzureRMPostgreSQLConfigurationFacts() - - -if __name__ == '__main__': - main() diff --git a/lib/ansible/modules/cloud/azure/azure_rm_postgresqlfirewallrule_facts.py b/lib/ansible/modules/cloud/azure/azure_rm_postgresqlfirewallrule_facts.py new file mode 100644 index 0000000000..04f33c8fc4 --- /dev/null +++ b/lib/ansible/modules/cloud/azure/azure_rm_postgresqlfirewallrule_facts.py @@ -0,0 +1,196 @@ +#!/usr/bin/python +# +# Copyright (c) 2018 Zim Kalinowski, +# +# 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_postgresqlfirewallrule_facts +version_added: "2.8" +short_description: Get Azure PostgreSQL Firewall Rule facts. +description: + - Get facts of Azure PostgreSQL Firewall Rule. + +options: + resource_group: + description: + - The name of the resource group. + required: True + server_name: + description: + - The name of the server. + required: True + name: + description: + - The name of the server firewall rule. + +extends_documentation_fragment: + - azure + +author: + - "Zim Kalinowski (@zikalino)" + +''' + +EXAMPLES = ''' + - name: Get instance of PostgreSQL Firewall Rule + azure_rm_postgresqlfirewallrule_facts: + resource_group: myResourceGroup + server_name: server_name + name: firewall_rule_name + + - name: List instances of PostgreSQL Firewall Rule + azure_rm_postgresqlfirewallrule_facts: + resource_group: myResourceGroup + server_name: server_name +''' + +RETURN = ''' +rules: + description: A list of dictionaries containing facts for PostgreSQL Firewall Rule. + returned: always + type: complex + contains: + id: + description: + - Resource ID + returned: always + type: str + sample: "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/TestGroup/providers/Microsoft.DBforPostgreSQL/servers/testserver/fire + wallRules/rule1" + server_name: + description: + - The name of the server. + returned: always + type: str + sample: testserver + name: + description: + - Resource name. + returned: always + type: str + sample: rule1 + start_ip_address: + description: + - The start IP address of the PostgreSQL firewall rule. + returned: always + type: str + sample: 10.0.0.16 + end_ip_address: + description: + - The end IP address of the PostgreSQL firewall rule. + returned: always + type: str + sample: 10.0.0.18 +''' + +from ansible.module_utils.azure_rm_common import AzureRMModuleBase + +try: + from msrestazure.azure_exceptions import CloudError + from azure.mgmt.rdbms.postgresql import PostgreSQLManagementClient + from msrest.serialization import Model +except ImportError: + # This is handled in azure_rm_common + pass + + +class AzureRMPostgreSQLFirewallRulesFacts(AzureRMModuleBase): + def __init__(self): + # define user inputs into argument + self.module_arg_spec = dict( + resource_group=dict( + type='str', + required=True + ), + server_name=dict( + type='str', + required=True + ), + name=dict( + type='str' + ) + ) + # store the results of the module operation + self.results = dict( + changed=False + ) + self.mgmt_client = None + self.resource_group = None + self.server_name = None + self.name = None + super(AzureRMPostgreSQLFirewallRulesFacts, self).__init__(self.module_arg_spec, supports_tags=False) + + def exec_module(self, **kwargs): + for key in self.module_arg_spec: + setattr(self, key, kwargs[key]) + self.mgmt_client = self.get_mgmt_svc_client(PostgreSQLManagementClient, + base_url=self._cloud_environment.endpoints.resource_manager) + + if (self.name is not None): + self.results['rules'] = self.get() + else: + self.results['rules'] = self.list_by_server() + return self.results + + def get(self): + response = None + results = [] + try: + response = self.mgmt_client.firewall_rules.get(resource_group_name=self.resource_group, + server_name=self.server_name, + firewall_rule_name=self.name) + self.log("Response : {0}".format(response)) + except CloudError as e: + self.log('Could not get facts for FirewallRules.') + + if response is not None: + results.append(self.format_item(response)) + + return results + + def list_by_server(self): + response = None + results = [] + try: + response = self.mgmt_client.firewall_rules.list_by_server(resource_group_name=self.resource_group, + server_name=self.server_name) + self.log("Response : {0}".format(response)) + except CloudError as e: + self.log('Could not get facts for FirewallRules.') + + if response is not None: + for item in response: + results.append(self.format_item(item)) + + return results + + def format_item(self, item): + d = item.as_dict() + d = { + 'resource_group': self.resource_group, + 'id': d['id'], + 'server_name': self.server_name, + 'name': d['name'], + 'start_ip_address': d['start_ip_address'], + 'end_ip_address': d['end_ip_address'] + } + return d + + +def main(): + AzureRMPostgreSQLFirewallRulesFacts() + + +if __name__ == '__main__': + main() diff --git a/lib/ansible/modules/cloud/azure/azure_rm_postgresqlfirewallrule_info.py b/lib/ansible/modules/cloud/azure/azure_rm_postgresqlfirewallrule_info.py deleted file mode 100644 index 5e20b211ef..0000000000 --- a/lib/ansible/modules/cloud/azure/azure_rm_postgresqlfirewallrule_info.py +++ /dev/null @@ -1,196 +0,0 @@ -#!/usr/bin/python -# -# Copyright (c) 2018 Zim Kalinowski, -# -# 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_postgresqlfirewallrule_info -version_added: "2.8" -short_description: Get Azure PostgreSQL Firewall Rule facts. -description: - - Get facts of Azure PostgreSQL Firewall Rule. - -options: - resource_group: - description: - - The name of the resource group. - required: True - server_name: - description: - - The name of the server. - required: True - name: - description: - - The name of the server firewall rule. - -extends_documentation_fragment: - - azure - -author: - - "Zim Kalinowski (@zikalino)" - -''' - -EXAMPLES = ''' - - name: Get instance of PostgreSQL Firewall Rule - azure_rm_postgresqlfirewallrule_info: - resource_group: myResourceGroup - server_name: server_name - name: firewall_rule_name - - - name: List instances of PostgreSQL Firewall Rule - azure_rm_postgresqlfirewallrule_info: - resource_group: myResourceGroup - server_name: server_name -''' - -RETURN = ''' -rules: - description: A list of dictionaries containing facts for PostgreSQL Firewall Rule. - returned: always - type: complex - contains: - id: - description: - - Resource ID - returned: always - type: str - sample: "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/TestGroup/providers/Microsoft.DBforPostgreSQL/servers/testserver/fire - wallRules/rule1" - server_name: - description: - - The name of the server. - returned: always - type: str - sample: testserver - name: - description: - - Resource name. - returned: always - type: str - sample: rule1 - start_ip_address: - description: - - The start IP address of the PostgreSQL firewall rule. - returned: always - type: str - sample: 10.0.0.16 - end_ip_address: - description: - - The end IP address of the PostgreSQL firewall rule. - returned: always - type: str - sample: 10.0.0.18 -''' - -from ansible.module_utils.azure_rm_common import AzureRMModuleBase - -try: - from msrestazure.azure_exceptions import CloudError - from azure.mgmt.rdbms.postgresql import PostgreSQLManagementClient - from msrest.serialization import Model -except ImportError: - # This is handled in azure_rm_common - pass - - -class AzureRMPostgreSQLFirewallRulesFacts(AzureRMModuleBase): - def __init__(self): - # define user inputs into argument - self.module_arg_spec = dict( - resource_group=dict( - type='str', - required=True - ), - server_name=dict( - type='str', - required=True - ), - name=dict( - type='str' - ) - ) - # store the results of the module operation - self.results = dict( - changed=False - ) - self.mgmt_client = None - self.resource_group = None - self.server_name = None - self.name = None - super(AzureRMPostgreSQLFirewallRulesFacts, self).__init__(self.module_arg_spec, supports_tags=False) - - def exec_module(self, **kwargs): - for key in self.module_arg_spec: - setattr(self, key, kwargs[key]) - self.mgmt_client = self.get_mgmt_svc_client(PostgreSQLManagementClient, - base_url=self._cloud_environment.endpoints.resource_manager) - - if (self.name is not None): - self.results['rules'] = self.get() - else: - self.results['rules'] = self.list_by_server() - return self.results - - def get(self): - response = None - results = [] - try: - response = self.mgmt_client.firewall_rules.get(resource_group_name=self.resource_group, - server_name=self.server_name, - firewall_rule_name=self.name) - self.log("Response : {0}".format(response)) - except CloudError as e: - self.log('Could not get facts for FirewallRules.') - - if response is not None: - results.append(self.format_item(response)) - - return results - - def list_by_server(self): - response = None - results = [] - try: - response = self.mgmt_client.firewall_rules.list_by_server(resource_group_name=self.resource_group, - server_name=self.server_name) - self.log("Response : {0}".format(response)) - except CloudError as e: - self.log('Could not get facts for FirewallRules.') - - if response is not None: - for item in response: - results.append(self.format_item(item)) - - return results - - def format_item(self, item): - d = item.as_dict() - d = { - 'resource_group': self.resource_group, - 'id': d['id'], - 'server_name': self.server_name, - 'name': d['name'], - 'start_ip_address': d['start_ip_address'], - 'end_ip_address': d['end_ip_address'] - } - return d - - -def main(): - AzureRMPostgreSQLFirewallRulesFacts() - - -if __name__ == '__main__': - main() diff --git a/lib/ansible/modules/cloud/azure/azure_rm_rediscache_facts.py b/lib/ansible/modules/cloud/azure/azure_rm_rediscache_facts.py new file mode 100644 index 0000000000..0c5c32447c --- /dev/null +++ b/lib/ansible/modules/cloud/azure/azure_rm_rediscache_facts.py @@ -0,0 +1,334 @@ +#!/usr/bin/python +# +# Copyright (c) 2018 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_rediscache_facts + +version_added: "2.8" + +short_description: Get Azure Cache for Redis instance facts + +description: + - Get facts for Azure Cache for Redis instance. + +options: + resource_group: + description: + - The resource group to search for the desired Azure Cache for Redis + required: True + name: + description: + - Limit results to a specific Azure Cache for Redis. + return_access_keys: + description: + - Indicate weather to return access keys of the Azure Cache for Redis. + default: False + type: bool + 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: Get Azure Cache for Redis by name + azure_rm_rediscache_facts: + resource_group: myResourceGroup + name: myRedis + + - name: Get Azure Cache for Redis with access keys by name + azure_rm_rediscache_facts: + resource_group: myResourceGroup + name: myRedis + return_access_keys: true + + - name: Get Azure Cache for Redis in specific resource group + azure_rm_rediscache_facts: + resource_group: myResourceGroup +''' + +RETURN = ''' +rediscaches: + description: List of Azure Cache for Redis instances. + returned: always + type: complex + contains: + resource_group: + description: + - Name of a resource group where the Azure Cache for Redis belongs to. + returned: always + type: str + sample: myResourceGroup + name: + description: + - Name of the Azure Cache for Redis. + returned: always + type: str + sample: myRedis + id: + description: + - Id of the Azure Cache for Redis. + returned: always + type: str + sample: /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.Cache/Redis/myRedis + provisioning_state: + description: + - Provisioning state of the redis cahe + returned: always + type: str + sample: Creating + location: + description: + - Location of the Azure Cache for Redis. + type: str + sample: WestUS + enable_non_ssl_port: + description: + - Specifies whether the non-ssl Redis server port (6379) is enabled. + type: bool + sample: false + sku: + description: + - Dict of sku information. + type: dict + contains: + name: + description: Name of the sku. + returned: always + type: str + sample: standard + size: + description: Size of the Azure Cache for Redis. + returned: always + type: str + sample: C1 + static_ip: + description: + - Static IP address. + type: str + sample: 10.75.0.11 + subnet: + description: + - The full resource ID of a subnet in a virtual network to deploy the Azure Cache for Redis in. + type: str + sample: + - "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/Microsoft.Network/VirtualNetworks/myVirtualNetwo + rk/subnets/mySubnet" + configuration: + description: + - Dict of redis configuration. + type: dict + sample: maxmeory_reserved + host_name: + description: + - Redis host name. + type: str + sample: testRedis.redis.cache.windows.net + shard_count: + description: + - The number of shards on a Premium Cluster Cache. + type: int + sample: 1 + tenant_settings: + description: + - Dict of tenant settings. + type: dict + tags: + description: + - List of tags. + type: list + sample: + - foo + access_keys: + description: + - Azure Cache for Redis access keys. + type: dict + returned: when C(return_access_keys) is true. + contains: + primary: + description: The current primary key that clients can use to authenticate the redis cahce. + type: str + sample: X2xXXxx7xxxxxx5xxxx0xxxxx75xxxxxxxxXXXxxxxx= + secondary: + description: The current secondary key that clients can use to authenticate the redis cahce. + type: str + sample: X2xXXxx7xxxxxx5xxxx0xxxxx75xxxxxxxxXXXxxxxx= +''' + +from ansible.module_utils.azure_rm_common import AzureRMModuleBase + +try: + from azure.common import AzureHttpError + from azure.mgmt.redis import RedisManagementClient + from msrestazure.azure_exceptions import CloudError +except ImportError: + # handled in azure_rm_common + pass + +import re + + +class AzureRMRedisCacheFacts(AzureRMModuleBase): + """Utility class to get Azure Cache for Redis facts""" + + def __init__(self): + + self.module_args = dict( + name=dict(type='str'), + resource_group=dict( + type='str', + required=True + ), + return_access_keys=dict( + type='bool', + default=False + ), + tags=dict(type='list') + ) + + self.results = dict( + changed=False, + rediscaches=[] + ) + + self.name = None + self.resource_group = None + self.profile_name = None + self.tags = None + + self._client = None + + super(AzureRMRedisCacheFacts, self).__init__( + derived_arg_spec=self.module_args, + supports_tags=False, + facts_module=True + ) + + def exec_module(self, **kwargs): + + for key in self.module_args: + setattr(self, key, kwargs[key]) + + # get management client + self._client = self.get_mgmt_svc_client(RedisManagementClient, + base_url=self._cloud_environment.endpoints.resource_manager, + api_version='2018-03-01') + + if self.name: + self.results['rediscaches'] = self.get_item() + else: + self.results['rediscaches'] = self.list_by_resourcegroup() + + return self.results + + def get_item(self): + """Get a single Azure Cache for Redis""" + + self.log('Get properties for {0}'.format(self.name)) + + item = None + result = [] + + try: + item = self._client.redis.get(resource_group_name=self.resource_group, name=self.name) + except CloudError: + pass + + if item and self.has_tags(item.tags, self.tags): + result = [self.serialize_rediscache(item)] + + return result + + def list_by_resourcegroup(self): + """Get all Azure Cache for Redis within a resource group""" + + self.log('List all Azure Cache for Redis within a resource group') + + try: + response = self._client.redis.list_by_resource_group(self.resource_group) + except CloudError as exc: + self.fail('Failed to list all items - {0}'.format(str(exc))) + + results = [] + for item in response: + if self.has_tags(item.tags, self.tags): + results.append(self.serialize_rediscache(item)) + + return results + + def list_keys(self): + """List Azure Cache for Redis keys""" + + self.log('List keys for {0}'.format(self.name)) + + item = None + + try: + item = self._client.redis.list_keys(resource_group_name=self.resource_group, name=self.name) + except CloudError as exc: + self.fail("Failed to list redis keys of {0} - {1}".format(self.name, str(exc))) + + return item + + def serialize_rediscache(self, rediscache): + ''' + Convert an Azure Cache for Redis object to dict. + :param rediscache: Azure Cache for Redis object + :return: dict + ''' + new_result = dict( + id=rediscache.id, + resource_group=re.sub('\\/.*', '', re.sub('.*resourceGroups\\/', '', rediscache.id)), + name=rediscache.name, + location=rediscache.location, + provisioning_state=rediscache.provisioning_state, + configuration=rediscache.redis_configuration, + tenant_settings=rediscache.tenant_settings, + shard_count=rediscache.shard_count, + enable_non_ssl_port=rediscache.enable_non_ssl_port, + static_ip=rediscache.static_ip, + subnet=rediscache.subnet_id, + host_name=rediscache.host_name, + tags=rediscache.tags + ) + + if rediscache.sku: + new_result['sku'] = dict( + name=rediscache.sku.name.lower(), + size=rediscache.sku.family + str(rediscache.sku.capacity) + ) + if self.return_access_keys: + access_keys = self.list_keys() + if access_keys: + new_result['access_keys'] = dict( + primary=access_keys.primary_key, + secondary=access_keys.secondary_key + ) + return new_result + + +def main(): + """Main module execution code path""" + + AzureRMRedisCacheFacts() + + +if __name__ == '__main__': + main() diff --git a/lib/ansible/modules/cloud/azure/azure_rm_rediscache_info.py b/lib/ansible/modules/cloud/azure/azure_rm_rediscache_info.py deleted file mode 100644 index 6d9c0f6983..0000000000 --- a/lib/ansible/modules/cloud/azure/azure_rm_rediscache_info.py +++ /dev/null @@ -1,334 +0,0 @@ -#!/usr/bin/python -# -# Copyright (c) 2018 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_rediscache_info - -version_added: "2.8" - -short_description: Get Azure Cache for Redis instance facts - -description: - - Get facts for Azure Cache for Redis instance. - -options: - resource_group: - description: - - The resource group to search for the desired Azure Cache for Redis - required: True - name: - description: - - Limit results to a specific Azure Cache for Redis. - return_access_keys: - description: - - Indicate weather to return access keys of the Azure Cache for Redis. - default: False - type: bool - 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: Get Azure Cache for Redis by name - azure_rm_rediscache_info: - resource_group: myResourceGroup - name: myRedis - - - name: Get Azure Cache for Redis with access keys by name - azure_rm_rediscache_info: - resource_group: myResourceGroup - name: myRedis - return_access_keys: true - - - name: Get Azure Cache for Redis in specific resource group - azure_rm_rediscache_info: - resource_group: myResourceGroup -''' - -RETURN = ''' -rediscaches: - description: List of Azure Cache for Redis instances. - returned: always - type: complex - contains: - resource_group: - description: - - Name of a resource group where the Azure Cache for Redis belongs to. - returned: always - type: str - sample: myResourceGroup - name: - description: - - Name of the Azure Cache for Redis. - returned: always - type: str - sample: myRedis - id: - description: - - Id of the Azure Cache for Redis. - returned: always - type: str - sample: /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.Cache/Redis/myRedis - provisioning_state: - description: - - Provisioning state of the redis cahe - returned: always - type: str - sample: Creating - location: - description: - - Location of the Azure Cache for Redis. - type: str - sample: WestUS - enable_non_ssl_port: - description: - - Specifies whether the non-ssl Redis server port (6379) is enabled. - type: bool - sample: false - sku: - description: - - Dict of sku information. - type: dict - contains: - name: - description: Name of the sku. - returned: always - type: str - sample: standard - size: - description: Size of the Azure Cache for Redis. - returned: always - type: str - sample: C1 - static_ip: - description: - - Static IP address. - type: str - sample: 10.75.0.11 - subnet: - description: - - The full resource ID of a subnet in a virtual network to deploy the Azure Cache for Redis in. - type: str - sample: - - "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/Microsoft.Network/VirtualNetworks/myVirtualNetwo - rk/subnets/mySubnet" - configuration: - description: - - Dict of redis configuration. - type: dict - sample: maxmeory_reserved - host_name: - description: - - Redis host name. - type: str - sample: testRedis.redis.cache.windows.net - shard_count: - description: - - The number of shards on a Premium Cluster Cache. - type: int - sample: 1 - tenant_settings: - description: - - Dict of tenant settings. - type: dict - tags: - description: - - List of tags. - type: list - sample: - - foo - access_keys: - description: - - Azure Cache for Redis access keys. - type: dict - returned: when C(return_access_keys) is true. - contains: - primary: - description: The current primary key that clients can use to authenticate the redis cahce. - type: str - sample: X2xXXxx7xxxxxx5xxxx0xxxxx75xxxxxxxxXXXxxxxx= - secondary: - description: The current secondary key that clients can use to authenticate the redis cahce. - type: str - sample: X2xXXxx7xxxxxx5xxxx0xxxxx75xxxxxxxxXXXxxxxx= -''' - -from ansible.module_utils.azure_rm_common import AzureRMModuleBase - -try: - from azure.common import AzureHttpError - from azure.mgmt.redis import RedisManagementClient - from msrestazure.azure_exceptions import CloudError -except ImportError: - # handled in azure_rm_common - pass - -import re - - -class AzureRMRedisCacheFacts(AzureRMModuleBase): - """Utility class to get Azure Cache for Redis facts""" - - def __init__(self): - - self.module_args = dict( - name=dict(type='str'), - resource_group=dict( - type='str', - required=True - ), - return_access_keys=dict( - type='bool', - default=False - ), - tags=dict(type='list') - ) - - self.results = dict( - changed=False, - rediscaches=[] - ) - - self.name = None - self.resource_group = None - self.profile_name = None - self.tags = None - - self._client = None - - super(AzureRMRedisCacheFacts, self).__init__( - derived_arg_spec=self.module_args, - supports_tags=False, - facts_module=True - ) - - def exec_module(self, **kwargs): - - for key in self.module_args: - setattr(self, key, kwargs[key]) - - # get management client - self._client = self.get_mgmt_svc_client(RedisManagementClient, - base_url=self._cloud_environment.endpoints.resource_manager, - api_version='2018-03-01') - - if self.name: - self.results['rediscaches'] = self.get_item() - else: - self.results['rediscaches'] = self.list_by_resourcegroup() - - return self.results - - def get_item(self): - """Get a single Azure Cache for Redis""" - - self.log('Get properties for {0}'.format(self.name)) - - item = None - result = [] - - try: - item = self._client.redis.get(resource_group_name=self.resource_group, name=self.name) - except CloudError: - pass - - if item and self.has_tags(item.tags, self.tags): - result = [self.serialize_rediscache(item)] - - return result - - def list_by_resourcegroup(self): - """Get all Azure Cache for Redis within a resource group""" - - self.log('List all Azure Cache for Redis within a resource group') - - try: - response = self._client.redis.list_by_resource_group(self.resource_group) - except CloudError as exc: - self.fail('Failed to list all items - {0}'.format(str(exc))) - - results = [] - for item in response: - if self.has_tags(item.tags, self.tags): - results.append(self.serialize_rediscache(item)) - - return results - - def list_keys(self): - """List Azure Cache for Redis keys""" - - self.log('List keys for {0}'.format(self.name)) - - item = None - - try: - item = self._client.redis.list_keys(resource_group_name=self.resource_group, name=self.name) - except CloudError as exc: - self.fail("Failed to list redis keys of {0} - {1}".format(self.name, str(exc))) - - return item - - def serialize_rediscache(self, rediscache): - ''' - Convert an Azure Cache for Redis object to dict. - :param rediscache: Azure Cache for Redis object - :return: dict - ''' - new_result = dict( - id=rediscache.id, - resource_group=re.sub('\\/.*', '', re.sub('.*resourceGroups\\/', '', rediscache.id)), - name=rediscache.name, - location=rediscache.location, - provisioning_state=rediscache.provisioning_state, - configuration=rediscache.redis_configuration, - tenant_settings=rediscache.tenant_settings, - shard_count=rediscache.shard_count, - enable_non_ssl_port=rediscache.enable_non_ssl_port, - static_ip=rediscache.static_ip, - subnet=rediscache.subnet_id, - host_name=rediscache.host_name, - tags=rediscache.tags - ) - - if rediscache.sku: - new_result['sku'] = dict( - name=rediscache.sku.name.lower(), - size=rediscache.sku.family + str(rediscache.sku.capacity) - ) - if self.return_access_keys: - access_keys = self.list_keys() - if access_keys: - new_result['access_keys'] = dict( - primary=access_keys.primary_key, - secondary=access_keys.secondary_key - ) - return new_result - - -def main(): - """Main module execution code path""" - - AzureRMRedisCacheFacts() - - -if __name__ == '__main__': - main() diff --git a/lib/ansible/modules/cloud/azure/azure_rm_roleassignment_facts.py b/lib/ansible/modules/cloud/azure/azure_rm_roleassignment_facts.py new file mode 100644 index 0000000000..19999edbf8 --- /dev/null +++ b/lib/ansible/modules/cloud/azure/azure_rm_roleassignment_facts.py @@ -0,0 +1,250 @@ +#!/usr/bin/python +# +# Copyright (c) 2019 Yunge Zhu, (@yungezz) +# +# 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_roleassignment_facts +version_added: "2.8" +short_description: Gets Azure Role Assignment facts. +description: + - Gets facts of Azure Role Assignment. + +options: + scope: + description: + - The scope that the role assignment applies to. + - For example, use /subscriptions/{subscription-id}/ for a subscription, + - /subscriptions/{subscription-id}/resourceGroups/{resourcegroup-name} for a resource group, + - /subscriptions/{subscription-id}/resourceGroups/{resourcegroup-name}/providers/{resource-provider}/{resource-type}/{resource-name} for a resource + name: + description: + - Name of role assignment. + - Mutual exclusive with I(assignee). + assignee: + description: + - Object id of a user, group or service principal. + - Mutually exclusive with I(name). + +extends_documentation_fragment: + - azure + +author: + - "Yunge Zhu(@yungezz)" + +''' + +EXAMPLES = ''' + - name: Get role assignments for specific service principal + azure_rm_roleassignment_facts: + assignee: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx + + - name: Get role assignments for specific scope + azure_rm_roleassignment_facts: + scope: /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx +''' + +RETURN = ''' +roleassignments: + description: List of role assignments. + returned: always + type: complex + contains: + id: + description: + - Id of role assignment. + type: str + returned: always + sample: "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/providers/Microsoft.Authorization/roleAssignments/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" + name: + description: + - Name of role assignment. + type: str + returned: always + sample: myRoleAssignment + type: + descripition: + - Type of role assignment. + type: str + returned: always + sample: custom + principal_id: + description: + - Principal Id of the role assigned to. + type: str + returned: always + sample: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx + role_definition_id: + description: + - Role definition id that was assigned to principal_id. + type: str + returned: always + sample: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx + scope: + description: + - The role assignment scope + type: str + returned: always + sample: /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx +''' + +import time +from ansible.module_utils.azure_rm_common import AzureRMModuleBase + +try: + from msrestazure.azure_exceptions import CloudError + from msrest.serialization import Model + from azure.mgmt.authorization import AuthorizationManagementClient + +except ImportError: + # This is handled in azure_rm_common + pass + + +def roleassignment_to_dict(assignment): + return dict( + id=assignment.id, + name=assignment.name, + type=assignment.type, + principal_id=assignment.principal_id, + role_definition_id=assignment.role_definition_id, + scope=assignment.scope + ) + + +class AzureRMRoleAssignmentFacts(AzureRMModuleBase): + + def __init__(self): + self.module_arg_spec = dict( + name=dict( + type='str' + ), + scope=dict( + type='str' + ), + assignee=dict( + type='str' + ) + ) + + self.name = None + self.scope = None + self.assignee = None + + self.results = dict( + changed=False + ) + + self._client = None + + mutually_exclusive = [['name', 'assignee']] + + super(AzureRMRoleAssignmentFacts, self).__init__(derived_arg_spec=self.module_arg_spec, + supports_tags=False, + mutually_exclusive=mutually_exclusive) + + def exec_module(self, **kwargs): + """Main module execution method""" + + for key in list(self.module_arg_spec.keys()): + if hasattr(self, key): + setattr(self, key, kwargs[key]) + + # get management client + self._client = self.get_mgmt_svc_client(AuthorizationManagementClient, + base_url=self._cloud_environment.endpoints.resource_manager, + api_version="2018-01-01-preview") + + if self.name: + self.results['roleassignments'] = self.get_by_name() + elif self.assignee: + self.results['roleassignments'] = self.get_by_assignee() + elif self.resource_group: + self.results['roleassignments'] = self.list_by_resource_group() + elif self.scope: + self.results['roleassignments'] = self.list_by_scope() + else: + self.fail("Please specify name or assignee") + + return self.results + + def get_by_name(self): + ''' + Gets the properties of the specified role assignment by name. + + :return: deserialized role assignment dictionary + ''' + self.log("Gets role assignment {0} by name".format(self.name)) + + response = None + + try: + response = self._client.role_assignments.get(scope=self.scope, role_assignment_name=self.name) + + return [roleassignment_to_dict(response)] + + except CloudError as ex: + self.log("Didn't find role assignment {0} in scope {1}".format(self.name, self.scope)) + + return [] + + def get_by_assignee(self): + ''' + Gets the role assignments by assignee. + + :return: deserialized role assignment dictionary + ''' + self.log("Gets role assignment {0} by name".format(self.name)) + + response = None + filter = "principalId eq '{0}'".format(self.assignee) + try: + response = list(self._client.role_assignments.list(filter=filter)) + + if response and len(response) > 0: + return [roleassignment_to_dict(a) for a in response] + + except CloudError as ex: + self.log("Didn't find role assignments to assignee {0}".format(self.assignee)) + + return [] + + def list_by_scope(self): + ''' + Lists the role assignments by specific scope. + + :return: deserialized role assignment dictionary + ''' + self.log("Lists role assignment by resource group {0}".format(self.resource_group)) + + response = None + try: + response = list(self._client.role_assignments.list_for_scope(scope=self.scope, filter='atScope()')) + + if response and len(response) > 0: + return [roleassignment_to_dict(a) for a in response] + + except CloudError as ex: + self.log("Didn't find role assignments to scope {0}".format(self.scope)) + + return [] + + +def main(): + """Main execution""" + AzureRMRoleAssignmentFacts() + + +if __name__ == '__main__': + main() diff --git a/lib/ansible/modules/cloud/azure/azure_rm_roleassignment_info.py b/lib/ansible/modules/cloud/azure/azure_rm_roleassignment_info.py deleted file mode 100644 index a1bf0fe6c8..0000000000 --- a/lib/ansible/modules/cloud/azure/azure_rm_roleassignment_info.py +++ /dev/null @@ -1,250 +0,0 @@ -#!/usr/bin/python -# -# Copyright (c) 2019 Yunge Zhu, (@yungezz) -# -# 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_roleassignment_info -version_added: "2.8" -short_description: Gets Azure Role Assignment facts. -description: - - Gets facts of Azure Role Assignment. - -options: - scope: - description: - - The scope that the role assignment applies to. - - For example, use /subscriptions/{subscription-id}/ for a subscription, - - /subscriptions/{subscription-id}/resourceGroups/{resourcegroup-name} for a resource group, - - /subscriptions/{subscription-id}/resourceGroups/{resourcegroup-name}/providers/{resource-provider}/{resource-type}/{resource-name} for a resource - name: - description: - - Name of role assignment. - - Mutual exclusive with I(assignee). - assignee: - description: - - Object id of a user, group or service principal. - - Mutually exclusive with I(name). - -extends_documentation_fragment: - - azure - -author: - - "Yunge Zhu(@yungezz)" - -''' - -EXAMPLES = ''' - - name: Get role assignments for specific service principal - azure_rm_roleassignment_info: - assignee: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx - - - name: Get role assignments for specific scope - azure_rm_roleassignment_info: - scope: /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx -''' - -RETURN = ''' -roleassignments: - description: List of role assignments. - returned: always - type: complex - contains: - id: - description: - - Id of role assignment. - type: str - returned: always - sample: "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/providers/Microsoft.Authorization/roleAssignments/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" - name: - description: - - Name of role assignment. - type: str - returned: always - sample: myRoleAssignment - type: - descripition: - - Type of role assignment. - type: str - returned: always - sample: custom - principal_id: - description: - - Principal Id of the role assigned to. - type: str - returned: always - sample: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx - role_definition_id: - description: - - Role definition id that was assigned to principal_id. - type: str - returned: always - sample: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx - scope: - description: - - The role assignment scope - type: str - returned: always - sample: /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx -''' - -import time -from ansible.module_utils.azure_rm_common import AzureRMModuleBase - -try: - from msrestazure.azure_exceptions import CloudError - from msrest.serialization import Model - from azure.mgmt.authorization import AuthorizationManagementClient - -except ImportError: - # This is handled in azure_rm_common - pass - - -def roleassignment_to_dict(assignment): - return dict( - id=assignment.id, - name=assignment.name, - type=assignment.type, - principal_id=assignment.principal_id, - role_definition_id=assignment.role_definition_id, - scope=assignment.scope - ) - - -class AzureRMRoleAssignmentFacts(AzureRMModuleBase): - - def __init__(self): - self.module_arg_spec = dict( - name=dict( - type='str' - ), - scope=dict( - type='str' - ), - assignee=dict( - type='str' - ) - ) - - self.name = None - self.scope = None - self.assignee = None - - self.results = dict( - changed=False - ) - - self._client = None - - mutually_exclusive = [['name', 'assignee']] - - super(AzureRMRoleAssignmentFacts, self).__init__(derived_arg_spec=self.module_arg_spec, - supports_tags=False, - mutually_exclusive=mutually_exclusive) - - def exec_module(self, **kwargs): - """Main module execution method""" - - for key in list(self.module_arg_spec.keys()): - if hasattr(self, key): - setattr(self, key, kwargs[key]) - - # get management client - self._client = self.get_mgmt_svc_client(AuthorizationManagementClient, - base_url=self._cloud_environment.endpoints.resource_manager, - api_version="2018-01-01-preview") - - if self.name: - self.results['roleassignments'] = self.get_by_name() - elif self.assignee: - self.results['roleassignments'] = self.get_by_assignee() - elif self.resource_group: - self.results['roleassignments'] = self.list_by_resource_group() - elif self.scope: - self.results['roleassignments'] = self.list_by_scope() - else: - self.fail("Please specify name or assignee") - - return self.results - - def get_by_name(self): - ''' - Gets the properties of the specified role assignment by name. - - :return: deserialized role assignment dictionary - ''' - self.log("Gets role assignment {0} by name".format(self.name)) - - response = None - - try: - response = self._client.role_assignments.get(scope=self.scope, role_assignment_name=self.name) - - return [roleassignment_to_dict(response)] - - except CloudError as ex: - self.log("Didn't find role assignment {0} in scope {1}".format(self.name, self.scope)) - - return [] - - def get_by_assignee(self): - ''' - Gets the role assignments by assignee. - - :return: deserialized role assignment dictionary - ''' - self.log("Gets role assignment {0} by name".format(self.name)) - - response = None - filter = "principalId eq '{0}'".format(self.assignee) - try: - response = list(self._client.role_assignments.list(filter=filter)) - - if response and len(response) > 0: - return [roleassignment_to_dict(a) for a in response] - - except CloudError as ex: - self.log("Didn't find role assignments to assignee {0}".format(self.assignee)) - - return [] - - def list_by_scope(self): - ''' - Lists the role assignments by specific scope. - - :return: deserialized role assignment dictionary - ''' - self.log("Lists role assignment by resource group {0}".format(self.resource_group)) - - response = None - try: - response = list(self._client.role_assignments.list_for_scope(scope=self.scope, filter='atScope()')) - - if response and len(response) > 0: - return [roleassignment_to_dict(a) for a in response] - - except CloudError as ex: - self.log("Didn't find role assignments to scope {0}".format(self.scope)) - - return [] - - -def main(): - """Main execution""" - AzureRMRoleAssignmentFacts() - - -if __name__ == '__main__': - main() diff --git a/lib/ansible/modules/cloud/azure/azure_rm_roledefinition_facts.py b/lib/ansible/modules/cloud/azure/azure_rm_roledefinition_facts.py new file mode 100644 index 0000000000..c83dff0386 --- /dev/null +++ b/lib/ansible/modules/cloud/azure/azure_rm_roledefinition_facts.py @@ -0,0 +1,301 @@ +#!/usr/bin/python +# +# Copyright (c) 2019 Yunge Zhu, (@yungezz) +# +# 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_roledefinition_facts +version_added: "2.8" +short_description: Get Azure Role Definition facts. +description: + - Get facts of Azure Role Definition. + +options: + scope: + description: + - The scope of role defintion. + required: True + id: + description: + - Role definition id. + role_name: + description: Role name. + type: + description: Type of role. + choices: + - system + - custom + +extends_documentation_fragment: + - azure + +author: + - "Yunge Zhu(@yungezz)" + +''' + +EXAMPLES = ''' + - name: List Role Definitions in scope + azure_rm_roledefinition_facts: + scope: /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup + + - name: Get Role Definition by name + azure_rm_roledefinition_facts: + scope: /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup + name: myRoleDefinition +''' + +RETURN = ''' +roledefinitions: + description: A list of Role Definition facts. + returned: always + type: complex + contains: + id: + description: Role Definition id. + returned: always + type: str + sample: "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/providers/Microsoft.Authorization/roleDefinitions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" + role_name: + description: Role name. + returned: always + type: str + sample: myCustomRoleDefinition + name: + description: System assigned role name. + returned: always + type: str + sample: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx + assignable_scopes: + description: + - List of assignable scope of this definition. + returned: always + type: list + sample: "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup" + permissions: + description: + - List of Role Definition peremissions. + returned: always + contains: + actions: + description: + - List of allowed actions. + returned: always + type: list + sample: Microsoft.Compute/virtualMachines/read + not_actions: + description: + - List of denied actions. + returned: always + type: list + sample: Microsoft.Compute/virtualMachines/write + data_actions: + description: + - List of allowed data actions. + returned: always + type: list + sample: Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read + not_data_actions: + description: + - List of denied actions. + returned: always + type: list + sample: Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write +''' + +from ansible.module_utils.azure_rm_common import AzureRMModuleBase +from ansible.module_utils._text import to_native + +try: + from msrestazure.azure_exceptions import CloudError + from msrest.serialization import Model + from azure.mgmt.authorization import AuthorizationManagementClient + +except ImportError: + # This is handled in azure_rm_common + pass + + +def roledefinition_to_dict(role): + result = dict( + id=role.id, + name=role.name, + type=role.role_type, + assignable_scopes=role.assignable_scopes, + description=role.description, + role_name=role.role_name + ) + if role.permissions: + result['permissions'] = [dict( + actions=p.actions, + not_actions=p.not_actions, + data_actions=p.data_actions, + not_data_actions=p.not_data_actions + ) for p in role.permissions] + return result + + +class AzureRMRoleDefinitionFacts(AzureRMModuleBase): + def __init__(self): + self.module_arg_spec = dict( + scope=dict( + type='str', + required='true' + ), + role_name=dict(type='str'), + id=dict(type='str'), + type=dict( + type='str', + choices=['custom', 'system']) + ) + + self.role_name = None + self.scope = None + self.id = None + self.type = None + + self.results = dict( + changed=False + ) + + self._client = None + + super(AzureRMRoleDefinitionFacts, self).__init__(derived_arg_spec=self.module_arg_spec, + supports_tags=False) + + def exec_module(self, **kwargs): + """Main module execution method""" + + for key in list(self.module_arg_spec.keys()): + if hasattr(self, key): + setattr(self, key, kwargs[key]) + + if self.type: + self.type = self.get_role_type(self.type) + + # get management client + self._client = self.get_mgmt_svc_client(AuthorizationManagementClient, + base_url=self._cloud_environment.endpoints.resource_manager, + api_version="2018-01-01-preview") + + if self.id: + self.results['roledefinitions'] = self.get_by_id() + elif self.role_name: + self.results['roledefinitions'] = self.get_by_role_name() + else: + self.results['roledefinitions'] = self.list() + + return self.results + + def get_role_type(self, role_type): + if role_type: + if role_type == 'custom': + return 'CustomRole' + else: + return 'SystemRole' + return role_type + + def list(self): + ''' + List Role Definition in scope. + + :return: deserialized Role Definition state dictionary + ''' + self.log("List Role Definition in scope {0}".format(self.scope)) + + response = [] + + try: + response = list(self._client.role_definitions.list(scope=self.scope)) + + if len(response) > 0: + self.log("Response : {0}".format(response)) + roles = [] + + if self.type: + roles = [r for r in response if r.role_type == self.type] + else: + roles = response + + if len(roles) > 0: + return [roledefinition_to_dict(r) for r in roles] + + except CloudError as ex: + self.log("Didn't find role definition in scope {0}".format(self.scope)) + + return [] + + def get_by_id(self): + ''' + Get Role Definition in scope by id. + + :return: deserialized Role Definition state dictionary + ''' + self.log("Get Role Definition by id {0}".format(self.id)) + + response = None + + try: + response = self._client.role_definitions.get(scope=self.scope, role_definition_id=self.id) + if response: + response = roledefinition_to_dict(response) + if self.type: + if response.role_type == self.type: + return response + else: + return response + + except CloudError as ex: + self.log("Didn't find role definition by id {0}".format(self.id)) + + return [] + + def get_by_role_name(self): + ''' + Get Role Definition in scope by role name. + + :return: deserialized role definition state dictionary + ''' + self.log("Get Role Definition by name {0}".format(self.role_name)) + + response = None + + try: + response = self.list() + + if len(response) > 0: + roles = [] + for r in response: + if r['role_name'] == self.role_name: + roles.append(r) + + if len(roles) == 1: + self.log("Role Definition : {0} found".format(self.role_name)) + return roles[0] + if len(roles) > 1: + self.fail("Found multiple Role Definitions with name: {0}".format(self.role_name)) + + except CloudError as ex: + self.log("Didn't find Role Definition by name {0}".format(self.role_name)) + + return [] + + +def main(): + """Main execution""" + AzureRMRoleDefinitionFacts() + + +if __name__ == '__main__': + main() diff --git a/lib/ansible/modules/cloud/azure/azure_rm_roledefinition_info.py b/lib/ansible/modules/cloud/azure/azure_rm_roledefinition_info.py deleted file mode 100644 index a757a660c1..0000000000 --- a/lib/ansible/modules/cloud/azure/azure_rm_roledefinition_info.py +++ /dev/null @@ -1,301 +0,0 @@ -#!/usr/bin/python -# -# Copyright (c) 2019 Yunge Zhu, (@yungezz) -# -# 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_roledefinition_info -version_added: "2.8" -short_description: Get Azure Role Definition facts. -description: - - Get facts of Azure Role Definition. - -options: - scope: - description: - - The scope of role defintion. - required: True - id: - description: - - Role definition id. - role_name: - description: Role name. - type: - description: Type of role. - choices: - - system - - custom - -extends_documentation_fragment: - - azure - -author: - - "Yunge Zhu(@yungezz)" - -''' - -EXAMPLES = ''' - - name: List Role Definitions in scope - azure_rm_roledefinition_info: - scope: /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup - - - name: Get Role Definition by name - azure_rm_roledefinition_info: - scope: /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup - name: myRoleDefinition -''' - -RETURN = ''' -roledefinitions: - description: A list of Role Definition facts. - returned: always - type: complex - contains: - id: - description: Role Definition id. - returned: always - type: str - sample: "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/providers/Microsoft.Authorization/roleDefinitions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" - role_name: - description: Role name. - returned: always - type: str - sample: myCustomRoleDefinition - name: - description: System assigned role name. - returned: always - type: str - sample: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx - assignable_scopes: - description: - - List of assignable scope of this definition. - returned: always - type: list - sample: "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup" - permissions: - description: - - List of Role Definition peremissions. - returned: always - contains: - actions: - description: - - List of allowed actions. - returned: always - type: list - sample: Microsoft.Compute/virtualMachines/read - not_actions: - description: - - List of denied actions. - returned: always - type: list - sample: Microsoft.Compute/virtualMachines/write - data_actions: - description: - - List of allowed data actions. - returned: always - type: list - sample: Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read - not_data_actions: - description: - - List of denied actions. - returned: always - type: list - sample: Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write -''' - -from ansible.module_utils.azure_rm_common import AzureRMModuleBase -from ansible.module_utils._text import to_native - -try: - from msrestazure.azure_exceptions import CloudError - from msrest.serialization import Model - from azure.mgmt.authorization import AuthorizationManagementClient - -except ImportError: - # This is handled in azure_rm_common - pass - - -def roledefinition_to_dict(role): - result = dict( - id=role.id, - name=role.name, - type=role.role_type, - assignable_scopes=role.assignable_scopes, - description=role.description, - role_name=role.role_name - ) - if role.permissions: - result['permissions'] = [dict( - actions=p.actions, - not_actions=p.not_actions, - data_actions=p.data_actions, - not_data_actions=p.not_data_actions - ) for p in role.permissions] - return result - - -class AzureRMRoleDefinitionFacts(AzureRMModuleBase): - def __init__(self): - self.module_arg_spec = dict( - scope=dict( - type='str', - required='true' - ), - role_name=dict(type='str'), - id=dict(type='str'), - type=dict( - type='str', - choices=['custom', 'system']) - ) - - self.role_name = None - self.scope = None - self.id = None - self.type = None - - self.results = dict( - changed=False - ) - - self._client = None - - super(AzureRMRoleDefinitionFacts, self).__init__(derived_arg_spec=self.module_arg_spec, - supports_tags=False) - - def exec_module(self, **kwargs): - """Main module execution method""" - - for key in list(self.module_arg_spec.keys()): - if hasattr(self, key): - setattr(self, key, kwargs[key]) - - if self.type: - self.type = self.get_role_type(self.type) - - # get management client - self._client = self.get_mgmt_svc_client(AuthorizationManagementClient, - base_url=self._cloud_environment.endpoints.resource_manager, - api_version="2018-01-01-preview") - - if self.id: - self.results['roledefinitions'] = self.get_by_id() - elif self.role_name: - self.results['roledefinitions'] = self.get_by_role_name() - else: - self.results['roledefinitions'] = self.list() - - return self.results - - def get_role_type(self, role_type): - if role_type: - if role_type == 'custom': - return 'CustomRole' - else: - return 'SystemRole' - return role_type - - def list(self): - ''' - List Role Definition in scope. - - :return: deserialized Role Definition state dictionary - ''' - self.log("List Role Definition in scope {0}".format(self.scope)) - - response = [] - - try: - response = list(self._client.role_definitions.list(scope=self.scope)) - - if len(response) > 0: - self.log("Response : {0}".format(response)) - roles = [] - - if self.type: - roles = [r for r in response if r.role_type == self.type] - else: - roles = response - - if len(roles) > 0: - return [roledefinition_to_dict(r) for r in roles] - - except CloudError as ex: - self.log("Didn't find role definition in scope {0}".format(self.scope)) - - return [] - - def get_by_id(self): - ''' - Get Role Definition in scope by id. - - :return: deserialized Role Definition state dictionary - ''' - self.log("Get Role Definition by id {0}".format(self.id)) - - response = None - - try: - response = self._client.role_definitions.get(scope=self.scope, role_definition_id=self.id) - if response: - response = roledefinition_to_dict(response) - if self.type: - if response.role_type == self.type: - return response - else: - return response - - except CloudError as ex: - self.log("Didn't find role definition by id {0}".format(self.id)) - - return [] - - def get_by_role_name(self): - ''' - Get Role Definition in scope by role name. - - :return: deserialized role definition state dictionary - ''' - self.log("Get Role Definition by name {0}".format(self.role_name)) - - response = None - - try: - response = self.list() - - if len(response) > 0: - roles = [] - for r in response: - if r['role_name'] == self.role_name: - roles.append(r) - - if len(roles) == 1: - self.log("Role Definition : {0} found".format(self.role_name)) - return roles[0] - if len(roles) > 1: - self.fail("Found multiple Role Definitions with name: {0}".format(self.role_name)) - - except CloudError as ex: - self.log("Didn't find Role Definition by name {0}".format(self.role_name)) - - return [] - - -def main(): - """Main execution""" - AzureRMRoleDefinitionFacts() - - -if __name__ == '__main__': - main() diff --git a/lib/ansible/modules/cloud/azure/azure_rm_sqldatabase_facts.py b/lib/ansible/modules/cloud/azure/azure_rm_sqldatabase_facts.py new file mode 100644 index 0000000000..f281870e3c --- /dev/null +++ b/lib/ansible/modules/cloud/azure/azure_rm_sqldatabase_facts.py @@ -0,0 +1,286 @@ +#!/usr/bin/python +# +# Copyright (c) 2019 Zim Kalinowski, (@zikalino) +# +# 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_sqldatabase_facts +version_added: "2.8" +short_description: Get Azure SQL Database facts. +description: + - Get facts of Azure SQL Database. + +options: + resource_group: + description: + - The name of the resource group that contains the resource. You can obtain this value from the Azure Resource Manager API or the portal. + required: True + server_name: + description: + - The name of the server. + required: True + name: + description: + - The name of the database. + elastic_pool_name: + description: + - The name of the elastic pool. + tags: + description: + - Limit results by providing a list of tags. Format tags as 'key' or 'key:value'. + +extends_documentation_fragment: + - azure + +author: + - "Zim Kalinowski (@zikalino)" + +''' + +EXAMPLES = ''' + - name: Get instance of SQL Database + azure_rm_sqldatabase_facts: + resource_group: testrg + server_name: testserver + name: testdb + + - name: List instances of SQL Database + azure_rm_sqldatabase_facts: + resource_group: testrg + server_name: testserver + elastic_pool_name: testep + + - name: List instances of SQL Database + azure_rm_sqldatabase_facts: + resource_group: testrg + server_name: testserver +''' + +RETURN = ''' +databases: + description: A list of dictionaries containing facts for SQL Database. + returned: always + type: complex + contains: + id: + description: + - Resource ID. + returned: always + type: str + sample: /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/testrg/providers/Microsoft.Sql/servers/testserver/databases/testdb + name: + description: + - Database name. + returned: always + type: str + sample: testdb + location: + description: + - Resource location. + returned: always + type: str + sample: southeastasia + tags: + description: + - Resource tags. + returned: always + type: dict + sample: + taga: aaa + tagb: bbb + sku: + description: + - The name and tier of the SKU. + returned: always + type: complex + sample: sku + contains: + name: + description: + - The name of the SKU. + returned: always + type: str + sample: BC_Gen4_2 + tier: + description: + - Service tier. + returned: always + type: str + sample: BusinessCritical + capacity: + description: + - Capacity. + returned: always + type: int + sample: 2 + kind: + description: + - Kind of database. This is metadata used for the Azure portal experience. + returned: always + type: str + sample: v12.0,user + collation: + description: + - The collation of the database. + returned: always + type: str + sample: SQL_Latin1_General_CP1_CI_AS + status: + description: + - The status of the database. + returned: always + type: str + sample: Online + zone_redundant: + description: + - Whether or not this database is zone redundant, which means the replicas of this database will be spread across multiple availability zones. + returned: always + type: bool + sample: true +''' + +from ansible.module_utils.azure_rm_common import AzureRMModuleBase + +try: + from msrestazure.azure_exceptions import CloudError + from azure.mgmt.sql import SqlManagementClient + from msrest.serialization import Model +except ImportError: + # This is handled in azure_rm_common + pass + + +class AzureRMSqlDatabaseFacts(AzureRMModuleBase): + def __init__(self): + # define user inputs into argument + self.module_arg_spec = dict( + resource_group=dict( + type='str', + required=True + ), + server_name=dict( + type='str', + required=True + ), + name=dict( + type='str' + ), + elastic_pool_name=dict( + type='str' + ), + tags=dict( + type='list' + ) + ) + # store the results of the module operation + self.results = dict( + changed=False + ) + self.resource_group = None + self.server_name = None + self.name = None + self.elastic_pool_name = None + self.tags = None + super(AzureRMSqlDatabaseFacts, self).__init__(self.module_arg_spec, supports_tags=False) + + def exec_module(self, **kwargs): + for key in self.module_arg_spec: + setattr(self, key, kwargs[key]) + + if self.name is not None: + self.results['databases'] = self.get() + elif self.elastic_pool_name is not None: + self.results['databases'] = self.list_by_elastic_pool() + else: + self.results['databases'] = self.list_by_server() + return self.results + + def get(self): + response = None + results = [] + try: + response = self.sql_client.databases.get(resource_group_name=self.resource_group, + server_name=self.server_name, + database_name=self.name) + self.log("Response : {0}".format(response)) + except CloudError as e: + self.log('Could not get facts for Databases.') + + if response and self.has_tags(response.tags, self.tags): + results.append(self.format_item(response)) + + return results + + def list_by_elastic_pool(self): + response = None + results = [] + try: + response = self.sql_client.databases.list_by_elastic_pool(resource_group_name=self.resource_group, + server_name=self.server_name, + elastic_pool_name=self.elastic_pool_name) + self.log("Response : {0}".format(response)) + except CloudError as e: + self.fail('Could not get facts for Databases.') + + if response is not None: + for item in response: + if self.has_tags(item.tags, self.tags): + results.append(self.format_item(item)) + + return results + + def list_by_server(self): + response = None + results = [] + try: + response = self.sql_client.databases.list_by_server(resource_group_name=self.resource_group, + server_name=self.server_name) + self.log("Response : {0}".format(response)) + except CloudError as e: + self.fail('Could not get facts for Databases.') + + if response is not None: + for item in response: + if self.has_tags(item.tags, self.tags): + results.append(self.format_item(item)) + + return results + + def format_item(self, item): + d = item.as_dict() + d = { + 'resource_group': self.resource_group, + 'id': d.get('id', None), + 'name': d.get('name', None), + 'location': d.get('location', None), + 'tags': d.get('tags', None), + 'sku': { + 'name': d.get('sku', {}).get('name', None), + 'tier': d.get('sku', {}).get('tier', None), + 'capacity': d.get('sku', {}).get('capacity', None) + }, + 'kind': d.get('kind', None), + 'collation': d.get('collation', None), + 'status': d.get('status', None), + 'zone_redundant': d.get('zone_redundant', None) + } + return d + + +def main(): + AzureRMSqlDatabaseFacts() + + +if __name__ == '__main__': + main() diff --git a/lib/ansible/modules/cloud/azure/azure_rm_sqldatabase_info.py b/lib/ansible/modules/cloud/azure/azure_rm_sqldatabase_info.py deleted file mode 100644 index ed72d0fe7c..0000000000 --- a/lib/ansible/modules/cloud/azure/azure_rm_sqldatabase_info.py +++ /dev/null @@ -1,286 +0,0 @@ -#!/usr/bin/python -# -# Copyright (c) 2019 Zim Kalinowski, (@zikalino) -# -# 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_sqldatabase_info -version_added: "2.8" -short_description: Get Azure SQL Database facts. -description: - - Get facts of Azure SQL Database. - -options: - resource_group: - description: - - The name of the resource group that contains the resource. You can obtain this value from the Azure Resource Manager API or the portal. - required: True - server_name: - description: - - The name of the server. - required: True - name: - description: - - The name of the database. - elastic_pool_name: - description: - - The name of the elastic pool. - tags: - description: - - Limit results by providing a list of tags. Format tags as 'key' or 'key:value'. - -extends_documentation_fragment: - - azure - -author: - - "Zim Kalinowski (@zikalino)" - -''' - -EXAMPLES = ''' - - name: Get instance of SQL Database - azure_rm_sqldatabase_info: - resource_group: testrg - server_name: testserver - name: testdb - - - name: List instances of SQL Database - azure_rm_sqldatabase_info: - resource_group: testrg - server_name: testserver - elastic_pool_name: testep - - - name: List instances of SQL Database - azure_rm_sqldatabase_info: - resource_group: testrg - server_name: testserver -''' - -RETURN = ''' -databases: - description: A list of dictionaries containing facts for SQL Database. - returned: always - type: complex - contains: - id: - description: - - Resource ID. - returned: always - type: str - sample: /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/testrg/providers/Microsoft.Sql/servers/testserver/databases/testdb - name: - description: - - Database name. - returned: always - type: str - sample: testdb - location: - description: - - Resource location. - returned: always - type: str - sample: southeastasia - tags: - description: - - Resource tags. - returned: always - type: dict - sample: - taga: aaa - tagb: bbb - sku: - description: - - The name and tier of the SKU. - returned: always - type: complex - sample: sku - contains: - name: - description: - - The name of the SKU. - returned: always - type: str - sample: BC_Gen4_2 - tier: - description: - - Service tier. - returned: always - type: str - sample: BusinessCritical - capacity: - description: - - Capacity. - returned: always - type: int - sample: 2 - kind: - description: - - Kind of database. This is metadata used for the Azure portal experience. - returned: always - type: str - sample: v12.0,user - collation: - description: - - The collation of the database. - returned: always - type: str - sample: SQL_Latin1_General_CP1_CI_AS - status: - description: - - The status of the database. - returned: always - type: str - sample: Online - zone_redundant: - description: - - Whether or not this database is zone redundant, which means the replicas of this database will be spread across multiple availability zones. - returned: always - type: bool - sample: true -''' - -from ansible.module_utils.azure_rm_common import AzureRMModuleBase - -try: - from msrestazure.azure_exceptions import CloudError - from azure.mgmt.sql import SqlManagementClient - from msrest.serialization import Model -except ImportError: - # This is handled in azure_rm_common - pass - - -class AzureRMSqlDatabaseFacts(AzureRMModuleBase): - def __init__(self): - # define user inputs into argument - self.module_arg_spec = dict( - resource_group=dict( - type='str', - required=True - ), - server_name=dict( - type='str', - required=True - ), - name=dict( - type='str' - ), - elastic_pool_name=dict( - type='str' - ), - tags=dict( - type='list' - ) - ) - # store the results of the module operation - self.results = dict( - changed=False - ) - self.resource_group = None - self.server_name = None - self.name = None - self.elastic_pool_name = None - self.tags = None - super(AzureRMSqlDatabaseFacts, self).__init__(self.module_arg_spec, supports_tags=False) - - def exec_module(self, **kwargs): - for key in self.module_arg_spec: - setattr(self, key, kwargs[key]) - - if self.name is not None: - self.results['databases'] = self.get() - elif self.elastic_pool_name is not None: - self.results['databases'] = self.list_by_elastic_pool() - else: - self.results['databases'] = self.list_by_server() - return self.results - - def get(self): - response = None - results = [] - try: - response = self.sql_client.databases.get(resource_group_name=self.resource_group, - server_name=self.server_name, - database_name=self.name) - self.log("Response : {0}".format(response)) - except CloudError as e: - self.log('Could not get facts for Databases.') - - if response and self.has_tags(response.tags, self.tags): - results.append(self.format_item(response)) - - return results - - def list_by_elastic_pool(self): - response = None - results = [] - try: - response = self.sql_client.databases.list_by_elastic_pool(resource_group_name=self.resource_group, - server_name=self.server_name, - elastic_pool_name=self.elastic_pool_name) - self.log("Response : {0}".format(response)) - except CloudError as e: - self.fail('Could not get facts for Databases.') - - if response is not None: - for item in response: - if self.has_tags(item.tags, self.tags): - results.append(self.format_item(item)) - - return results - - def list_by_server(self): - response = None - results = [] - try: - response = self.sql_client.databases.list_by_server(resource_group_name=self.resource_group, - server_name=self.server_name) - self.log("Response : {0}".format(response)) - except CloudError as e: - self.fail('Could not get facts for Databases.') - - if response is not None: - for item in response: - if self.has_tags(item.tags, self.tags): - results.append(self.format_item(item)) - - return results - - def format_item(self, item): - d = item.as_dict() - d = { - 'resource_group': self.resource_group, - 'id': d.get('id', None), - 'name': d.get('name', None), - 'location': d.get('location', None), - 'tags': d.get('tags', None), - 'sku': { - 'name': d.get('sku', {}).get('name', None), - 'tier': d.get('sku', {}).get('tier', None), - 'capacity': d.get('sku', {}).get('capacity', None) - }, - 'kind': d.get('kind', None), - 'collation': d.get('collation', None), - 'status': d.get('status', None), - 'zone_redundant': d.get('zone_redundant', None) - } - return d - - -def main(): - AzureRMSqlDatabaseFacts() - - -if __name__ == '__main__': - main() diff --git a/lib/ansible/modules/cloud/azure/azure_rm_sqlfirewallrule_facts.py b/lib/ansible/modules/cloud/azure/azure_rm_sqlfirewallrule_facts.py new file mode 100644 index 0000000000..be79e642ea --- /dev/null +++ b/lib/ansible/modules/cloud/azure/azure_rm_sqlfirewallrule_facts.py @@ -0,0 +1,210 @@ +#!/usr/bin/python +# +# Copyright (c) 2017 Zim Kalinowski, +# +# 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_sqlfirewallrule_facts +version_added: "2.8" +short_description: Get Azure SQL Firewall Rule facts. +description: + - Get facts of SQL Firewall Rule. + +options: + resource_group: + description: + - The name of the resource group that contains the server. + required: True + server_name: + description: + - The name of the server. + required: True + name: + description: + - The name of the firewall rule. + +extends_documentation_fragment: + - azure + +author: + - "Zim Kalinowski (@zikalino)" + +''' + +EXAMPLES = ''' + - name: Get instance of SQL Firewall Rule + azure_rm_sqlfirewallrule_facts: + resource_group: myResourceGroup + server_name: testserver + name: testrule + + - name: List instances of SQL Firewall Rule + azure_rm_sqlfirewallrule_facts: + resource_group: myResourceGroup + server_name: testserver +''' + +RETURN = ''' +rules: + description: A list of dict results containing the facts for matching SQL firewall rules. + returned: always + type: complex + contains: + id: + description: + - Resource ID + returned: always + type: str + sample: "/subscriptions/xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.Sql/servers/testser + ver/firewallRules/testrule" + resource_group: + description: + - Resource group name. + returned: always + type: str + sample: testgroup + server_name: + description: + - SQL server name. + returned: always + type: str + sample: testserver + name: + description: + - Firewall rule name. + returned: always + type: str + sample: testrule + start_ip_address: + description: + - The start IP address of the firewall rule. + returned: always + type: str + sample: 10.0.0.1 + end_ip_address: + description: + - The start IP address of the firewall rule. + returned: always + type: str + sample: 10.0.0.5 +''' + +from ansible.module_utils.azure_rm_common import AzureRMModuleBase + +try: + from msrestazure.azure_exceptions import CloudError + from msrest.polling import LROPoller + from azure.mgmt.sql import SqlManagementClient + from msrest.serialization import Model +except ImportError: + # This is handled in azure_rm_common + pass + + +class AzureRMSqlFirewallRuleFacts(AzureRMModuleBase): + def __init__(self): + # define user inputs into argument + self.module_arg_spec = dict( + resource_group=dict( + type='str', + required=True + ), + server_name=dict( + type='str', + required=True + ), + name=dict( + type='str' + ) + ) + # store the results of the module operation + self.results = dict( + changed=False + ) + self.resource_group = None + self.server_name = None + self.name = None + super(AzureRMSqlFirewallRuleFacts, self).__init__(self.module_arg_spec, supports_tags=False) + + def exec_module(self, **kwargs): + for key in self.module_arg_spec: + setattr(self, key, kwargs[key]) + + if (self.name is not None): + self.results['rules'] = self.get() + else: + self.results['rules'] = self.list_by_server() + return self.results + + def get(self): + ''' + Gets facts of the specified SQL Firewall Rule. + + :return: deserialized SQL Firewall Ruleinstance state dictionary + ''' + response = None + results = [] + try: + response = self.sql_client.firewall_rules.get(resource_group_name=self.resource_group, + server_name=self.server_name, + firewall_rule_name=self.name) + self.log("Response : {0}".format(response)) + except CloudError as e: + self.log('Could not get facts for FirewallRules.') + + if response is not None: + results.append(self.format_item(response)) + + return results + + def list_by_server(self): + ''' + Gets facts of the specified SQL Firewall Rule. + + :return: deserialized SQL Firewall Ruleinstance state dictionary + ''' + response = None + results = [] + try: + response = self.sql_client.firewall_rules.list_by_server(resource_group_name=self.resource_group, + server_name=self.server_name) + self.log("Response : {0}".format(response)) + except CloudError as e: + self.log('Could not get facts for FirewallRules.') + + if response is not None: + for item in response: + results.append(self.format_item(item)) + + return results + + def format_item(self, item): + d = item.as_dict() + d = { + 'id': d['id'], + 'resource_group': self.resource_group, + 'server_name': self.server_name, + 'name': d['name'], + 'start_ip_address': d['start_ip_address'], + 'end_ip_address': d['end_ip_address'] + } + return d + + +def main(): + AzureRMSqlFirewallRuleFacts() + + +if __name__ == '__main__': + main() diff --git a/lib/ansible/modules/cloud/azure/azure_rm_sqlfirewallrule_info.py b/lib/ansible/modules/cloud/azure/azure_rm_sqlfirewallrule_info.py deleted file mode 100644 index 28114a60c1..0000000000 --- a/lib/ansible/modules/cloud/azure/azure_rm_sqlfirewallrule_info.py +++ /dev/null @@ -1,210 +0,0 @@ -#!/usr/bin/python -# -# Copyright (c) 2017 Zim Kalinowski, -# -# 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_sqlfirewallrule_info -version_added: "2.8" -short_description: Get Azure SQL Firewall Rule facts. -description: - - Get facts of SQL Firewall Rule. - -options: - resource_group: - description: - - The name of the resource group that contains the server. - required: True - server_name: - description: - - The name of the server. - required: True - name: - description: - - The name of the firewall rule. - -extends_documentation_fragment: - - azure - -author: - - "Zim Kalinowski (@zikalino)" - -''' - -EXAMPLES = ''' - - name: Get instance of SQL Firewall Rule - azure_rm_sqlfirewallrule_info: - resource_group: myResourceGroup - server_name: testserver - name: testrule - - - name: List instances of SQL Firewall Rule - azure_rm_sqlfirewallrule_info: - resource_group: myResourceGroup - server_name: testserver -''' - -RETURN = ''' -rules: - description: A list of dict results containing the facts for matching SQL firewall rules. - returned: always - type: complex - contains: - id: - description: - - Resource ID - returned: always - type: str - sample: "/subscriptions/xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.Sql/servers/testser - ver/firewallRules/testrule" - resource_group: - description: - - Resource group name. - returned: always - type: str - sample: testgroup - server_name: - description: - - SQL server name. - returned: always - type: str - sample: testserver - name: - description: - - Firewall rule name. - returned: always - type: str - sample: testrule - start_ip_address: - description: - - The start IP address of the firewall rule. - returned: always - type: str - sample: 10.0.0.1 - end_ip_address: - description: - - The start IP address of the firewall rule. - returned: always - type: str - sample: 10.0.0.5 -''' - -from ansible.module_utils.azure_rm_common import AzureRMModuleBase - -try: - from msrestazure.azure_exceptions import CloudError - from msrest.polling import LROPoller - from azure.mgmt.sql import SqlManagementClient - from msrest.serialization import Model -except ImportError: - # This is handled in azure_rm_common - pass - - -class AzureRMSqlFirewallRuleFacts(AzureRMModuleBase): - def __init__(self): - # define user inputs into argument - self.module_arg_spec = dict( - resource_group=dict( - type='str', - required=True - ), - server_name=dict( - type='str', - required=True - ), - name=dict( - type='str' - ) - ) - # store the results of the module operation - self.results = dict( - changed=False - ) - self.resource_group = None - self.server_name = None - self.name = None - super(AzureRMSqlFirewallRuleFacts, self).__init__(self.module_arg_spec, supports_tags=False) - - def exec_module(self, **kwargs): - for key in self.module_arg_spec: - setattr(self, key, kwargs[key]) - - if (self.name is not None): - self.results['rules'] = self.get() - else: - self.results['rules'] = self.list_by_server() - return self.results - - def get(self): - ''' - Gets facts of the specified SQL Firewall Rule. - - :return: deserialized SQL Firewall Ruleinstance state dictionary - ''' - response = None - results = [] - try: - response = self.sql_client.firewall_rules.get(resource_group_name=self.resource_group, - server_name=self.server_name, - firewall_rule_name=self.name) - self.log("Response : {0}".format(response)) - except CloudError as e: - self.log('Could not get facts for FirewallRules.') - - if response is not None: - results.append(self.format_item(response)) - - return results - - def list_by_server(self): - ''' - Gets facts of the specified SQL Firewall Rule. - - :return: deserialized SQL Firewall Ruleinstance state dictionary - ''' - response = None - results = [] - try: - response = self.sql_client.firewall_rules.list_by_server(resource_group_name=self.resource_group, - server_name=self.server_name) - self.log("Response : {0}".format(response)) - except CloudError as e: - self.log('Could not get facts for FirewallRules.') - - if response is not None: - for item in response: - results.append(self.format_item(item)) - - return results - - def format_item(self, item): - d = item.as_dict() - d = { - 'id': d['id'], - 'resource_group': self.resource_group, - 'server_name': self.server_name, - 'name': d['name'], - 'start_ip_address': d['start_ip_address'], - 'end_ip_address': d['end_ip_address'] - } - return d - - -def main(): - AzureRMSqlFirewallRuleFacts() - - -if __name__ == '__main__': - main() diff --git a/lib/ansible/modules/cloud/azure/azure_rm_subnet_facts.py b/lib/ansible/modules/cloud/azure/azure_rm_subnet_facts.py new file mode 100644 index 0000000000..30927847c1 --- /dev/null +++ b/lib/ansible/modules/cloud/azure/azure_rm_subnet_facts.py @@ -0,0 +1,237 @@ +#!/usr/bin/python +# +# Copyright (c) 2019 Zim Kalinowski, (@zikalino) +# +# 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_subnet_facts +version_added: "2.8" +short_description: Get Azure Subnet facts. +description: + - Get facts of Azure Subnet. + +options: + resource_group: + description: + - The name of the resource group. + required: True + virtual_network_name: + description: + - The name of the virtual network. + required: True + name: + description: + - The name of the subnet. + +extends_documentation_fragment: + - azure + +author: + - "Zim Kalinowski (@zikalino)" + +''' + +EXAMPLES = ''' + - name: Get facts of specific subnet + azure_rm_subnet_facts: + resource_group: myResourceGroup + virtual_network_name: myVirtualNetwork + name: mySubnet + + - name: List facts for all subnets in virtual network + azure_rm_subnet_facts: + resource_group: myResourceGroup + virtual_network_name: myVirtualNetwork + name: mySubnet +''' + +RETURN = ''' +subnets: + description: A list of dictionaries containing facts for subnet. + returned: always + type: complex + contains: + id: + description: + - Subnet resource ID. + returned: always + type: str + sample: "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.Network/virtualNetworks/my + VirtualNetwork/subnets/mySubnet" + resource_group: + description: + - Name of resource group. + returned: always + type: str + sample: myResourceGroup + virtual_network_name: + description: + - Name of the containing virtual network. + returned: always + type: str + sample: myVirtualNetwork + name: + description: + - Name of the subnet. + returned: always + type: str + sample: mySubnet + address_prefix_cidr: + description: + - CIDR defining the IPv4 address space of the subnet. + returned: always + type: str + sample: "10.1.0.0/16" + route_table: + description: + - Associated route table id. + returned: always + type: str + sample: /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.Network/routeTables/myRouteTable + security_group: + description: + - Associated security group id. + returned: always + type: str + sample: "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkSecurityGr + oups/myNsg" + service_endpoints: + description: + - List of service endpoints. + type: list + returned: when available + contains: + service: + description: + - The type of the endpoint service. + required: True + locations: + description: + - A list of location names. + type: list + provisioning_state: + description: + - Provisioning state. + returned: always + type: str + sample: Succeeded + provisioning_state: + description: + - Provisioning state. + returned: always + type: str + sample: Succeeded +''' + +from ansible.module_utils.azure_rm_common import AzureRMModuleBase + +try: + from msrestazure.azure_exceptions import CloudError + from azure.mgmt.network import NetworkManagementClient + from msrest.serialization import Model +except ImportError: + # This is handled in azure_rm_common + pass + + +class AzureRMSubnetFacts(AzureRMModuleBase): + def __init__(self): + # define user inputs into argument + self.module_arg_spec = dict( + resource_group=dict( + type='str', + required=True + ), + virtual_network_name=dict( + type='str', + required=True + ), + name=dict( + type='str' + ) + ) + # store the results of the module operation + self.results = dict( + changed=False + ) + self.resource_group = None + self.virtual_network_name = None + self.name = None + super(AzureRMSubnetFacts, self).__init__(self.module_arg_spec, supports_tags=False) + + def exec_module(self, **kwargs): + for key in self.module_arg_spec: + setattr(self, key, kwargs[key]) + + if self.name is not None: + self.results['subnets'] = self.get() + else: + self.results['subnets'] = self.list() + + return self.results + + def get(self): + response = None + results = [] + try: + response = self.network_client.subnets.get(resource_group_name=self.resource_group, + virtual_network_name=self.virtual_network_name, + subnet_name=self.name) + self.log("Response : {0}".format(response)) + except CloudError as e: + self.fail('Could not get facts for Subnet.') + + if response is not None: + results.append(self.format_response(response)) + + return results + + def list(self): + response = None + results = [] + try: + response = self.network_client.subnets.get(resource_group_name=self.resource_group, + virtual_network_name=self.virtual_network_name) + self.log("Response : {0}".format(response)) + except CloudError as e: + self.fail('Could not get facts for Subnet.') + + if response is not None: + for item in response: + results.append(self.format_item(item)) + + return results + + def format_response(self, item): + d = item.as_dict() + d = { + 'resource_group': self.resource_group, + 'virtual_network_name': self.parse_resource_to_dict(d.get('id')).get('name'), + 'name': d.get('name'), + 'id': d.get('id'), + 'address_prefix_cidr': d.get('address_prefix'), + 'route_table': d.get('route_table', {}).get('id'), + 'security_group': d.get('network_security_group', {}).get('id'), + 'provisioning_state': d.get('provisioning_state'), + 'service_endpoints': d.get('service_endpoints') + } + return d + + +def main(): + AzureRMSubnetFacts() + + +if __name__ == '__main__': + main() diff --git a/lib/ansible/modules/cloud/azure/azure_rm_subnet_info.py b/lib/ansible/modules/cloud/azure/azure_rm_subnet_info.py deleted file mode 100644 index c4a737aed9..0000000000 --- a/lib/ansible/modules/cloud/azure/azure_rm_subnet_info.py +++ /dev/null @@ -1,237 +0,0 @@ -#!/usr/bin/python -# -# Copyright (c) 2019 Zim Kalinowski, (@zikalino) -# -# 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_subnet_info -version_added: "2.8" -short_description: Get Azure Subnet facts. -description: - - Get facts of Azure Subnet. - -options: - resource_group: - description: - - The name of the resource group. - required: True - virtual_network_name: - description: - - The name of the virtual network. - required: True - name: - description: - - The name of the subnet. - -extends_documentation_fragment: - - azure - -author: - - "Zim Kalinowski (@zikalino)" - -''' - -EXAMPLES = ''' - - name: Get facts of specific subnet - azure_rm_subnet_info: - resource_group: myResourceGroup - virtual_network_name: myVirtualNetwork - name: mySubnet - - - name: List facts for all subnets in virtual network - azure_rm_subnet_info: - resource_group: myResourceGroup - virtual_network_name: myVirtualNetwork - name: mySubnet -''' - -RETURN = ''' -subnets: - description: A list of dictionaries containing facts for subnet. - returned: always - type: complex - contains: - id: - description: - - Subnet resource ID. - returned: always - type: str - sample: "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.Network/virtualNetworks/my - VirtualNetwork/subnets/mySubnet" - resource_group: - description: - - Name of resource group. - returned: always - type: str - sample: myResourceGroup - virtual_network_name: - description: - - Name of the containing virtual network. - returned: always - type: str - sample: myVirtualNetwork - name: - description: - - Name of the subnet. - returned: always - type: str - sample: mySubnet - address_prefix_cidr: - description: - - CIDR defining the IPv4 address space of the subnet. - returned: always - type: str - sample: "10.1.0.0/16" - route_table: - description: - - Associated route table id. - returned: always - type: str - sample: /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.Network/routeTables/myRouteTable - security_group: - description: - - Associated security group id. - returned: always - type: str - sample: "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkSecurityGr - oups/myNsg" - service_endpoints: - description: - - List of service endpoints. - type: list - returned: when available - contains: - service: - description: - - The type of the endpoint service. - required: True - locations: - description: - - A list of location names. - type: list - provisioning_state: - description: - - Provisioning state. - returned: always - type: str - sample: Succeeded - provisioning_state: - description: - - Provisioning state. - returned: always - type: str - sample: Succeeded -''' - -from ansible.module_utils.azure_rm_common import AzureRMModuleBase - -try: - from msrestazure.azure_exceptions import CloudError - from azure.mgmt.network import NetworkManagementClient - from msrest.serialization import Model -except ImportError: - # This is handled in azure_rm_common - pass - - -class AzureRMSubnetFacts(AzureRMModuleBase): - def __init__(self): - # define user inputs into argument - self.module_arg_spec = dict( - resource_group=dict( - type='str', - required=True - ), - virtual_network_name=dict( - type='str', - required=True - ), - name=dict( - type='str' - ) - ) - # store the results of the module operation - self.results = dict( - changed=False - ) - self.resource_group = None - self.virtual_network_name = None - self.name = None - super(AzureRMSubnetFacts, self).__init__(self.module_arg_spec, supports_tags=False) - - def exec_module(self, **kwargs): - for key in self.module_arg_spec: - setattr(self, key, kwargs[key]) - - if self.name is not None: - self.results['subnets'] = self.get() - else: - self.results['subnets'] = self.list() - - return self.results - - def get(self): - response = None - results = [] - try: - response = self.network_client.subnets.get(resource_group_name=self.resource_group, - virtual_network_name=self.virtual_network_name, - subnet_name=self.name) - self.log("Response : {0}".format(response)) - except CloudError as e: - self.fail('Could not get facts for Subnet.') - - if response is not None: - results.append(self.format_response(response)) - - return results - - def list(self): - response = None - results = [] - try: - response = self.network_client.subnets.get(resource_group_name=self.resource_group, - virtual_network_name=self.virtual_network_name) - self.log("Response : {0}".format(response)) - except CloudError as e: - self.fail('Could not get facts for Subnet.') - - if response is not None: - for item in response: - results.append(self.format_item(item)) - - return results - - def format_response(self, item): - d = item.as_dict() - d = { - 'resource_group': self.resource_group, - 'virtual_network_name': self.parse_resource_to_dict(d.get('id')).get('name'), - 'name': d.get('name'), - 'id': d.get('id'), - 'address_prefix_cidr': d.get('address_prefix'), - 'route_table': d.get('route_table', {}).get('id'), - 'security_group': d.get('network_security_group', {}).get('id'), - 'provisioning_state': d.get('provisioning_state'), - 'service_endpoints': d.get('service_endpoints') - } - return d - - -def main(): - AzureRMSubnetFacts() - - -if __name__ == '__main__': - main() diff --git a/lib/ansible/modules/cloud/azure/azure_rm_virtualmachine.py b/lib/ansible/modules/cloud/azure/azure_rm_virtualmachine.py index 5909683ce6..f03519b146 100644 --- a/lib/ansible/modules/cloud/azure/azure_rm_virtualmachine.py +++ b/lib/ansible/modules/cloud/azure/azure_rm_virtualmachine.py @@ -1894,8 +1894,8 @@ class AzureRMVirtualMachine(AzureRMModuleBase): if self.public_ip_allocation_method != 'Disabled': self.results['actions'].append('Created default public IP {0}'.format(self.name + '01')) sku = self.network_models.PublicIPAddressSku(name="Standard") if self.zones else None - pip_info = self.create_default_pip(self.resource_group, self.location, self.name + '01', self.public_ip_allocation_method, sku=sku) - pip = self.network_models.PublicIPAddress(id=pip_info.id, location=pip_info.location, resource_guid=pip_info.resource_guid, sku=sku) + pip_facts = self.create_default_pip(self.resource_group, self.location, self.name + '01', self.public_ip_allocation_method, sku=sku) + pip = self.network_models.PublicIPAddress(id=pip_facts.id, location=pip_facts.location, resource_guid=pip_facts.resource_guid, sku=sku) self.tags['_own_pip_'] = self.name + '01' self.results['actions'].append('Created default security group {0}'.format(self.name + '01')) diff --git a/lib/ansible/modules/cloud/azure/azure_rm_virtualmachineextension_facts.py b/lib/ansible/modules/cloud/azure/azure_rm_virtualmachineextension_facts.py new file mode 100644 index 0000000000..c6e3e40679 --- /dev/null +++ b/lib/ansible/modules/cloud/azure/azure_rm_virtualmachineextension_facts.py @@ -0,0 +1,242 @@ +#!/usr/bin/python +# +# Copyright (c) 2018 Zim Kalinowski, (@zikalino) +# +# 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_virtualmachineextension_facts +version_added: "2.8" +short_description: Get Azure Virtual Machine Extension facts. +description: + - Get facts of Azure Virtual Machine Extension. + +options: + resource_group: + description: + - The name of the resource group. + required: True + virtual_machine_name: + description: + - The name of the virtual machine containing the extension. + required: True + name: + description: + - The name of the virtual machine extension. + tags: + description: + - Limit results by providing a list of tags. Format tags as 'key' or 'key:value'. + +extends_documentation_fragment: + - azure + +author: + - "Zim Kalinowski (@zikalino)" + +''' + +EXAMPLES = ''' + - name: Get information on specific Virtual Machine Extension + azure_rm_virtualmachineextension_facts: + resource_group: myResourceGroup + virtual_machine_name: myvm + name: myextension + + - name: List installed Virtual Machine Extensions + azure_rm_virtualmachineextension_facts: + resource_group: myResourceGroup + virtual_machine_name: myvm +''' + +RETURN = ''' +extensions: + description: A list of dictionaries containing facts for Virtual Machine Extension. + returned: always + type: complex + contains: + id: + description: + - Resource Id + returned: always + type: str + sample: "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.Compute/myvm/testVM/extens + ions/myextension" + resource_group: + description: + - Resource group name + returned: always + type: str + sample: myResourceGroup + virtual_machine_name: + description: + - Virtual machine name + returned: always + type: str + sample: myvm + name: + description: + - Virtual machine name + returned: always + type: str + sample: myextension + location: + description: + - Location + returned: always + type: str + sample: eastus + publisher: + description: + - Extension publisher + returned: always + type: str + sample: Microsoft.Azure.Extensions + type: + description: + - Extension type + returned: always + type: str + sample: CustomScript + settings: + description: + - Extension specific settings dictionary + returned: always + type: complex + sample: "{'commandToExecute': 'hostname'}" + auto_upgrade_minor_version: + description: + - Autoupgrade minor version flag + returned: always + type: bool + sample: true + tags: + description: + - Resource tags + returned: always + type: complex + sample: "{ mytag: abc }" + provisioning_state: + description: + - Provisioning state of the extension + returned: always + type: str + sample: Succeeded +''' + +from ansible.module_utils.azure_rm_common import AzureRMModuleBase + +try: + from msrestazure.azure_exceptions import CloudError + from msrest.serialization import Model +except ImportError: + # This is handled in azure_rm_common + pass + + +class AzureRMVirtualMachineExtensionFacts(AzureRMModuleBase): + def __init__(self): + # define user inputs into argument + self.module_arg_spec = dict( + resource_group=dict( + type='str', + required=True + ), + virtual_machine_name=dict( + type='str', + required=True + ), + name=dict( + type='str' + ), + tags=dict( + type='list' + ) + ) + # store the results of the module operation + self.results = dict( + changed=False + ) + self.resource_group = None + self.virtual_machine_name = None + self.name = None + self.tags = None + super(AzureRMVirtualMachineExtensionFacts, self).__init__(self.module_arg_spec, supports_tags=False) + + def exec_module(self, **kwargs): + for key in self.module_arg_spec: + setattr(self, key, kwargs[key]) + + if self.name is not None: + self.results['extensions'] = self.get_extensions() + else: + self.results['extensions'] = self.list_extensions() + + return self.results + + def get_extensions(self): + response = None + results = [] + try: + response = self.compute_client.virtual_machine_extensions.get(resource_group_name=self.resource_group, + vm_name=self.virtual_machine_name, + vm_extension_name=self.name) + self.log("Response : {0}".format(response)) + except CloudError as e: + self.log('Could not get facts for Virtual Machine Extension.') + + if response and self.has_tags(response.tags, self.tags): + results.append(self.format_response(response)) + + return results + + def list_extensions(self): + response = None + results = [] + try: + response = self.compute_client.virtual_machine_extensions.list(resource_group_name=self.resource_group, + vm_name=self.virtual_machine_name) + self.log("Response : {0}".format(response)) + except CloudError as e: + self.log('Could not get facts for Virtual Machine Extension.') + + if response is not None and response.value is not None: + for item in response.value: + if self.has_tags(item.tags, self.tags): + results.append(self.format_response(item)) + + return results + + def format_response(self, item): + d = item.as_dict() + d = { + 'id': d.get('id', None), + 'resource_group': self.resource_group, + 'virtual_machine_name': self.virtual_machine_name, + 'location': d.get('location'), + 'name': d.get('name'), + 'publisher': d.get('publisher'), + 'type': d.get('virtual_machine_extension_type'), + 'settings': d.get('settings'), + 'auto_upgrade_minor_version': d.get('auto_upgrade_minor_version'), + 'tags': d.get('tags', None), + 'provisioning_state': d.get('provisioning_state') + } + return d + + +def main(): + AzureRMVirtualMachineExtensionFacts() + + +if __name__ == '__main__': + main() diff --git a/lib/ansible/modules/cloud/azure/azure_rm_virtualmachineextension_info.py b/lib/ansible/modules/cloud/azure/azure_rm_virtualmachineextension_info.py deleted file mode 100644 index 1dc0caf88a..0000000000 --- a/lib/ansible/modules/cloud/azure/azure_rm_virtualmachineextension_info.py +++ /dev/null @@ -1,242 +0,0 @@ -#!/usr/bin/python -# -# Copyright (c) 2018 Zim Kalinowski, (@zikalino) -# -# 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_virtualmachineextension_info -version_added: "2.8" -short_description: Get Azure Virtual Machine Extension facts. -description: - - Get facts of Azure Virtual Machine Extension. - -options: - resource_group: - description: - - The name of the resource group. - required: True - virtual_machine_name: - description: - - The name of the virtual machine containing the extension. - required: True - name: - description: - - The name of the virtual machine extension. - tags: - description: - - Limit results by providing a list of tags. Format tags as 'key' or 'key:value'. - -extends_documentation_fragment: - - azure - -author: - - "Zim Kalinowski (@zikalino)" - -''' - -EXAMPLES = ''' - - name: Get information on specific Virtual Machine Extension - azure_rm_virtualmachineextension_info: - resource_group: myResourceGroup - virtual_machine_name: myvm - name: myextension - - - name: List installed Virtual Machine Extensions - azure_rm_virtualmachineextension_info: - resource_group: myResourceGroup - virtual_machine_name: myvm -''' - -RETURN = ''' -extensions: - description: A list of dictionaries containing facts for Virtual Machine Extension. - returned: always - type: complex - contains: - id: - description: - - Resource Id - returned: always - type: str - sample: "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.Compute/myvm/testVM/extens - ions/myextension" - resource_group: - description: - - Resource group name - returned: always - type: str - sample: myResourceGroup - virtual_machine_name: - description: - - Virtual machine name - returned: always - type: str - sample: myvm - name: - description: - - Virtual machine name - returned: always - type: str - sample: myextension - location: - description: - - Location - returned: always - type: str - sample: eastus - publisher: - description: - - Extension publisher - returned: always - type: str - sample: Microsoft.Azure.Extensions - type: - description: - - Extension type - returned: always - type: str - sample: CustomScript - settings: - description: - - Extension specific settings dictionary - returned: always - type: complex - sample: "{'commandToExecute': 'hostname'}" - auto_upgrade_minor_version: - description: - - Autoupgrade minor version flag - returned: always - type: bool - sample: true - tags: - description: - - Resource tags - returned: always - type: complex - sample: "{ mytag: abc }" - provisioning_state: - description: - - Provisioning state of the extension - returned: always - type: str - sample: Succeeded -''' - -from ansible.module_utils.azure_rm_common import AzureRMModuleBase - -try: - from msrestazure.azure_exceptions import CloudError - from msrest.serialization import Model -except ImportError: - # This is handled in azure_rm_common - pass - - -class AzureRMVirtualMachineExtensionFacts(AzureRMModuleBase): - def __init__(self): - # define user inputs into argument - self.module_arg_spec = dict( - resource_group=dict( - type='str', - required=True - ), - virtual_machine_name=dict( - type='str', - required=True - ), - name=dict( - type='str' - ), - tags=dict( - type='list' - ) - ) - # store the results of the module operation - self.results = dict( - changed=False - ) - self.resource_group = None - self.virtual_machine_name = None - self.name = None - self.tags = None - super(AzureRMVirtualMachineExtensionFacts, self).__init__(self.module_arg_spec, supports_tags=False) - - def exec_module(self, **kwargs): - for key in self.module_arg_spec: - setattr(self, key, kwargs[key]) - - if self.name is not None: - self.results['extensions'] = self.get_extensions() - else: - self.results['extensions'] = self.list_extensions() - - return self.results - - def get_extensions(self): - response = None - results = [] - try: - response = self.compute_client.virtual_machine_extensions.get(resource_group_name=self.resource_group, - vm_name=self.virtual_machine_name, - vm_extension_name=self.name) - self.log("Response : {0}".format(response)) - except CloudError as e: - self.log('Could not get facts for Virtual Machine Extension.') - - if response and self.has_tags(response.tags, self.tags): - results.append(self.format_response(response)) - - return results - - def list_extensions(self): - response = None - results = [] - try: - response = self.compute_client.virtual_machine_extensions.list(resource_group_name=self.resource_group, - vm_name=self.virtual_machine_name) - self.log("Response : {0}".format(response)) - except CloudError as e: - self.log('Could not get facts for Virtual Machine Extension.') - - if response is not None and response.value is not None: - for item in response.value: - if self.has_tags(item.tags, self.tags): - results.append(self.format_response(item)) - - return results - - def format_response(self, item): - d = item.as_dict() - d = { - 'id': d.get('id', None), - 'resource_group': self.resource_group, - 'virtual_machine_name': self.virtual_machine_name, - 'location': d.get('location'), - 'name': d.get('name'), - 'publisher': d.get('publisher'), - 'type': d.get('virtual_machine_extension_type'), - 'settings': d.get('settings'), - 'auto_upgrade_minor_version': d.get('auto_upgrade_minor_version'), - 'tags': d.get('tags', None), - 'provisioning_state': d.get('provisioning_state') - } - return d - - -def main(): - AzureRMVirtualMachineExtensionFacts() - - -if __name__ == '__main__': - main() diff --git a/lib/ansible/modules/cloud/azure/azure_rm_virtualmachinescalesetextension_facts.py b/lib/ansible/modules/cloud/azure/azure_rm_virtualmachinescalesetextension_facts.py new file mode 100644 index 0000000000..957e1ea664 --- /dev/null +++ b/lib/ansible/modules/cloud/azure/azure_rm_virtualmachinescalesetextension_facts.py @@ -0,0 +1,221 @@ +#!/usr/bin/python +# +# Copyright (c) 2018 Zim Kalinowski, (@zikalino) +# +# 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_virtualmachinescalesetextension_facts +version_added: "2.8" +short_description: Get Azure Virtual Machine Scale Set Extension facts. +description: + - Get facts of Azure Virtual Machine Scale Set Extension. + +options: + resource_group: + description: + - The name of the resource group. + required: True + vmss_name: + description: + - The name of VMSS containing the extension. + required: True + name: + description: + - The name of the virtual machine extension. + +extends_documentation_fragment: + - azure + +author: + - "Zim Kalinowski (@zikalino)" + +''' + +EXAMPLES = ''' + - name: Get information on specific Virtual Machine Scale Set Extension + azure_rm_virtualmachineextension_facts: + resource_group: myResourceGroup + vmss_name: myvmss + name: myextension + + - name: List installed Virtual Machine Scale Set Extensions + azure_rm_virtualmachineextension_facts: + resource_group: myrg + vmss_name: myvmss +''' + +RETURN = ''' +extensions: + description: A list of dictionaries containing facts for Virtual Machine Extension. + returned: always + type: complex + contains: + id: + description: + - Resource Id + returned: always + type: str + sample: "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/ + myvmss/extensions/myextension" + resource_group: + description: + - Resource group name + returned: always + type: str + sample: myrg + vmss_name: + description: + - Virtual machine name + returned: always + type: str + sample: myvmss + name: + description: + - Virtual machine name + returned: always + type: str + sample: myextension + publisher: + description: + - Extension publisher + returned: always + type: str + sample: Microsoft.Azure.Extensions + type: + description: + - Extension type + returned: always + type: str + sample: CustomScript + settings: + description: + - Extension specific settings dictionary + returned: always + type: complex + sample: "{'commandToExecute': 'hostname'}" + auto_upgrade_minor_version: + description: + - Autoupgrade minor version flag + returned: always + type: bool + sample: true + provisioning_state: + description: + - Provisioning state of the extension + returned: always + type: str + sample: Succeeded +''' + +from ansible.module_utils.azure_rm_common import AzureRMModuleBase + +try: + from msrestazure.azure_exceptions import CloudError + from msrest.serialization import Model +except ImportError: + # This is handled in azure_rm_common + pass + + +class AzureRMVirtualMachineScaleSetExtensionFacts(AzureRMModuleBase): + def __init__(self): + # define user inputs into argument + self.module_arg_spec = dict( + resource_group=dict( + type='str', + required=True + ), + vmss_name=dict( + type='str', + required=True + ), + name=dict( + type='str' + ) + ) + # store the results of the module operation + self.results = dict( + changed=False + ) + self.resource_group = None + self.vmss_name = None + self.name = None + super(AzureRMVirtualMachineScaleSetExtensionFacts, self).__init__(self.module_arg_spec, supports_tags=False) + + def exec_module(self, **kwargs): + for key in self.module_arg_spec: + setattr(self, key, kwargs[key]) + + if self.name is not None: + self.results['extensions'] = self.get_extensions() + else: + self.results['extensions'] = self.list_extensions() + + return self.results + + def get_extensions(self): + response = None + results = [] + try: + response = self.compute_client.virtual_machine_scale_set_extensions.get(resource_group_name=self.resource_group, + vm_scale_set_name=self.vmss_name, + vmss_extension_name=self.name) + self.log("Response : {0}".format(response)) + except CloudError as e: + self.log('Could not get facts for Virtual Machine Extension.') + + if response: + results.append(self.format_response(response)) + + return results + + def list_extensions(self): + response = None + results = [] + try: + response = self.compute_client.virtual_machine_scale_set_extensions.list(resource_group_name=self.resource_group, + vm_scale_set_name=self.vmss_name) + self.log("Response : {0}".format(response)) + except CloudError as e: + self.log('Could not get facts for Virtual Machine Extension.') + + if response is not None: + for item in response: + results.append(self.format_response(item)) + + return results + + def format_response(self, item): + id_template = "/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.Compute/virtualMachineScaleSets/{2}/extensions/{3}" + d = item.as_dict() + d = { + 'id': id_template.format(self.subscription_id, self.resource_group, self.vmss_name, d.get('name')), + 'resource_group': self.resource_group, + 'vmss_name': self.vmss_name, + 'name': d.get('name'), + 'publisher': d.get('publisher'), + 'type': d.get('type'), + 'settings': d.get('settings'), + 'auto_upgrade_minor_version': d.get('auto_upgrade_minor_version'), + 'provisioning_state': d.get('provisioning_state') + } + return d + + +def main(): + AzureRMVirtualMachineScaleSetExtensionFacts() + + +if __name__ == '__main__': + main() diff --git a/lib/ansible/modules/cloud/azure/azure_rm_virtualmachinescalesetextension_info.py b/lib/ansible/modules/cloud/azure/azure_rm_virtualmachinescalesetextension_info.py deleted file mode 100644 index a10b046939..0000000000 --- a/lib/ansible/modules/cloud/azure/azure_rm_virtualmachinescalesetextension_info.py +++ /dev/null @@ -1,221 +0,0 @@ -#!/usr/bin/python -# -# Copyright (c) 2018 Zim Kalinowski, (@zikalino) -# -# 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_virtualmachinescalesetextension_info -version_added: "2.8" -short_description: Get Azure Virtual Machine Scale Set Extension facts. -description: - - Get facts of Azure Virtual Machine Scale Set Extension. - -options: - resource_group: - description: - - The name of the resource group. - required: True - vmss_name: - description: - - The name of VMSS containing the extension. - required: True - name: - description: - - The name of the virtual machine extension. - -extends_documentation_fragment: - - azure - -author: - - "Zim Kalinowski (@zikalino)" - -''' - -EXAMPLES = ''' - - name: Get information on specific Virtual Machine Scale Set Extension - azure_rm_virtualmachineextension_info: - resource_group: myResourceGroup - vmss_name: myvmss - name: myextension - - - name: List installed Virtual Machine Scale Set Extensions - azure_rm_virtualmachineextension_info: - resource_group: myrg - vmss_name: myvmss -''' - -RETURN = ''' -extensions: - description: A list of dictionaries containing facts for Virtual Machine Extension. - returned: always - type: complex - contains: - id: - description: - - Resource Id - returned: always - type: str - sample: "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/ - myvmss/extensions/myextension" - resource_group: - description: - - Resource group name - returned: always - type: str - sample: myrg - vmss_name: - description: - - Virtual machine name - returned: always - type: str - sample: myvmss - name: - description: - - Virtual machine name - returned: always - type: str - sample: myextension - publisher: - description: - - Extension publisher - returned: always - type: str - sample: Microsoft.Azure.Extensions - type: - description: - - Extension type - returned: always - type: str - sample: CustomScript - settings: - description: - - Extension specific settings dictionary - returned: always - type: complex - sample: "{'commandToExecute': 'hostname'}" - auto_upgrade_minor_version: - description: - - Autoupgrade minor version flag - returned: always - type: bool - sample: true - provisioning_state: - description: - - Provisioning state of the extension - returned: always - type: str - sample: Succeeded -''' - -from ansible.module_utils.azure_rm_common import AzureRMModuleBase - -try: - from msrestazure.azure_exceptions import CloudError - from msrest.serialization import Model -except ImportError: - # This is handled in azure_rm_common - pass - - -class AzureRMVirtualMachineScaleSetExtensionFacts(AzureRMModuleBase): - def __init__(self): - # define user inputs into argument - self.module_arg_spec = dict( - resource_group=dict( - type='str', - required=True - ), - vmss_name=dict( - type='str', - required=True - ), - name=dict( - type='str' - ) - ) - # store the results of the module operation - self.results = dict( - changed=False - ) - self.resource_group = None - self.vmss_name = None - self.name = None - super(AzureRMVirtualMachineScaleSetExtensionFacts, self).__init__(self.module_arg_spec, supports_tags=False) - - def exec_module(self, **kwargs): - for key in self.module_arg_spec: - setattr(self, key, kwargs[key]) - - if self.name is not None: - self.results['extensions'] = self.get_extensions() - else: - self.results['extensions'] = self.list_extensions() - - return self.results - - def get_extensions(self): - response = None - results = [] - try: - response = self.compute_client.virtual_machine_scale_set_extensions.get(resource_group_name=self.resource_group, - vm_scale_set_name=self.vmss_name, - vmss_extension_name=self.name) - self.log("Response : {0}".format(response)) - except CloudError as e: - self.log('Could not get facts for Virtual Machine Extension.') - - if response: - results.append(self.format_response(response)) - - return results - - def list_extensions(self): - response = None - results = [] - try: - response = self.compute_client.virtual_machine_scale_set_extensions.list(resource_group_name=self.resource_group, - vm_scale_set_name=self.vmss_name) - self.log("Response : {0}".format(response)) - except CloudError as e: - self.log('Could not get facts for Virtual Machine Extension.') - - if response is not None: - for item in response: - results.append(self.format_response(item)) - - return results - - def format_response(self, item): - id_template = "/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.Compute/virtualMachineScaleSets/{2}/extensions/{3}" - d = item.as_dict() - d = { - 'id': id_template.format(self.subscription_id, self.resource_group, self.vmss_name, d.get('name')), - 'resource_group': self.resource_group, - 'vmss_name': self.vmss_name, - 'name': d.get('name'), - 'publisher': d.get('publisher'), - 'type': d.get('type'), - 'settings': d.get('settings'), - 'auto_upgrade_minor_version': d.get('auto_upgrade_minor_version'), - 'provisioning_state': d.get('provisioning_state') - } - return d - - -def main(): - AzureRMVirtualMachineScaleSetExtensionFacts() - - -if __name__ == '__main__': - main() diff --git a/lib/ansible/modules/cloud/azure/azure_rm_virtualmachinescalesetinstance_facts.py b/lib/ansible/modules/cloud/azure/azure_rm_virtualmachinescalesetinstance_facts.py new file mode 100644 index 0000000000..fdb92e355a --- /dev/null +++ b/lib/ansible/modules/cloud/azure/azure_rm_virtualmachinescalesetinstance_facts.py @@ -0,0 +1,227 @@ +#!/usr/bin/python +# +# Copyright (c) 2019 Zim Kalinowski, +# +# 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_virtualmachinescalesetinstance_facts +version_added: "2.8" +short_description: Get Azure Virtual Machine Scale Set Instance facts. +description: + - Get facts of Azure Virtual Machine Scale Set VMs. + +options: + resource_group: + description: + - The name of the resource group. + required: True + vmss_name: + description: + - The name of the VM scale set. + required: True + instance_id: + description: + - The instance ID of the virtual machine. + tags: + description: + - Limit results by providing a list of tags. Format tags as 'key' or 'key:value'. + +extends_documentation_fragment: + - azure + +author: + - "Zim Kalinowski (@zikalino)" + +''' + +EXAMPLES = ''' + - name: List VM instances in Virtual Machine ScaleSet + azure_rm_computevirtualmachinescalesetinstance_facts: + resource_group: myResourceGroup + vmss_name: myVMSS +''' + +RETURN = ''' +instances: + description: A list of dictionaries containing facts for Virtual Machine Scale Set VM. + returned: always + type: complex + contains: + id: + description: + - Resource Id + returned: always + type: str + sample: "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/my + VMSS/virtualMachines/2" + tags: + description: + - Resource tags + returned: always + type: complex + sample: { 'tag1': 'abc' } + instance_id: + description: + - Virtual Machine instance Id + returned: always + type: str + sample: 0 + name: + description: + - Virtual Machine name + returned: always + type: str + sample: myVMSS_2 + latest_model: + description: + - Is latest model applied? + returned: always + type: bool + sample: True + provisioning_state: + description: + - Provisioning state of the Virtual Machine + returned: always + type: str + sample: Succeeded + power_state: + description: + - Provisioning state of the Virtual Machine + returned: always + type: str + sample: running + vm_id: + description: + - Virtual Machine Id + returned: always + type: str + sample: 94a141a9-4530-46ac-b151-2c7ff09aa823 +''' + +from ansible.module_utils.azure_rm_common import AzureRMModuleBase + +try: + from msrestazure.azure_exceptions import CloudError + from azure.mgmt.compute import ComputeManagementClient + from msrest.serialization import Model +except ImportError: + # This is handled in azure_rm_common + pass + + +class AzureRMVirtualMachineScaleSetVMFacts(AzureRMModuleBase): + def __init__(self): + # define user inputs into argument + self.module_arg_spec = dict( + resource_group=dict( + type='str', + required=True + ), + vmss_name=dict( + type='str', + required=True + ), + instance_id=dict( + type='str' + ), + tags=dict( + type='list' + ) + ) + # store the results of the module operation + self.results = dict( + changed=False + ) + self.mgmt_client = None + self.resource_group = None + self.vmss_name = None + self.instance_id = None + self.tags = None + super(AzureRMVirtualMachineScaleSetVMFacts, self).__init__(self.module_arg_spec, supports_tags=False) + + def exec_module(self, **kwargs): + for key in self.module_arg_spec: + setattr(self, key, kwargs[key]) + self.mgmt_client = self.get_mgmt_svc_client(ComputeManagementClient, + base_url=self._cloud_environment.endpoints.resource_manager) + + if (self.instance_id is None): + self.results['instances'] = self.list() + else: + self.results['instances'] = self.get() + return self.results + + def get(self): + response = None + results = [] + try: + response = self.mgmt_client.virtual_machine_scale_set_vms.get(resource_group_name=self.resource_group, + vm_scale_set_name=self.vmss_name, + instance_id=self.instance_id) + self.log("Response : {0}".format(response)) + except CloudError as e: + self.log('Could not get facts for Virtual Machine Scale Set VM.') + + if response and self.has_tags(response.tags, self.tags): + results.append(self.format_response(response)) + + return results + + def list(self): + items = None + try: + items = self.mgmt_client.virtual_machine_scale_set_vms.list(resource_group_name=self.resource_group, + virtual_machine_scale_set_name=self.vmss_name) + self.log("Response : {0}".format(items)) + except CloudError as e: + self.log('Could not get facts for Virtual Machine ScaleSet VM.') + + results = [] + for item in items: + if self.has_tags(item.tags, self.tags): + results.append(self.format_response(item)) + return results + + def format_response(self, item): + d = item.as_dict() + + iv = self.mgmt_client.virtual_machine_scale_set_vms.get_instance_view(resource_group_name=self.resource_group, + vm_scale_set_name=self.vmss_name, + instance_id=d.get('instance_id', None)).as_dict() + power_state = "" + for index in range(len(iv['statuses'])): + code = iv['statuses'][index]['code'].split('/') + if code[0] == 'PowerState': + power_state = code[1] + break + d = { + 'resource_group': self.resource_group, + 'id': d.get('id', None), + 'tags': d.get('tags', None), + 'instance_id': d.get('instance_id', None), + 'latest_model': d.get('latest_model_applied', None), + 'name': d.get('name', None), + 'provisioning_state': d.get('provisioning_state', None), + 'power_state': power_state, + 'vm_id': d.get('vm_id', None) + } + return d + + +def main(): + AzureRMVirtualMachineScaleSetVMFacts() + + +if __name__ == '__main__': + main() diff --git a/lib/ansible/modules/cloud/azure/azure_rm_virtualmachinescalesetinstance_info.py b/lib/ansible/modules/cloud/azure/azure_rm_virtualmachinescalesetinstance_info.py deleted file mode 100644 index e9e7c37e67..0000000000 --- a/lib/ansible/modules/cloud/azure/azure_rm_virtualmachinescalesetinstance_info.py +++ /dev/null @@ -1,227 +0,0 @@ -#!/usr/bin/python -# -# Copyright (c) 2019 Zim Kalinowski, -# -# 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_virtualmachinescalesetinstance_info -version_added: "2.8" -short_description: Get Azure Virtual Machine Scale Set Instance facts. -description: - - Get facts of Azure Virtual Machine Scale Set VMs. - -options: - resource_group: - description: - - The name of the resource group. - required: True - vmss_name: - description: - - The name of the VM scale set. - required: True - instance_id: - description: - - The instance ID of the virtual machine. - tags: - description: - - Limit results by providing a list of tags. Format tags as 'key' or 'key:value'. - -extends_documentation_fragment: - - azure - -author: - - "Zim Kalinowski (@zikalino)" - -''' - -EXAMPLES = ''' - - name: List VM instances in Virtual Machine ScaleSet - azure_rm_computevirtualmachinescalesetinstance_facts: - resource_group: myResourceGroup - vmss_name: myVMSS -''' - -RETURN = ''' -instances: - description: A list of dictionaries containing facts for Virtual Machine Scale Set VM. - returned: always - type: complex - contains: - id: - description: - - Resource Id - returned: always - type: str - sample: "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/my - VMSS/virtualMachines/2" - tags: - description: - - Resource tags - returned: always - type: complex - sample: { 'tag1': 'abc' } - instance_id: - description: - - Virtual Machine instance Id - returned: always - type: str - sample: 0 - name: - description: - - Virtual Machine name - returned: always - type: str - sample: myVMSS_2 - latest_model: - description: - - Is latest model applied? - returned: always - type: bool - sample: True - provisioning_state: - description: - - Provisioning state of the Virtual Machine - returned: always - type: str - sample: Succeeded - power_state: - description: - - Provisioning state of the Virtual Machine - returned: always - type: str - sample: running - vm_id: - description: - - Virtual Machine Id - returned: always - type: str - sample: 94a141a9-4530-46ac-b151-2c7ff09aa823 -''' - -from ansible.module_utils.azure_rm_common import AzureRMModuleBase - -try: - from msrestazure.azure_exceptions import CloudError - from azure.mgmt.compute import ComputeManagementClient - from msrest.serialization import Model -except ImportError: - # This is handled in azure_rm_common - pass - - -class AzureRMVirtualMachineScaleSetVMFacts(AzureRMModuleBase): - def __init__(self): - # define user inputs into argument - self.module_arg_spec = dict( - resource_group=dict( - type='str', - required=True - ), - vmss_name=dict( - type='str', - required=True - ), - instance_id=dict( - type='str' - ), - tags=dict( - type='list' - ) - ) - # store the results of the module operation - self.results = dict( - changed=False - ) - self.mgmt_client = None - self.resource_group = None - self.vmss_name = None - self.instance_id = None - self.tags = None - super(AzureRMVirtualMachineScaleSetVMFacts, self).__init__(self.module_arg_spec, supports_tags=False) - - def exec_module(self, **kwargs): - for key in self.module_arg_spec: - setattr(self, key, kwargs[key]) - self.mgmt_client = self.get_mgmt_svc_client(ComputeManagementClient, - base_url=self._cloud_environment.endpoints.resource_manager) - - if (self.instance_id is None): - self.results['instances'] = self.list() - else: - self.results['instances'] = self.get() - return self.results - - def get(self): - response = None - results = [] - try: - response = self.mgmt_client.virtual_machine_scale_set_vms.get(resource_group_name=self.resource_group, - vm_scale_set_name=self.vmss_name, - instance_id=self.instance_id) - self.log("Response : {0}".format(response)) - except CloudError as e: - self.log('Could not get facts for Virtual Machine Scale Set VM.') - - if response and self.has_tags(response.tags, self.tags): - results.append(self.format_response(response)) - - return results - - def list(self): - items = None - try: - items = self.mgmt_client.virtual_machine_scale_set_vms.list(resource_group_name=self.resource_group, - virtual_machine_scale_set_name=self.vmss_name) - self.log("Response : {0}".format(items)) - except CloudError as e: - self.log('Could not get facts for Virtual Machine ScaleSet VM.') - - results = [] - for item in items: - if self.has_tags(item.tags, self.tags): - results.append(self.format_response(item)) - return results - - def format_response(self, item): - d = item.as_dict() - - iv = self.mgmt_client.virtual_machine_scale_set_vms.get_instance_view(resource_group_name=self.resource_group, - vm_scale_set_name=self.vmss_name, - instance_id=d.get('instance_id', None)).as_dict() - power_state = "" - for index in range(len(iv['statuses'])): - code = iv['statuses'][index]['code'].split('/') - if code[0] == 'PowerState': - power_state = code[1] - break - d = { - 'resource_group': self.resource_group, - 'id': d.get('id', None), - 'tags': d.get('tags', None), - 'instance_id': d.get('instance_id', None), - 'latest_model': d.get('latest_model_applied', None), - 'name': d.get('name', None), - 'provisioning_state': d.get('provisioning_state', None), - 'power_state': power_state, - 'vm_id': d.get('vm_id', None) - } - return d - - -def main(): - AzureRMVirtualMachineScaleSetVMFacts() - - -if __name__ == '__main__': - main() -- cgit v1.2.1