94 lines
3.3 KiB
YAML
94 lines
3.3 KiB
YAML
---
|
|
# Copyright (c) Ansible Project
|
|
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
- name: Run tests if GPG is available
|
|
when: has_gnupg
|
|
block:
|
|
- name: Create GPG key
|
|
ansible.builtin.command:
|
|
cmd: gpg --homedir "{{ remote_tmp_dir }}" --batch --generate-key
|
|
stdin: |
|
|
%echo Generating a basic OpenPGP key
|
|
%no-ask-passphrase
|
|
%no-protection
|
|
Key-Type: RSA
|
|
Key-Length: 4096
|
|
Name-Real: Foo Bar
|
|
Name-Email: foo@bar.com
|
|
Expire-Date: 0
|
|
%commit
|
|
%echo done
|
|
register: result
|
|
|
|
- name: Extract fingerprint
|
|
ansible.builtin.shell: gpg --homedir "{{ remote_tmp_dir }}" --with-colons --fingerprint foo@bar.com | grep '^fpr:'
|
|
register: fingerprints
|
|
|
|
- name: Show fingerprints
|
|
ansible.builtin.debug:
|
|
msg: "{{ fingerprints.stdout_lines | map('split', ':') | list }}"
|
|
|
|
- name: Export public key
|
|
ansible.builtin.command: gpg --homedir "{{ remote_tmp_dir }}" --export --armor foo@bar.com
|
|
register: public_key
|
|
|
|
- name: Export private key
|
|
ansible.builtin.command: gpg --homedir "{{ remote_tmp_dir }}" --export-secret-key --armor foo@bar.com
|
|
register: private_key
|
|
|
|
- name: Write public key to disk
|
|
ansible.builtin.copy:
|
|
dest: "{{ remote_tmp_dir }}/public-key"
|
|
content: "{{ public_key.stdout }}"
|
|
|
|
- name: Write private key to disk
|
|
ansible.builtin.copy:
|
|
dest: "{{ remote_tmp_dir }}/private-key"
|
|
content: "{{ private_key.stdout }}"
|
|
|
|
- name: Gather fingerprints
|
|
ansible.builtin.set_fact:
|
|
public_key_fingerprint: "{{ lookup('community.crypto.gpg_fingerprint', remote_tmp_dir ~ '/public-key') }}"
|
|
private_key_fingerprint: "{{ lookup('community.crypto.gpg_fingerprint', remote_tmp_dir ~ '/private-key') }}"
|
|
|
|
- name: Check whether fingerprints match
|
|
ansible.builtin.assert:
|
|
that:
|
|
- public_key_fingerprint == (fingerprints.stdout_lines[0] | split(':'))[9]
|
|
- private_key_fingerprint == (fingerprints.stdout_lines[0] | split(':'))[9]
|
|
|
|
- name: Error scenario - file does not exist
|
|
ansible.builtin.set_fact:
|
|
failing_result: "{{ lookup('community.crypto.gpg_fingerprint', remote_tmp_dir ~ '/does-not-exist') }}"
|
|
register: result
|
|
ignore_errors: true
|
|
|
|
- name: Check result
|
|
ansible.builtin.assert:
|
|
that:
|
|
- result is failed
|
|
- >-
|
|
(remote_tmp_dir ~ '/does-not-exist does not exist') in result.msg
|
|
|
|
- name: Write garbage to disk
|
|
ansible.builtin.copy:
|
|
dest: "{{ remote_tmp_dir }}/garbage"
|
|
content: gargabe
|
|
|
|
- name: Error scenario - file contains garbage
|
|
ansible.builtin.set_fact:
|
|
failing_result: "{{ lookup('community.crypto.gpg_fingerprint', remote_tmp_dir ~ '/garbage') }}"
|
|
register: result
|
|
ignore_errors: true
|
|
|
|
- name: Check result
|
|
ansible.builtin.assert:
|
|
that:
|
|
- result is failed
|
|
- >-
|
|
'Running ' in result.msg
|
|
- >-
|
|
('/gpg --no-keyring --with-colons --import-options show-only --import ' ~ remote_tmp_dir ~ '/garbage yielded return code ') in result.msg
|