Может ли кто-нибудь подтвердить, является ли это ошибкой?
- name: "Test"
hosts: localhost
vars_files:
- env_file.yml
roles:
- role: Juniper.junos
environment:
"{{ env_vars }}"
connection: local
gather_facts: no
tasks:
- name: "Juniper VPN primary managed"
juniper_junos_config:
load: "merge"
config_mode: "private"
check: true
commit: false
template: "provisioning templates/Juniper_primary_managed.j2"
format: "text"
vars:
- 'unrelated to this issue vars'
provider:
host: "{{ ansible_host }}"
timeout: 180
register: response
Файл среды содержит:
---
env_vars:
ANSIBLE_NET_USERNAME: 'username'
ANSIBLE_NET_PASSWORD: 'password'
При запуске playbook выдается следующее:
TASK [test] ******************************************************************************************************************************************************
task path: /data/rundeck/juniper_provision/file1.yaml:44
Using module file /etc/ansible/roles/Juniper.junos/library/juniper_junos_config.py
<127.0.0.1> ESTABLISH LOCAL CONNECTION FOR USER: root
<127.0.0.1> EXEC /bin/sh -c 'ANSIBLE_NET_USERNAME=usename ANSIBLE_NET_PASSWORD=password /usr/local/bin/python3.6 && sleep 0'
fatal: [localhost]: FAILED! => {
"changed": false,
"invocation": {
"module_args": {
"attempts": null,
"baud": null,
"check": true,
"check_commit_wait": null,
"comment": null,
"commit": false,
"commit_empty_changes": false,
"config_mode": "private",
"confirmed": null,
"console": null,
"dest": null,
"dest_dir": null,
"diff": null,
"diffs_file": null,
"filter": null,
"format": "text",
"host": "randomhost",
"ignore_warning": null,
"level": null,
"lines": null,
"load": "merge",
"logdir": null,
"logfile": null,
"mode": null,
"options": {},
"passwd": null,
"port": 830,
"retrieve": null,
"return_output": true,
"rollback": null,
"src": null,
"ssh_config": null,
"ssh_private_key_file": null,
"template": "template",
"timeout": 180,
"url": null,
**"user": "root",**
"vars": {
Как видите, пользователь root , установленный переменной среды USER, хотя я устанавливаю переменную ANSIBLE_NET_USERNAME.
Согласно документации juniper.junos приоритет дляВыбор пользовательской переменной следующий:
1) Переменная среды ANSIBLE_NET_USERNAME.(используется Ansible Tower)
2) remote_user, как определено в Ansible.Ansible устанавливает это значение с помощью нескольких методов, включая
a) аргументы командной строки -u или --user для команды ansible или ansible-playbook.
b) Переменная среды ANSIBLE_REMOTE_USER.
c) настройка конфигурации remote_user.См. Документацию Ansible для определения приоритета, используемого для установки значения remote_user.
3) Переменная среды USER.
Первое определенное значение из следующего списка
1) Переменная среды ANSIBLE_NET_PASSWORD.(используется Ansible Tower)
2) Значение, указанное с помощью аргументов командной строки -k или --ask-pass для команды ansible или ansible-playbook.
3) none (пустой пароль / фраза-пароль)
Я подумал, что с моей системой что-то не так, поэтому добавил простое задание:
- shell: echo ANSIBLE_NET_USERNAME is $ANSIBLE_NET_USERNAME
register: shellout
- debug: var=shellout
Вывод:
ok: [localhost] => {
"shellout": {
"changed": true,
"cmd": "echo ANSIBLE_NET_USERNAME is $ANSIBLE_NET_USERNAME",
"delta": "0:00:00.002403",
"end": "2018-09-20 10:14:27.806416",
"failed": false,
"rc": 0,
"start": "2018-09-20 10:14:27.804013",
"stderr": "",
"stderr_lines": [],
"stdout": "ANSIBLE_NET_USERNAME is username",
"stdout_lines": [
"ANSIBLE_NET_USERNAME is username"
]
}
}
Я пробовал все, поэтомудалеко, чтобы установить переменную окружения, однако juniper.junos отказывается принимать ее, если она не установлена перед запуском playbook с использованием 'export'
Есть идеи?