From 915a78d7afe116f3b75a795649e2d436549209dc Mon Sep 17 00:00:00 2001 From: anbanerj Date: Tue, 1 Feb 2022 17:43:52 +0530 Subject: [PATCH] Backport improvements to keypair_info - Updates docs - Improves test coverage Change-Id: I09c75717a620272904b023179c726a19c4bca000 (cherry picked from commit 595f7d1093164418e78a8b3f9c0f4f57d46de271) --- ci/roles/keypair/defaults/main.yml | 10 ++++ ci/roles/keypair/tasks/main.yml | 90 ++++++++++++++++++++---------- plugins/modules/keypair_info.py | 37 ++++-------- 3 files changed, 80 insertions(+), 57 deletions(-) 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..595467b5 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 }}" @@ -18,17 +22,35 @@ that: - keypairs['openstack_keypairs']|length == 1 +- name: Assert fields + assert: + that: + - item in keypairs.openstack_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: @@ -41,18 +63,24 @@ that: - keypairs['openstack_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: @@ -67,9 +95,9 @@ - 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: @@ -84,10 +112,10 @@ - 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: @@ -102,9 +130,9 @@ - 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: @@ -119,10 +147,10 @@ - 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..1fffe2c8 100644 --- a/plugins/modules/keypair_info.py +++ b/plugins/modules/keypair_info.py @@ -54,7 +54,8 @@ RETURN = ''' openstack_keypairs: description: - Lists keypairs that are associated with the account. - type: complex + type: list + elements: dict returned: always contains: created_at: @@ -120,31 +121,15 @@ 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) + # self.conn.search_keypairs() returned munch.Munch objects before Train + result = [raw if isinstance(raw, dict) else raw.to_dict(computed=False) + for raw in keypairs] + self.exit(changed=False, openstack_keypairs=result) def main():