Hi All,

Thanks for the responses. I am facing another issue with env variables.

I want to register a variable to capture the output of a shell command as 
shown below. So far its fine..
But I also want to save that command result in a remote environment 
variable and that is not working. My playbook is as follows:

----
hosts: localhost
  tasks:
    - name: "subtask"
      shell: lsblk --nodeps  | grep disk | wc -l
      register: disk_count
      environment: "{{ disk_count.stdout }}"
-- 

--
fatal: [localhost]: FAILED! => {"msg": "The field 'environment' has an 
invalid value, which includes an undefined variable. The error was: 
'disk_count' is undefined\n\nThe error appears to be in '/root/test.yaml'
---

How do I have to workaround this for capturing the shell command value into 
an environment variable ? Please suggest..

On Friday, October 13, 2023 at 5:33:43 PM UTC+5:30 Todd Lewis wrote:

> Another thing you might consider is using a YAML reference to duplicate 
> the environment in a regular playbook variable. Then you can use plain old 
> variable references to see those values. See the example below:
>
> *[utoddl@tango ansible]$ cat ygkumar1.yml *
> ---
> # Playbook ygkumar1.yml
> - name: Copy environment to testable variables using YAML reference
>   hosts: localhost
>   gather_facts: false  *environment: &environment
>     script_var1: hi
>     script_var2: there*
>   vars:
>     pb_dict:
>       not_env_var1: foo
>       not_env_var2: bar
>       *env_vars: *environment*
>       other_stuff: bas
>   tasks:
>     - name: Dump pb_dict to the job log
>       ansible.builtin.debug:
>         var: pb_dict
>
>     - name: Shell script to loop over pb_dict.env_vars
>       changed_when: false
>       ansible.builtin.shell: |
>         for vname in {{ pb_dict.env_vars.keys() | map('quote') | join(' ') }} 
> ; do
>             printf -- "Environment variable %s: %s\n" "$vname" "$(eval echo 
> \${$vname} )"
>         done*[utoddl@tango ansible]$ ansible-playbook ygkumar1.yml -vv*
> ansible-playbook [core 2.14.10]
>   config file = /etc/ansible/ansible.cfg
>   configured module search path = ['/home/utoddl/.ansible/plugins/modules', 
> '/usr/share/ansible/plugins/modules']
>   ansible python module location = /usr/lib/python3.11/site-packages/ansible
>   ansible collection location = 
> /home/utoddl/.ansible/collections:/usr/share/ansible/collections
>   executable location = /usr/bin/ansible-playbook
>   python version = 3.11.5 (main, Aug 28 2023, 00:00:00) [GCC 13.2.1 20230728 
> (Red Hat 13.2.1-1)] (/usr/bin/python3)
>   jinja version = 3.0.3
>   libyaml = True
> Using /etc/ansible/ansible.cfg as config file
> redirecting (type: callback) ansible.builtin.yaml to community.general.yaml
> redirecting (type: callback) ansible.builtin.yaml to community.general.yaml
> Skipping callback 'default', as we already have a stdout callback.
> Skipping callback 'minimal', as we already have a stdout callback.
> Skipping callback 'oneline', as we already have a stdout callback.
>
> PLAYBOOK: ygkumar1.yml 
> **********************************************************************
> 1 plays in ygkumar1.yml
>
> PLAY [Copy environment to testable variables using YAML reference] 
> **************************
>
> TASK [Dump pb_dict to the job log] 
> **********************************************************
> task path: /home/utoddl/ansible/ygkumar1.yml:16
> ok: [localhost] => 
>   pb_dict:
>     *env_vars:
>       script_var1: hi
>       script_var2: there*
>     not_env_var1: foo
>     not_env_var2: bar
>     other_stuff: bas
>
> TASK [Shell script to loop over pb_dict.env_vars] 
> *******************************************
> task path: /home/utoddl/ansible/ygkumar1.yml:20
> ok: [localhost] => changed=false 
>   cmd: |-
>     for vname in script_var1 script_var2 ; do
>         printf -- "Environment variable %s: %s\n" "$vname" "$(eval echo 
> \${$vname} )"
>     done
>   delta: '0:00:00.003708'
>   end: '2023-10-13 07:58:40.898459'
>   msg: ''
>   rc: 0
>   start: '2023-10-13 07:58:40.894751'
>   stderr: ''
>   stderr_lines: <omitted>
>   stdout: |-
>     Environment variable script_var1: hi
>     Environment variable script_var2: there
>   stdout_lines: <omitted>
>
> PLAY RECAP 
> **********************************************************************************
> localhost                  : ok=2    changed=0    unreachable=0    failed=0   
>  skipped=0    rescued=0    ignored=0   
>
>
>
> On 10/11/23 10:03 AM, Y.G Kumar wrote:
>
> Hi All,
>
> I am declaring an environment variables in a playbook as shown below:
> --
> ---
> - hosts: localhost
>   environment:
>     script_var1: hi
>     script_var2: there
>   tasks:
>     - name: List
>       shell: bash test.sh
> -- 
>
> I want to test the existence of the above environment variables in a 
> separate  task.yml file. How do I test their existence ? What is the syntax 
> ?
>
> -- 
> 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 ansible-proje...@googlegroups.com.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/ansible-project/1e7a8869-6360-4396-95e6-cd6f078dcd24n%40googlegroups.com
>  
> <https://groups.google.com/d/msgid/ansible-project/1e7a8869-6360-4396-95e6-cd6f078dcd24n%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>
>
> -- 
> Todd
>
>

-- 
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 ansible-project+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/441c225f-87d2-4716-940c-a36996c9c6dfn%40googlegroups.com.

Reply via email to