条件に応じたAnsible include_task(ディレクトリが空であるか、証明書が期限切れになっているか、期限切れまで30日間残ります)

条件に応じたAnsible include_task(ディレクトリが空であるか、証明書が期限切れになっているか、期限切れまで30日間残ります)

私はアンサーブルを使用しています。letsencryptSSL証明書を生成するためのモジュールです。プレイブックが正常に動作し、証明書が生成され適用されます。

これで、特定の条件が満たされている場合にのみこのタスクを実行し、そうでない場合はこのタスクをスキップしたいと思います。

健康状態:

  • /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

関連情報