copy registered content to a file which is called from variable

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]$

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.

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”}

Attaching a screenshot to show the format still miss something

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”).

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