Ansible include_task 基于条件(目录为空或证书已过期或还剩 30 天过期)

Ansible include_task 基于条件(目录为空或证书已过期或还剩 30 天过期)

我正在使用 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

相关内容