
私はアンサーブルを使用しています。letsencrypt
SSL証明書を生成するためのモジュールです。プレイブックが正常に動作し、証明書が生成され適用されます。
これで、特定の条件が満たされている場合にのみこのタスクを実行し、そうでない場合はこのタスクをスキップしたいと思います。
健康状態:
/etc/letsencrypt/certs
ディレクトリが空の場合(最初の実行時)
または
- 証明書の有効期間が30日残った場合
または
- 証明書が期限切れになった場合
誰でもこれを達成するためのコマンドを確認できますか?
例:
- include_tasks: tasks/letsencrypt-issue-jetty.yml
when: >
答え1
アンサーブルを見ると分かる条件文。
- 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