diff --git a/.zuul.yaml b/.zuul.yaml index 1f6f9746..2d7fbbad 100644 --- a/.zuul.yaml +++ b/.zuul.yaml @@ -73,7 +73,7 @@ vars: tox_envlist: ansible-pip -# Stable branches +# Stable branches tests - job: name: ansible-collections-openstack-functional-devstack-victoria-ansible-2.10 parent: ansible-collections-openstack-functional-devstack-ansible-devel @@ -81,13 +81,12 @@ Run openstack collections functional tests against a victoria devstack using victoria brach of openstacksdk and stable 2.10 branch of ansible voting: true + override-checkout: stable/victoria required-projects: - name: github.com/ansible/ansible override-checkout: stable-2.10 - name: openstack/openstacksdk - override-branch: victoria - - name: openstack/devstack - override-checkout: victoria + override-checkout: stable/victoria vars: tox_envlist: ansible @@ -99,13 +98,14 @@ Run openstack collections functional tests against a ussuri devstack using ussuri brach of openstacksdk and stable 2.10 branch of ansible voting: true + override-checkout: stable/ussuri required-projects: - name: github.com/ansible/ansible override-checkout: stable-2.10 - name: openstack/openstacksdk - override-branch: ussuri - - name: openstack/devstack - override-checkout: ussuri + override-checkout: stable/ussuri + - name: openstack/os-client-config + override-checkout: stable/ussuri vars: tox_envlist: ansible @@ -115,14 +115,15 @@ description: | Run openstack collections functional tests against a train devstack using train brach of openstacksdk and stable 2.10 branch of ansible - voting: true + voting: false + override-checkout: stable/train required-projects: - name: github.com/ansible/ansible override-checkout: stable-2.10 - name: openstack/openstacksdk - override-branch: train - - name: openstack/devstack - override-checkout: train + override-checkout: stable/train + - name: openstack/os-client-config + override-checkout: stable/train vars: tox_envlist: ansible @@ -133,13 +134,14 @@ Run openstack collections functional tests against a stein devstack using stein brach of openstacksdk and stable 2.10 branch of ansible voting: true + override-checkout: stable/stein required-projects: - name: github.com/ansible/ansible override-checkout: stable-2.10 - name: openstack/openstacksdk - override-branch: stein - - name: openstack/devstack - override-checkout: stein + override-checkout: stable/stein + - name: openstack/os-client-config + override-checkout: stable/stein vars: tox_envlist: ansible @@ -150,13 +152,17 @@ Run openstack collections functional tests against a rocky devstack using rocky brach of openstacksdk and stable 2.10 branch of ansible voting: true + override-checkout: stable/rocky required-projects: - name: github.com/ansible/ansible override-checkout: stable-2.10 - name: openstack/openstacksdk - override-branch: rocky - - name: openstack/devstack - override-checkout: rocky + override-checkout: stable/rocky + - name: openstack/os-client-config + override-checkout: stable/rocky + - name: openstack/shade + override-checkout: stable/rocky + vars: tox_envlist: ansible @@ -167,13 +173,13 @@ Run openstack collections functional tests against a queens devstack using master branch of openstacksdk and stable 2.10 branch of ansible voting: true + override-checkout: stable/queens required-projects: - name: github.com/ansible/ansible override-checkout: stable-2.10 - name: openstack/openstacksdk - override-branch: master - - name: openstack/devstack - override-checkout: queens + # Run queens with highest possible py2 version of SDK + override-checkout: stable/train vars: tox_envlist: ansible @@ -184,13 +190,13 @@ Run openstack collections functional tests against a queens devstack using master branch of openstacksdk and devel branch of ansible voting: false + override-checkout: stable/queens required-projects: - name: github.com/ansible/ansible override-checkout: devel - name: openstack/openstacksdk - override-branch: master - - name: openstack/devstack - override-checkout: queens + # Run queens with highest possible py2 version of SDK + override-checkout: stable/train vars: tox_envlist: ansible-2.11 @@ -324,7 +330,7 @@ - ansible-collections-openstack-functional-devstack-ansible-pip - ansible-collections-openstack-functional-devstack-victoria-ansible-2.10 - ansible-collections-openstack-functional-devstack-ussuri-ansible-2.10 - - ansible-collections-openstack-functional-devstack-train-ansible-2.10 + # - ansible-collections-openstack-functional-devstack-train-ansible-2.10 - ansible-collections-openstack-functional-devstack-stein-ansible-2.10 - ansible-collections-openstack-functional-devstack-rocky-ansible-2.10 - ansible-collections-openstack-functional-devstack-queens-ansible-2.10 diff --git a/ci/roles/server/tasks/server_actions.yml b/ci/roles/server/tasks/server_actions.yml index b0f75349..8f5b9bc7 100644 --- a/ci/roles/server/tasks/server_actions.yml +++ b/ci/roles/server/tasks/server_actions.yml @@ -200,7 +200,10 @@ that: - info10.openstack_servers.0.status == 'ACTIVE' # not in all versions 'locked' is supported - - info10.openstack_servers.0.locked in (None, True) + - >- + (info10.openstack_server[0]['locked'] is defined and + info10.openstack_server[0]['locked']|bool) or + (info10.openstack_server[0]['locked'] is not defined) - server is changed - name: Lock server again @@ -222,7 +225,10 @@ that: - info11.openstack_servers.0.status == 'ACTIVE' # not in all versions 'locked' is supported - - info11.openstack_servers.0.locked in (None, True) + - >- + (info11.openstack_server[0]['locked'] is defined and + info11.openstack_server[0]['locked']|bool) or + (info11.openstack_server[0]['locked'] is not defined) - server is changed # no support for lock idempotency - name: Unock server @@ -244,7 +250,10 @@ that: - info12.openstack_servers.0.status == 'ACTIVE' # not in all versions 'locked' is supported - - info12.openstack_servers.0.locked in (None, False) + - >- + (info12.openstack_server[0]['locked'] is defined and + not info12.openstack_server[0]['locked']|bool) or + (info12.openstack_server[0]['locked'] is not defined) - server is changed - name: Unlock server again @@ -267,7 +276,10 @@ - info13.openstack_servers.0.status == 'ACTIVE' - server is changed # no support for unlock idempotency # not in all versions 'locked' is supported - - info13.openstack_servers.0.locked in (None, False) + - >- + (info13.openstack_server[0]['locked'] is defined and + not info13.openstack_server[0]['locked']|bool) or + (info13.openstack_server[0]['locked'] is not defined) - name: Suspend server openstack.cloud.server_action: diff --git a/ci/roles/volume/tasks/main.yml b/ci/roles/volume/tasks/main.yml index 2419fb10..1fe425ea 100644 --- a/ci/roles/volume/tasks/main.yml +++ b/ci/roles/volume/tasks/main.yml @@ -21,6 +21,7 @@ cloud: "{{ cloud }}" name: ansible_volume_snapshot register: snap_info + ignore_errors: sdk_version is version(0.49, '<') - name: Create volume backup openstack.cloud.volume_backup: @@ -29,12 +30,14 @@ display_name: ansible_volume_backup volume: ansible_volume register: vol_backup + ignore_errors: sdk_version is version(0.49, '<') - name: Get backup info openstack.cloud.volume_backup_info: cloud: "{{ cloud }}" name: ansible_volume_backup register: backup_info + ignore_errors: sdk_version is version(0.49, '<') - debug: var=vol @@ -49,6 +52,7 @@ cloud: "{{ cloud }}" display_name: ansible_volume_backup state: absent + ignore_errors: sdk_version is version(0.49, '<') - name: Delete volume snapshot openstack.cloud.volume_snapshot: diff --git a/ci/roles/volume/tasks/volume_info.yml b/ci/roles/volume/tasks/volume_info.yml index 2abcc120..fa758aff 100644 --- a/ci/roles/volume/tasks/volume_info.yml +++ b/ci/roles/volume/tasks/volume_info.yml @@ -1,122 +1,155 @@ -- name: Get info about volumes - openstack.cloud.volume_info: - cloud: "{{ cloud }}" - all_projects: true - register: delete - -- name: Clean up volumes before the test - openstack.cloud.volume: - cloud: "{{ cloud }}" - state: absent - display_name: "{{ vol.name }}" - loop: "{{ delete.volumes }}" - loop_control: - loop_var: vol - -- name: Create volume - openstack.cloud.volume: - cloud: "{{ cloud }}" - state: present - size: 1 - display_name: ansible_test - display_description: testci - register: vol - -- name: Get info about volumes +- name: Get info about volumes and all projects for all SDK openstack.cloud.volume_info: cloud: "{{ cloud }}" details: true all_projects: true - register: info + register: all_sdk + ignore_errors: true -- name: Check info +- name: Check info for all projects assert: that: - - info.volumes | selectattr("description", "equalto", "testci") | list | length == 1 - - info.volumes.0.name == 'ansible_test' - - info.volumes.0.status == 'available' + # Rocky SDK doesn't have all_projects attribute + - >- + (all_sdk is failed and sdk_version is version(0.19, '<')) or + all_sdk is success -- name: Get not detailed info about volumes +- name: Get info about volumes for all SDK openstack.cloud.volume_info: cloud: "{{ cloud }}" - details: false - all_projects: true - register: info1 + details: true + register: all_sdk1 + ignore_errors: true -- name: Check info +- name: Check info for all SDK assert: that: - - info1.volumes | selectattr("id", "equalto", "{{ info.volumes.0.id }}") | list | length == 1 - - info1.volumes.0.name == 'ansible_test' - - info1.volumes.0.status == None + - all_sdk1 is success + - all_sdk1.volumes is defined -- name: Get info about volumes with name - openstack.cloud.volume_info: - cloud: "{{ cloud }}" - details: false - name: ansible_test - all_projects: true - register: info2 +- name: Run tests for SDK > 0.28 (from train) + when: sdk_version is version(0.28, '>') + block: -- name: Check info - assert: - that: - - info2.volumes | length == 1 - - info2.volumes.0.name == 'ansible_test' + - name: Get info about volumes + openstack.cloud.volume_info: + cloud: "{{ cloud }}" + all_projects: true + register: delete -- name: Get info about volumes with non-existent name - openstack.cloud.volume_info: - cloud: "{{ cloud }}" - details: false - name: nothing_here - all_projects: true - register: info3 + - name: Clean up volumes before the test + openstack.cloud.volume: + cloud: "{{ cloud }}" + state: absent + display_name: "{{ vol.name }}" + loop: "{{ delete.volumes }}" + loop_control: + loop_var: vol -- name: Check info - assert: - that: - - info3.volumes | length == 0 + - name: Create volume + openstack.cloud.volume: + cloud: "{{ cloud }}" + state: present + size: 1 + display_name: ansible_test + display_description: testci + register: vol -- name: Get info about volumes - openstack.cloud.volume_info: - cloud: "{{ cloud }}" - details: false - name: ansible_test - all_projects: true - register: info4 + - name: Get info about volumes + openstack.cloud.volume_info: + cloud: "{{ cloud }}" + details: true + all_projects: true + register: info -- name: Check info - assert: - that: - - info4.volumes | length == 1 - - info4.volumes.0.name == 'ansible_test' + - name: Check info + assert: + that: + - info.volumes | selectattr("description", "equalto", "testci") | list | length == 1 + - info.volumes.0.name == 'ansible_test' + - info.volumes.0.status == 'available' -- name: Get info about volumes not from all projects - openstack.cloud.volume_info: - cloud: "{{ cloud }}" - details: false - name: ansible_test - register: info4a + - name: Get not detailed info about volumes + openstack.cloud.volume_info: + cloud: "{{ cloud }}" + details: false + all_projects: true + register: info1 -- name: Check info - assert: - that: - - info4a.volumes | length == 1 - - info4a.volumes.0.name == 'ansible_test' + - name: Check info + assert: + that: + - info1.volumes | selectattr("id", "equalto", "{{ info.volumes.0.id }}") | list | length == 1 + - info1.volumes.0.name == 'ansible_test' + - info1.volumes.0.status == None -- name: Delete volume - openstack.cloud.volume: - cloud: "{{ cloud }}" - state: absent - display_name: ansible_test + - name: Get info about volumes with name + openstack.cloud.volume_info: + cloud: "{{ cloud }}" + details: false + name: ansible_test + all_projects: true + register: info2 -- name: Get info when no volumes - openstack.cloud.volume_info: - cloud: "{{ cloud }}" - all_projects: true - register: info5 + - name: Check info + assert: + that: + - info2.volumes | length == 1 + - info2.volumes.0.name == 'ansible_test' -- name: Check info - assert: - that: - - info5.volumes | selectattr("name", "equalto", "ansible_test") | list | length == 0 + - name: Get info about volumes with non-existent name + openstack.cloud.volume_info: + cloud: "{{ cloud }}" + details: false + name: nothing_here + all_projects: true + register: info3 + + - name: Check info + assert: + that: + - info3.volumes | length == 0 + + - name: Get info about volumes + openstack.cloud.volume_info: + cloud: "{{ cloud }}" + details: false + name: ansible_test + all_projects: true + register: info4 + + - name: Check info + assert: + that: + - info4.volumes | length == 1 + - info4.volumes.0.name == 'ansible_test' + + - name: Get info about volumes not from all projects + openstack.cloud.volume_info: + cloud: "{{ cloud }}" + details: false + name: ansible_test + register: info4a + + - name: Check info + assert: + that: + - info4a.volumes | length == 1 + - info4a.volumes.0.name == 'ansible_test' + + - name: Delete volume + openstack.cloud.volume: + cloud: "{{ cloud }}" + state: absent + display_name: ansible_test + + - name: Get info when no volumes + openstack.cloud.volume_info: + cloud: "{{ cloud }}" + all_projects: true + register: info5 + + - name: Check info + assert: + that: + - info5.volumes | selectattr("name", "equalto", "ansible_test") | list | length == 0 diff --git a/plugins/modules/volume_backup.py b/plugins/modules/volume_backup.py index eb93a945..43cacc72 100644 --- a/plugins/modules/volume_backup.py +++ b/plugins/modules/volume_backup.py @@ -98,6 +98,8 @@ from ansible_collections.openstack.cloud.plugins.module_utils.openstack import O class VolumeBackupModule(OpenStackModule): + module_min_sdk_version = '0.49.0' + argument_spec = dict( display_name=dict(required=True, aliases=['name'], type='str'), display_description=dict(required=False, aliases=['description'], diff --git a/plugins/modules/volume_backup_info.py b/plugins/modules/volume_backup_info.py index b0f614b3..8355c08c 100644 --- a/plugins/modules/volume_backup_info.py +++ b/plugins/modules/volume_backup_info.py @@ -84,6 +84,8 @@ from ansible_collections.openstack.cloud.plugins.module_utils.openstack import O class VolumeBackupInfoModule(OpenStackModule): + module_min_sdk_version = '0.49.0' + argument_spec = dict( name=dict(required=False, type='str'), volume=dict(required=False, type='str') diff --git a/plugins/modules/volume_snapshot_info.py b/plugins/modules/volume_snapshot_info.py index c85c8ef5..c3b00f9e 100644 --- a/plugins/modules/volume_snapshot_info.py +++ b/plugins/modules/volume_snapshot_info.py @@ -85,6 +85,8 @@ from ansible_collections.openstack.cloud.plugins.module_utils.openstack import O class VolumeSnapshotInfoModule(OpenStackModule): + module_min_sdk_version = '0.49.0' + argument_spec = dict( details=dict(default=True, type='bool'), name=dict(required=False, type='str'),