Skip to the content.

14. March 2021 - verfasst von Oliver Gaida - Kategorien: ["ansible", "json"]

Ansible json_query mit wildcards

Nehmen wir einmal an uns interessieren die Versionen der Pakete, die in der Datei package-lock.json gelistet sind. Dann können wir das mit dem folgenden Ansible-adhoc-Kommando ermitteln:

ansible localhost -m debug -a "msg={{ lookup('file', 'package-lock.json') | from_json | json_query('dependencies.*.version') }}" | head -10
localhost | SUCCESS => {
    "msg": [
        "1.3.1",
        "2.20.0",
        "5.11.0",
        "1.2.4",
        "1.0.12",
        "1.1.3",
        "1.0.6",
        "1.0.7",

Der Inhalte der Datei package-lock.json sieht dabei wie folgt aus:

{
  "requires": true,
  "lockfileVersion": 1,
  "dependencies": {
    "colors": {
      "version": "1.3.1",
      "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.1.tgz",
      "integrity": "sha512-jg/vxRmv430jixZrC+La5kMbUWqIg32/JsYNZb94+JEmzceYbWKTsv1OuTp+7EaqiaWRR2tPcykibwCRgclIsw=="
    },
    "commander": {
      "version": "2.20.0",
      "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz",
      "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ=="
    },
    "d3": {
      "version": "5.11.0",
      "resolved": "https://registry.npmjs.org/d3/-/d3-5.11.0.tgz",
      "integrity": "sha512-LXgMVUAEAzQh6WfEEOa8tJX4RA64ZJ6twC3CJ+Xzid+fXWLTZkkglagXav/eOoQgzQi5rzV0xC4Sfspd6hFDHA==",
      "requires": {
        "d3-array": "1",
        ...

Wie kommt man auf diesen Filter?

json_query verwendet jmespath. Um die passenden Filter auszutesten bietet sich der JMESPath Terminal an, siehe hier.

Installieren mit:

pip install jmespath-terminal

In unserem Fall können wir dann die Datei package-lock.json in den JMESPath Terminal mit dem folgenden Befehl laden:

jpterm package-lock.json

Um die Version des colors Paketes anzeigen zu lassen, setzen wir den Filter auf dependencies.colors.version. Danach colors durch * ersetzen und wir haben die Vorlage für unser Ansible-adhoc-Kommando.

HOME