2016-10-25 4 views
3

시스템 상태를 json 형식으로 반환하는 서비스 호출이 있습니다. 나는 시스템이이이 ansible 작업입니다가능한 URI 호출에서 json 응답을 검사하는 방법

을 반환 json을 것

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

위 또는 아래 여부를 결정하기 위해 전화를 만들기 위해 ansible URI 모듈을 사용하고 응답을 검사하려면 그 전화를한다 : 우리가 호출의 결과를 저장하는 방법이있다 data에 액세스하고 ansible 문서에 따라이를 검사 할 수있는 방법

- 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 

질문입니다. 나는 상태를 확인하는 마지막 단계를 확신하지 못한다.

+4

다음 작업으로 간단한 'debug : var = data'를 시작하면 등록 된 변수의 내용을 볼 수 있습니다. 이렇게하면 계속 나아갈 수 있습니다. –

+0

감사합니다. :) – Hafiz

+1

'register'가 얼마나 들여 쓰기되어 있는지를 주목하십시오. 이것은'data undefined' 오류를 일으 킵니다.이 문제를 해결하려면'uri '와 같은 간격으로 줄여야합니다. – Hafiz

답변

8

나를 위해 작동합니다. result가 ansible 사전이며 return_content=yes을 설정할 때 응답이 사전에 추가하고, 또한 위와 같이 제대로 작업을 들여했는지 확인 json

를 사용하여 액세스 할 수 있는지

- 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 

알 수 있습니다.

+0

이것은 결과가 Anabilities 사전으로 제공된다는 사실과 이미 거기에서 정보를 추출하기 위해 Jinja2 JSON 파서가 있습니다. – ocean

2

출력을 변수에 저장하여 올바른 첫 걸음을 내디뎠습니다.

다음 단계는 다음 작업에서 when: 또는 failed_when: 문을 사용하여 변수의 내용을 기반으로 전환합니다. Jinja2 builtin filters에 사용하기위한 전체 설명문이 있지만 실제로는 Anipal 문서에 잘 링크되어 있거나 잘 요약되어 있지 않습니다.

나는 슈퍼 명시 적으로 출력 변수라는 이름의 사용 그래서 그들은 :) 플레이 북에서 나중에 나에게 의미가 아마 당신에게 같은 것을 작성합니다

입니다
- 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 

, 텍스트가 "UP"발견되지 않습니다 변수의 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