Cloudstack: New module cs_vlan_ip_range (#51597)
This commit is contained in:
parent
7d181802fb
commit
cbde04606a
4 changed files with 717 additions and 0 deletions
341
lib/ansible/modules/cloud/cloudstack/cs_vlan_ip_range.py
Normal file
341
lib/ansible/modules/cloud/cloudstack/cs_vlan_ip_range.py
Normal file
|
@ -0,0 +1,341 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
#
|
||||||
|
# Copyright (c) 2018, David Passante <@dpassante>
|
||||||
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||||
|
|
||||||
|
|
||||||
|
ANSIBLE_METADATA = {'metadata_version': '1.1',
|
||||||
|
'status': ['preview'],
|
||||||
|
'supported_by': 'community'}
|
||||||
|
|
||||||
|
|
||||||
|
DOCUMENTATION = '''
|
||||||
|
---
|
||||||
|
module: cs_vlan_ip_range
|
||||||
|
short_description: Manages VLAN IP ranges on Apache CloudStack based clouds.
|
||||||
|
description:
|
||||||
|
- Create and delete VLAN IP range.
|
||||||
|
version_added: '2.8'
|
||||||
|
author: "David Passante (@dpassante)"
|
||||||
|
options:
|
||||||
|
network:
|
||||||
|
description:
|
||||||
|
- The network name or id.
|
||||||
|
required: true
|
||||||
|
start_ip:
|
||||||
|
description:
|
||||||
|
- The beginning IPv4 address in the VLAN IP range.
|
||||||
|
- Only considered on create.
|
||||||
|
required: true
|
||||||
|
end_ip:
|
||||||
|
description:
|
||||||
|
- The ending IPv4 address in the VLAN IP range.
|
||||||
|
- If not specified, value of I(start_ip) is used.
|
||||||
|
- Only considered on create.
|
||||||
|
gateway:
|
||||||
|
description:
|
||||||
|
- The gateway of the VLAN IP range.
|
||||||
|
- Required if I(state=present).
|
||||||
|
netmask:
|
||||||
|
description:
|
||||||
|
- The netmask of the VLAN IP range.
|
||||||
|
- Required if I(state=present).
|
||||||
|
start_ipv6:
|
||||||
|
description:
|
||||||
|
- The beginning IPv6 address in the IPv6 network range.
|
||||||
|
- Only considered on create.
|
||||||
|
end_ipv6:
|
||||||
|
description:
|
||||||
|
- The ending IPv6 address in the IPv6 network range.
|
||||||
|
- If not specified, value of I(start_ipv6) is used.
|
||||||
|
- Only considered on create.
|
||||||
|
gateway_ipv6:
|
||||||
|
description:
|
||||||
|
- The gateway of the IPv6 network.
|
||||||
|
- Only considered on create.
|
||||||
|
cidr_ipv6:
|
||||||
|
description:
|
||||||
|
- The CIDR of IPv6 network, must be at least /64.
|
||||||
|
vlan:
|
||||||
|
description:
|
||||||
|
- The ID or VID of the network.
|
||||||
|
- If not specified, will be defaulted to the vlan of the network.
|
||||||
|
state:
|
||||||
|
description:
|
||||||
|
- State of the network ip range.
|
||||||
|
default: present
|
||||||
|
choices: [ present, absent ]
|
||||||
|
zone:
|
||||||
|
description:
|
||||||
|
- The Zone ID of the VLAN IP range.
|
||||||
|
- If not set, default zone is used.
|
||||||
|
domain:
|
||||||
|
description:
|
||||||
|
- Domain of the account owning the VLAN.
|
||||||
|
account:
|
||||||
|
description:
|
||||||
|
- Account who owns the VLAN.
|
||||||
|
- Mutually exclusive with I(project).
|
||||||
|
project:
|
||||||
|
description:
|
||||||
|
- Project who owns the VLAN.
|
||||||
|
- Mutually exclusive with I(account).
|
||||||
|
for_virtual_network:
|
||||||
|
description:
|
||||||
|
- true if VLAN is of Virtual type, false if Direct.
|
||||||
|
type: bool
|
||||||
|
default: false
|
||||||
|
extends_documentation_fragment: cloudstack
|
||||||
|
'''
|
||||||
|
|
||||||
|
EXAMPLES = '''
|
||||||
|
- name: create a VLAN IP range for network test
|
||||||
|
local_action:
|
||||||
|
module: cs_vlan_ip_range
|
||||||
|
network: test
|
||||||
|
vlan: 98
|
||||||
|
start_ip: 10.2.4.10
|
||||||
|
end_ip: 10.2.4.100
|
||||||
|
gateway: 10.2.4.1
|
||||||
|
netmask: 255.255.255.0
|
||||||
|
zone: zone-02
|
||||||
|
|
||||||
|
- name: remove a VLAN IP range for network test
|
||||||
|
local_action:
|
||||||
|
module: cs_vlan_ip_range
|
||||||
|
state: absent
|
||||||
|
network: test
|
||||||
|
start_ip: 10.2.4.10
|
||||||
|
end_ip: 10.2.4.100
|
||||||
|
zone: zone-02
|
||||||
|
'''
|
||||||
|
|
||||||
|
RETURN = '''
|
||||||
|
---
|
||||||
|
id:
|
||||||
|
description: UUID of the VLAN IP range.
|
||||||
|
returned: success
|
||||||
|
type: str
|
||||||
|
sample: 04589590-ac63-4ffc-93f5-b698b8ac38b6
|
||||||
|
network:
|
||||||
|
description: The network of vlan range
|
||||||
|
returned: success
|
||||||
|
type: str
|
||||||
|
sample: test
|
||||||
|
vlan:
|
||||||
|
description: The ID or VID of the VLAN.
|
||||||
|
returned: success
|
||||||
|
type: str
|
||||||
|
sample: vlan://98
|
||||||
|
gateway:
|
||||||
|
description: IPv4 gateway.
|
||||||
|
returned: success
|
||||||
|
type: str
|
||||||
|
sample: 10.2.4.1
|
||||||
|
netmask:
|
||||||
|
description: IPv4 netmask.
|
||||||
|
returned: success
|
||||||
|
type: str
|
||||||
|
sample: 255.255.255.0
|
||||||
|
gateway_ipv6:
|
||||||
|
description: IPv6 gateway.
|
||||||
|
returned: success
|
||||||
|
type: str
|
||||||
|
sample: 2001:db8::1
|
||||||
|
cidr_ipv6:
|
||||||
|
description: The CIDR of IPv6 network.
|
||||||
|
returned: success
|
||||||
|
type: str
|
||||||
|
sample: 2001:db8::/64
|
||||||
|
zone:
|
||||||
|
description: Name of zone.
|
||||||
|
returned: success
|
||||||
|
type: str
|
||||||
|
sample: zone-02
|
||||||
|
domain:
|
||||||
|
description: Domain name of the VLAN IP range.
|
||||||
|
returned: success
|
||||||
|
type: str
|
||||||
|
sample: ROOT
|
||||||
|
account:
|
||||||
|
description: Account who owns the network.
|
||||||
|
returned: success
|
||||||
|
type: str
|
||||||
|
sample: example account
|
||||||
|
project:
|
||||||
|
description: Project who owns the network.
|
||||||
|
returned: success
|
||||||
|
type: str
|
||||||
|
sample: example project
|
||||||
|
for_systemvms:
|
||||||
|
description: Whether VLAN IP range is dedicated to system vms or not.
|
||||||
|
returned: success
|
||||||
|
type: bool
|
||||||
|
sample: false
|
||||||
|
for_virtual_network:
|
||||||
|
description: Whether VLAN IP range is of Virtual type or not.
|
||||||
|
returned: success
|
||||||
|
type: bool
|
||||||
|
sample: false
|
||||||
|
physical_network:
|
||||||
|
description: The physical network VLAN IP range belongs to.
|
||||||
|
returned: success
|
||||||
|
type: str
|
||||||
|
sample: 04589590-ac63-4ffc-93f5-b698b8ac38b6
|
||||||
|
'''
|
||||||
|
|
||||||
|
from ansible.module_utils.basic import AnsibleModule
|
||||||
|
from ansible.module_utils.cloudstack import (
|
||||||
|
AnsibleCloudStack,
|
||||||
|
cs_argument_spec,
|
||||||
|
cs_required_together,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class AnsibleCloudStackVlanIpRange(AnsibleCloudStack):
|
||||||
|
|
||||||
|
def __init__(self, module):
|
||||||
|
super(AnsibleCloudStackVlanIpRange, self).__init__(module)
|
||||||
|
self.returns = {
|
||||||
|
'startip': 'start_ip',
|
||||||
|
'endip': 'end_ip',
|
||||||
|
'physicalnetworkid': 'physical_network',
|
||||||
|
'vlan': 'vlan',
|
||||||
|
'forsystemvms': 'for_systemvms',
|
||||||
|
'forvirtualnetwork': 'for_virtual_network',
|
||||||
|
'gateway': 'gateway',
|
||||||
|
'netmask': 'netmask',
|
||||||
|
'ip6gateway': 'gateway_ipv6',
|
||||||
|
'ip6cidr': 'cidr_ipv6',
|
||||||
|
'startipv6': 'start_ipv6',
|
||||||
|
'endipv6': 'end_ipv6',
|
||||||
|
}
|
||||||
|
self.ip_range = None
|
||||||
|
|
||||||
|
def get_vlan_ip_range(self):
|
||||||
|
if not self.ip_range:
|
||||||
|
args = {
|
||||||
|
'zoneid': self.get_zone(key='id'),
|
||||||
|
'projectid': self.get_project(key='id'),
|
||||||
|
'account': self.get_account(key='name'),
|
||||||
|
'domainid': self.get_domain(key='id'),
|
||||||
|
'networkid': self.get_network(key='id'),
|
||||||
|
}
|
||||||
|
|
||||||
|
res = self.query_api('listVlanIpRanges', **args)
|
||||||
|
if res:
|
||||||
|
ip_range_list = res['vlaniprange']
|
||||||
|
|
||||||
|
params = {
|
||||||
|
'startip': self.module.params.get('start_ip'),
|
||||||
|
'endip': self.get_or_fallback('end_ip', 'start_ip'),
|
||||||
|
}
|
||||||
|
|
||||||
|
for ipr in ip_range_list:
|
||||||
|
if params['startip'] == ipr['startip'] and params['endip'] == ipr['endip']:
|
||||||
|
self.ip_range = ipr
|
||||||
|
break
|
||||||
|
|
||||||
|
return self.ip_range
|
||||||
|
|
||||||
|
def present_vlan_ip_range(self):
|
||||||
|
ip_range = self.get_vlan_ip_range()
|
||||||
|
|
||||||
|
if not ip_range:
|
||||||
|
ip_range = self.create_vlan_ip_range()
|
||||||
|
|
||||||
|
return ip_range
|
||||||
|
|
||||||
|
def create_vlan_ip_range(self):
|
||||||
|
self.result['changed'] = True
|
||||||
|
|
||||||
|
vlan = self.module.params.get('vlan')
|
||||||
|
|
||||||
|
args = {
|
||||||
|
'zoneid': self.get_zone(key='id'),
|
||||||
|
'projectid': self.get_project(key='id'),
|
||||||
|
'account': self.get_account(key='name'),
|
||||||
|
'domainid': self.get_domain(key='id'),
|
||||||
|
'startip': self.module.params.get('start_ip'),
|
||||||
|
'endip': self.get_or_fallback('end_ip', 'start_ip'),
|
||||||
|
'netmask': self.module.params.get('netmask'),
|
||||||
|
'gateway': self.module.params.get('gateway'),
|
||||||
|
'startipv6': self.module.params.get('start_ipv6'),
|
||||||
|
'endipv6': self.get_or_fallback('end_ipv6', 'start_ipv6'),
|
||||||
|
'ip6gateway': self.module.params.get('gateway_ipv6'),
|
||||||
|
'ip6cidr': self.module.params.get('cidr_ipv6'),
|
||||||
|
'vlan': self.get_network(key='vlan') if not vlan else vlan,
|
||||||
|
'networkid': self.get_network(key='id'),
|
||||||
|
'forvirtualnetwork': self.module.params.get('for_virtual_network'),
|
||||||
|
}
|
||||||
|
|
||||||
|
if not self.module.check_mode:
|
||||||
|
res = self.query_api('createVlanIpRange', **args)
|
||||||
|
|
||||||
|
self.ip_range = res['vlan']
|
||||||
|
|
||||||
|
return self.ip_range
|
||||||
|
|
||||||
|
def absent_vlan_ip_range(self):
|
||||||
|
ip_range = self.get_vlan_ip_range()
|
||||||
|
|
||||||
|
if ip_range:
|
||||||
|
self.result['changed'] = True
|
||||||
|
|
||||||
|
args = {
|
||||||
|
'id': ip_range['id'],
|
||||||
|
}
|
||||||
|
|
||||||
|
if not self.module.check_mode:
|
||||||
|
self.query_api('deleteVlanIpRange', **args)
|
||||||
|
|
||||||
|
return ip_range
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
argument_spec = cs_argument_spec()
|
||||||
|
argument_spec.update(dict(
|
||||||
|
network=dict(type='str', required=True),
|
||||||
|
zone=dict(type='str'),
|
||||||
|
start_ip=dict(type='str', required=True),
|
||||||
|
end_ip=dict(type='str'),
|
||||||
|
gateway=dict(type='str'),
|
||||||
|
netmask=dict(type='str'),
|
||||||
|
start_ipv6=dict(type='str'),
|
||||||
|
end_ipv6=dict(type='str'),
|
||||||
|
gateway_ipv6=dict(type='str'),
|
||||||
|
cidr_ipv6=dict(type='str'),
|
||||||
|
vlan=dict(type='str'),
|
||||||
|
state=dict(choices=['present', 'absent'], default='present'),
|
||||||
|
domain=dict(type='str'),
|
||||||
|
account=dict(type='str'),
|
||||||
|
project=dict(type='str'),
|
||||||
|
for_virtual_network=dict(type='bool', default=False),
|
||||||
|
))
|
||||||
|
|
||||||
|
module = AnsibleModule(
|
||||||
|
argument_spec=argument_spec,
|
||||||
|
required_together=cs_required_together(),
|
||||||
|
mutually_exclusive=(
|
||||||
|
['account', 'project'],
|
||||||
|
),
|
||||||
|
required_if=(("state", "present", ("gateway", "netmask")),),
|
||||||
|
supports_check_mode=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
acs_vlan_ip_range = AnsibleCloudStackVlanIpRange(module)
|
||||||
|
|
||||||
|
state = module.params.get('state')
|
||||||
|
if state == 'absent':
|
||||||
|
ipr = acs_vlan_ip_range.absent_vlan_ip_range()
|
||||||
|
|
||||||
|
else:
|
||||||
|
ipr = acs_vlan_ip_range.present_vlan_ip_range()
|
||||||
|
|
||||||
|
result = acs_vlan_ip_range.get_result(ipr)
|
||||||
|
module.exit_json(**result)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
2
test/integration/targets/cs_vlan_ip_range/aliases
Normal file
2
test/integration/targets/cs_vlan_ip_range/aliases
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
cloud/cs
|
||||||
|
shippable/cs/group1
|
3
test/integration/targets/cs_vlan_ip_range/meta/main.yml
Normal file
3
test/integration/targets/cs_vlan_ip_range/meta/main.yml
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
---
|
||||||
|
dependencies:
|
||||||
|
- cs_common
|
371
test/integration/targets/cs_vlan_ip_range/tasks/main.yml
Normal file
371
test/integration/targets/cs_vlan_ip_range/tasks/main.yml
Normal file
|
@ -0,0 +1,371 @@
|
||||||
|
---
|
||||||
|
- name: setup cleanup test network
|
||||||
|
cs_network:
|
||||||
|
name: ipr_test_network
|
||||||
|
state: absent
|
||||||
|
zone: "{{ cs_common_zone_adv }}"
|
||||||
|
|
||||||
|
- name: setup create test network
|
||||||
|
cs_network:
|
||||||
|
name: ipr_test_network
|
||||||
|
zone: "{{ cs_common_zone_adv }}"
|
||||||
|
vlan: 98
|
||||||
|
start_ip: 10.2.4.2
|
||||||
|
end_ip: 10.2.4.9
|
||||||
|
gateway: 10.2.4.1
|
||||||
|
netmask: 255.255.255.0
|
||||||
|
network_offering: DefaultSharedNetworkOffering
|
||||||
|
register: ipr_net
|
||||||
|
- name: verify setup create test network
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- ipr_net is successful
|
||||||
|
- ipr_net is changed
|
||||||
|
|
||||||
|
- name: test create a VLAN IP RANGE with missing required param
|
||||||
|
cs_vlan_ip_range:
|
||||||
|
network: ipr_test_network
|
||||||
|
vlan: 98
|
||||||
|
start_ip: 10.2.4.10
|
||||||
|
end_ip: 10.2.4.100
|
||||||
|
gateway: 10.2.4.1
|
||||||
|
zone: "{{ cs_common_zone_adv }}"
|
||||||
|
ignore_errors: yes
|
||||||
|
register: ipr
|
||||||
|
- name: verify test create VLAN IP RANGE with missing required param
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- ipr is not successful
|
||||||
|
- ipr is not changed
|
||||||
|
- 'ipr.msg == "state is present but all of the following are missing: netmask"'
|
||||||
|
|
||||||
|
- name: test create a VLAN IP RANGE with conflicting params
|
||||||
|
cs_vlan_ip_range:
|
||||||
|
network: ipr_test_network
|
||||||
|
vlan: 98
|
||||||
|
start_ip: 10.2.4.10
|
||||||
|
end_ip: 10.2.4.100
|
||||||
|
gateway: 10.2.4.1
|
||||||
|
netmask: 255.255.255.0
|
||||||
|
project: fakeproject
|
||||||
|
account: fakeaccount
|
||||||
|
zone: "{{ cs_common_zone_adv }}"
|
||||||
|
ignore_errors: yes
|
||||||
|
register: ipr
|
||||||
|
- name: verify test create VLAN IP RANGE with missing conflicting params
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- ipr is not successful
|
||||||
|
- ipr is not changed
|
||||||
|
- 'ipr.msg == "parameters are mutually exclusive: account, project"'
|
||||||
|
|
||||||
|
- name: test create a VLAN IP RANGE in check mode
|
||||||
|
cs_vlan_ip_range:
|
||||||
|
network: ipr_test_network
|
||||||
|
vlan: 98
|
||||||
|
start_ip: 10.2.4.10
|
||||||
|
end_ip: 10.2.4.100
|
||||||
|
gateway: 10.2.4.1
|
||||||
|
netmask: 255.255.255.0
|
||||||
|
zone: "{{ cs_common_zone_adv }}"
|
||||||
|
register: ipr
|
||||||
|
check_mode: true
|
||||||
|
- name: verify test create VLAN IP RANGE in check mode
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- ipr is successful
|
||||||
|
- ipr is changed
|
||||||
|
|
||||||
|
- name: test create a VLAN IP RANGE
|
||||||
|
cs_vlan_ip_range:
|
||||||
|
network: ipr_test_network
|
||||||
|
vlan: 98
|
||||||
|
start_ip: 10.2.4.10
|
||||||
|
end_ip: 10.2.4.100
|
||||||
|
gateway: 10.2.4.1
|
||||||
|
netmask: 255.255.255.0
|
||||||
|
zone: "{{ cs_common_zone_adv }}"
|
||||||
|
register: ipr
|
||||||
|
- name: verify test create VLAN IP RANGE
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- ipr is successful
|
||||||
|
- ipr is changed
|
||||||
|
- ipr.vlan == "vlan://98"
|
||||||
|
- ipr.start_ip == "10.2.4.10"
|
||||||
|
- ipr.end_ip == "10.2.4.100"
|
||||||
|
- ipr.gateway == "10.2.4.1"
|
||||||
|
- ipr.netmask == "255.255.255.0"
|
||||||
|
- ipr.network == "ipr_test_network"
|
||||||
|
- ipr.for_virtual_network == false
|
||||||
|
|
||||||
|
- name: test create a VLAN IP RANGE idempotence
|
||||||
|
cs_vlan_ip_range:
|
||||||
|
network: ipr_test_network
|
||||||
|
vlan: 98
|
||||||
|
start_ip: 10.2.4.10
|
||||||
|
end_ip: 10.2.4.100
|
||||||
|
gateway: 10.2.4.1
|
||||||
|
netmask: 255.255.255.0
|
||||||
|
zone: "{{ cs_common_zone_adv }}"
|
||||||
|
register: ipr
|
||||||
|
- name: verify test create VLAN IP RANGE idempotence
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- ipr is successful
|
||||||
|
- ipr is not changed
|
||||||
|
- ipr.vlan == "vlan://98"
|
||||||
|
- ipr.start_ip == "10.2.4.10"
|
||||||
|
- ipr.end_ip == "10.2.4.100"
|
||||||
|
- ipr.gateway == "10.2.4.1"
|
||||||
|
- ipr.netmask == "255.255.255.0"
|
||||||
|
- ipr.network == "ipr_test_network"
|
||||||
|
- ipr.for_virtual_network == false
|
||||||
|
|
||||||
|
- name: test create a second VLAN IP RANGE in check mode
|
||||||
|
cs_vlan_ip_range:
|
||||||
|
network: ipr_test_network
|
||||||
|
start_ip: 10.2.4.101
|
||||||
|
end_ip: 10.2.4.150
|
||||||
|
gateway: 10.2.4.1
|
||||||
|
netmask: 255.255.255.0
|
||||||
|
zone: "{{ cs_common_zone_adv }}"
|
||||||
|
register: ipr2
|
||||||
|
check_mode: true
|
||||||
|
- name: verify test create a second VLAN IP RANGE in check mode
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- ipr2 is successful
|
||||||
|
- ipr2 is changed
|
||||||
|
|
||||||
|
- name: test create a second VLAN IP RANGE
|
||||||
|
cs_vlan_ip_range:
|
||||||
|
network: ipr_test_network
|
||||||
|
start_ip: 10.2.4.101
|
||||||
|
end_ip: 10.2.4.150
|
||||||
|
gateway: 10.2.4.1
|
||||||
|
netmask: 255.255.255.0
|
||||||
|
zone: "{{ cs_common_zone_adv }}"
|
||||||
|
register: ipr2
|
||||||
|
- name: verify test create a second VLAN IP RANGE
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- ipr2 is successful
|
||||||
|
- ipr2 is changed
|
||||||
|
- ipr2.vlan == "vlan://98"
|
||||||
|
- ipr2.start_ip == "10.2.4.101"
|
||||||
|
- ipr2.end_ip == "10.2.4.150"
|
||||||
|
- ipr2.gateway == "10.2.4.1"
|
||||||
|
- ipr2.netmask == "255.255.255.0"
|
||||||
|
- ipr2.network == "ipr_test_network"
|
||||||
|
- ipr2.for_virtual_network == false
|
||||||
|
- ipr2.id != ipr.id
|
||||||
|
|
||||||
|
- name: test create a second VLAN IP RANGE idempotence
|
||||||
|
cs_vlan_ip_range:
|
||||||
|
network: ipr_test_network
|
||||||
|
start_ip: 10.2.4.101
|
||||||
|
end_ip: 10.2.4.150
|
||||||
|
gateway: 10.2.4.1
|
||||||
|
netmask: 255.255.255.0
|
||||||
|
zone: "{{ cs_common_zone_adv }}"
|
||||||
|
register: ipr2
|
||||||
|
- name: verify test create a second VLAN IP RANGE idempotence
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- ipr2 is successful
|
||||||
|
- ipr2 is not changed
|
||||||
|
- ipr2.vlan == "vlan://98"
|
||||||
|
- ipr2.start_ip == "10.2.4.101"
|
||||||
|
- ipr2.end_ip == "10.2.4.150"
|
||||||
|
- ipr2.gateway == "10.2.4.1"
|
||||||
|
- ipr2.netmask == "255.255.255.0"
|
||||||
|
- ipr2.network == "ipr_test_network"
|
||||||
|
- ipr2.for_virtual_network == false
|
||||||
|
|
||||||
|
- name: test create a single IP VLAN IP RANGE
|
||||||
|
cs_vlan_ip_range:
|
||||||
|
network: ipr_test_network
|
||||||
|
start_ip: 10.2.4.200
|
||||||
|
gateway: 10.2.4.1
|
||||||
|
netmask: 255.255.255.0
|
||||||
|
zone: "{{ cs_common_zone_adv }}"
|
||||||
|
register: ipr3
|
||||||
|
- name: verify test create single IP VLAN IP RANGE
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- ipr3 is successful
|
||||||
|
- ipr3 is changed
|
||||||
|
- ipr3.vlan == "vlan://98"
|
||||||
|
- ipr3.start_ip == "10.2.4.200"
|
||||||
|
- ipr3.end_ip == "10.2.4.200"
|
||||||
|
- ipr3.gateway == "10.2.4.1"
|
||||||
|
- ipr3.netmask == "255.255.255.0"
|
||||||
|
- ipr3.network == "ipr_test_network"
|
||||||
|
- ipr3.for_virtual_network == false
|
||||||
|
|
||||||
|
- name: test create an IPv4 + IPv6 VLAN IP RANGE
|
||||||
|
cs_vlan_ip_range:
|
||||||
|
network: ipr_test_network
|
||||||
|
vlan: 98
|
||||||
|
start_ip: 10.2.4.151
|
||||||
|
end_ip: 10.2.4.199
|
||||||
|
gateway: 10.2.4.1
|
||||||
|
netmask: 255.255.255.0
|
||||||
|
start_ipv6: 2001:db8::10
|
||||||
|
end_ipv6: 2001:db8::50
|
||||||
|
gateway_ipv6: 2001:db8::1
|
||||||
|
cidr_ipv6: 2001:db8::/64
|
||||||
|
zone: "{{ cs_common_zone_adv }}"
|
||||||
|
register: iprv6
|
||||||
|
- name: verify test create an IPv4 + IPv6 VLAN IP RANGE
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- iprv6 is successful
|
||||||
|
- iprv6 is changed
|
||||||
|
- iprv6.vlan == "vlan://98"
|
||||||
|
- iprv6.start_ip == "10.2.4.151"
|
||||||
|
- iprv6.end_ip == "10.2.4.199"
|
||||||
|
- iprv6.gateway == "10.2.4.1"
|
||||||
|
- iprv6.netmask == "255.255.255.0"
|
||||||
|
- iprv6.start_ipv6 == "2001:db8::10"
|
||||||
|
- iprv6.end_ipv6 == "2001:db8::50"
|
||||||
|
- iprv6.gateway_ipv6 == "2001:db8::1"
|
||||||
|
- iprv6.cidr_ipv6 == "2001:db8::/64"
|
||||||
|
- iprv6.network == "ipr_test_network"
|
||||||
|
- iprv6.for_virtual_network == false
|
||||||
|
|
||||||
|
- name: test cleanup VLAN IP RANGE in check mode
|
||||||
|
cs_vlan_ip_range:
|
||||||
|
network: ipr_test_network
|
||||||
|
start_ip: 10.2.4.10
|
||||||
|
end_ip: 10.2.4.100
|
||||||
|
zone: "{{ cs_common_zone_adv }}"
|
||||||
|
state: absent
|
||||||
|
check_mode: true
|
||||||
|
register: ipr
|
||||||
|
- name: verify test cleanup VLAN IP RANGE in check mode
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- ipr is successful
|
||||||
|
- ipr is changed
|
||||||
|
- ipr.vlan == "vlan://98"
|
||||||
|
- ipr.start_ip == "10.2.4.10"
|
||||||
|
- ipr.end_ip == "10.2.4.100"
|
||||||
|
- ipr.gateway == "10.2.4.1"
|
||||||
|
- ipr.netmask == "255.255.255.0"
|
||||||
|
- ipr.network == "ipr_test_network"
|
||||||
|
- ipr.for_virtual_network == false
|
||||||
|
|
||||||
|
- name: test cleanup VLAN IP RANGE
|
||||||
|
cs_vlan_ip_range:
|
||||||
|
network: ipr_test_network
|
||||||
|
start_ip: 10.2.4.10
|
||||||
|
end_ip: 10.2.4.100
|
||||||
|
zone: "{{ cs_common_zone_adv }}"
|
||||||
|
state: absent
|
||||||
|
register: ipr
|
||||||
|
- name: verify test cleanup VLAN IP RANGE
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- ipr is successful
|
||||||
|
- ipr is changed
|
||||||
|
- ipr.vlan == "vlan://98"
|
||||||
|
- ipr.start_ip == "10.2.4.10"
|
||||||
|
- ipr.end_ip == "10.2.4.100"
|
||||||
|
- ipr.gateway == "10.2.4.1"
|
||||||
|
- ipr.netmask == "255.255.255.0"
|
||||||
|
- ipr.network == "ipr_test_network"
|
||||||
|
- ipr.for_virtual_network == false
|
||||||
|
|
||||||
|
- name: test cleanup VLAN IP RANGE idempotence
|
||||||
|
cs_vlan_ip_range:
|
||||||
|
network: ipr_test_network
|
||||||
|
start_ip: 10.2.4.10
|
||||||
|
end_ip: 10.2.4.100
|
||||||
|
zone: "{{ cs_common_zone_adv }}"
|
||||||
|
state: absent
|
||||||
|
register: ipr
|
||||||
|
- name: verify test cleanup VLAN IP RANGE idempotence
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- ipr is successful
|
||||||
|
- ipr is not changed
|
||||||
|
|
||||||
|
- name: test cleanup single IP VLAN IP RANGE
|
||||||
|
cs_vlan_ip_range:
|
||||||
|
network: ipr_test_network
|
||||||
|
start_ip: 10.2.4.200
|
||||||
|
zone: "{{ cs_common_zone_adv }}"
|
||||||
|
state: absent
|
||||||
|
register: ipr
|
||||||
|
- name: verify test cleanup single IP VLAN IP RANGE
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- ipr is successful
|
||||||
|
- ipr is changed
|
||||||
|
- ipr.vlan == "vlan://98"
|
||||||
|
- ipr.start_ip == "10.2.4.200"
|
||||||
|
- ipr.end_ip == "10.2.4.200"
|
||||||
|
- ipr.gateway == "10.2.4.1"
|
||||||
|
- ipr.netmask == "255.255.255.0"
|
||||||
|
- ipr.network == "ipr_test_network"
|
||||||
|
- ipr.for_virtual_network == false
|
||||||
|
|
||||||
|
- name: cleanup second VLAN IP RANGE
|
||||||
|
cs_vlan_ip_range:
|
||||||
|
network: ipr_test_network
|
||||||
|
start_ip: 10.2.4.101
|
||||||
|
end_ip: 10.2.4.150
|
||||||
|
zone: "{{ cs_common_zone_adv }}"
|
||||||
|
state: absent
|
||||||
|
register: ipr2
|
||||||
|
- name: verify cleanup second VLAN IP RANGE
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- ipr2 is successful
|
||||||
|
- ipr2 is changed
|
||||||
|
- ipr2.vlan == "vlan://98"
|
||||||
|
- ipr2.start_ip == "10.2.4.101"
|
||||||
|
- ipr2.end_ip == "10.2.4.150"
|
||||||
|
- ipr2.gateway == "10.2.4.1"
|
||||||
|
- ipr2.netmask == "255.255.255.0"
|
||||||
|
- ipr2.network == "ipr_test_network"
|
||||||
|
- ipr2.for_virtual_network == false
|
||||||
|
|
||||||
|
- name: test cleanup IPv4 + IPv6 VLAN IP RANGE
|
||||||
|
cs_vlan_ip_range:
|
||||||
|
network: ipr_test_network
|
||||||
|
start_ip: 10.2.4.151
|
||||||
|
end_ip: 10.2.4.199
|
||||||
|
state: absent
|
||||||
|
zone: "{{ cs_common_zone_adv }}"
|
||||||
|
register: iprv6
|
||||||
|
- name: verify test cleanup IPv4 + IPv6 VLAN IP RANGE
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- iprv6 is successful
|
||||||
|
- iprv6 is changed
|
||||||
|
- iprv6.vlan == "vlan://98"
|
||||||
|
- iprv6.start_ip == "10.2.4.151"
|
||||||
|
- iprv6.end_ip == "10.2.4.199"
|
||||||
|
- iprv6.gateway == "10.2.4.1"
|
||||||
|
- iprv6.netmask == "255.255.255.0"
|
||||||
|
- iprv6.start_ipv6 == "2001:db8::10"
|
||||||
|
- iprv6.end_ipv6 == "2001:db8::50"
|
||||||
|
- iprv6.gateway_ipv6 == "2001:db8::1"
|
||||||
|
- iprv6.cidr_ipv6 == "2001:db8::/64"
|
||||||
|
- iprv6.network == "ipr_test_network"
|
||||||
|
- iprv6.for_virtual_network == false
|
||||||
|
|
||||||
|
- name: cleanup test network
|
||||||
|
cs_network:
|
||||||
|
name: ipr_test_network
|
||||||
|
zone: "{{ cs_common_zone_adv }}"
|
||||||
|
state: absent
|
||||||
|
register: ipr_net
|
||||||
|
- name: verify cleanup test network
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- ipr_net is successful
|
||||||
|
- ipr_net is changed
|
Loading…
Reference in a new issue