2015-08-04 9 views
1

je dois convertir cette sortieJQ pour analyser aws balises d'instance EC2

$ aws ec2 describe-instances --instance-ids i-xxxxxxxx | jq -r '.Reservations[].Instances[].Tags[]' | jq -s 'from_entries | del(..|.["aws:autoscaling:groupName"]?)' 

{ 
    "Key": "ssh_user", 
    "Value": "abc" 
} 
{ 
    "Key": "ssh_port", 
    "Value": "2200" 
} 
{ 
    "Key": "aws:autoscaling:groupName", 
    "Value": "ASG-Api" 
} 
{ 
    "Key": "Name", 
    "Value": "SV-V3-API" 
} 

dans celui-ci en utilisant JQ:

{ 
"ssh_user":"abc", 
"ssh_port":"2200", 
"Name":"SV-V3-API" 
} 

Notez que je dois supprimer cette clé: aws: autoscaling : groupName

Répondre

0

Avec 1,5 JQ:

$ jq -cs 'from_entries | del(.["aws:autoscaling:groupName"])' 

Avec JQ 1.3 ou 1.4:

$ jq -M -c -s 'reduce .[] as $x 
    ([]; . + [{"key" : $x.Key, "value": $x.Value}]) 
| from_entries 
| del(.["aws:autoscaling:groupName"])' 

Sous Windows, vous devrez modifier la citation, ou mettre le JQ les commandes dans un fichier.

+1

pas les œuvres: describe-cas $ aws EC2 --instance-ids i-xxxxxxxx | jq -r '.Reservations []. Instances []. Tags []' | jq -c -s 'from_entries | del (. ["aws: autoscaling: groupName"]) 'jq: erreur: Impossible d'utiliser null comme clé d'objet – user3742266

+0

@ user3742266 Quel est le but de l'ajout de plusieurs commandes jq ensemble? –

+0

Pour jq 1.4, vous pouvez utiliser sed pour dévaler la clé et la valeur, par ex. '$ sed -e 's/Clé/clé /' -e 's/Valeur/valeur /' 881.json |/usr/local/bin/jq -M -c -s 'from_entries | del (. ["aws: autoscaling: groupName"]) '' {"ssh_key": "id_rsa.pem", "ansible": "v3p", "v3_api_prod": "Vrai", "ssh_user": "abc" , "ssh_port": "2200", "Nom": "SV-V3-API", "superviseur": "9009"} ' – peak

1

Je pense que le commentaire de @ peak sur sed est suffisamment important pour obtenir une réponse séparée.

jq version 1.4 et inférieure ne peuvent pas travailler avec les paires clé/valeur d'Amazon en utilisant nativement from_entries car Amazon supérieur cas clés en jq clés attend minuscules. L'équipe jqaddressed this avec la version 1.5.

Pour obtenir les vos balises de instances EC2 comme key: value paires, au lieu de {key, value} entrées, utilisez:

aws ... | \ 
    sed -e 's/"Key":/"key":/g' -e 's/"Value":/"value":/g' | \ 
    jq '.Reservations[]|.Instances[]|.Tags|from_entries'