【问题标题】:Ansible: include group vars .yml file from command lineAnsible:从命令行包含组变量 .yml 文件
【发布时间】:2017-11-13 12:13:19
【问题描述】:

我们的供应商向我们发送 Ansible 剧本和脚本以供部署。我需要为 ansible 库存组检查某些 IP 的可用性,例如: ansible mgm -i inventories/vrxinventory -m shell -a 'ping http://10.33.63.66/vrx/' -u user -k -v。 目的地因环境而异。那些要 ping 的目标 IP 在组 vars .yml 文件中。

是否可以通过如下命令行使用该 group_var.yml 文件中的变量: ansible mgm -i inventories/vrxinventory -m shell -a "ping {{ vrm_repo_url }}" -u user -k -v ?

我真的不想在 CI 期间使用 sed/awk 修改他们的剧本。

【问题讨论】:

  • 从未见过ping http://10.33.63.66/vrx/ 命令——它是如何工作的?

标签: bash ansible


【解决方案1】:

是否可以通过命令行使用这个 group_var.yml 文件中的变量,例如:ansible mgm -i inventories/vrxinventory -m shell -a "ping {{ vrm_repo_url }}" -u user -k -v

  1. 是的,ansible 命令将读取组变量以用于临时命令。

  2. 不,在 Ansible 中通过 shell 模块执行 ping {{ vrm_repo_url }} 是没有意义的:

    • 首先,因为默认情况下ping 会无限运行(这可以通过参数来缓解);
    • 其次,因为您不会看到ping 命令的任何输出。

你最想使用的是:

  • 带有低connect_timeout 参数的wait_for module 用于检查目标与其他机器之间的连接;

  • get_url module(因为您似乎想检查网络服务的可用性)。

【讨论】:

  • 能否详细说明如何在临时命令期间使用 yml 文件中的变量?
  • ping {{ vrm_repo_url }} 替换为echo {{ vrm_repo_url }} > /tmp/result.txt 并检查文件内容。您应该获得在组变量中定义的值,就像您在剧本中使用它们一样。
  • 我的意思是,如何在临时命令执行期间使用这个group_var yml 文件?在您的示例中,您刚刚使用了一个变量,但是我需要使用哪些 ansible 命令标志来附加此变量文件?
  • 不,你永远不会“附加”组变量——它们会被自动读取——无论你使用ansible-playbook还是临时Ansible。这就是使它们成为组变量的原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-07
  • 2020-04-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多