![无法让部分剧情在 AWX 上本地运行](https://linux22.com/image/756726/%E6%97%A0%E6%B3%95%E8%AE%A9%E9%83%A8%E5%88%86%E5%89%A7%E6%83%85%E5%9C%A8%20AWX%20%E4%B8%8A%E6%9C%AC%E5%9C%B0%E8%BF%90%E8%A1%8C.png)
这一切都在本地托管的 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