summaryrefslogtreecommitdiff
path: root/lib/ansible/modules/cloud/azure/azure_rm_publicipaddress.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/ansible/modules/cloud/azure/azure_rm_publicipaddress.py')
-rw-r--r--lib/ansible/modules/cloud/azure/azure_rm_publicipaddress.py426
1 files changed, 0 insertions, 426 deletions
diff --git a/lib/ansible/modules/cloud/azure/azure_rm_publicipaddress.py b/lib/ansible/modules/cloud/azure/azure_rm_publicipaddress.py
deleted file mode 100644
index 1a3435a207..0000000000
--- a/lib/ansible/modules/cloud/azure/azure_rm_publicipaddress.py
+++ /dev/null
@@ -1,426 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright (c) 2016 Matt Davis, <mdavis@ansible.com>
-# Chris Houseknecht, <house@redhat.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_publicipaddress
-
-version_added: "2.1"
-
-short_description: Manage Azure Public IP Addresses
-
-description:
- - Create, update and delete a Public IP address.
- - Allows setting and updating the address allocation method and domain name label.
- - Use the M(azure_rm_networkinterface) module to associate a Public IP with a network interface.
-
-options:
- resource_group:
- description:
- - Name of resource group with which the Public IP is associated.
- required: true
- allocation_method:
- description:
- - Control whether the assigned Public IP remains permanently assigned to the object.
- - If not set to C(Static), the IP address my changed anytime an associated virtual machine is power cycled.
- choices:
- - dynamic
- - static
- - Static
- - Dynamic
- default: dynamic
- domain_name:
- description:
- - The customizable portion of the FQDN assigned to public IP address. This is an explicit setting.
- - If no value is provided, any existing value will be removed on an existing public IP.
- aliases:
- - domain_name_label
- name:
- description:
- - Name of the Public IP.
- required: true
- state:
- description:
- - Assert the state of the Public IP. Use C(present) to create or update a and C(absent) to delete.
- default: present
- choices:
- - absent
- - present
- location:
- description:
- - Valid Azure location. Defaults to location of the resource group.
- sku:
- description:
- - The public IP address SKU.
- choices:
- - basic
- - standard
- - Basic
- - Standard
- version_added: "2.6"
- ip_tags:
- description:
- - List of IpTag associated with the public IP address.
- - Each element should contain type:value pair.
- suboptions:
- type:
- description:
- - Sets the ip_tags type.
- value:
- description:
- - Sets the ip_tags value.
- version_added: "2.8"
- idle_timeout:
- description:
- - Idle timeout in minutes.
- type: int
- version_added: "2.8"
- version:
- description:
- - The public IP address version.
- choices:
- - ipv4
- - ipv6
- default: ipv4
- version_added: "2.8"
-
-extends_documentation_fragment:
- - azure
- - azure_tags
-
-author:
- - Chris Houseknecht (@chouseknecht)
- - Matt Davis (@nitzmahone)
-'''
-
-EXAMPLES = '''
- - name: Create a public ip address
- azure_rm_publicipaddress:
- resource_group: myResourceGroup
- name: my_public_ip
- allocation_method: static
- domain_name: foobar
-
- - name: Delete public ip
- azure_rm_publicipaddress:
- resource_group: myResourceGroup
- name: my_public_ip
- state: absent
-'''
-
-RETURN = '''
-state:
- description:
- - Facts about the current state of the object.
- returned: always
- type: complex
- contains:
- dns_settings:
- description:
- - The FQDN of the DNS record associated with the public IP address.
- returned: always
- type: dict
- sample: {
- "domain_name_label": "ansible-b57dc95985712e45eb8b9c2e",
- "fqdn": "ansible-b57dc95985712e45eb8b9c2e.eastus.cloudapp.azure.com",
- "reverse_fqdn": null
- }
- etag:
- description:
- - A unique read-only string that changes whenever the resource is updated.
- returned: always
- type: str
- sample: "W/'1905ee13-7623-45b1-bc6b-4a12b2fb9d15'"
- idle_timeout_in_minutes:
- description:
- - The idle timeout of the public IP address.
- returned: always
- type: int
- sample: 4
- ip_address:
- description:
- - The Public IP Prefix this Public IP Address should be allocated from.
- returned: always
- type: str
- sample: 52.160.103.93
- location:
- description:
- - Resource location.
- returned: always
- type: str
- example: eastus
- name:
- description:
- - Name of the Public IP Address.
- returned: always
- type: str
- example: publicip002
- provisioning_state:
- description:
- - The provisioning state of the Public IP resource.
- returned: always
- type: str
- example: Succeeded
- public_ip_allocation_method:
- description:
- - The public IP allocation method.
- returned: always
- type: str
- sample: static
- public_ip_address_version:
- description:
- - The public IP address version.
- returned: always
- type: str
- sample: ipv4
- sku:
- description:
- - The public IP address SKU.
- returned: always
- type: str
- sample: Basic
- tags:
- description:
- - The resource tags.
- returned: always
- type: dict
- sample: {
- "delete": "on-exit",
- "testing": "testing"
- }
- type:
- description:
- - Type of the resource.
- returned: always
- type: str
- sample: "Microsoft.Network/publicIPAddresses"
-'''
-
-from ansible.module_utils.azure_rm_common import AzureRMModuleBase
-from ansible.module_utils._text import to_native
-
-try:
- from msrestazure.azure_exceptions import CloudError
-except ImportError:
- # This is handled in azure_rm_common
- pass
-
-
-def pip_to_dict(pip):
- result = dict(
- name=pip.name,
- type=pip.type,
- location=pip.location,
- tags=pip.tags,
- public_ip_allocation_method=pip.public_ip_allocation_method.lower(),
- public_ip_address_version=pip.public_ip_address_version.lower(),
- dns_settings=dict(),
- ip_address=pip.ip_address,
- idle_timeout_in_minutes=pip.idle_timeout_in_minutes,
- provisioning_state=pip.provisioning_state,
- etag=pip.etag,
- sku=pip.sku.name
- )
- if pip.dns_settings:
- result['dns_settings']['domain_name_label'] = pip.dns_settings.domain_name_label
- result['dns_settings']['fqdn'] = pip.dns_settings.fqdn
- result['dns_settings']['reverse_fqdn'] = pip.dns_settings.reverse_fqdn
- if pip.ip_tags:
- result['ip_tags'] = [dict(type=to_native(x.ip_tag_type), value=to_native(x.tag)) for x in pip.ip_tags]
- return result
-
-
-ip_tag_spec = dict(
- type=dict(type='str', required=True),
- value=dict(type='str', required=True)
-)
-
-
-class AzureRMPublicIPAddress(AzureRMModuleBase):
-
- def __init__(self):
-
- self.module_arg_spec = dict(
- resource_group=dict(type='str', required=True),
- name=dict(type='str', required=True),
- state=dict(type='str', default='present', choices=['present', 'absent']),
- location=dict(type='str'),
- version=dict(type='str', default='ipv4', choices=['ipv4', 'ipv6']),
- allocation_method=dict(type='str', default='dynamic', choices=['Dynamic', 'Static', 'dynamic', 'static']),
- domain_name=dict(type='str', aliases=['domain_name_label']),
- sku=dict(type='str', choices=['Basic', 'Standard', 'basic', 'standard']),
- ip_tags=dict(type='list', elements='dict', options=ip_tag_spec),
- idle_timeout=dict(type='int')
- )
-
- self.resource_group = None
- self.name = None
- self.location = None
- self.state = None
- self.tags = None
- self.allocation_method = None
- self.domain_name = None
- self.sku = None
- self.version = None
- self.ip_tags = None
- self.idle_timeout = None
-
- self.results = dict(
- changed=False,
- state=dict()
- )
-
- super(AzureRMPublicIPAddress, self).__init__(derived_arg_spec=self.module_arg_spec,
- supports_check_mode=True)
-
- def exec_module(self, **kwargs):
-
- for key in list(self.module_arg_spec.keys()) + ['tags']:
- setattr(self, key, kwargs[key])
-
- results = dict()
- changed = False
- pip = None
-
- # capitalize the sku and allocation_method. basic => Basic, Basic => Basic.
- self.allocation_method = self.allocation_method.capitalize() if self.allocation_method else None
- self.sku = self.sku.capitalize() if self.sku else None
- self.version = 'IPv4' if self.version == 'ipv4' else 'IPv6'
-
- resource_group = self.get_resource_group(self.resource_group)
- if not self.location:
- # Set default location
- self.location = resource_group.location
-
- try:
- self.log("Fetch public ip {0}".format(self.name))
- pip = self.network_client.public_ip_addresses.get(self.resource_group, self.name)
- self.check_provisioning_state(pip, self.state)
- self.log("PIP {0} exists".format(self.name))
- if self.state == 'present':
- results = pip_to_dict(pip)
- domain_lable = results['dns_settings'].get('domain_name_label')
- if self.domain_name is not None and ((self.domain_name or domain_lable) and self.domain_name != domain_lable):
- self.log('CHANGED: domain_name_label')
- changed = True
- results['dns_settings']['domain_name_label'] = self.domain_name
-
- if self.allocation_method.lower() != results['public_ip_allocation_method'].lower():
- self.log("CHANGED: allocation_method")
- changed = True
- results['public_ip_allocation_method'] = self.allocation_method
-
- if self.sku and self.sku != results['sku']:
- self.log("CHANGED: sku")
- changed = True
- results['sku'] = self.sku
-
- if self.version.lower() != results['public_ip_address_version'].lower():
- self.log("CHANGED: version")
- changed = True
- results['public_ip_address_version'] = self.version
-
- if self.idle_timeout and self.idle_timeout != results['idle_timeout_in_minutes']:
- self.log("CHANGED: idle_timeout")
- changed = True
- results['idle_timeout_in_minutes'] = self.idle_timeout
-
- if str(self.ip_tags or []) != str(results.get('ip_tags') or []):
- self.log("CHANGED: ip_tags")
- changed = True
- results['ip_tags'] = self.ip_tags
-
- update_tags, results['tags'] = self.update_tags(results['tags'])
- if update_tags:
- changed = True
-
- elif self.state == 'absent':
- self.log("CHANGED: public ip {0} exists but requested state is 'absent'".format(self.name))
- changed = True
- except CloudError:
- self.log('Public ip {0} does not exist'.format(self.name))
- if self.state == 'present':
- self.log("CHANGED: pip {0} does not exist but requested state is 'present'".format(self.name))
- changed = True
-
- self.results['state'] = results
- self.results['changed'] = changed
-
- if self.check_mode:
- return results
-
- if changed:
- if self.state == 'present':
- if not pip:
- self.log("Create new Public IP {0}".format(self.name))
- pip = self.network_models.PublicIPAddress(
- location=self.location,
- public_ip_address_version=self.version,
- public_ip_allocation_method=self.allocation_method if self.version == 'IPv4' else None,
- sku=self.network_models.PublicIPAddressSku(name=self.sku) if self.sku else None,
- idle_timeout_in_minutes=self.idle_timeout if self.idle_timeout and self.idle_timeout > 0 else None
- )
- if self.ip_tags:
- pip.ip_tags = [self.network_models.IpTag(ip_tag_type=x.type, tag=x.value) for x in self.ip_tags]
- if self.tags:
- pip.tags = self.tags
- if self.domain_name:
- pip.dns_settings = self.network_models.PublicIPAddressDnsSettings(
- domain_name_label=self.domain_name
- )
- else:
- self.log("Update Public IP {0}".format(self.name))
- pip = self.network_models.PublicIPAddress(
- location=results['location'],
- public_ip_allocation_method=results['public_ip_allocation_method'],
- tags=results['tags']
- )
- if self.domain_name:
- pip.dns_settings = self.network_models.PublicIPAddressDnsSettings(
- domain_name_label=self.domain_name
- )
- self.results['state'] = self.create_or_update_pip(pip)
- elif self.state == 'absent':
- self.log('Delete public ip {0}'.format(self.name))
- self.delete_pip()
-
- return self.results
-
- def create_or_update_pip(self, pip):
- try:
- poller = self.network_client.public_ip_addresses.create_or_update(self.resource_group, self.name, pip)
- pip = self.get_poller_result(poller)
- except Exception as exc:
- self.fail("Error creating or updating {0} - {1}".format(self.name, str(exc)))
- return pip_to_dict(pip)
-
- def delete_pip(self):
- try:
- poller = self.network_client.public_ip_addresses.delete(self.resource_group, self.name)
- self.get_poller_result(poller)
- except Exception as exc:
- self.fail("Error deleting {0} - {1}".format(self.name, str(exc)))
- # Delete returns nada. If we get here, assume that all is well.
- self.results['state']['status'] = 'Deleted'
- return True
-
-
-def main():
- AzureRMPublicIPAddress()
-
-
-if __name__ == '__main__':
- main()