Add route table and route module (#41175)

* add route module

* add test

* add table

* add  route table

* fix dict

* fix

* fix

* route  table accept no name

* add default

* fix

* fix

* fix

* fix pep

* support route table

* fix line ending

* fix pep

* fix

* fix

* set the default to 'None'

* make return value only id

* camel and snake

* set test alias

* change facts line ending

* change test

* fix

* add default

* fix

* fix line break

* remove unsafe args

* fix comment

* fix
This commit is contained in:
Yuwei Zhou 2018-08-23 06:24:57 +08:00 committed by Matt Davis
commit fff5fb2077
8 changed files with 853 additions and 2 deletions

View file

@ -61,6 +61,13 @@ options:
required: true
aliases:
- virtual_network
route_table:
description:
- The reference of the RouteTable resource.
- It can accept both a str or a dict.
- The str can be the name or resource id of the route table.
- The dict can contains C(name) and C(resource_group) of the route_table.
version_added: "2.7"
extends_documentation_fragment:
- azure
@ -89,6 +96,7 @@ EXAMPLES = '''
security_group:
name: secgroupfoo
resource_group: Testing1
route_table: route
- name: Delete a subnet
azure_rm_subnet:
@ -149,11 +157,18 @@ def subnet_to_dict(subnet):
provisioning_state=subnet.provisioning_state,
address_prefix=subnet.address_prefix,
network_security_group=dict(),
route_table=dict()
)
if subnet.network_security_group:
id_keys = azure_id_to_dict(subnet.network_security_group.id)
result['network_security_group']['id'] = subnet.network_security_group.id
result['network_security_group']['name'] = id_keys['networkSecurityGroups']
result['network_security_group']['resource_group'] = id_keys['resourceGroups']
if subnet.route_table:
id_keys = azure_id_to_dict(subnet.route_table.id)
result['route_table']['id'] = subnet.route_table.id
result['route_table']['name'] = id_keys['routeTables']
result['route_table']['resource_group'] = id_keys['resourceGroups']
return result
@ -167,7 +182,8 @@ class AzureRMSubnet(AzureRMModuleBase):
state=dict(type='str', default='present', choices=['present', 'absent']),
virtual_network_name=dict(type='str', required=True, aliases=['virtual_network']),
address_prefix_cidr=dict(type='str', aliases=['address_prefix']),
security_group=dict(type='raw', aliases=['security_group_name'])
security_group=dict(type='raw', aliases=['security_group_name']),
route_table=dict(type='raw')
)
required_if = [
@ -185,6 +201,7 @@ class AzureRMSubnet(AzureRMModuleBase):
self.virtual_network_name = None
self.address_prefix_cidr = None
self.security_group = None
self.route_table = None
super(AzureRMSubnet, self).__init__(self.module_arg_spec,
supports_check_mode=True,
@ -204,6 +221,14 @@ class AzureRMSubnet(AzureRMModuleBase):
if self.security_group:
nsg = self.parse_nsg()
if self.route_table:
route_table = self.parse_resource_to_dict(self.route_table)
self.route_table = format_resource_id(val=route_table['name'],
subscription_id=route_table['subscription_id'],
namespace='Microsoft.Network',
types='routeTables',
resource_group=route_table['resource_group'])
results = dict()
changed = False
@ -228,6 +253,10 @@ class AzureRMSubnet(AzureRMModuleBase):
changed = True
results['network_security_group']['id'] = nsg.get('id')
results['network_security_group']['name'] = nsg.get('name')
if self.route_table != results['route_table'].get('id'):
changed = True
results['route_table']['id'] = self.route_table
self.log("CHANGED: subnet {0} route_table to {1}".format(self.name, route_table['name']))
elif self.state == 'absent':
changed = True
except CloudError:
@ -249,7 +278,8 @@ class AzureRMSubnet(AzureRMModuleBase):
)
if nsg:
subnet.network_security_group = self.network_models.NetworkSecurityGroup(id=nsg.get('id'))
if self.route_table:
subnet.route_table = self.network_models.RouteTable(id=self.route_table)
else:
# update subnet
self.log('Updating subnet {0}'.format(self.name))
@ -258,6 +288,8 @@ class AzureRMSubnet(AzureRMModuleBase):
)
if results['network_security_group'].get('id'):
subnet.network_security_group = self.network_models.NetworkSecurityGroup(results['network_security_group'].get('id'))
if self.route_table:
subnet.route_table = self.network_models.RouteTable(id=self.route_table)
self.results['state'] = self.create_or_update_subnet(subnet)
elif self.state == 'absent' and changed: