mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
Add project parameter to os_network
A cloud/domain admin should be able to create a network on any project it is granted to. This changes adds the possibility to pass either a project ID or project name.
This commit is contained in:
parent
2a7324a385
commit
eecceaef6e
1 changed files with 23 additions and 2 deletions
|
@ -82,6 +82,11 @@ options:
|
||||||
required: false
|
required: false
|
||||||
default: None
|
default: None
|
||||||
version_added: "2.1"
|
version_added: "2.1"
|
||||||
|
project:
|
||||||
|
description:
|
||||||
|
- Project name or ID containing the network (name admin-only)
|
||||||
|
required: false
|
||||||
|
default: None
|
||||||
requirements: ["shade"]
|
requirements: ["shade"]
|
||||||
'''
|
'''
|
||||||
|
|
||||||
|
@ -166,6 +171,7 @@ def main():
|
||||||
choices=['flat', 'vlan', 'vxlan', 'gre']),
|
choices=['flat', 'vlan', 'vxlan', 'gre']),
|
||||||
provider_segmentation_id=dict(required=False),
|
provider_segmentation_id=dict(required=False),
|
||||||
state=dict(default='present', choices=['absent', 'present']),
|
state=dict(default='present', choices=['absent', 'present']),
|
||||||
|
project=dict(default=None)
|
||||||
)
|
)
|
||||||
|
|
||||||
module_kwargs = openstack_module_kwargs()
|
module_kwargs = openstack_module_kwargs()
|
||||||
|
@ -174,6 +180,11 @@ def main():
|
||||||
if not HAS_SHADE:
|
if not HAS_SHADE:
|
||||||
module.fail_json(msg='shade is required for this module')
|
module.fail_json(msg='shade is required for this module')
|
||||||
|
|
||||||
|
if (module.params['project'] and
|
||||||
|
StrictVersion(shade.__version__) < StrictVersion('1.6.0')):
|
||||||
|
module.fail_json(msg="To utilize project, the installed version of"
|
||||||
|
"the shade library MUST be >=1.6.0")
|
||||||
|
|
||||||
state = module.params['state']
|
state = module.params['state']
|
||||||
name = module.params['name']
|
name = module.params['name']
|
||||||
shared = module.params['shared']
|
shared = module.params['shared']
|
||||||
|
@ -182,10 +193,20 @@ def main():
|
||||||
provider_physical_network = module.params['provider_physical_network']
|
provider_physical_network = module.params['provider_physical_network']
|
||||||
provider_network_type = module.params['provider_network_type']
|
provider_network_type = module.params['provider_network_type']
|
||||||
provider_segmentation_id = module.params['provider_segmentation_id']
|
provider_segmentation_id = module.params['provider_segmentation_id']
|
||||||
|
project = module.params.pop('project')
|
||||||
|
|
||||||
try:
|
try:
|
||||||
cloud = shade.openstack_cloud(**module.params)
|
cloud = shade.openstack_cloud(**module.params)
|
||||||
net = cloud.get_network(name)
|
if project is not None:
|
||||||
|
proj = cloud.get_project(project)
|
||||||
|
if proj is None:
|
||||||
|
module.fail_json(msg='Project %s could not be found' % project)
|
||||||
|
project_id = proj['id']
|
||||||
|
filters = {'tenant_id': project_id}
|
||||||
|
else:
|
||||||
|
project_id = None
|
||||||
|
filters = None
|
||||||
|
net = cloud.get_network(name, filters=filters)
|
||||||
|
|
||||||
if state == 'present':
|
if state == 'present':
|
||||||
if not net:
|
if not net:
|
||||||
|
@ -201,7 +222,7 @@ def main():
|
||||||
module.fail_json(msg="Shade >= 1.5.0 required to use provider options")
|
module.fail_json(msg="Shade >= 1.5.0 required to use provider options")
|
||||||
|
|
||||||
net = cloud.create_network(name, shared, admin_state_up,
|
net = cloud.create_network(name, shared, admin_state_up,
|
||||||
external, provider)
|
external, provider, project_id)
|
||||||
changed = True
|
changed = True
|
||||||
else:
|
else:
|
||||||
changed = False
|
changed = False
|
||||||
|
|
Loading…
Add table
Reference in a new issue