Невозможно запустить часть пьесы локально на AWX

Невозможно запустить часть пьесы локально на AWX

Все это работает в AWX, который размещен локально. Я пытаюсь управлять некоторыми экземплярами EC2 в AWS. Я настроил прыжок через бастион и могу заставить все остальные мои игры работать правильно.

Однако есть один простой шаблон работы, который я хочу предоставить нескольким разработчикам. По сути, когда они вносят изменения в код, это позволяет очистить opcache и делает недействительными определенные файлы в CloudFront.

Я хочу, чтобы вызов API CloudFront (модуль cloudfront_invalidations) запускался локально из AWX, а затем, если он выполнен успешно, уведомить два экземпляра веб-серверов о необходимости перезапустить процессы 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' и вместо этого запускает аннулирование дважды, для каждого хоста. Я не уверен, работает ли он на самом деле локально. Я пробовал добавить флаг run_once, но это только затем перезапустило httpd + PHP на одном хосте.

Есть идеи?

решение1

Все задачи применяются ко всем хостам, даже если вы делегируете их localhost. Если у вас 2 хоста, то задачи выполняются дважды на localhost. Вы можете использовать , 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#запуск-на-одной-машине-с-однократным-запускомБольше подробностей.

Связанный контент