在ansible playbook中运行ansible-vault encrypt_string

时间:2017-12-22 15:16:10

标签: ansible ansible-2.x rundeck

我在Rundeck有一份工作,要求用户将数据库密码传递给ansible。而ansible将把它作为一个额外的变量。

ansible-playbook test.yml -e "password=123" 

但是,我们希望在运行时保存密码,但是来自ansible的best practice。他们需要将密码存储在文件中。 并使用ansible-vault create保存整个文件。

由于我们有大量密码要传入,我注意到有一个函数调用encrypt_string。我尝试在剧本中调用它并尝试动态生成保险库密码,但我收到以下错误:

  

“错误!只有一个--vault-id可用于加密。这包括   来自配置和cli的密码。“

这是我的剧本 test.yml

---
- name: test
  hosts: localhost
  tasks:
  - name: vault var
    command: ansible-vault encrypt_string "{{ password }}" --vault-password-file ~/.vault_pass.txt
    register: var

  - name: variable
    set_fact:
      mypass: var

  - name: test encrypt_string
    debug:
      msg: "{{ mypass }}"

我不确定这是否是正确的做法/最佳做法,任何人都可以获得一些亮点。非常感谢。

谢谢,

1 个答案:

答案 0 :(得分:0)

您可以通过删除选项--vault-password-file来更新您的任务,因为ansible似乎在某种程度上从您的环境中获取/读取它。

...
...
- name: test
  hosts: localhost
  tasks:
  - name: vault var
    command: ansible-vault encrypt_string "{{ password }}" 
    register: var
...
...

如果您希望在playbook中保留此选项,则可能需要找到ansible从哪里读取它。 Ansible可能正在从它的默认配置文件中读取它,通常位于~/.ansible.cfg [查找vault_password_file]或alias或其他地方。

您可以通过示例在ansible vault documentation找到更多详细信息。