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

时间:2018-12-03 12:36:08

标签: ansible

我们正在使用流浪汉和ansible创建标准开发环境。 烦人的剧本,无业游民的文件等都位于git存储库中。

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

我们通过将vars_file:用作剧本的一部分来使用变量,但每次播放都必须这样做。

我不想将其放入group_vars/all文件中,因为它随后将位于存储库中,而不是特定于用户的。

我宁愿在存储库中没有一个被忽略的文件,因为人们仍然设法将其包含进来,并且使其他所有人陷入困境。

是否有一种等效的方法groups/all包含可以在运行剧本时自动运行的任务和/或变量定义?

1 个答案:

答案 0 :(得分:0)

  

我们通过将vars_file:用作剧本的一部分来使用变量,但每次播放都必须这样做。

不,您可以在剧本级别上进行操作。 (但这可能是新事物,那时可能还没实现,我没有检查。)


  

是否有一种等效的组/全部方法,其中可以包含任务和/或变量定义,这些任务和/或变量定义将在运行剧本时自动运行?

何时自动运行/包含?我认为这是不可能的,因为会出现许多未解决的问题,例如:

  • 应该在目标计算机或Ansible服务器上指定它吗?
  • 您如何指定在哪个主机上发生此事件?
  • 如果有任务:是否要在每个剧本上执行 使用给定用户运行时?那指定什么的任务呢 它们是否以root(become)身份运行?指定任务的任务呢 给定的用户被执行为?以root身份运行的任务呢 但是创建的文件所有者拥有与给定用户匹配的文件?

由于没有带变量的用户作用域,并且我们实际上没有概述“用户上下文”(请参阅​​最后一个问题),因此我们目前仍被明确地包含变量文件。因此有以下选项:


您可以继续使用vars_file并指定首次发现列表。

vars_file:
  - - ~/ansible_config/vars.yml
    - <default vars file somewhere on the machine>

这样,愤怒的执行者用户可以重新定义值...


您可以使用--extra-vars @<filepath>语法来包含文件中的所有变量,并且可以有多个。


我要做的类似事情是,我将{y {1}}中每个yml文件中的每个变量都包括在内(这是一个环境变量,可以在运行执行bible脚本的ansible-playbook或bash配置文件中定义)等等。

GLOBAL_INPUT_DIR

我通常在自己的工作中加入这样的内容,以提供一种简便的方法来重新定义变量...

但是:请注意,这将重新定义剧本中变量名称的所有出现(但对于EXTRA_ARGS=`{ { find "${GLOBAL_INPUT_DIR}" -iname "*.yml"; }\ | while read line; do echo "--extra-vars @${line} "; done \ | tr -d "\n" }` ansible-playbook $@ ${EXTRA_ARGS} 也是这样)。