在每个剧本目录中加载 ansible.cfg
Load ansible.cfg in each playbook dir
我正在寻找在根 playbook_dir 加载本地 ansible.cfg 的解决方案。
这是我的剧本架构文件夹:
ansible
├── deploy_manager
│ ├── ansible.cfg
│ ├── deploy_manager.yml
│ ├── environments
│ │ ├── demo
│ │ │ ├── group_vars
│ │ │ │ └── demo.yml
│ │ │ ├── inventory.yml
│ │ │ └── vars
│ │ │ └── vault.yml
│ │ ├── int
│ │ │ ├── group_vars
│ │ │ │ └── int.yml
│ │ │ ├── inventory.yml
│ │ │ └── vars
│ │ │ └── vault.yml
│ │ └── prod
│ │ ├── group_vars
│ │ │ └── prod.yml
│ │ ├── inventory.yml
│ │ └── vars
│ │ └── vault.yml
│ ├── README.md
│ └── roles
│ ├── create_instance
│ │ └── tasks
│ │ └── main.yml
当我使用 ansible-playbook cli 执行剧本时,我在当前目录中有一个 ansible.cfg,所以 ansible.cfg 被加载了。
当我从 AWX 执行剧本时,项目在 tmp/cev039fj/awx_1900_tw78u5vh/project 中。
/tmp/ cev039fj/awx_1900_tw78u5vh 中没有 ansible.cfg,因此加载的是 /etc/ansible/ansible.cfg。
我在每个带有不同参数的剧本目录中都有一个 ansible.cfg,所以当 AWX 启动剧本时,我如何设置剧本目录 ansible.cfg 的 ANSIBLE_CONFIG 路径?
我用 ANSIBLE_CONFIG 设置做了一些测试,但没有成功。
你有什么想法吗?
谢谢
编辑:
我已经打开 awx 问题 github https://github.com/ansible/awx/issues/10398
这是 AWX 的限制,它仅将 ansible 配置加载到根项目,因为剧本是在项目的根目录下执行的。
通常,我在当前目录 playbook 中执行 playbook,这就是为什么我的特定 ansible.cfg 没有问题。
我提出了两个建议来解决这个问题,我会post最后点在这里完成
好的,我知道 ansible-runner 不会尊重您在此处的 callback_plugins 设置。它会尝试尊重回调插件的用户设置,并将自己的设置附加到列表的末尾。
但问题是您没有设置环境变量 ANSIBLE_CALLBACK_PLUGINS。您为同一件事设置配置文件设置。要与之结合,它必须读取配置文件。它没有。
但是,AWX 确实会在某些情况下读取配置文件,因此它不会破坏用户设置。这是错误的地方。这需要移到 ansible-runner 中,以便它可以负责正确覆盖现有的用户设置。否则,Ansible 核心需要添加一些语法来表示“列表值设置的现有值”。
我们可以通过其他 1 种方法解决此问题 - 我们可以将 ansible-runner 回调插件放在集合中的预期位置。参见 ansible/ansible-runner#482。这避免了 ansible-runner 更改 ANSIBLE_CALLBACK_PLUGINS 设置的需要,它只引用标准输出回调插件。但是,它仍然需要设置 ANSIBLE_STDOUT_CALLBACK 设置。
您还设置了标准输出回调设置。这对我来说没有多大意义。只能有 1 个标准输出回调插件,因为这决定了写入标准输出的内容。我考虑过将它们分层的想法,但它们会踩到彼此的脚趾。相反,我认为您应该考虑将您的插件作为“普通”回调插件而不是标准输出回调插件。如果这样做,您仍然可以通过更改 AWX_TASK_ENV 设置来启用它,而无需 ansible-runner 破坏它。您不能使用配置文件执行此操作 - 这是我们的错误。
我正在寻找在根 playbook_dir 加载本地 ansible.cfg 的解决方案。 这是我的剧本架构文件夹:
ansible
├── deploy_manager
│ ├── ansible.cfg
│ ├── deploy_manager.yml
│ ├── environments
│ │ ├── demo
│ │ │ ├── group_vars
│ │ │ │ └── demo.yml
│ │ │ ├── inventory.yml
│ │ │ └── vars
│ │ │ └── vault.yml
│ │ ├── int
│ │ │ ├── group_vars
│ │ │ │ └── int.yml
│ │ │ ├── inventory.yml
│ │ │ └── vars
│ │ │ └── vault.yml
│ │ └── prod
│ │ ├── group_vars
│ │ │ └── prod.yml
│ │ ├── inventory.yml
│ │ └── vars
│ │ └── vault.yml
│ ├── README.md
│ └── roles
│ ├── create_instance
│ │ └── tasks
│ │ └── main.yml
当我使用 ansible-playbook cli 执行剧本时,我在当前目录中有一个 ansible.cfg,所以 ansible.cfg 被加载了。
当我从 AWX 执行剧本时,项目在 tmp/cev039fj/awx_1900_tw78u5vh/project 中。 /tmp/ cev039fj/awx_1900_tw78u5vh 中没有 ansible.cfg,因此加载的是 /etc/ansible/ansible.cfg。 我在每个带有不同参数的剧本目录中都有一个 ansible.cfg,所以当 AWX 启动剧本时,我如何设置剧本目录 ansible.cfg 的 ANSIBLE_CONFIG 路径?
我用 ANSIBLE_CONFIG 设置做了一些测试,但没有成功。
你有什么想法吗?
谢谢
编辑:
我已经打开 awx 问题 github https://github.com/ansible/awx/issues/10398 这是 AWX 的限制,它仅将 ansible 配置加载到根项目,因为剧本是在项目的根目录下执行的。 通常,我在当前目录 playbook 中执行 playbook,这就是为什么我的特定 ansible.cfg 没有问题。 我提出了两个建议来解决这个问题,我会post最后点在这里完成
好的,我知道 ansible-runner 不会尊重您在此处的 callback_plugins 设置。它会尝试尊重回调插件的用户设置,并将自己的设置附加到列表的末尾。
但问题是您没有设置环境变量 ANSIBLE_CALLBACK_PLUGINS。您为同一件事设置配置文件设置。要与之结合,它必须读取配置文件。它没有。
但是,AWX 确实会在某些情况下读取配置文件,因此它不会破坏用户设置。这是错误的地方。这需要移到 ansible-runner 中,以便它可以负责正确覆盖现有的用户设置。否则,Ansible 核心需要添加一些语法来表示“列表值设置的现有值”。
我们可以通过其他 1 种方法解决此问题 - 我们可以将 ansible-runner 回调插件放在集合中的预期位置。参见 ansible/ansible-runner#482。这避免了 ansible-runner 更改 ANSIBLE_CALLBACK_PLUGINS 设置的需要,它只引用标准输出回调插件。但是,它仍然需要设置 ANSIBLE_STDOUT_CALLBACK 设置。
您还设置了标准输出回调设置。这对我来说没有多大意义。只能有 1 个标准输出回调插件,因为这决定了写入标准输出的内容。我考虑过将它们分层的想法,但它们会踩到彼此的脚趾。相反,我认为您应该考虑将您的插件作为“普通”回调插件而不是标准输出回调插件。如果这样做,您仍然可以通过更改 AWX_TASK_ENV 设置来启用它,而无需 ansible-runner 破坏它。您不能使用配置文件执行此操作 - 这是我们的错误。