Ansible с альтернативной компоновкой каталогов и хранилищами

Я пытаюсь использовать Альтернативный макет каталога и анзиблей-хранилищ внутри. Но когда я запускаю свою книгу воспроизведения, переменные, зашифрованные в хранилище, не могут разрешиться с этой структурой каталогов. Так что я делаю не так?

Я выполняю через:

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 }
...

роль, которая использует зашифрованную переменную хранилища (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, который указывает на хранилище (inventory / 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Ошибка, по-видимому, была в 'ролях / test / tasks / main.yml': но может \ n быть где-нибудь в файле в зависимости от точной синтаксической проблемы. \ n \ nСтрока нарушения выглядит так: \ n \ n \ n - имя: создать тестовую папку \ n ^ здесь \ n "}


person nieg    schedule 24.10.2017    source источник


Ответы (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.

person techraf    schedule 24.10.2017