主机和/或组可以将标准变量放在单独的文件中。 例如。 group_vars / groupname或host_vars / hostname。
是否可以在playbook文件中的任何其他位置设置 vars_prompt ? 例如,理想情况下直接在group_vars / groupname或group_vars_prompt / groupname?
中没有找到任何相关文件。 感谢
答案 0 :(得分:2)
Afaik,你做不到。最好的情况是,您可以使用调用read
的动态库存脚本,如下所示:
#!/bin/bash
read foo
cat <<EOF
{
"localhost": {
"hosts": [ "localhost" ]
},
"_meta" : {
"hostvars" : {
"localhost": {
"foo": "$foo"
}
}
}
}
EOF
但是,由于ansible在执行库存脚本时会吞下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)提示。
但我认为无论如何这都不可取,因为它可能会以百种方式失败。也许你可以尝试另一种方法,或告诉我们你想要实现的目标。
替代方法
-e
命令行选项,最终包含在bash脚本read
变量中,如果需要UI,最终使用zenity group_vars/whatever
可以是包含多个文件的目录)lookup
通过管道从脚本中读取lookup
和env,从环境变量中读取变量vars_prompt
(如果没有输入,则回退到默认值),因为剧本可能是最好的地方任何这些解决方案都可能更好地破解库存,而这些库存应该是无人值守的(因为您可能会从Tower运行,因为您可能从cron执行,因为您可能ansible-pull
,...)。