diff --git a/ci/roles/keypair/defaults/main.yml b/ci/roles/keypair/defaults/main.yml index 3956b56a..8fd199a0 100644 --- a/ci/roles/keypair/defaults/main.yml +++ b/ci/roles/keypair/defaults/main.yml @@ -1 +1,11 @@ keypair_name: shade_keypair +expected_fields: + - created_at + - fingerprint + - id + - is_deleted + - name + - private_key + - public_key + - type + - user_id diff --git a/ci/roles/keypair/tasks/main.yml b/ci/roles/keypair/tasks/main.yml index cdb818f8..c58fdbba 100644 --- a/ci/roles/keypair/tasks/main.yml +++ b/ci/roles/keypair/tasks/main.yml @@ -1,13 +1,17 @@ --- - name: Create keypair (non-existing) openstack.cloud.keypair: - cloud: "{{ cloud }}" - name: "{{ keypair_name }}" - state: present - register: - keypair + cloud: "{{ cloud }}" + name: "{{ keypair_name }}" + state: present + register: keypair -- name: Get list of keypairs +- name: Get list of all keypairs + openstack.cloud.keypair_info: + cloud: "{{ cloud }}" + register: keypairs_all + +- name: Get list of keypairs with filter openstack.cloud.keypair_info: cloud: "{{ cloud }}" name: "{{ keypair_name }}" @@ -16,19 +20,37 @@ - name: Ensure that list of keypairs contains single element assert: that: - - keypairs['openstack_keypairs']|length == 1 + - keypairs['keypairs']|length == 1 + +- name: Assert fields + assert: + that: + - item in keypairs.keypairs.0.keys() + loop: "{{ expected_fields }}" # This assert verifies that Ansible is capable serializing data returned by SDK -- name: Ensure private key is returned +- name: Ensure public key is returned assert: that: - keypair.key.public_key is defined and keypair.key.public_key +- name: Create another keypair + openstack.cloud.keypair: + cloud: "{{ cloud }}" + name: "{{ keypair_name }}-2" + state: present + - name: Delete keypair (non-existing) openstack.cloud.keypair: - cloud: "{{ cloud }}" - name: "{{ keypair_name }}" - state: absent + cloud: "{{ cloud }}" + name: "non-existing" + state: absent + +- name: Delete keypair + openstack.cloud.keypair: + cloud: "{{ cloud }}" + name: "{{ keypair_name }}" + state: absent - name: Get list of keypairs openstack.cloud.keypair_info: @@ -39,20 +61,26 @@ - name: Ensure that list of keypairs is empty assert: that: - - keypairs['openstack_keypairs']|length == 0 + - keypairs['keypairs']|length == 0 + +- name: Delete another keypair + openstack.cloud.keypair: + cloud: "{{ cloud }}" + name: "{{ keypair_name }}-2" + state: absent - name: Generate test key file user: - name: "{{ ansible_env.USER }}" - generate_ssh_key: yes - ssh_key_file: .ssh/shade_id_rsa + name: "{{ ansible_env.USER }}" + generate_ssh_key: yes + ssh_key_file: .ssh/shade_id_rsa - name: Create keypair (file) openstack.cloud.keypair: - cloud: "{{ cloud }}" - name: "{{ keypair_name }}" - state: present - public_key_file: "{{ ansible_env.HOME }}/.ssh/shade_id_rsa.pub" + cloud: "{{ cloud }}" + name: "{{ keypair_name }}" + state: present + public_key_file: "{{ ansible_env.HOME }}/.ssh/shade_id_rsa.pub" - name: Get list of keypairs openstack.cloud.keypair_info: @@ -63,13 +91,13 @@ - name: Ensure that list of keypairs contains single element assert: that: - - keypairs['openstack_keypairs']|length == 1 + - keypairs['keypairs']|length == 1 - name: Delete keypair (file) openstack.cloud.keypair: - cloud: "{{ cloud }}" - name: "{{ keypair_name }}" - state: absent + cloud: "{{ cloud }}" + name: "{{ keypair_name }}" + state: absent - name: Get list of keypairs openstack.cloud.keypair_info: @@ -80,14 +108,14 @@ - name: Ensure that list of keypairs is empty assert: that: - - keypairs['openstack_keypairs']|length == 0 + - keypairs['keypairs']|length == 0 - name: Create keypair (key) openstack.cloud.keypair: - cloud: "{{ cloud }}" - name: "{{ keypair_name }}" - state: present - public_key: "{{ lookup('file', '~/.ssh/shade_id_rsa.pub') }}" + cloud: "{{ cloud }}" + name: "{{ keypair_name }}" + state: present + public_key: "{{ lookup('file', '~/.ssh/shade_id_rsa.pub') }}" - name: Get list of keypairs openstack.cloud.keypair_info: @@ -98,13 +126,13 @@ - name: Ensure that list of keypairs contains single element assert: that: - - keypairs['openstack_keypairs']|length == 1 + - keypairs['keypairs']|length == 1 - name: Delete keypair (key) openstack.cloud.keypair: - cloud: "{{ cloud }}" - name: "{{ keypair_name }}" - state: absent + cloud: "{{ cloud }}" + name: "{{ keypair_name }}" + state: absent - name: Get list of keypairs openstack.cloud.keypair_info: @@ -115,14 +143,14 @@ - name: Ensure that list of keypairs is empty assert: that: - - keypairs['openstack_keypairs']|length == 0 + - keypairs['keypairs']|length == 0 - name: Delete test key pub file file: - name: "{{ ansible_env.HOME }}/.ssh/shade_id_rsa.pub" - state: absent + name: "{{ ansible_env.HOME }}/.ssh/shade_id_rsa.pub" + state: absent - name: Delete test key pvt file file: - name: "{{ ansible_env.HOME }}/.ssh/shade_id_rsa" - state: absent + name: "{{ ansible_env.HOME }}/.ssh/shade_id_rsa" + state: absent diff --git a/plugins/modules/keypair_info.py b/plugins/modules/keypair_info.py index f2af8138..3cbb3f67 100644 --- a/plugins/modules/keypair_info.py +++ b/plugins/modules/keypair_info.py @@ -51,10 +51,11 @@ EXAMPLES = ''' ''' RETURN = ''' -openstack_keypairs: +keypairs: description: - Lists keypairs that are associated with the account. - type: complex + type: list + elements: dict returned: always contains: created_at: @@ -120,31 +121,13 @@ class KeyPairInfoModule(OpenStackModule): ) def run(self): - name = self.params['name'] - user_id = self.params['user_id'] - limit = self.params['limit'] - marker = self.params['marker'] - - filters = {} - data = [] - - if user_id: - filters['user_id'] = user_id - if limit: - filters['limit'] = limit - if marker: - filters['marker'] = marker - - result = self.conn.search_keypairs(name_or_id=name, - filters=filters) - raws = [raw if isinstance(raw, dict) else raw.to_dict() - for raw in result] - - for raw in raws: - raw.pop('location') - data.append(raw) - - self.exit(changed=False, openstack_keypairs=data) + filters = {k: self.params[k] for k in + ['user_id', 'name', 'limit', 'marker'] + if self.params[k] is not None} + keypairs = self.conn.search_keypairs(name_or_id=self.params['name'], + filters=filters) + result = [raw.to_dict(computed=False) for raw in keypairs] + self.exit(changed=False, keypairs=result) def main():