AWX でローカルにプレイの一部を実行できない

AWX でローカルにプレイの一部を実行できない

これらはすべて、オンプレミスでホストされている AWX 内で実行されています。AWS 内でいくつかの EC2 インスタンスを管理しようとしています。要塞ジャンプを設定し、他のすべてのプレイを正しく動作させることができます。

ただし、数人の開発者に提供したいシンプルなジョブ テンプレートが 1 つあります。基本的に、コードを変更すると、opcache がクリアされ、CloudFront 内の特定のファイルが無効になります。

CloudFront API 呼び出し (cloudfront_invalidations モジュール) を AWX からローカルで実行し、成功した場合は 2 つの Web サーバー インスタンスに PHP と Apache プロセスを再起動するように通知します。

---
- name: Restart httpd and php-fpm
  remote_user: ec2-user
  hosts: all
  become: true

  tasks:
    - name: Invalidate paths in CloudFront
      cloudfront_invalidation:
        distribution_id: "{{ distribution_id }}"
        aws_access_key: "{{ aws_access_key }}"
        aws_secret_key: "{{ aws_secret_key }}"
        target_paths: "{{ cloudfront_invalidations.split('\n') }}"
      delegate_to: 127.0.0.1
      notify:
        - Restart service httpd
        - Restart service php-fpm
  
  handlers:
    - name: Restart service httpd
      service:
        name: httpd
        state: restarted

    - name: Restart service php-fpm
      service:
        name: php-fpm
        state: restarted

しかし、プレイを実行すると、「delegate_to」アクションが無視され、代わりに各ホストに対して無効化が 2 回実行されるようです。実際にローカルで実行されているかどうかはわかりません。run_once フラグを追加してみましたが、1 つのホストでのみ httpd + PHP が再起動されました。

何か案は?

答え1

すべてのタスクは、localhost に委任した場合でも、すべてのホストに適用されます。ホストが 2 つある場合、タスクは localhost で 2 回実行されます。を使用して、run_once「all」の最初のホストにのみタスクを適用できます。

tasks:
  - name: Invalidate paths in CloudFront
    cloudfront_invalidation:
      distribution_id: "{{ distribution_id }}"
      aws_access_key: "{{ aws_access_key }}"
      aws_secret_key: "{{ aws_secret_key }}"
      target_paths: "{{ cloudfront_invalidations.split('\n') }}"
    delegate_to: 127.0.0.1
    run_once: true
    notify:
      - Restart service httpd
      - Restart service php-fpm

見るhttps://docs.ansible.com/ansible/latest/user_guide/playbooks_strategies.html#running-on-a-single-machine-with-run-once詳細については。

関連情報