AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 984859
Accepted
P Burke
P Burke
Asked: 2019-09-20 05:05:09 +0800 CST2019-09-20 05:05:09 +0800 CST 2019-09-20 05:05:09 +0800 CST

Ansible (2.8) 在一系列剧本/角色开始时收集所有用户名/密码

  • 772

我有一组剧本和角色,它们构建了一个相当复杂的应用程序平台:几个剧本、几个角色和多个清单文件定义了平台的特定变体。在构建期间,我需要输入用户名/密码:数据库帐户,访问 git 以提取代码等。

我想在 ansible-playbook 命令发出后(例如在第一个剧本中)提示所有凭证,所有剧本。在需要时将它们收集到多个剧本中意味着在不同的时间点暂停构建几分钟,所以我宁愿从一开始就一次性获得所有凭据。

我还希望能够在开发 Ansible 剧本或构建简单的测试环境时为凭据提供默认值,并且不需要从密码管理器中剪切和粘贴真实凭据。默认值意味着我可以多次点击返回以接受预定义的默认值并快速进入实际构建某些东西的剧本和角色。

Ansible Vault 是一个选项,但对于我的简单要求来说似乎有些过分,在这种情况下,密码管理器是我组织的正常解决方案,所以如果我引入 Vault,我会复制凭据。

我看过vars_prompts,但这不适合有几个原因,包括:变量的范围只是当前的剧本,所以我以后不能使用它们;并且该group_vars部分不可用,vars_prompt因此我无法根据库存文件中定义的变量控制要求哪些变量。

我查看了该pause模块,它可以访问 group_vars 以及when子句,并set_facts在以后使 vars 可用。下面是一些示例,工作代码,但它非常冗长,需要一个pause任务和两个set_facts收集的每条数据。

但第一个问题真的是,在 Ansible 中是否有更好、更标准的解决方案来解决这个问题?在剧本执行开始时收集所有凭据似乎是一个显而易见的要求,但我似乎无法在任何地方找到解决此问题的标准解决方案。

工作示例,但有没有更好的方法来做到这一点?

  pre_tasks:
  - name: "get username"
    pause:
      prompt: "Enter username [defaultusername]"
    register: username
    run_once: yes
  - name: username after pause command is
    debug:
      msg: "{{username}}"

  - name: set_fact for default username
    set_fact:
      username_fact: "defaultusername"
    when: username.user_input == ""

  - name: set_fact for non-default username
    set_fact:
      username_fact: "{{username.user_input}}"
    when: username.user_input != ""

  - name: username_fact
    debug:
      msg: "username_fact is {{username_fact}} "
ansible
  • 1 1 个回答
  • 601 Views

1 个回答

  • Voted
  1. Best Answer
    HBruijn
    2019-09-20T05:52:09+08:002019-09-20T05:52:09+08:00

    恕我直言,当您希望开发始终依赖于手动用户输入的解决方案时,您并没有正确地使事情自动化。这样做也会使自动运行 playbook 变得很困难(如果不是不可能的话)(来自 Ansible Tower / AWX)

    Ansible vault 是为您的剧本安全提供秘密的事实上的标准,但是当您使用 Ansible-Tower 时,您还有其他选择,也可以从外部系统中提取秘密:请参阅文档

    我只是将您的剧本将使用的凭据/秘密存储在变量文件中。

    当您发现 Ansible Vault 太麻烦而无法在其中使用时,请将这些变量文件以明文形式(使用默认值)进行开发。

    在生产中使用不同的变量文件,或者使用保险库对这些文件进行整体加密,或者使用保险库选项仅加密特定变量的值,从而将机密安全地存储在仍然可读的文件中,如下所示:

    notsecret: myvalue
    mysecret: !vault |
              $ANSIBLE_VAULT;1.1;AES256
              66386439653236336462626566653063336164663966303231363934653561363964363833313662
              6431626536303530376336343832656537303632313433360a626438346336353331386135323734
              62656361653630373231613662633962316233633936396165386439616533353965373339616234
              3430613539666330390a313736323265656432366236633330313963326365653937323833366536
              34623731376664623134383463316265643436343438623266623965636363326136
    other_plain_text: othervalue
    

    请参阅https://docs.ansible.com/ansible/2.4/playbooks_vault.html#single-encrypted-variable

    • 0

相关问题

  • 重复的 Ansible 任务

  • 无法形成站点中的文件的链接,该链接可用于使用 ansible 在远程服务器中启用的目录站点?

  • 如何执行 ansible 的特定角色?

  • Ansible 和 rbash

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve