Возможно с "Альтернативным расположением каталога" и использованием хранилищ
Я пытаюсь использовать альтернативный макет каталога и ansible-хранилища внутри. Но когда я запускаю свою playbook, переменные, которые зашифрованы в хранилище, не могут разрешиться с этой структурой каталогов. Так что я делаю не так?
Я выполняю через:
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
это мой файл hosts (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 }
...
роль, которая использует Vault зашифрованного хранилища (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
Сообщение об ошибке, которое я получаю, выглядит примерно так:
НЕ УДАЛОСЬ! => {"failed": true, "msg": "поле 'args' имеет недопустимое значение, которое, по-видимому, содержит переменную, которая не определена. Ошибка была: {{ app_user }}: 'app_user' не определено \ n \ n Ошибка, по-видимому, была в 'role / test / tasks / main.yml': но может \ n находиться в другом месте файла в зависимости от точной синтаксической проблемы. \ n \ n Остранная строка выглядит так: \ n \ n \ n - name: создать тестовую папку \n ^ here\n"}
1 ответ
Вы определяете переменную app_user
в файле с именем var.yml
хранится в папке group_vars.
В вашей строке исполнения вы указываете на 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
,