Ansible: Access Shell Var в Задаче - PullRequest
1 голос
/ 14 марта 2019

Как правильно поступить так: у меня есть задача с модулем оболочки, который экспортирует переменную из оболочки Bash.

Могу ли я получить доступ к указанному var из другой задачи (может быть, настройки среды?) Без необходимости регистрировать вывод команды и анализировать shellvar_register.stdout? Имеет ли Ansible область действия ansible_env для локального и удаленного хоста?

---

- name: test var play
  hosts: localhost
  tasks:
  - name: export shell var
    become: no
    local_action: shell export shellvar=foo
    args:
      executable: /bin/bash
    #register: shellvar_register

  - name: print debug msg
    local_action:
      module: debug
      msg: "{{ ansible_env.shellvar }}"

% ansible-playbook playbooks/test/test_shellvar.yml                                                                                                           
PLAY [test var play] ***

TASK [Gathering Facts] ***
ok: [localhost]

TASK [export shell var] ***
changed: [localhost -> localhost]

TASK [print debug msg] ***
fatal: [localhost]: FAILED! => {"msg": "The task includes an option 
with an undefined variable. The error was: 'dict object' has no 
attribute
'shellvar'\n\nThe error appears to be in '/home/robert/tmp/common.git
/playbooks/test/test_shellvar.yml': line 12, column 5, but may\nbe 
elsewhere in the file depending on the exact syntax problem.\n\nThe 
offending line appears to be:\n\n\n  - name: print debug msg\n    ^ 
here\n"}
to retry, use: --limit @/home/robert/tmp/common.git/playbooks
/test/test_shellvar.retry

PLAY RECAP ***
localhost: ok=2 changed=1 unreachable=0 failed=1 skipped=0

Ответы [ 2 ]

0 голосов
/ 14 марта 2019

вы можете использовать set_fact как в Ansible: Сохранить стандартный вывод команды в новой переменной? и установить новую переменную ansible, которую вы можете использовать и в других играх.

- hosts: loc
  tasks:
    - name: set a ansible variable for later use
      set_fact:
        new_ansible_var: "foo"
    - name: run a command with this var
      shell: "shellvar={{ new_ansible_var }} {{ playbook_dir }}/bash_script_using_shellvar.sh"

Первая задача устанавливает переменную ansible_variable. Вторая задача принимает эту переменную для shellvar, поэтому bashscript может использовать shellvar.

0 голосов
/ 14 марта 2019

cf https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#registering-variables

Ваша оболочка завершается, когда задача завершена.Просто запишите это значение как ответное значение для последующего использования.

  - name: set a var
    command: 'echo foo'
    register: not_a_shell_var

  - name: show it
    debug:
      msg: "{{ not_a_shell_var.stdout }}"
...