【问题标题】:how to check the current host appears in a variable list within ansible?如何检查当前主机是否出现在ansible内的变量列表中?
【发布时间】:2019-02-19 15:19:27
【问题描述】:

我想针对主机多次运行微服务角色以安装多个服务。我也想使用 ansible 来移动服务。这意味着我针对all 我的主机运行并执行一些逻辑来检查该服务是否已安装以及是否应该安装它。

我发现检查该服务是否已安装很容易。我正在检查是否应该安装该服务是笨重的。在我的剧本中,我定义了一个应该安装角色的主机列表:

角色: - { 角色:“ansible-role-springboot”, sb_app_name: "微服务注册", sb_app_group_id: "org.springframework.samples.service.service", sb_app_artifact_id: "微服务演示", sb_app_version: "2.0.0.RELEASE", sb_hosts:[ “我的测试虚拟机” ] }

然后我想测试一个事实“当前主机在列表中吗?”。使用我特定的测试厨房 ansible 设置,inventory_hostname 总是以localhost 出现,即使 vm 具有正确的主机名。所以我想测试命令hostname -f 的输出是否在var list sb_hosts 中。这是我想出的:

- name: Transfer the script
  copy: src=host_test.sh dest=/home/sbuser mode=0777

- name: Resolve hostname
  command: "/home/sbuser/host_test.sh {{ sb_hosts }}"
  register: hostname_output

- set_fact: 
    hostname_listed="{{ 'HOSTNAME_LISTED' in hostname_output.stdout}}"

host_test.sh 在哪里:

#!/bin/sh
HOSTNAME=$(hostname -f)
VARS=$1
if echo $VARS | grep $HOSTNAME; then
    echo HOSTNAME_LISTED
else
    echo HOSTNAME_NOT_LISTED
fi

复制一个 shell 脚本来做一些如此基本的事情感觉很笨拙。有没有更简洁的方法来检查“这个变量列表中是变量标量”吗?

【问题讨论】:

  • 您未能包含对您而言失败的实际 jinja2 sn-p,以便我们帮助您调试它。如果{{ inventory_hostname in sb_hosts }} 是假的,那么可能是{{ ansible_hostname in sb_hosts }}{{ ansible_nodename ... }},或者包罗万象的{{ ([inventory_hostname, ansible_hostname, etcetc] | intersect(sb_hosts) | length) != 0 }}
  • @MatthewLDaniel 非常感谢 inventory_hostname 是本地主机,但 ansible_hostname 设置正确,因此有效的 j2 是 sb_app_state="{% if ansible_hostname in sb_hosts %}present{% else %}absent{% endif %}"。如果您提供与您的评论相匹配的答案,即可以检查其他标准变量,那么我会接受它。

标签: ansible


【解决方案1】:

如果{{ inventory_hostname in sb_hosts }} 是假的,那么可能是{{ ansible_hostname in sb_hosts }}{{ ansible_nodename ...etc... }},或者包罗万象的{{ ([inventory_hostname, ansible_hostname, etcetc] | intersect(sb_hosts) | length) != 0 }}

您可以通过setup 命令获取 ansible 知道的名称的完整列表,或者转储- debug: var=hostvars 以查看其中隐藏着哪些有趣的玩具。

如果存在由setup 填充的可用hostvars 的目录,那么我不知道在哪里可以找到它。

【讨论】:

    【解决方案2】:

    终于进去了:

    ansible_hostname in sb_hosts
    

    【讨论】:

      猜你喜欢
      • 2015-04-26
      • 2022-11-04
      • 2016-07-09
      • 2017-04-16
      • 2023-03-27
      • 2017-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多