我正在尝试在其中使用替代目录布局和 ansible-vaults。但是当我运行我的剧本时,经过保险库加密的变量无法使用该目录结构解析。那么我做错了什么?
我通过以下方式执行:
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
剧本(playbooks/inv/invTest.yml
):
---
- name: this is test
hosts: inv
roles:
- { role: ../../roles/test }
...
使用 Vault 加密的 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 (inventories/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
我得到的错误消息是这样的:
失败的!=> {"failed": true, "msg": "'args' 字段的值无效,似乎包含未定义的变量。错误为:{{ app_user }}: 'app_user' 未定义\ n\n错误似乎出现在“roles/test/tasks/main.yml”中:但可能\n在文件中的其他位置,具体取决于确切的语法问题。\n\n有问题的行似乎是:\n\n \n - 名称:创建测试文件夹\n ^ here\n"}