我正在使用 Ansibleletsencrypt
生成 SSL 证书的模块。该剧本工作正常,证书已生成并应用。
现在我希望只有在满足某些条件时才执行此任务,否则跳过此任务。
健康)状况:
- 如果
/etc/letsencrypt/certs
目录为空(第一次运行时)
或者
- 如果证书有效期还剩 30 天
或者
- 如果证书已过期
任何人都可以确认实现此目的的命令。
例子:
- include_tasks: tasks/letsencrypt-issue-jetty.yml
when: >
答案1
你可以看看 Ansible条件句。
- include_tasks: tasks/letsencrypt-issue-jetty.yml
when: certs_in_dir == 0 or days_remaining <= 30 or certificate_expired
所以一般来说你提供的方法已经可以工作了。
为了创建和加载带有值的变量,您可以查看
以及进入
答案2
我使用以下步骤来实现目标。它正在工作,但请告诉我是否有任何问题可以纠正。
- name: 'Check /etc/letsencrypt/certs is empty or not'
command: ls /etc/letsencrypt/certs
ignore_errors: True
register: FoundFiles
- name: "Get a cert from an https port"
get_certificate:
host: "{{ inventory_hostname }}"
port: 443
delegate_to: "{{ inventory_hostname }}"
run_once: true
ignore_errors: True
register: cert
- name: "Cert expiry status"
vars:
expire_status: "{{ (( cert.expired )) }}"
shell: echo "{{ expire_status }}"
ignore_errors: True
register: Expiry_Result
- name: "How many days until cert expires"
vars:
expire_days: "{{ (( cert.not_after | to_datetime('%Y%m%d%H%M%SZ')) - (ansible_date_time.iso8601 | to_datetime('%Y-%m-%dT%H:%M:%SZ')) ).days }}"
shell: echo "{{ expire_days }}"
ignore_errors: True
register: Num_of_ExpiryDays
- include_tasks: tasks/letsencrypt-issue-jetty.yml
when: FoundFiles.stdout == "" or Expiry_Result.stdout == 'True' or Num_of_ExpiryDays.stdout | int <= 14