Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

role should be usable via include_role, vars should be possible via loop #145

Open
wants to merge 11 commits into
base: main
Choose a base branch
from
1 change: 1 addition & 0 deletions roles/acme/defaults/main.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
---
### global
acme_domain: []
acme_conf_dir: "{{ lookup('env', 'HOME') }}/letsencrypt"
acme_cert_dir: "{{ acme_conf_dir }}/certs"
acme_prerequisites_packagemanager: yum
Expand Down
5 changes: 5 additions & 0 deletions roles/acme/tasks/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,21 +12,26 @@
- name: Run key generation
ansible.builtin.include_tasks:
file: create-keys.yml
when: acme_domain | length > 0
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

are these checks redundant by the precondition, or are there cases left, where the precondition allows this to happen?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You're right. I changed this with 541861e


- name: Create csr
ansible.builtin.include_tasks:
file: create-csr.yml
when: acme_domain | length > 0

- name: Create challenge
ansible.builtin.include_tasks:
file: create-challenge.yml
when: acme_domain | length > 0

- name: Do challenge with provider {{ acme_challenge_provider }}
ansible.builtin.include_tasks:
file: "{{ acme_provider_path }}"
when: acme_domain | length > 0

- name: Convert certificate
ansible.builtin.include_tasks:
file: convert_certificate.yml
when:
- acme_convert_cert_to is defined
- acme_domain | length > 0
7 changes: 7 additions & 0 deletions roles/acme/tasks/preconditions.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,3 +27,10 @@
- challenge/dns-01/{{ acme_challenge_provider }}.yml
- challenge/http-01/{{ acme_challenge_provider }}.yml
- challenge-unknown.yml

- name: Check if a acme_domain is set
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this should be move up to be task nr 2

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I changed this with 541861e

ansible.builtin.assert:
that:
- acme_domain is defined
- acme_domain != []
fail_msg: You need to set acme_domain. See documentation for a list of possibilities.
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
---
- name: Test if include_role is working
hosts: localhost
tasks:
- name: Create and upload Lets Encrypt certificates
ansible.builtin.include_role:
name: telekom_mms.acme.acme
public: true
vars:
acme_domain:
certificate_name: dns-pebble.example.com
zone: example.com
email_address: ssl-admin@example.com
subject_alt_name:
- example.com
acme_challenge_provider: pebble
acme_use_live_directory: false
acme_account_email: ssl-admin@example.com
acme_staging_directory: https://localhost:14000/dir
acme_validate_certs: false
post_tasks:
- name: Validate certs
vars:
acme_domain:
certificate_name: dns-pebble.example.com
community.crypto.x509_certificate_info:
path: "{{ acme_cert_path }}"
register: result

- name: Print the certificate
ansible.builtin.debug:
msg: "{{ result }}"

- name: Check if the certificate is correct
ansible.builtin.assert:
that:
- "'DNS:example.com' in result.subject_alt_name"
- "'Pebble Intermediate CA' in result.issuer.commonName"
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
---
- name: Test role if acme_domain is not set
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think checking for errors from a role is a bit more complcated and this seems like a good approach:
https://stackoverflow.com/questions/55521078/how-to-deal-with-errors-coming-from-ansible-roles

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I tried to add this with 541861e

hosts: localhost
roles:
- telekom_mms.acme.acme
vars:
acme_challenge_provider: pebble
acme_use_live_directory: false
acme_account_email: ssl-admin@example.com
acme_staging_directory: https://localhost:14000/dir
acme_validate_certs: false
2 changes: 2 additions & 0 deletions tests/integration/targets/acme_letsencrypt/runme.sh
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,5 @@ set -eux

ansible-playbook dns-challenge-pebble.yml
ansible-playbook http-challenge-local.yml
ansible-playbook dns-challenge-include-role.yml
ansible-playbook dns-challenge-missing-acme-domain.yml
Loading