lookups do not run on the target host, and are not affected by the `environment` keyword.
On Mon, Jan 6, 2020 at 10:55 AM 'Mark Tovey' via Ansible Project < [email protected]> wrote: > > I need to export some environment variables before running a task, but it > appears that setting variables with "environment" does not export them; > they remain local. For test, I wrote the following simple playbook: > > --- > - hosts: localhost > gather_facts: no > environment: > MYVAR: "TEST1" > > tasks: > - shell: echo "$MYVAR" > register: mytest > > - debug: > msg: > - "Ansible MYVAR = {{mytest.stdout}}" > - "Exported MYVAR = {{lookup('env', 'MYVAR')}}" > > > And when I run it with the shell MYVAR set, I get the following results: > > export MYVAR=TEST2;ansible-playbook ~/devansible/playbooks/mytest > > PLAY [localhost] > *************************************************************** > > TASK [shell] > ******************************************************************* > changed: [localhost] > > TASK [debug] > ******************************************************************* > ok: [localhost] => > msg: > - Ansible MYVAR = TEST1 > - Exported MYVAR = TEST2 > > PLAY RECAP > ********************************************************************* > localhost : ok=2 changed=1 unreachable=0 > failed=0 skipped=0 rescued=0 ignored=0 > > > So, "environment" is not exporting the value as I expected. > The main issue I have is that I am trying to set SSH_AUTH_SOCK so that > subsequent tasks can be executed on remote servers. In my playbook, I > start ssh-agent locally, grab the SSH_AUTH_SOCK and SSH_AGENT_PID values, > and place them into the Ansible environment. During the next task, I use > ssh-add to add a SSH key to the now running agent. That works perfectly, > and in fact I can query the running agent from outside of Ansible and see > the SSH key that was added inside of the playbook. But any remote tasks I > try to execute after adding the SSH key to the agent fail with > "UNREACHABLE". Apparently the remote tasks are using the original shell > version of SSH_AUTH_SOCK to connect to ssh-agent, not the Ansible version. > The Ansible version of SSH_AUTH_SOCK needs to be exported first. > Is there a way to actually export variables from within Ansible? I can > always start ssh-agent prior to running Ansible so that the SSH_AUTH_SOCK > environment variable will contain the correct path to the agent socket, but > I was trying to avoid doing that for various reasons; I want to try to keep > all of the steps, including starting and stopping the SSH agent, contained > within a single playbook. > Is there a flag set or something I can do that will cause the variables to > be truly exported? > > > > > > > > -- > You received this message because you are subscribed to the Google Groups > "Ansible Project" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/ansible-project/1a126537-a388-4a2a-81dc-108aa74ef27d%40googlegroups.com > <https://groups.google.com/d/msgid/ansible-project/1a126537-a388-4a2a-81dc-108aa74ef27d%40googlegroups.com?utm_medium=email&utm_source=footer> > . > -- Matt Martz @sivel sivel.net -- You received this message because you are subscribed to the Google Groups "Ansible Project" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/CAD8N0v9a4L-cpT6MkKn4RTsND8QguR89qVD%3DtVm3F0tEbPJSjA%40mail.gmail.com.
