如何在Ansible中为当前用户定义变量?
我们使用vagrant和ansible创建标准开发环境。 ansible剧本、流浪者文件等都在git存储库中 我曾经引用过开发人员主目录中的变量文件,以获取一些敏感和/或用户特定的信息(例如电子邮件地址) 我们通过执行如何在Ansible中为当前用户定义变量?,ansible,Ansible,我们使用vagrant和ansible创建标准开发环境。 ansible剧本、流浪者文件等都在git存储库中 我曾经引用过开发人员主目录中的变量文件,以获取一些敏感和/或用户特定的信息(例如电子邮件地址) 我们通过执行vars\u文件来使用这些变量:作为剧本的一部分,但每次剧本都必须这样做 我不想把它放在group\u vars/all文件中,因为它会在存储库中,而不是特定于用户 我不希望在存储库中有一个被忽略的文件,因为人们仍然设法包含它,它会把其他人都搞砸 是否有一种方法可以等效于group
vars\u文件来使用这些变量:
作为剧本的一部分,但每次剧本都必须这样做
我不想把它放在group\u vars/all
文件中,因为它会在存储库中,而不是特定于用户
我不希望在存储库中有一个被忽略的文件,因为人们仍然设法包含它,它会把其他人都搞砸
是否有一种方法可以等效于groups/all
,它可以包含任务和/或变量定义,并在运行playbook时自动运行
我们通过执行vars\u文件来使用这些变量:
作为剧本的一部分,但每次剧本都必须这样做
不,你可以在剧本层面上做。(但这可能是一件新鲜事,在当时可能是不可能的,我没有检查。)
是否有一种方法可以实现包含任务和/或变量定义的等效组/所有组,这些任务和/或变量定义将在playbook运行时自动运行 何时自动运行/包含?!我认为这是不可能的,因为会有很多悬而未决的问题,比如:
- 这应该在目标计算机或ansible服务器上指定吗
- 如何指定在哪个主机上发生这种情况的用户
- 如果有任务:是否希望在每个剧本上执行此操作
当它使用给定用户运行时?指定的任务如何
它们作为根运行(
)?那么指定一个任务的任务呢 指定要作为执行的用户?以root用户身份运行的任务如何 但是创建一个所有者与给定用户匹配的文件变为
您可以继续使用
vars\u文件
并指定第一个找到的列表
我通常会在我的行为中包含类似的内容,以提供一种简单的重新定义变量的方法
但是:请注意,这将重新定义playbook中变量名的所有出现(但
vars_file
也是如此)。您是否考虑过使用ansible.ini
和或其等效环境变量来清除一些静态文件?我认为缺点是,剧本中的任何set\u事实:cacheable=yes
都会写入该目录,但这仍然可能是一个净胜利
vars_file:
- - ~/ansible_config/vars.yml
- <default vars file somewhere on the machine>
EXTRA_ARGS=`{
{
find "${GLOBAL_INPUT_DIR}" -iname "*.yml";
}\
| while read line; do echo "--extra-vars @${line} "; done \
| tr -d "\n"
}`
ansible-playbook $@ ${EXTRA_ARGS}