Ansible JSON module?

Is there a module for manipulating JSON data? Say I have a settings file that’s written in JSON, and I’d like to set or modify a value. As a task, this might look like:

`

  • name: Modify author name
    json: src=config.json key=author.name value=‘rvang’
    `

Nothing in core presently.

I’d probably be open to it. Can’t remember what my comments were WRT this in the past.

Probably needs to be pseudo-XPATHey in nature.

its soooo easy to write json with jinja templates.​

I’m assuming this was a request to replace some keys inside of them.

In most cases yes, if you have a datastructure defined in Ansible - and ansible can read almost any data file as JSON instead of YAML too - not that this matters,

{{ datastructure }}

is all the template needs to be.

I was assuming this was about config file changes, but if you can use a template, it’s better to fully declare the desired end result 99.999% of the time. Good point.

I tend to take the template route almost all the time. This is in regard to modifying JSON-based configuration files. I compose several roles and run them against a host. Each role might do something very distinct, while they all modify a common configuration file or add information to a meta-data file. Since I have several roles none of which know about one-another, yet all need to add some relevant data to a common JSON-based configuration file, it would be convenient to edit this data directly since there’s really no single role from where I can define a master template.

So are there any examples of a playbook or role that loads some JSON data from a file, works with that data, then writes it back out using a simple template like {{ data_structure }} ? What set of tasks could perform this?

Not really.

set_fact mostly allows replacing variables but doesn’t have a good facility for what you speak of.

What you speak of might be dealt with with something like action_plugin theoretically like “set_hash_entry” that took a hash, a key, and value, maybe.
It gets a little programmy that way though. Not trying to fight it, just not sure it’s the best way.

Maybe others have ideas on how to get creative.

I see. Maybe I’ll try my hand at writing a module. I’ll drop a link to a github repo when that happens.