Ein Teil eines Spiels kann nicht lokal auf AWX ausgeführt werden.

Ein Teil eines Spiels kann nicht lokal auf AWX ausgeführt werden.

Dies alles läuft innerhalb von AWX, das vor Ort gehostet wird. Ich versuche, einige EC2-Instanzen innerhalb von AWS zu verwalten. Ich habe den Bastion Jump eingerichtet und kann alle meine anderen Spiele ordnungsgemäß zum Laufen bringen.

Es gibt jedoch eine einfache Jobvorlage, die ich einigen Entwicklern zur Verfügung stellen möchte. Wenn sie eine Änderung am Code vornehmen, ermöglicht dies im Wesentlichen das Löschen des Opcache und macht die spezifischen Dateien in CloudFront ungültig.

Ich möchte, dass der CloudFront-API-Aufruf (Modul cloudfront_invalidations) lokal über AWX ausgeführt wird und dass dann, wenn dies erfolgreich ist, die beiden Webserverinstanzen benachrichtigt werden, dass sie ihre PHP- und Apache-Prozesse neu starten sollen.

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

Beim Ausführen des Spiels scheint es jedoch die Aktion „delegate_to“ zu ignorieren und führt stattdessen die Ungültigkeitserklärung zweimal für jeden Host aus. Ich bin mir nicht sicher, ob es tatsächlich lokal ausgeführt wird. Ich habe versucht, das Flag „run_once“ hinzuzufügen, aber dadurch wurden nur httpd + PHP auf einem Host neu gestartet.

Irgendwelche Ideen?

Antwort1

Alle Aufgaben werden auf alle Hosts angewendet, auch wenn Sie sie an den lokalen Host delegieren. Wenn Sie 2 Hosts haben, werden die Aufgaben zweimal auf dem lokalen Host ausgeführt. Sie können verwenden, run_onceum die Aufgabe nur auf den ersten Host in „alle“ anzuwenden.

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

Sehenhttps://docs.ansible.com/ansible/latest/user_guide/playbooks_strategies.html#running-on-a-single-machine-with-run-oncefür mehr Details.

verwandte Informationen