how to read json file using ansible

36,672

Solution 1

You have to add a from_json jinja2 filter after the lookup:

version_file: "{{ lookup('file','/home/shasha/devOps/tests/packageFile.json') | from_json }}"

Solution 2

In case if you need to read a JSON formatted text and store it as a variable, it can be also handled by include_vars .

- hosts: localhost
  tasks:
    - include_vars:
        file: variable-file.json
        name: variable

    - debug: var=variable

Solution 3

for future visitors , if you are looking for a remote json file read. this won't work as ansible lookups are executed in the local

you should use a module like Slurp

Share:
36,672
Shasha99
Author by

Shasha99

5 Years in Technology

Updated on July 09, 2022

Comments

  • Shasha99
    Shasha99 almost 2 years

    I have a json file in the same directory where my ansible script is. Following is the content of json file:

    { "resources":[
               {"name":"package1", "downloadURL":"path-to-file1" },
               {"name":"package2", "downloadURL": "path-to-file2"}
       ]
    }
    

    I am trying to to download these packages using get_url. Following is the approach:

    ---
    - hosts: localhost
      vars:
        package_dir: "/var/opt/"
        version_file: "{{lookup('file','/home/shasha/devOps/tests/packageFile.json')}}"
    
      tasks:
        - name: Printing the file.
          debug: msg="{{version_file}}"
    
        - name: Downloading the packages.
          get_url: url="{{item.downloadURL}}" dest="{{package_dir}}" mode=0777
          with_items: version_file.resources
    

    The first task is printing the content of the file correctly but in the second task, I am getting the following error:

    [DEPRECATION WARNING]: Skipping task due to undefined attribute, in the future this
    will be a fatal error.. This feature will be removed in a future release. Deprecation
    warnings can be disabled by setting deprecation_warnings=False in ansible.cfg.