Ansible vars_prompt 在单独的文件中

标签 ansible

标准变量可以按主机和/或组位于单独的文件中。 例如。 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 脚本时吞下了 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 脚本中 reading 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/

相关文章:

loops - 根据主机组安装不同的 PHP 包

匹配时的ansible过滤器列表

ansible - 强制在所有主机上进行事实收集

具有不同变量的多台服务器上的 ansible 剧本

ansible 使用循环和多个变量

python - Ansible:如何做数学并得到一个整数?

Vagrant:在创建虚拟机时运行 ansible provisioning?

postgresql - ansible 创建一个 postgres 用户

python - 无需互联网访问即可在 python 中使用 Docker 组合

macos - Ansible-galaxy 抛出 ImportError : No module named yaml