这一切都在本地托管的 AWX 中运行。我正在尝试在 AWS 中管理一些 EC2 实例。我已经设置了堡垒跳跃,并且可以让我的所有其他游戏正常运行。
但是我想为一些开发人员提供一个简单的作业模板。本质上,当他们更改代码时,它会清除 opcache 并使 CloudFront 中的特定文件无效。
我希望 CloudFront API 调用(cloudfront_invalidations 模块)在本地运行 AWX,然后如果成功,则通知两个 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
但是,在运行 play 时,它似乎忽略了“delegate_to”操作,而是对每个主机运行两次无效操作。我不确定它是否真的在本地运行。我尝试添加 run_once 标志,但这只会在一个主机上重新启动 httpd + PHP。
有任何想法吗?
答案1
所有任务都会应用于所有主机,即使您将其委托给本地主机也是如此。如果您有 2 个主机,则任务会在本地主机上运行两次。您可以使用run_once
该选项将任务仅应用于“全部”中的第一个主机。
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