Роль Juniper.junos для Ansible не учитывает переменные среды, установленные внутри книги. - PullRequest
0 голосов
/ 20 сентября 2018

Может ли кто-нибудь подтвердить, является ли это ошибкой?

    - 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'

Есть идеи?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...