4

考虑以下 Ansiblehosts文件:

[webservers]        
server1.example.com ansible_ssh_pass=1234567
server2.example.com ansible_ssh_pass=2345678
server3.example.com ansible_ssh_pass=3456789

我想从保险库文件中包含这些密码值并有一个hosts类似的文件(我的意图是有一个ini清单格式):

[webservers]        
server1.example.com ansible_ssh_pass={{ ssh_pass }}
server2.example.com ansible_ssh_pass={{ ssh_pass }}
server3.example.com ansible_ssh_pass={{ ssh_pass }}

其中sss_pass变量来自文件夹中定义的拱形文件host_vars

相关的 ansible 文件夹结构如下所示:

playbook.yml
inventories/
  atlanta/
    group_vars/
    hosts
    host_vars/
      server1.example.com
      server2.example.com
      server3.example.com

但 ansible 抱怨:

[WARNING]:  * Failed to parse /root/hsm-ansible-deploy/inventories/atlanta/hosts with ini plugin: /root/hsm-ansible-deploy/inventories/atlanta/hosts:18: Expected key=value host variable assignment, got: ssh_pass
  • 为什么我会收到错误消息?
  • 如何将密码导入hosts文件?
4

1 回答 1

5

正如@techraf 所指出的,这只是一个语法问题。hostsini文件的正确写法是:

[webservers]        
server1.example.com ansible_ssh_pass="{{ ssh_pass }}"
server2.example.com ansible_ssh_pass="{{ ssh_pass }}"
server3.example.com ansible_ssh_pass="{{ ssh_pass }}"

但我还找到了一个更优雅的解决方案,其中hosts文件更加优雅,根本不提供ansible_ssh_pass变量hosts

[webservers]        
server1.example.com
server2.example.com
server3.example.com

并使用 在group_vars/all那里定义这个变量:

---
ansible_ssh_pass: "{{ vault_ansible_ssh_pass }}"

vault_ansible_ssh_pass每个主机的秘密保管文件中定义的位置,例如host_vars/server1.example.com

---
vault_ansible_ssh_pass: "my secret password"

然后这些文件使用加密ansible-vault

ansible-vault encrypt inventories/atlanta/host_vars/server*/vault --vault-password-file ~/.vault_pass.txt

其中~/.vault_pass.txt以明文形式包含 ansible 保险库密码。

于 2018-06-21T17:38:24.463 回答