【问题标题】:Ansible dynamic Inventory with bash script带有 bash 脚本的 Ansible 动态清单
【发布时间】:2019-05-23 18:10:40
【问题描述】:

我们最近构建了一个 API,允许我们查询 VM 列表,而不是使用清单文件。我正在尝试将其与我们的 ansible 设置结合起来。我对使用动态清单非常陌生,并且由于我对 python 不是很有经验,因此尝试了一些不同的 bash 变体。

这几乎可以工作,但只要剧本没有成为:true。如果剧本需要 sudo 我会收到此错误

FAILED! => {"changed": false, "module_stderr": "/bin/sh: sudo: command not found", "module_stdout": "", "msg": "MODULE FAILURE", "rc": 127}

SERVER1=($(curl -sS --request GET https://foo/bar| awk 'BEGIN {FS="["} {print $1}'))

cat <<EOF
{
    "test1": {
        "hosts": ["$SERVER1"],
    }
}
EOF

我试图找到我正在尝试做的事情的例子,但一直没有成功。

我有 3 个组需要在 (test1,test2,test3) 上运行一个游戏,这是我最接近它的工作。如果使用 python 执行此操作更容易或者是我可以努力解决的首选方法,我现在无法判断我是否接近解决方案或远离。任何帮助表示赞赏。

SERVER1=($(curl -sS --request GET https://foo/bar| awk 'BEGIN {FS="["} {print $1}'))
SERVER2=($(curl -sS --request GET https://foo/bar| awk 'BEGIN {FS="["} {print $2}'))
SERVER3=($(curl -sS --request GET https://foo/bar| awk 'BEGIN {FS="["} {print $3}'))

cat <<EOF
{
    "test1": {
        "hosts": ["$SERVER1"],
    },
    "test2": {
        "hosts": ["$SERVER2"],
    },
    "test3": {
        "hosts": ["$SERVER3"],
    }
}
EOF

【问题讨论】:

  • 我认为这与您的动态库存脚本无关。 sudo 是否安装在您的系统上?
  • 是的,当我使用静态清单运行它时,我的剧本没有问题。
  • 您在动态清单中使用ansible_connection: local,这将导致一切都在您的本地主机上执行。这是故意的吗?
  • 不,我无意中粘贴了一些旧代码,我已将其编辑为正确。这就是导致 sudo 问题的原因,但我仍然没有任何运气。如果我删除 $SERVER1 并将服务器名称放在它的位置,它可以正常工作。
  • 您是否在手动运行脚本时验证了它的输出?您可以在问题中包含该输出吗?此外,如果您不再遇到sudo 问题,您可能需要更新您的问题。您能否还提供一个示例,说明您如何运行 ansible 来测试您的库存脚本?

标签: ansible ansible-inventory inventory-management


【解决方案1】:

我自己对 ansible 还是很陌生,但我相信来自 Ansible Inventory Guide 脚本必须至少接受两个参数 --list 和 --host。

根据我正在做的付费教程,这是 bash 建议的格式。我无法真正解释,因为我只是从视频中转录出来的。

#! /bin/bash

if [ "$1" == "--list" ]; then
cat<<EOF
{
  "bash_hosts": {
    "hosts": [
      "myhost.domain.com",
      "localhost"
    ],
    "vars": {
      "host_test": "test-value"
    }
  },
  "_meta": {
    "hostvars": {
      "myhost.domain.com": {
        "host_specific_test_var": "test-value"
      }
    }
  }
}
EOF
elif [ "$1" == "--host" ]; then
  echo '{"_meta": {hostvars": {}}}'
else
  echo "{ }"
fi

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    • 2022-11-18
    • 1970-01-01
    • 2015-06-14
    • 2015-05-14
    • 2012-05-21
    相关资源
    最近更新 更多