2016-07-27 6 views
0

So habe ich meine Rolle jetzt funktioniert, das Ergebnis ist jetzt in "var" und ich sehe eine Ausgabe. Vor allem ist hier die Rolle, die ich geschrieben habe:Ansible Rückgabewert - Extrahiere eine bestimmte Zeile

- name: create a server 
    os_server: 
    state: present 
    flavor: m1.nano 
    auth: 
     auth_url: **** 
     username: **** 
     password: **** 
     project_name: admin 
     domain_id: **** 
    name: ansibletest 
# region_name: RegionOne 
    image: 4e7ab5c8-4b39-4c77-b68d-cf2ea7e1df1a 
    key_name: ansible 
    timeout: 200 
    auto_ip: yes 
    nics: 
     - net-id: a5a73ab9-3ee5-49a6-bea0-f44f9e376ca0  
    register: result 
- debug: var=result 

Und ich bekomme einen langen Ausgang dieser wie diese:

TASK [openstack : debug] ******************************************************* 
ok: [172.20.22.21] => { 
    "result": { 
     "changed": false, 
     "id": "6f40f396-7ef8-4e0e-9769-2b9cea898269", 
      ......... 
      "accessIPv4": "172.20.22.58", 
      ....... 
        { 
         .......... 
        }, 
        { 
         ............ 
         "addr": "172.20.22.58", 
         ...... 
        } 
       ] 
      }, 
      ........ 
      }, 
      "interface_ip": "172.20.22.58", 
      ................. 
        ............. 
       ] 
      }, 
      "os-extended-volumes:volumes_attached": [], 
      "private_v4": "10.0.100.92", 
      "progress": 0, 
      "public_v4": "172.20.22.58", 
      ................ 
       { 
        ........... 
    } 
} 

Ich brauche nur die IP-Adresse (in diesem Fall ist es die 172.20.22.58 enthalten in "accessIPv4") - gibt es eine Möglichkeit, den Ausgang zu "filtern", um diesen Wert einfach abzurufen?

+0

Versuchen Sie result.interface_ip – Nasr

Antwort

1

Sie können darauf zugreifen, indem Sie die Wörterbuchzugriffsmethoden von Ansible verwenden. Sie haben die Ausgabe in Ihrer Frage zu viel, um wirklich wissen, verstümmelt, wie die Ausgabe aussieht, aber wenn es so aussieht:

"result": { 
    "changed": false, 
    "id": "6f40f396-7ef8-4e0e-9769-2b9cea898269", 
    "output": { 
     ... 
     "accessIPv4": "172.20.22.58", 
     ... 

Dann sollten Sie in der Lage sein, den Wert für den Zugriff mit result.output.accessIPv4.

+0

das ist für die schnelle Antwort. also meinst du ich muss es so machen? 'registrieren: führen - debug: var = result.output.accessIPv4' Ursache, wenn ich dies tun bekomme ich die Meldung: ' TASK [Openstack: debug] *********** ******************************************** ok: [172,20. 22.21] => { "result.output.accessIPv4": "VARIABLE IST NICHT DEFINIERT!" } ' –

+0

Beachten Sie, wie ich sagte" wenn Sie Ausgabe wie aussieht "und ein Beispiel und dann zeigte, wie Sie auf diesen Wert zugreifen würden. Weil Sie Ihre Ausgabe gemangelt haben (und ich verwende nicht OpenStack) weiß ich nicht, wie die Ausgabe tatsächlich aussieht. Wenn 'accessIPv4' ein Kind von' id' wäre, dann wäre es 'result.id.accessIPv4' – ydaetskcoR

+1

yeah okay Entschuldigung. so hier gehen wir: '{ \t "geändert": true, \t "id": "f5b9401f-507c-459d-8a9e-5124a39f27e4", \t "Openstack": { \t \t "HUMAN_ID": true, \t \t "NAME_ATTR": "Name", \t \t "OS-DCF: diskConfig": "MANUAL", ...... \t \t "OS-SRV-USG: launched_at": „2016-07 -25T06: 40: 40.000000 ", \t \t" OS-SRV-USG: terminated_at ": null, \t \t "accessIPv4": "172.20.22.58", " ich reparierte es mit" debug var = result.openstack.accessIPv4 " Jesus Christus, dieses winzige Problem machte so eine große Menge Arbeit ... es funktioniert !! Thaks Kumpel! Dein Tipp mit dem "Kind" war großartig –

Verwandte Themen