Smily
Smily

Reputation: 2578

how to find the contents of a file in windows using Ansible

I need to copy the contents of a file in windows to a variable. I tried as below, but getting error.

- name: test   
  set_fact: 
    new_var: "{{lookup('file', 'C:\\temp\\test.csv') }}"

Error is:

"An unhandled exception occurred while running the lookup plugin 'file'. Error was a , original message: could not locate file in lookup: C:\temp\test.csv"

The file is present in the remote windows server. Please let me know what is wrong here or please suggest an alternative way.

Upvotes: 0

Views: 4615

Answers (2)

Christopher Vickers
Christopher Vickers

Reputation: 1953

The reason the OPs solution doesnt work, is that the nlookup is run on the localhost (the ansible server, where the playbook is stored). nlookup can be used to get file content as either a "file" or as a "template". Template will replace {{ variables }} with a variable. File will just read the file to a variable.

C:\temp\test.csv does not exist in the playbook folder, hence it fails.

amutter's solution works by running a windows command and then passing the output into a variable. The command that he ran is

 # This runs the windows command 'type' to read the contents of the file and return  the value in the console. The console output is passed into the variable content
 - name: get content
   win_shell: 'type C:\Temp\ansible.readme'  
   register: content

 # The content.stdout is used to return the whole console output. stdout_lines can be used to use a specific line as it is an array of lines
 - name: write content
   debug:  
   msg: "{{ content.stdout }} "

Upvotes: 0

amutter
amutter

Reputation: 81

I had the same problem, didn't get it to work with the lookup file plugin. As an alternative I did:

 - name: get content
   win_shell: 'type C:\Temp\ansible.readme'  
   register: content

 - name: write content
   debug:  
   msg: "{{ content.stdout_lines }} "

Upvotes: 2

Related Questions