У меня нормально работает playbook, когда переменные среды и задачи определены в одной книге без ролей.
Но когда я структурирую свой проект по ролям, я вижу, что выполняющиеся задачи не находят переменные среды, заданные в исходной пьесе.
Любой намек на то, как установить переменные env, чтобы они были доступны для всехРоли внутри книги игр?
Нужно ли указывать переменные среды в файле tasks/main.yaml
? Если да, то как именно это сделать?
cat playbook.yaml
-
name: Deploy Team Services Playbook
hosts: all
environment:
PATH: "{{ ansible_env.PATH }}:/usr/local/bin"
KUBECONFIG: "{{ ansible_env.HOME }}/.kube/config/{{ ansible_env.USER }}.kubeconfig"
roles:
- prereq1_setup
- prereq2_k8s
prereq1_setup \ tasks \ main.yaml
- name: "Validate kubeconfig set?"
shell: echo {{ ansible_env.KUBECONFIG }}
failed_when: "'KUBECONFIG' not in ansible_env"
Выше работ, если я не использую роли и напрямую добавляю задачи ниже. В настоящее время я получаю сообщение об ошибке
:
|TASK [prereq1_setup : Validate kubeconfig set?] *****************************************************
fatal: [target1]: FAILED! => {"msg": "The task includes an option with an undefined variable. The error was: 'dict object' has no attribute 'KUBECONFIG'\n\nThe error appears to be in '/Users/testu/ansible/ansible-team/team_deploy/roles/prereq1_setup/tasks/main.yaml': line 57, column 9, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n - name: \"Validate kubeconfig set?\"\n ^ here\n"}