我正在尝试使用Alternative Directory Layout和ansible-vaults。 但是当我运行我的剧本时,保险库加密的变量无法用该目录结构解析。那么我做错了什么?
我执行via:
ansible-playbook -i inventories/inv/hosts playbooks/inv/invTest.yml --check --ask-vault
这是我的结构:
.
├── inventories
│ ├── inv
│ │ ├── group_vars
│ │ │ ├── var.yml
│ │ │ └── vault.yml
│ │ └── hosts
│ └── staging
│ ├── group_vars
│ │ ├── var.yml
│ │ └── vault.yml
│ └── hosts
├── playbooks
│ ├── staging
│ │ └── stagingTest.yml
│ └── inv
│ ├── invTest.retry
│ └── invTest.yml
└── roles
├── basic-linux
│ ├── defaults
│ │ └── main.yml
│ └── tasks
│ └── main.yml
├── test
│ ├── defaults
│ │ └── main.yml
│ └── tasks
│ └── main.yml
└── webserver
├── defaults
│ └── main.yml
├── files
├── handler
│ └── main.yml
├── tasks
│ └── main.yml
└── templates
这是我的主机文件(inventories/inv/hosts
):
[inv]
testvm-01 ansible_ssh_port=22 ansible_ssh_host=172.16.0.101 ansible_ssh_user=root
testvm-02 ansible_ssh_port=22 ansible_ssh_host=172.16.0.102 ansible_ssh_user=root
playbook(playbooks/inv/invTest.yml
):
---
- name: this is test
hosts: inv
roles:
- { role: ../../roles/test }
...
使用保险库加密var(roles/test/tasks/main.yml
)的角色:
---
- name: create test folder
file:
path: "/opt/test/{{ app_user }}/"
state: directory
owner: "{{ default_user }}"
group: "{{ default_group }}"
mode: 2755
recurse: yes
...
var指向库(库存/ inv / group_vars / var.yml):
---
app_user: '{{ vault_app_user }}'
app_pass: '{{ vault_app_pass }}'
...
保管库文件(ansible-vault edit inventories/inv/group_vars/vault.yml
):
vault_app_user: itest
vault_app_pass: itest123
我得到的错误信息是这样的:
失败! => {"失败":是的," msg":"字段' args'具有无效值,似乎包含未定义的变量。错误是:{{app_user}}:' app_user'未定义\ n \ n错误似乎在' roles / test / tasks / main.yml':但可能在文件的其他位置,具体取决于确切的语法问题。\ n \ n违规行似乎是:\ n \ n \ n - 名称:创建测试文件夹\ n ^ here \ n"}
答案 0 :(得分:1)
您在group_vars文件夹中存储的名为app_user
的文件中定义变量var.yml
。
在执行行中,您指向inventories/inv/hosts
作为您的广告资源目录。
在这条路径中使用的字符串并不重要 - 从Ansible的观点来看,它只能看到:
hosts
group_vars
├── var.yml
└── vault.yml
对于名为var.yml
的主机组和var
,对于名为vault.yml
的主机组,它将会显示vault
。
在你的情况下 - 永远不会。
您可能希望以这种方式整理文件:
inventories
└── production
├── group_vars
│ └── inv
│ ├── var.yml
│ └── vault.yml
└── hosts
这样,系统group_vars/inv
中的主机就会读取inv
中的文件。