summaryrefslogtreecommitdiff
path: root/lib/ansible/modules/cloud/azure/azure_rm_webapp_info.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/ansible/modules/cloud/azure/azure_rm_webapp_info.py')
-rw-r--r--lib/ansible/modules/cloud/azure/azure_rm_webapp_info.py488
1 files changed, 0 insertions, 488 deletions
diff --git a/lib/ansible/modules/cloud/azure/azure_rm_webapp_info.py b/lib/ansible/modules/cloud/azure/azure_rm_webapp_info.py
deleted file mode 100644
index 4a3b4cd484..0000000000
--- a/lib/ansible/modules/cloud/azure/azure_rm_webapp_info.py
+++ /dev/null
@@ -1,488 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright (c) 2018 Yunge Zhu, <yungez@microsoft.com>
-#
-# 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_webapp_info
-
-version_added: "2.9"
-
-short_description: Get Azure web app facts
-
-description:
- - Get facts for a specific web app or all web app in a resource group, or all web app in current subscription.
-
-options:
- name:
- description:
- - Only show results for a specific web app.
- resource_group:
- description:
- - Limit results by resource group.
- return_publish_profile:
- description:
- - Indicate whether to return publishing profile of the web app.
- 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 facts for web app by name
- azure_rm_webapp_info:
- resource_group: myResourceGroup
- name: winwebapp1
-
- - name: Get facts for web apps in resource group
- azure_rm_webapp_info:
- resource_group: myResourceGroup
-
- - name: Get facts for web apps with tags
- azure_rm_webapp_info:
- tags:
- - testtag
- - foo:bar
-'''
-
-RETURN = '''
-webapps:
- description:
- - List of web apps.
- returned: always
- type: complex
- contains:
- id:
- description:
- - ID of the web app.
- returned: always
- type: str
- sample: /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.Web/sites/myWebApp
- name:
- description:
- - Name of the web app.
- returned: always
- type: str
- sample: winwebapp1
- resource_group:
- description:
- - Resource group of the web app.
- returned: always
- type: str
- sample: myResourceGroup
- location:
- description:
- - Location of the web app.
- returned: always
- type: str
- sample: eastus
- plan:
- description:
- - ID of app service plan used by the web app.
- returned: always
- type: str
- sample: /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.Web/serverfarms/myAppServicePlan
- app_settings:
- description:
- - App settings of the application. Only returned when web app has app settings.
- returned: always
- type: dict
- sample: {
- "testkey": "testvalue",
- "testkey2": "testvalue2"
- }
- frameworks:
- description:
- - Frameworks of the application. Only returned when web app has frameworks.
- returned: always
- type: list
- sample: [
- {
- "name": "net_framework",
- "version": "v4.0"
- },
- {
- "name": "java",
- "settings": {
- "java_container": "tomcat",
- "java_container_version": "8.5"
- },
- "version": "1.7"
- },
- {
- "name": "php",
- "version": "5.6"
- }
- ]
- availability_state:
- description:
- - Availability of this web app.
- returned: always
- type: str
- sample: Normal
- default_host_name:
- description:
- - Host name of the web app.
- returned: always
- type: str
- sample: vxxisurg397winapp4.azurewebsites.net
- enabled:
- description:
- - Indicates the web app enabled or not.
- returned: always
- type: bool
- sample: true
- enabled_host_names:
- description:
- - Enabled host names of the web app.
- returned: always
- type: list
- sample: [
- "vxxisurg397winapp4.azurewebsites.net",
- "vxxisurg397winapp4.scm.azurewebsites.net"
- ]
- host_name_ssl_states:
- description:
- - SSL state per host names of the web app.
- returned: always
- type: list
- sample: [
- {
- "hostType": "Standard",
- "name": "vxxisurg397winapp4.azurewebsites.net",
- "sslState": "Disabled"
- },
- {
- "hostType": "Repository",
- "name": "vxxisurg397winapp4.scm.azurewebsites.net",
- "sslState": "Disabled"
- }
- ]
- host_names:
- description:
- - Host names of the web app.
- returned: always
- type: list
- sample: [
- "vxxisurg397winapp4.azurewebsites.net"
- ]
- outbound_ip_addresses:
- description:
- - Outbound IP address of the web app.
- returned: always
- type: str
- sample: "40.71.11.131,40.85.166.200,168.62.166.67,137.135.126.248,137.135.121.45"
- ftp_publish_url:
- description:
- - Publishing URL of the web app when deployment type is FTP.
- returned: always
- type: str
- sample: ftp://xxxx.ftp.azurewebsites.windows.net
- state:
- description:
- - State of the web app.
- returned: always
- type: str
- sample: running
- publishing_username:
- description:
- - Publishing profile user name.
- returned: only when I(return_publish_profile=True).
- type: str
- sample: "$vxxisuRG397winapp4"
- publishing_password:
- description:
- - Publishing profile password.
- returned: only when I(return_publish_profile=True).
- type: str
- sample: "uvANsPQpGjWJmrFfm4Ssd5rpBSqGhjMk11pMSgW2vCsQtNx9tcgZ0xN26s9A"
- tags:
- description:
- - Tags assigned to the resource. Dictionary of string:string pairs.
- returned: always
- type: dict
- sample: { tag1: abc }
-'''
-try:
- from msrestazure.azure_exceptions import CloudError
- from msrest.polling import LROPoller
- from azure.common import AzureMissingResourceHttpError, AzureHttpError
-except Exception:
- # This is handled in azure_rm_common
- pass
-
-from ansible.module_utils.azure_rm_common import AzureRMModuleBase
-
-AZURE_OBJECT_CLASS = 'WebApp'
-
-
-class AzureRMWebAppInfo(AzureRMModuleBase):
-
- def __init__(self):
-
- self.module_arg_spec = dict(
- name=dict(type='str'),
- resource_group=dict(type='str'),
- tags=dict(type='list'),
- return_publish_profile=dict(type='bool', default=False),
- )
-
- self.results = dict(
- changed=False,
- webapps=[],
- )
-
- self.name = None
- self.resource_group = None
- self.tags = None
- self.return_publish_profile = False
-
- self.framework_names = ['net_framework', 'java', 'php', 'node', 'python', 'dotnetcore', 'ruby']
-
- super(AzureRMWebAppInfo, self).__init__(self.module_arg_spec,
- supports_tags=False,
- facts_module=True)
-
- def exec_module(self, **kwargs):
- is_old_facts = self.module._name == 'azure_rm_webapp_facts'
- if is_old_facts:
- self.module.deprecate("The 'azure_rm_webapp_facts' module has been renamed to 'azure_rm_webapp_info'", version='2.13')
-
- for key in self.module_arg_spec:
- setattr(self, key, kwargs[key])
-
- if self.name:
- self.results['webapps'] = self.list_by_name()
- elif self.resource_group:
- self.results['webapps'] = self.list_by_resource_group()
- else:
- self.results['webapps'] = self.list_all()
-
- return self.results
-
- def list_by_name(self):
- self.log('Get web app {0}'.format(self.name))
- item = None
- result = []
-
- try:
- item = self.web_client.web_apps.get(self.resource_group, self.name)
- except CloudError:
- pass
-
- if item and self.has_tags(item.tags, self.tags):
- curated_result = self.get_curated_webapp(self.resource_group, self.name, item)
- result = [curated_result]
-
- return result
-
- def list_by_resource_group(self):
- self.log('List web apps in resource groups {0}'.format(self.resource_group))
- try:
- response = list(self.web_client.web_apps.list_by_resource_group(self.resource_group))
- except CloudError as exc:
- request_id = exc.request_id if exc.request_id else ''
- self.fail("Error listing web apps in resource groups {0}, request id: {1} - {2}".format(self.resource_group, request_id, str(exc)))
-
- results = []
- for item in response:
- if self.has_tags(item.tags, self.tags):
- curated_output = self.get_curated_webapp(self.resource_group, item.name, item)
- results.append(curated_output)
- return results
-
- def list_all(self):
- self.log('List web apps in current subscription')
- try:
- response = list(self.web_client.web_apps.list())
- except CloudError as exc:
- request_id = exc.request_id if exc.request_id else ''
- self.fail("Error listing web apps, request id {0} - {1}".format(request_id, str(exc)))
-
- results = []
- for item in response:
- if self.has_tags(item.tags, self.tags):
- curated_output = self.get_curated_webapp(item.resource_group, item.name, item)
- results.append(curated_output)
- return results
-
- def list_webapp_configuration(self, resource_group, name):
- self.log('Get web app {0} configuration'.format(name))
-
- response = []
-
- try:
- response = self.web_client.web_apps.get_configuration(resource_group_name=resource_group, name=name)
- except CloudError as ex:
- request_id = ex.request_id if ex.request_id else ''
- self.fail('Error getting web app {0} configuration, request id {1} - {2}'.format(name, request_id, str(ex)))
-
- return response.as_dict()
-
- def list_webapp_appsettings(self, resource_group, name):
- self.log('Get web app {0} app settings'.format(name))
-
- response = []
-
- try:
- response = self.web_client.web_apps.list_application_settings(resource_group_name=resource_group, name=name)
- except CloudError as ex:
- request_id = ex.request_id if ex.request_id else ''
- self.fail('Error getting web app {0} app settings, request id {1} - {2}'.format(name, request_id, str(ex)))
-
- return response.as_dict()
-
- def get_publish_credentials(self, resource_group, name):
- self.log('Get web app {0} publish credentials'.format(name))
- try:
- poller = self.web_client.web_apps.list_publishing_credentials(resource_group, name)
- if isinstance(poller, LROPoller):
- response = self.get_poller_result(poller)
- except CloudError as ex:
- request_id = ex.request_id if ex.request_id else ''
- self.fail('Error getting web app {0} publishing credentials - {1}'.format(request_id, str(ex)))
- return response
-
- def get_webapp_ftp_publish_url(self, resource_group, name):
- import xmltodict
-
- self.log('Get web app {0} app publish profile'.format(name))
-
- url = None
- try:
- content = self.web_client.web_apps.list_publishing_profile_xml_with_secrets(resource_group_name=resource_group, name=name)
- if not content:
- return url
-
- full_xml = ''
- for f in content:
- full_xml += f.decode()
- profiles = xmltodict.parse(full_xml, xml_attribs=True)['publishData']['publishProfile']
-
- if not profiles:
- return url
-
- for profile in profiles:
- if profile['@publishMethod'] == 'FTP':
- url = profile['@publishUrl']
-
- except CloudError as ex:
- self.fail('Error getting web app {0} app settings'.format(name))
-
- return url
-
- def get_curated_webapp(self, resource_group, name, webapp):
- pip = self.serialize_obj(webapp, AZURE_OBJECT_CLASS)
-
- try:
- site_config = self.list_webapp_configuration(resource_group, name)
- app_settings = self.list_webapp_appsettings(resource_group, name)
- publish_cred = self.get_publish_credentials(resource_group, name)
- ftp_publish_url = self.get_webapp_ftp_publish_url(resource_group, name)
- except CloudError as ex:
- pass
- return self.construct_curated_webapp(webapp=pip,
- configuration=site_config,
- app_settings=app_settings,
- deployment_slot=None,
- ftp_publish_url=ftp_publish_url,
- publish_credentials=publish_cred)
-
- def construct_curated_webapp(self,
- webapp,
- configuration=None,
- app_settings=None,
- deployment_slot=None,
- ftp_publish_url=None,
- publish_credentials=None):
- curated_output = dict()
- curated_output['id'] = webapp['id']
- curated_output['name'] = webapp['name']
- curated_output['resource_group'] = webapp['properties']['resourceGroup']
- curated_output['location'] = webapp['location']
- curated_output['plan'] = webapp['properties']['serverFarmId']
- curated_output['tags'] = webapp.get('tags', None)
-
- # important properties from output. not match input arguments.
- curated_output['app_state'] = webapp['properties']['state']
- curated_output['availability_state'] = webapp['properties']['availabilityState']
- curated_output['default_host_name'] = webapp['properties']['defaultHostName']
- curated_output['host_names'] = webapp['properties']['hostNames']
- curated_output['enabled'] = webapp['properties']['enabled']
- curated_output['enabled_host_names'] = webapp['properties']['enabledHostNames']
- curated_output['host_name_ssl_states'] = webapp['properties']['hostNameSslStates']
- curated_output['outbound_ip_addresses'] = webapp['properties']['outboundIpAddresses']
-
- # curated site_config
- if configuration:
- curated_output['frameworks'] = []
- for fx_name in self.framework_names:
- fx_version = configuration.get(fx_name + '_version', None)
- if fx_version:
- fx = {
- 'name': fx_name,
- 'version': fx_version
- }
- # java container setting
- if fx_name == 'java':
- if configuration['java_container'] and configuration['java_container_version']:
- settings = {
- 'java_container': configuration['java_container'].lower(),
- 'java_container_version': configuration['java_container_version']
- }
- fx['settings'] = settings
-
- curated_output['frameworks'].append(fx)
-
- # linux_fx_version
- if configuration.get('linux_fx_version', None):
- tmp = configuration.get('linux_fx_version').split("|")
- if len(tmp) == 2:
- curated_output['frameworks'].append({'name': tmp[0].lower(), 'version': tmp[1]})
-
- # curated app_settings
- if app_settings and app_settings.get('properties', None):
- curated_output['app_settings'] = dict()
- for item in app_settings['properties']:
- curated_output['app_settings'][item] = app_settings['properties'][item]
-
- # curated deploymenet_slot
- if deployment_slot:
- curated_output['deployment_slot'] = deployment_slot
-
- # ftp_publish_url
- if ftp_publish_url:
- curated_output['ftp_publish_url'] = ftp_publish_url
-
- # curated publish credentials
- if publish_credentials and self.return_publish_profile:
- curated_output['publishing_username'] = publish_credentials.publishing_user_name
- curated_output['publishing_password'] = publish_credentials.publishing_password
- return curated_output
-
-
-def main():
- AzureRMWebAppInfo()
-
-
-if __name__ == '__main__':
- main()