copy registered content to a file which is called from variable

50 views
Skip to first unread message

Veera

unread,
Nov 10, 2022, 9:16:07 AM11/10/22
to Ansible Project
Hi,

I am trying to copy the  contents from a register output  to a file  in the local server.
However , I have challenges in re-calling the variable filename in the copy command.

Correct me what I am missing. in dest="{{ vars[ {{ comp_file }} ] }}"  or "{{ compare_out.stdout }}"  in the last lines ..


[vee@server]$ grep comp_file  vars/postcheck_vars.yml
comp_file: /logs/{{ exec_date }}/{{ inventory_hostname }}-compare-{{{ exec_date }}.txt

[vee@server]$ cat  compare_sanity.yml
- name: comparing file1 and file2
  local_action: command /usr/bin/sdiff "{{ logs_dir }}"{{ inventory_hostname }}-Pre-{{ exec_date }}.txt   "{{ logs_dir }}"{{ inventory_hostname }}-Post-{{ exec_date }}.txt
  register: compare_out
  ignore_errors: yes
  no_log: True

- name: create output  file
  local_action:
    copy   content="{{ compare_out.stdout }}" dest="{{ vars[ {{ comp_file }} ] }}"
  [vee@server]$


Todd Lewis

unread,
Nov 10, 2022, 11:54:51 AM11/10/22
to ansible...@googlegroups.com, uto...@gmail.com
A couple of things. First,

comp_file: /logs/{{ exec_date }}/{{ inventory_hostname }}-compare-{{{ exec_date }}.txt
has three left braces on "exec_date".

Second, mustaches (i.e. "{{" … "}}") never nest. So

    copy   content="{{ compare_out.stdout }}" dest="{{ vars[ {{ comp_file }} ] }}"
should be

    copy   content="{{ compare_out.stdout }}" dest="{{ vars[ comp_file ] }}"
Well, at least that's "dest=" without nested mustaches. Whether it's right or not I don't know, but it's less wrong this way.

Veera

unread,
Nov 10, 2022, 1:26:40 PM11/10/22
to Ansible Project

Thanks for pointing  as i did notice that , and I have corrected the  three left braces on "exec_date".

Second, mustaches (i.e. "{{" … "}}") never nest  <<  Yes , I tried earlier that and even now after reverting back , still the same issue .. 
Execution error for the play below.

fatal: [server1 -> localhost]: FAILED! => {"msg": "The task includes an option with an undefined variable. The error was: 'dict object' has no attribute u'/home/user1/ansible/patching/logs/2022-11-10/server1-compare-2022-11-10.txt'\n\nThe error appears to be in '/home/unixops/ansible/linux_patching/compare_sanity.yml': line 7, column 3, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n- name: create compare file using precheck and postcheck sanity checks\n  ^ here\n"}


Veera

unread,
Nov 10, 2022, 1:43:38 PM11/10/22
to Ansible Project
Attaching a screenshot to show the format still miss something IMG-20221111-WA0000.jpg

Todd Lewis

unread,
Nov 10, 2022, 3:04:15 PM11/10/22
to ansible...@googlegroups.com
Wait a second. You're saying "{{ vars[ comp_file ] }}", but

  comp_file="/home/user1/ansible/patching/logs/2022-11-10/server1-compare-2022-11-10.txt"


So you're trying to pull a value from the "vars" dict with the key of
  "/home/user1/ansible/patching/logs/2022-11-10/server1-compare-2022-11-10.txt".

Whatever "vars" is, it doesn't have any data with that name.

Perhaps you mean this:

  dest="{{ comp_file }}"

Whatever. In any case, if I were you, I'd throw in a debug step and print out the values of "compare_out.stdout" and, er, whatever you think "dest" is supposed to be ("vars"? but I think you just mean "comp_file").

Veera

unread,
Nov 10, 2022, 4:43:06 PM11/10/22
to Ansible Project
Whatever "vars" is, it doesn't have any data with that name -          exactly...  it will be a new file to be created by the copy's "dest ."


compare_out.stdout is having   the output of hundreds of lines to be printed parallely .  I have disabled the printing of its output (to reduce screen space) by 
register: compare_out
no_log: true 

#######
Perhaps you mean this:

  dest="{{ comp_file }}"

Whatever. In any case, if I were you, I'd throw in a debug step and print out the values of "compare_out.stdout" and, er, whatever you think "dest" is supposed to be ("vars"? but I think you just mean "comp_file").
### #######
 on the above ,  I am trying to write the compare_out.stdout  which is 100+ lines  to a file which  have to created by  calling the variable "{{ comp_file }}"  as dest using copy .


may be we need template? Jinja ?  
Learn to study more ..  :-)
Reply all
Reply to author
Forward
0 new messages