标准变量可以按主机和/或组位于单独的文件中。 例如。 group_vars/组名或 host_vars/主机名。
是否可以在 playbook 文件以外的任何其他位置设置 vars_prompt? 例如,最好直接在 group_vars/groupname 或 group_vars_prompt/groupname 中?
未找到任何相关文档。 谢谢
最佳答案
Afaik,你不能那样做。充其量,您可以使用调用 read
的动态 list 脚本,如下所示:
#!/bin/bash
read foo
cat <<EOF
{
"localhost": {
"hosts": [ "localhost" ]
},
"_meta" : {
"hostvars" : {
"localhost": {
"foo": "$foo"
}
}
}
}
EOF
但由于 ansible 在执行 list 脚本时吞下了 STDOUT
和 STDERR
(请参阅:https://github.com/ansible/ansible/blob/devel/lib/ansible/inventory/script.py#L42),您将无法显示任何文件的问题提示您写入的描述符。
作为替代方案,如果您在 X 下运行,您可以使用 Zenity:
#!/bin/bash
foo=`zenity --title "Select Host" --entry --text "Enter value for foo"`
cat <<EOF
{
"localhost": {
"hosts": [ "localhost" ]
},
"_meta" : {
"hostvars" : {
"localhost": {
"foo": "$foo"
}
}
}
}
EOF
这样,您将获得 (GUI) 提示。
但我认为这无论如何都不可取,因为它可能以百种方式失败。也许您可以尝试其他方法,或者告诉我们您想要实现的目标。
替代方法
- 使用由用户或脚本填充的 vars 文件
- 使用 ansible
-e
命令行选项,最终包装在 bash 脚本中read
ing vars,如果需要 UI,最终使用 zenity - 让用户填写库存文件(
group_vars/whatever
可以是一个目录,包含多个文件) - 通过管道使用
lookup
从脚本中读取 - 在 env 中使用
lookup
,从环境变量中读取 vars - 将 Ansible Tower 与表单结合使用
- 使用
vars_prompt
(如果未输入任何内容,则返回默认值),因为 playbook 可能是执行此操作的最佳位置 - ...
这些解决方案中的任何一个都可能比绕过应该真正无人值守可用的库存更好(因为您可能稍后从 Tower 运行,因为您可能从 cron 执行,因为您可能 ansible-pull
, ...)。
关于Ansible vars_prompt 在单独的文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30572684/