Tudo isso está sendo executado no AWX, que está hospedado no local. Estou tentando gerenciar algumas instâncias do EC2 na AWS. Eu configurei o salto do bastião e consigo fazer com que todas as minhas outras jogadas funcionem corretamente.
No entanto, há um modelo de trabalho simples que desejo fornecer a alguns desenvolvedores. Essencialmente, quando eles fazem uma alteração no código, isso permite que o opcache seja limpo e invalida os arquivos específicos no CloudFront.
Quero que a chamada de API do CloudFront (módulo cloudfront_invalidations) seja executada no AWX localmente e, se for bem-sucedida, notifique as duas instâncias de servidores da Web para reiniciar o processo PHP e 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
No entanto, ao executar a peça, parece ignorar a ação 'delegate_to' e, em vez disso, executa a invalidação duas vezes, para cada host. Não tenho certeza se ele está realmente sendo executado localmente. Tentei adicionar o sinalizador run_once, mas só então reiniciei o httpd + PHP em um host.
Alguma ideia?
Responder1
Todas as tarefas são aplicadas a todos os hosts, mesmo quando você as delega ao host local. Se você tiver 2 hosts, as tarefas serão executadas duas vezes no host local. Você pode usar run_once
para aplicar a tarefa apenas ao primeiro host em "todos".
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
Verhttps://docs.ansible.com/ansible/latest/user_guide/playbooks_strategies.html#running-on-a-single-machine-with-run-oncepara mais detalhes.