這一切都在本地託管的 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
然而,在運行該遊戲時,它似乎忽略了“delegate_to”操作,而是為每個主機運行兩次失效。我不確定它是否真的在本地運行。我嘗試添加 run_once 標誌,但這只會在一台主機上重新啟動 httpd + PHP。
有任何想法嗎?
答案1
所有任務都會應用於所有主機,即使您將其委託給本地主機也是如此。如果您有 2 個主機,則任務將在本機上執行兩次。您可以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