首页 > 解决方案 > 无法在 Ansible 中本地运行游戏的一部分

问题描述

这一切都在本地托管的 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。

有任何想法吗?

标签: ansibleansible-toweransible-awx

解决方案


推荐阅读