Ansible vars_prompt在单独的文件中

时间:2015-06-01 11:46:45

标签: ansible

主机和/或组可以将标准变量放在单独的文件中。 例如。 group_vars / groupname或host_vars / hostname。

是否可以在playbook文件中的任何其他位置设置 vars_prompt ? 例如,理想情况下直接在group_vars / groupname或group_vars_prompt / groupname?

没有找到任何相关文件。 感谢

1 个答案:

答案 0 :(得分:2)

Afaik,你做不到。最好的情况是,您可以使用调用read的动态库存脚本,如下所示:

#!/bin/bash
read foo                                                                               
cat <<EOF
{
  "localhost": {
     "hosts": [ "localhost" ]
   },
   "_meta" : {
    "hostvars" : {
      "localhost": {
        "foo": "$foo"
      }
    }
  }
}
EOF

但是,由于ansible在执行库存脚本时会吞下STDOUTSTDERR(请参阅: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变量中,如果需要UI,最终使用zenity
  • 让用户填写库存文件(group_vars/whatever可以是包含多个文件的目录)
  • 使用lookup通过管道从脚本中读取
  • 使用lookup和env,从环境变量中读取变量
  • 使用带表格的Ansible Tower
  • 使用vars_prompt(如果没有输入,则回退到默认值),因为剧本可能是最好的地方
  • ...

任何这些解决方案都可能更好地破解库存,而这些库存应该是无人值守的(因为您可能会从Tower运行,因为您可能从cron执行,因为您可能ansible-pull,...)。