当前位置: 首页 > 知识库问答 >
问题:

Ansible-将清单主机和变量读到group_vars/all文件中

柳晔
2023-03-14

我有一个假的怀疑让我卡住了很长时间。我有一个非常平庸的包含主机和变量的清单文件:

[lb]
10.112.84.122

[tomcat]
10.112.84.124

[jboss5]
10.112.84.122

...

[tests:children]
lb
tomcat
jboss5

[default:children]
tests

[tests:vars]
data_base_user=NETWIN-4.3
data_base_password=NETWIN
data_base_encrypted_password=
data_base_host=10.112.69.48
data_base_port=1521
data_base_service=ssdenwdb
data_base_url=jdbc:oracle:thin:@10.112.69.48:1521/ssdenwdb

问题是我需要从group_vars/all文件访问清单文件中的所有这些主机和变量。

我尝试了以下方式来访问主机IP:

{{ lb }}
"{{ hostvars[lb] }}"
"{{ hostvars['lb'] }}"
{{ hostvars[lb] }}

为了访问主机变量,我尝试了:

"{{ hostvars[tests].['data_base_host'] }}"

问题:在变量文件中使用清单文件中声明的主机,比方说:group_vars/all。

示例:我有一个DB主机,IP:10.112.83.37

库存文件:

[db]
10.112.83.37
data_base_url=jdbc:oracle:thin:@{{ db }}:1521/ssdenwdb
oracle_url = {{ data_base_url }}

问题是group_vars/all文件中的{{db}}变量没有被db主机IP替换。用户只能编辑库存文件。

共有1个答案

龚勇锐
2023-03-14
- name: host
   debug: msg="{{ item }}" 
   with_items:
    - "{{ groups['tests'] }}"

这段代码将提供以下信息:

'10.112.84.122'
'10.112.84.124'

因为组['tests']基本上返回唯一ip地址列表['10.112.84.122'、'10.112.84.124'],而组['tomcat'][0]返回10.112.84.124

 类似资料:
  • Ansible清单文件: Ansible Playbook: Ansible group_vars文件:

  • /inventory/group_vars/directory有 我希望host_1引用/inventory/group_vars/host_1.yml中的变量

  • 正如主题所说。我在主机清单文件中定义了一些主机变量。我如何在我的剧本中访问它们? 这里有一个例子。根据我所有的研究,我希望和是的一部分。我可以将主机特定的变量放在单独的var文件中,但我希望将它们保存在“附加”到主机的清单文件中。我不想在模板中使用它。ansible版本:1.3.2,Ansible_distribution_version:6.4

  • 我一直试图使用Ansible Playbook将主机名添加到我的主机文件中。我的Ansible播放如下所示,我的主机文件位于: Playbook成功执行,但新主机名没有添加到Ansible hosts文件中。有人能帮我吗?

  • 我有一组名为到的主机。它们在Ansible主机目录中被分组为。我想排除一个主机子集,如下所示: 根据Ansible文档,这似乎应该排除到。但是,我得到了“不能匹配主机模式,忽略vm[8-10]-prod”,就像它在读取实际主机名“vm[8-10]-prod”而不是数组一样。 我还尝试了,但也出现了同样的错误。 怎么啦?

  • Ansible版本:1.9.2 IP是正确的,组名是正确的,但当我检查ansible主机文件时,它没有被修改。我确保在主机文件中包含[group_name]。在运行过程中没有错误,也不确定为什么没有将其添加到文件中。 这个页面上有一个'add_host'的例子:http://docs.ansible.com/ec2_module.html而不是name和groups,而是使用hostname、gr