2016-10-25 11 views
3

システムステータスをjson形式で返すサービスコールがあります。私は、システムがこれはこれはansible作業です可能なURI呼び出しからjson応答を調べる方法

を返されjsonになり

{"id":"20161024140306","version":"5.6.1","status":"UP"} 

アップまたはダウンしているかどうかを決定するために電話をかけるためにansible URIモジュールを使用し、応答を検査しますそれは、呼び出しを行う:

- name: check sonar web is up 
    uri: 
    url: http://sonarhost:9000/sonar/api/system/status 
    method: GET 
    return_content: yes 
    status_code: 200 
    body_format: json 
    register: data 

質問は、私はdataにアクセスし、これは我々が呼び出しの結果を格納する方法であるansibleドキュメントごとに、それを検査する方法です。私は状態を確認する最後のステップがわからない。

+4

次のタスクとして、単純な 'debug:var = data'で始めて、登録された変数の内容を確認することができます。これはあなたが上に移動するのに役立ちます。 –

+0

ありがとうございました。 :) – Hafiz

+1

'register'がインデントされていることに注目してください。これは' data undefined'エラーを修正するために 'uri'と同じ間隔でインデント解除する必要があります。 – Hafiz

答えて

8

これは私のために働く。

- name: check sonar web is up 
uri: 
    url: http://sonarhost:9000/sonar/api/system/status 
    method: GET 
    return_content: yes 
    status_code: 200 
    body_format: json 
register: result 
until: result.json.status == "UP" 
retries: 10 
delay: 30 

resultがansible辞書であり、あなたがreturn_content=yesを設定すると、応答がこの辞書に追加され、また、上記のように、あなたが適切にタスクをインデントされていることjsonキー

を使用してアクセスしていることに注意してください。

+0

これは良い結果です。既にそこから情報を抽出するためのJinja2 JSONパーサーがあります。 – ocean

2

あなたは、出力を変数に保存することによって正しい第一歩を踏み出しました。

次のステップは、次のタスクでwhen:またはfailed_when:ステートメントのいずれかを使用して、変数の内容に基づいて切り替えることです。 Jinja2 builtin filtersには強力な文がありますが、実際にはAnipalのドキュメントによくリンクされているわけではありません。

私は、彼らが後で脚本で私には意味をなさないので、スーパー明示的に、出力変数の名前:)私はおそらくあなたに何か書くと使用

:、テキスト「UP」が発見されないされ

- name: check sonar web is up 
    uri: 
    url: http://sonarhost:9000/sonar/api/system/status 
    method: GET 
    return_content: yes 
    status_code: 200 
    body_format: json 
    register: sonar_web_api_status_output 

- name: do this thing if it is NOT up 
    shell: echo "OMG it's not working!" 
    when: sonar_web_api_status_output.stdout.find('UP') == -1 

を変数のstdoutに格納します。私が使用した

その他Jinja2 builtin filtersは以下のとおりです。

  • changed_when: "'<some text>' not in your_variable_name.stderr"
  • when: some_number_of_files_changed.stdout|int > 0

Ansible "Conditionals" docs pageこの情報のいくつかを持っています。 This blog postも非常に有益でした。

+0

は私の答えと同じ時刻に投稿されました:)だからどちらも正しい答えとしてマークするのはどちらか分かりません – Hafiz

+0

Hehe ok :)申し訳ありません、私はそれを書くのに少しかかりました。 – ocean

関連する問題