使用bash脚本的Ansible动态广告资源

时间:2019-05-23 18:10:40

标签: ansible ansible-inventory inventory-management

我们最近建立了一个API,该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

1 个答案:

答案 0 :(得分:0)

我对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