我们正在使用流浪汉和ansible创建标准开发环境。 烦人的剧本,无业游民的文件等都位于git存储库中。
我使用variable file separation来引用开发人员主目录中的变量文件,以获取一些敏感和/或用户特定的信息(例如电子邮件地址)。
我们通过将vars_file:
用作剧本的一部分来使用变量,但每次播放都必须这样做。
我不想将其放入group_vars/all
文件中,因为它随后将位于存储库中,而不是特定于用户的。
我宁愿在存储库中没有一个被忽略的文件,因为人们仍然设法将其包含进来,并且使其他所有人陷入困境。
是否有一种等效的方法groups/all
包含可以在运行剧本时自动运行的任务和/或变量定义?
答案 0 :(得分:0)
我们通过将
vars_file:
用作剧本的一部分来使用变量,但每次播放都必须这样做。
不,您可以在剧本级别上进行操作。 (但这可能是新事物,那时可能还没实现,我没有检查。)
是否有一种等效的组/全部方法,其中可以包含任务和/或变量定义,这些任务和/或变量定义将在运行剧本时自动运行?
何时自动运行/包含?我认为这是不可能的,因为会出现许多未解决的问题,例如:
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}
也是这样)。