Je lis les données d'un fichier json avec jq. Je veux ajouter les résultats dans un fichier yaml, mais je ne le fais pas fonctionner. Je suis assez nouveau dans la programmation Shell. Mon objectif est d'ajouter ces "utilisateurs" à un tableau "utilisateurs" existant dans un fichier yaml.
Voici mon fichier json:
#$DEFAULTS_FILE
{"users":
[
{"name":"pi",
"gecos": "Hypriot Pirate",
"Sudo":"ALL=(ALL) NOPASSWD:ALL",
"Shell": "/bin/bash",
"groups":"users,docker,video",
"plain_text_passwd":"pi",
"lock_passwd":"false",
"ssh_pwauth":"true",
"chpasswd": {"expire": false}
},
{"name":"admin",
"gecos": "Hypriot Pirate",
"Sudo":"ALL=(ALL) NOPASSWD:ALL",
"Shell": "/bin/bash",
"primary-group": "users",
"groups":"users,docker,adm,dialout,audio,plugdev,netdev,video",
"ssh-import-id":"None",
"plain_text_passwd":"pi",
"lock_passwd":"true",
"ssh_pwauth":"true",
"chpasswd": "{expire: false}",
"ssh-authorized-keys": ["ssh-rsa abcdefg1234567890 [email protected]"]
}
]
}
Je le filtre avec ça:
cat $DEFAULTS_FILE | jq .users
Je ne sais pas comment convertir ce json en yaml.
Mon résultat attendu devrait être:
users:
- name: pi
gecos: "Hypriot Pirate"
Sudo: ALL=(ALL) NOPASSWD:ALL
Shell: /bin/bash
groups: users,docker,video
plain_text_passwd: pi
lock_passwd: false
ssh_pwauth: true
chpasswd: { expire: false }
- name: admin
primary-group: users
Shell: /bin/bash
Sudo: ALL=(ALL) NOPASSWD:ALL
groups: users,docker,adm,dialout,audio,plugdev,netdev,video
ssh-import-id: None
J'ai essayé d'utiliser un deuxième outil appelé yq
qui est similaire à jq
et peut écrire des fichiers yaml. Mais je n'ai aucun progrès positif.
MODIFIER
Je sais que je peux ajouter du contenu au yaml avec ça:
yq w -i "my.yml" "users[+]" "some content"
Mais je ne sais pas comment fusionner mon json en cela.
Toute aide ou indice serait sympa, merci d'avance ...
function yaml_validate {
python -c 'import sys, yaml, json; yaml.safe_load(sys.stdin.read())'
}
function yaml2json {
python -c 'import sys, yaml, json; print(json.dumps(yaml.safe_load(sys.stdin.read())))'
}
function yaml2json_pretty {
python -c 'import sys, yaml, json; print(json.dumps(yaml.safe_load(sys.stdin.read()), indent=2, sort_keys=False))'
}
function json_validate {
python -c 'import sys, yaml, json; json.loads(sys.stdin.read())'
}
function json2yaml {
python -c 'import sys, yaml, json; print(yaml.dump(json.loads(sys.stdin.read())))'
}
Plus d'astuces Bash sur http://github.com/frgomes/bash-scripts
Un autre oneliner:
python -c 'import yaml, sys; print(yaml.dump(yaml.load(open(sys.argv[1])), default_flow_style=False))' input.json
(exploitant le fait que json valide est également yaml valide)
Et yaml à json:
python -c 'import yaml, json, sys; print(json.dumps(yaml.load(open(sys.argv[1])), indent=2))' input.yaml