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

Ansible:如何在我的剧本中使用清单文件(主机)中定义的变量?

居星阑
2023-03-14

正如主题所说。我在主机清单文件中定义了一些主机变量。我如何在我的剧本中访问它们?

这里有一个例子。根据我所有的研究,我希望foobarhostvars的一部分。我可以将主机特定的变量放在单独的var文件中,但我希望将它们保存在“附加”到主机的清单文件中。我不想在模板中使用它。ansible版本:1.3.2,Ansible_distribution_version:6.4

bash $
bash $ ansible --version
ansible 1.3.2
bash $
bash $ cat test_inv.ini

[foobar]
someHost foo="some string" bar=123
someOtherHost foo="some other string" bar=456


bash $
bash $ cat test.yml

---

- name: test variables...
  hosts: all
  vars:
    - some_junk: "1"
#  gather_facts: no # foo and bar are unavailable whether I gather facts or not.
  tasks:
    - debug: msg="hostvars={{hostvars}}"
    - debug: msg="vars={{vars}}"
    - debug: msg="groups={{groups}}"
    - debug: msg="some_junk={{some_junk}}"
#    - debug: msg="???? HOW DO I PRINT values of host specific variables foo and bar defined in inventory file ???"

bash $
bash $
bash $ ansible-playbook -i test_inv.ini test.yml

PLAY [test variables...] ******************************************************

GATHERING FACTS ***************************************************************
ok: [someHost]

TASK: [debug msg="hostvars={{hostvars}}"] *************************************
ok: [someHost] => {"msg": "hostvars={'someHost': {u'facter_operatingsystem': u'RedHat', u'facter_selinux_current_mode': u'enforcing', u'facter_hostname': u'someHost', 'module_setup': True, u'facter_memoryfree_mb': u'1792.70', u'ansible_distribution_version': u'6.4' // ...........snip...........// u'VMware IDE CDR10'}}"}

TASK: [debug msg="vars={{vars}}"] *********************************************
ok: [someHost] => {"msg": "vars={'some_junk': '1', 'delegate_to': None, 'changed_when': None, 'register': None, 'inventory_dir': '/login/sg219898/PPP/automation/ansible', 'always_run': False, 'ignore_errors': False}"}

TASK: [debug msg="groups={{groups}}"] *****************************************
ok: [someHost] => {"msg": "groups={'ungrouped': [], 'foobar': ['someHost'], 'all': ['someHost']}"}

TASK: [debug msg="some_junk=1"] ***********************************************
ok: [someHost] => {"msg": "some_junk=1"}

PLAY RECAP ********************************************************************
someHost                   : ok=5    changed=0    unreachable=0    failed=0  

bash $ 

共有1个答案

晋弘义
2023-03-14

执行以下操作应该有效:
调试:msg=“foo={{foo}}”

foo变量将在当前主机的上下文中进行计算。用ansible 1.3.4进行本地测试。

 类似资料:
  • 我有一个假的怀疑让我卡住了很长时间。我有一个非常平庸的包含主机和变量的清单文件: 问题是我需要从group_vars/all文件访问清单文件中的所有这些主机和变量。 我尝试了以下方式来访问主机IP: 为了访问主机变量,我尝试了: 问题:在变量文件中使用清单文件中声明的主机,比方说:group_vars/all。 示例:我有一个DB主机,。 库存文件: 问题是group_vars/all文件中的变量

  • 我试图使用存储在MongoDB中的信息生成初始配置。我正在使用Ansible的动态库存功能。后端是一个简单的mongodb数据库。当手动运行时,它会根据Ansible的要求返回JSON中的组及其变量/子组。使用参数也返回主机及其变量,不会出现任何问题。但是,当试图访问变量时,比如Ansible playbook中的或,它会出错,并告诉我没有定义。我使用命令来运行它。我已经在这个问题上工作了几个小时

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

  • 问题内容: 我有以下两项艰巨的任务 用于获取计算机(Linux)中的接口列表并获取每个接口的总线地址。我在同一本剧本中还有另外一项任务,如下 我希望对var2的值进行迭代,然后打印总线号。 var2.results如下 我的目标是获取上述每个项目中stdout的值,例如(“ stdout”:“ 09:00.0”)。我试图给像 但这不能正确提供标准输出中的总线值。当第二个变量是and indexed

  • 问题内容: 我尝试使用Eclipse Maven构建具有依赖项的jar,但是当我执行时 得到了错误:“未找到主要方法” 我的pom.xml看起来像这样: 这只是一个简单的Java代码: 蚀版本:4.5.2 谁能帮我这个?谢谢。 问题答案: 您可以为此目的使用maven-jar-plugin。

  • 问题内容: 当我创建/调试docker映像/容器docker时,似乎在我的系统上留下了各种工件。(有一点限制为48张图像),但是我上次查看的图像为20-25张;。 因此,首要问题是: 如何正确清理? 当我手动删除图像时,更多的图像开始出现。嗯? 我应该为主机真正分配多少磁盘空间? 下次重启后,正在运行的守护程序会真正重启吗? 以及meta问题…我没有问过什么问题? 问题答案: 删除“晃来晃去”的图