ansible - 如何设置剧本以在从引擎运行时使用保险库,并在从 Tower/AWX 运行时跳过保险库
问题描述
我找不到涵盖此特定主题的文档或问答。我将它与答案一起发布在这里,希望有人觉得它有用。我是一小群自动化工程师中的一员。一项任务是在 Tower 中为其他工程师和管理员提供自动化。
自动化团队对我们当前的设置感到满意,它允许我们从命令行运行游戏而无需锁定我们的帐户,无需每次都输入密码,也无需以纯文本形式存储密码:
- 我们使用存储在每个管理员配置文件中的 ansible 保险库来存储加密的登录凭据以及 gpg 装甲密钥。每个保管库都使用相同的名称,类似于
~/.ansible/vault.yml
- 脚本提取密钥并解锁保险库。
- 该脚本在 ansible.cfg, [defaults], vault_identity_list 中定义。
- 剧本用 vars_files 加载保险库
处于作业隔离模式的 Tower 无法访问主目录。而且我们不希望 Vault+key 在管理员的主文件夹之外,受到随机窥探。Tower 有自己的保险库系统,我们在使用 Tower 时会使用它。我们希望保持我们当前的命令行运行方法,但能够在 Tower 和 Engine 中使用相同的剧本。
我试过了:
- 强制塔读取保险库。(不高兴)
- 带保险库的剧本已注释掉。 (这在塔中有效,但我不得不切换评论以从命令行运行。作为最后的手段,在其中放置一个别针。)
- 当 ansible_user 不是 awx 时,使用条件仅加载 vars_files。 (猜猜看,它仍然以触发作业的用户身份运行。在其中放置一个大头针以找到另一个一致的变量,并表明塔是平台。)
- 在塔内使用标签和跳过标签来跳过 vars_files (不高兴。标签不适用于 vars_files:)
解决方案
我发现有效的方法:
skip-tags
做我需要做的事- 了解
include_vars
(这是一个可以标记的任务模块) - 了解
pre_tasks
(因为我们在保险库中包含了成为凭据,因此永远不会执行常规任务,因为“没有 SUDO 凭据”会阻止任务运行)
所以:
pre_tasks:
- include_vars: ~/.ansible/vault.yml
tags: engine
并且,在 Tower 中,将作业模板设置为skip-tags: engine
现在,同样的剧本在塔内或塔外都有效。使用最少的身份验证。没有明文密码。
推荐阅读
- r - 使用命令行启动 R 的问题
- xamarin - 将 Microsoft.AppCenter 与 Xamarin.iOS 一起使用时出现错误
- java - 如何接受参数请求中的未来日期?
- c - 每当我在我的设备中编译我的代码时,任何输入都可以正常工作。但是当我提交带有未知输入的代码时,它会出现分段错误
- node.js - node.js Websocket 树莓派 4B ERR_CONNECTION_REFUSED
- python - 函数需要一个年份列表并返回一个列表,其中最接近的年份不是闰年。【1995,1750,2018】回归【1994,1751,2019】
- python - 用户在登录页面上提供的电子邮件未显示在 Django 的数据库中
- visual-studio - MSB3073 UE4 以代码 6 退出 - 我该如何解决?
- javascript - 等效于 onload 和 onclick?
- c# - 具有可为空字段的 EqualityComparer 的奇怪行为