如何在Ansible中为当前用户定义变量?

如何在Ansible中为当前用户定义变量?,ansible,Ansible,我们使用vagrant和ansible创建标准开发环境。 ansible剧本、流浪者文件等都在git存储库中 我曾经引用过开发人员主目录中的变量文件,以获取一些敏感和/或用户特定的信息(例如电子邮件地址) 我们通过执行vars\u文件来使用这些变量:作为剧本的一部分,但每次剧本都必须这样做 我不想把它放在group\u vars/all文件中,因为它会在存储库中,而不是特定于用户 我不希望在存储库中有一个被忽略的文件,因为人们仍然设法包含它,它会把其他人都搞砸 是否有一种方法可以等效于group

我们使用vagrant和ansible创建标准开发环境。 ansible剧本、流浪者文件等都在git存储库中

我曾经引用过开发人员主目录中的变量文件,以获取一些敏感和/或用户特定的信息(例如电子邮件地址)

我们通过执行
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}