【问题标题】:Load ansible.cfg in each playbook dir在每个 playbook 目录中加载 ansible.cfg
【发布时间】:2021-06-08 20:14:32
【问题描述】:

我正在寻找在根 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。 我在每个 playbook 目录中都有一个带有不同参数的 ansible.cfg,所以当 AWX 启动 playbook 时,如何设置 playbook dir ansible.cfg 的 ANSIBLE_CONFIG 路径?

我使用 ANSIBLE_CONFIG 设置进行了一些测试,但未成功。

你有什么想法吗?

谢谢

编辑:

我向 awx github https://github.com/ansible/awx/issues/10398 提出了一个问题 这是 AWX 的一个限制,它仅将 ansible 配置加载到根项目,因为剧本是在项目的根目录执行的。 通常,我在当前目录 playbook 中执行 playbook,这就是为什么我对特定的 ansible.cfg 没有问题。 我提出了两个建议来解决这个问题,我会在完成时在这里发布最后一点

【问题讨论】:

  • export ANSIBLE_CONFIG=..... 怎么没帮到你?您也可以将配置文件保存在用户的主目录中,因为/etc/ 的cfg 将作为最后的手段。
  • 我在每个 playbook 目录中有几个 ansible.cfg,所以我需要一个动态 ANSIBLE_CONFIG 到 playbook 目录路径。而且我不确定 AWX 如何使用 ANSIBLE_CONFIG 变量。等待与 AWX 开发人员的讨论

标签: ansible ansible-awx


【解决方案1】:

好的,我知道 ansible-runner 不会尊重您的 callback_plugins 设置。它尝试尊重回调插件的用户设置,并将自己的设置附加到列表的末尾。

https://github.com/ansible/ansible-runner/blob/4926a6afda13e768f55010f46509d2888e83e9a7/ansible_runner/config/_base.py#L242

但问题是您没有设置环境变量 ANSIBLE_CALLBACK_PLUGINS。您为同一件事设置配置文件设置。结合它,它必须读取配置文件。没有。

但是,AWX 会在某些情况下读取配置文件,因此它不会破坏用户设置。这是错误的地方。这需要转移到 ansible-runner 中,以便它可以负责正确覆盖现有的用户设置。否则,Ansible 核心需要添加一些语法来表示“列表值设置的现有值”。

还有另外一种方法可以解决这个问题——我们可以将 ansible-runner 回调插件放在一个集合中的预期位置。请参阅 ansible/ansible-runner#482。这完全避免了 ansible-runner 更改 ANSIBLE_CALLBACK_PLUGINS 设置的需要,它只引用标准输出回调插件。但是,它仍然需要设置 ANSIBLE_STDOUT_CALLBACK 设置。

您还设置了标准输出回调设置。这对我来说没有多大意义。只能有 1 个标准输出回调插件,因为这决定了写入标准输出的内容。我玩弄了将它们分层的想法,但它们会踩到彼此的脚趾。相反,我认为您应该考虑将您的插件作为“普通”回调插件而不是标准输出回调插件。如果您这样做,您仍然可以通过更改 AWX_TASK_ENV 设置来启用它,而无需 ansible-runner 破坏它。你不能用配置文件来做到这一点 - 这是我们的错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-25
    • 2019-05-31
    相关资源
    最近更新 更多