gpt4 book ai didi

Ansible:如何从 list 或 group_vars 文件中获取变量的值?

转载 作者:行者123 更新时间:2023-12-04 03:19:51 25 4
gpt4 key购买 nike

如果变量可以在 list 文件中或 group_vars 中,我如何从 list 中获取变量的值目录?

例如,region=place-a可能在 list 文件中或在 group_vars 中的文件中某处。我想要一个命令能够使用 ansible 或检索该值的东西检索该值。喜欢:

$ ansible -i /somewhere/production/web --get-value region
place-a

这将帮助我进行部署并了解正在部署到哪个区域。

.

更长的解释要澄清,我的库存结构如下所示:
/somewhere/production/web
/somewhere/production/group_vars/web

库存文件的变量内容, /somewhere/production/web看起来像这样:
[web:children]
web1 ansible_ssh_host=10.0.0.1
web2 ansible_ssh_host=10.0.0.2

[web:vars]
region=place-a

我可以通过简单地解析文件从 list 文件中获取值。像这样:
$ awk -F "=" '/^region/ {print $2}' /somewhere/production/web
place-a

但该变量可能在 group_vars 中文件也是。例如:
$ cat /somewhere/production/group_vars/web
region: place-a

或者它看起来像一个数组:
$ cat /somewhere/production/group_vars/web
region:
- place-a

我不想查找和解析所有可能的文件。

Ansible 是否有获取值的方法?有点像它如何处理 --list-hosts ?
$ ansible web -i /somewhere/production/web --list-hosts
web1
web2

最佳答案

简答
没有 CLI 选项来获取变量的值。
长答案
首先,你必须研究如何变量优先级 在 Ansible 中工作。
确切的顺序在 documentation 中定义.以下是摘要摘录:

Basically, anything that goes into “role defaults” (the defaultsfolder inside the role) is the most malleable and easily overridden.Anything in the vars directory of the role overrides previous versionsof that variable in namespace. The idea here to follow is that themore explicit you get in scope, the more precedence it takes withcommand line -e extra vars always winning. Host and/or inventoryvariables can win over role defaults, but not explicit includes likethe vars directory or an include_vars task.


清除后,查看变量取什么值的唯一方法是使用 debug任务如下:
- name: debug a variable
debug:
var: region
这将打印出变量 region 的值.
我的建议是保持一个单一的值类型,要么是 stringlist防止混淆 tasks在不同 playbooks .
你可以使用这样的东西:
- name: deploy to regions
<task_type>:
<task_options>: <task_option_value>
// use the region variable as you wish
region: {{ item }}
...
with_items: "{{ regions.split(',') }}"
在这种情况下,您可以有一个变量 regions=us-west,us-east逗号分隔。 with_items语句会将其拆分为 ,并对所有区域重复该任务。

关于Ansible:如何从 list 或 group_vars 文件中获取变量的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39143209/

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