gpt4 book ai didi

Ansible 变量 : Can I reference a variable within itself?

转载 作者:行者123 更新时间:2023-12-05 03:05:09 24 4
gpt4 key购买 nike

我正在为一个 ansible 剧本编写角色。在角色中,我有一个 defaults 文件夹,其中包含一个 main.yml 来定义角色使用的变量的默认值。我可以在同一对象内交叉引用吗?

例如,我试过以下方法:

scripts_config: 
host_entry:
dir: "/foo"
file: "{{dir}}/config"
foo: "{{host_entry.dir}}/foo"
bar: "{{scripts_config.host_entry.dir}}/bar"

它们都不起作用。我一次尝试了 filefoobar 中的每一个:

  • file 给了任务包括一个带有 undefined variable 的选项。错误是:'dir' 未定义
  • foo 给了 任务包括一个带有 undefined variable 的选项。错误是:“host_entry”未定义
  • bar 给出了模板化时出现未处理的异常

有可能吗?

我的用例是我想要一个对象,其中包含一个目录和几个文件,这些文件与默认设置中的目录相关。但是,如果您覆盖默认值,您可以为一个或多个文件指定完整路径,所以我不希望任务假定它是相对的。

最佳答案

当我想要这种东西时,我通常会做什么:

/parent_dir/
├── dirA/
├── dirB/
├── dirC/
└── dirD/

正在将以下内容添加到角色 defaults

父目录:/parent_dir/

然后这是 vars

other_dir_a: "{{ parent_dir }}/dirA"
other_dir_b: "{{ parent_dir }}/dirB"
other_dir_c: "{{ parent_dir }}/dirC"
other_dir_d: "{{ parent_dir }}/dirD"

这样你的“其他”目录/文件...将相对于 {{ parent_dir }}

这和你想做的类似吗?

根据下面的评论更新

所有这些变量都比角色变量更“重要”:

https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html

  • block 变量(仅用于 block 中的任务)
  • 任务变量(仅针对任务)
  • include_vars
  • set_facts/注册变量
  • 角色(和 include_role)参数
  • 包含参数
  • 额外的变量(总是优先)

您可以使用它们中的任何一个来替换。例如,使用额外的变量。

ansible-playbook -i inventory playbook.yml -e other_dir_a=/new/path/for/a -e other_dir_b=/new/path/for/b

如果你想将它们全部用作默认值,你也可以将所有变量都放在 defaults 下。它们的优先级最低,因此可以被任何其他变量替换。

关于Ansible 变量 : Can I reference a variable within itself?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51264783/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com