Add properties for os_project
Keystone supports setting custom properties for projects. This changes add properties to os_project to enable setting of custom properties. Depends-On: https://review.opendev.org/715255 Change-Id: I23e2834d6b9d40ce86db4b32a0ed8bf76b3d9879
This commit is contained in:
parent
bf4af7b1b9
commit
c1a2496e0f
28
ci/roles/project/tasks/main.yml
Normal file
28
ci/roles/project/tasks/main.yml
Normal file
@ -0,0 +1,28 @@
|
||||
---
|
||||
- name: Create project
|
||||
openstack.cloud.os_project:
|
||||
cloud: "{{ cloud }}"
|
||||
state: present
|
||||
name: ansible_project
|
||||
description: dummy description
|
||||
domain_id: default
|
||||
enabled: True
|
||||
register: project
|
||||
|
||||
- debug: var=project
|
||||
|
||||
- name: Update project
|
||||
openstack.cloud.os_project:
|
||||
cloud: "{{ cloud }}"
|
||||
state: present
|
||||
name: ansible_project
|
||||
description: new description
|
||||
register: updatedproject
|
||||
|
||||
- debug: var=updatedproject
|
||||
|
||||
- name: Delete project
|
||||
openstack.cloud.os_project:
|
||||
cloud: "{{ cloud }}"
|
||||
state: absent
|
||||
name: ansible_project
|
2
ci/roles/project_properties/defaults/main.yml
Normal file
2
ci/roles/project_properties/defaults/main.yml
Normal file
@ -0,0 +1,2 @@
|
||||
dummy_value: 'test-value'
|
||||
dummy_value_updated: 'test-value-updated'
|
142
ci/roles/project_properties/tasks/main.yml
Normal file
142
ci/roles/project_properties/tasks/main.yml
Normal file
@ -0,0 +1,142 @@
|
||||
---
|
||||
- name: 'Create project with properties - CHECK_MODE'
|
||||
check_mode: yes
|
||||
openstack.cloud.os_project:
|
||||
cloud: "{{ cloud }}"
|
||||
state: present
|
||||
name: ansible_project
|
||||
description: dummy description
|
||||
domain_id: default
|
||||
enabled: True
|
||||
properties:
|
||||
dummy_key: '{{ dummy_value }}'
|
||||
register: create_project_cm
|
||||
- assert:
|
||||
that:
|
||||
- create_project_cm is successful
|
||||
- create_project_cm is changed
|
||||
|
||||
- name: 'Create project with properties'
|
||||
openstack.cloud.os_project:
|
||||
cloud: "{{ cloud }}"
|
||||
state: present
|
||||
name: ansible_project
|
||||
description: dummy description
|
||||
domain_id: default
|
||||
enabled: True
|
||||
properties:
|
||||
dummy_key: '{{ dummy_value }}'
|
||||
register: create_project
|
||||
- assert:
|
||||
that:
|
||||
- create_project is successful
|
||||
- create_project is changed
|
||||
- '"project" in create_project'
|
||||
- '"dummy_key" in create_project["project"]'
|
||||
- create_project["project"].dummy_key == dummy_value
|
||||
|
||||
- name: 'Create project with properties (retry - no change) - CHECK_MODE'
|
||||
check_mode: yes
|
||||
openstack.cloud.os_project:
|
||||
cloud: "{{ cloud }}"
|
||||
state: present
|
||||
name: ansible_project
|
||||
description: dummy description
|
||||
domain_id: default
|
||||
enabled: True
|
||||
properties:
|
||||
dummy_key: '{{ dummy_value }}'
|
||||
register: create_project_retry_cm
|
||||
- assert:
|
||||
that:
|
||||
- create_project_retry_cm is successful
|
||||
- create_project_retry_cm is not changed
|
||||
|
||||
- name: 'Create project with properties (retry - no change)'
|
||||
openstack.cloud.os_project:
|
||||
cloud: "{{ cloud }}"
|
||||
state: present
|
||||
name: ansible_project
|
||||
description: dummy description
|
||||
domain_id: default
|
||||
enabled: True
|
||||
properties:
|
||||
dummy_key: '{{ dummy_value }}'
|
||||
register: create_project_retry
|
||||
- assert:
|
||||
that:
|
||||
- create_project_retry is successful
|
||||
- create_project_retry is not changed
|
||||
- '"project" in create_project_retry'
|
||||
- '"dummy_key" in create_project_retry["project"]'
|
||||
- create_project_retry["project"].dummy_key == dummy_value
|
||||
|
||||
- name: 'Update project with properties - CHECK_MODE'
|
||||
check_mode: yes
|
||||
openstack.cloud.os_project:
|
||||
cloud: "{{ cloud }}"
|
||||
state: present
|
||||
name: ansible_project
|
||||
description: new description
|
||||
properties:
|
||||
dummy_key: '{{ dummy_value_updated }}'
|
||||
register: updated_project_cm
|
||||
- assert:
|
||||
that:
|
||||
- updated_project_cm is successful
|
||||
- updated_project_cm is changed
|
||||
|
||||
- name: 'Update project with properties'
|
||||
openstack.cloud.os_project:
|
||||
cloud: "{{ cloud }}"
|
||||
state: present
|
||||
name: ansible_project
|
||||
description: new description
|
||||
properties:
|
||||
dummy_key: '{{ dummy_value_updated }}'
|
||||
register: updated_project
|
||||
- assert:
|
||||
that:
|
||||
- updated_project is successful
|
||||
- updated_project is changed
|
||||
- '"project" in updated_project'
|
||||
- '"dummy_key" in updated_project["project"]'
|
||||
- updated_project["project"].dummy_key == dummy_value_updated
|
||||
|
||||
- name: 'Update project with properties (retry - no change) - CHECK_MODE'
|
||||
check_mode: yes
|
||||
openstack.cloud.os_project:
|
||||
cloud: "{{ cloud }}"
|
||||
state: present
|
||||
name: ansible_project
|
||||
description: new description
|
||||
properties:
|
||||
dummy_key: '{{ dummy_value_updated }}'
|
||||
register: updated_project_retry_cm
|
||||
- assert:
|
||||
that:
|
||||
- updated_project_retry_cm is successful
|
||||
- updated_project_retry_cm is not changed
|
||||
|
||||
- name: 'Update project with properties (retry - no change)'
|
||||
openstack.cloud.os_project:
|
||||
cloud: "{{ cloud }}"
|
||||
state: present
|
||||
name: ansible_project
|
||||
description: new description
|
||||
properties:
|
||||
dummy_key: '{{ dummy_value_updated }}'
|
||||
register: updated_project_retry
|
||||
- assert:
|
||||
that:
|
||||
- updated_project_retry is successful
|
||||
- updated_project_retry is not changed
|
||||
- '"project" in updated_project_retry'
|
||||
- '"dummy_key" in updated_project_retry["project"]'
|
||||
- updated_project_retry["project"].dummy_key == dummy_value_updated
|
||||
|
||||
- name: Delete project with properties
|
||||
openstack.cloud.os_project:
|
||||
cloud: "{{ cloud }}"
|
||||
state: absent
|
||||
name: ansible_project
|
@ -23,6 +23,10 @@
|
||||
- { role: nova_flavor, tags: nova_flavor }
|
||||
- { role: object, tags: object }
|
||||
- { role: port, tags: port }
|
||||
- { role: project, tags: project }
|
||||
- role: project_properties
|
||||
tags: project_properties
|
||||
when: sdk_version is version("0.45.01", '>')
|
||||
- { role: router, tags: router }
|
||||
- { role: security_group, tags: security_group }
|
||||
- { role: server, tags: server }
|
||||
|
@ -39,6 +39,12 @@ options:
|
||||
- Is the project enabled
|
||||
type: bool
|
||||
default: 'yes'
|
||||
properties:
|
||||
description:
|
||||
- Additional properties to be associated with this project. Requires
|
||||
openstacksdk>0.45.
|
||||
type: dict
|
||||
default: {}
|
||||
state:
|
||||
description:
|
||||
- Should the resource be present or absent.
|
||||
@ -63,6 +69,8 @@ EXAMPLES = '''
|
||||
description: demodescription
|
||||
domain_id: demoid
|
||||
enabled: True
|
||||
properties:
|
||||
internal_alias: demo_project
|
||||
|
||||
# Delete a project
|
||||
- os_project:
|
||||
@ -109,6 +117,13 @@ def _needs_update(module, project):
|
||||
if module.params[key] is not None and module.params[key] != project.get(key):
|
||||
return True
|
||||
|
||||
properties = module.params['properties']
|
||||
if properties:
|
||||
project_properties = project.get('properties')
|
||||
for k, v in properties.items():
|
||||
if v is not None and v != project_properties[k]:
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
|
||||
@ -137,6 +152,7 @@ def main():
|
||||
name=dict(required=True),
|
||||
description=dict(required=False, default=None),
|
||||
domain_id=dict(required=False, default=None, aliases=['domain']),
|
||||
properties=dict(type='dict', default={}),
|
||||
enabled=dict(default=True, type='bool'),
|
||||
state=dict(default='present', choices=['absent', 'present'])
|
||||
)
|
||||
@ -152,9 +168,15 @@ def main():
|
||||
description = module.params['description']
|
||||
domain = module.params.get('domain_id')
|
||||
enabled = module.params['enabled']
|
||||
properties = module.params['properties']
|
||||
state = module.params['state']
|
||||
|
||||
sdk, cloud = openstack_cloud_from_module(module)
|
||||
min_version = None
|
||||
|
||||
if properties:
|
||||
min_version = '0.45.1'
|
||||
|
||||
sdk, cloud = openstack_cloud_from_module(module, min_version)
|
||||
try:
|
||||
if domain:
|
||||
try:
|
||||
@ -186,11 +208,15 @@ def main():
|
||||
domain_id=domain,
|
||||
enabled=enabled)
|
||||
changed = True
|
||||
|
||||
project = cloud.update_project(
|
||||
project['id'], description=description,
|
||||
enabled=enabled, **properties)
|
||||
else:
|
||||
if _needs_update(module, project):
|
||||
project = cloud.update_project(
|
||||
project['id'], description=description,
|
||||
enabled=enabled)
|
||||
enabled=enabled, **properties)
|
||||
changed = True
|
||||
else:
|
||||
changed = False
|
||||
|
Loading…
x
Reference in New Issue
Block a user