2016-10-27 3 views
1

항목 목록 (배열)로 지정 사실을 읽을 수없는 내가 함께 작전을 실행 해요내가 정의 사실 ---> /etc/ansible/facts.d/hdfs.fact을 만든

내가 예상 다음과 같은 답변으로 받고 있어요 명령

- debug: var=ansible_local.hdfs 
    run_once: true 

을 다음 내가 그 JSON에서 특정 값을 구문 분석 할 수있는 방법에

PLAY [all] ********************************************************************* 

TASK [setup] ******************************************************************* 
ok: [cdh-2] 
ok: [cdh-3] 
ok: [cdh-1] 

TASK [preparation : debug] ***************************************************** 
ok: [cdh-1] => { 
    "ansible_local.hdfs": { 
     "items": [ 
      { 
       "base": true, 
       "config": { 
        "items": [] 
       }, 
       "displayName": "Failover Controller Default Group", 
       "name": "hdfs-FAILOVERCONTROLLER-BASE", 
       "roleType": "FAILOVERCONTROLLER", 
       "serviceRef": { 
        "clusterName": "cluster", 
        "serviceName": "hdfs" 
       } 
      }, 
      { 
       "base": true, 
       "config": { 
        "items": [ 
         { 
          "name": "balancer_java_heapsize", 
          "value": "491782144" 
         } 
        ] 
       }, 
       "displayName": "Balancer Default Group", 
       "name": "hdfs-BALANCER-BASE", 
       "roleType": "BALANCER", 
       "serviceRef": { 
        "clusterName": "cluster", 
        "serviceName": "hdfs" 
       } 
      }, 
      { 
       "base": true, 
       "config": { 
        "items": [] 
       }, 
       "displayName": "HttpFS Default Group", 
       "name": "hdfs-HTTPFS-BASE", 
       "roleType": "HTTPFS", 
       "serviceRef": { 
        "clusterName": "cluster", 
        "serviceName": "hdfs" 
       } 
      } 
     ] 
    } 
} 

내 질문에.

{ 
    "items" : [ { 
    "name" : "hdfs-FAILOVERCONTROLLER-BASE", 
    "displayName" : "Failover Controller Default Group", 
    "roleType" : "FAILOVERCONTROLLER", 
    "base" : true, 
    "serviceRef" : { 
     "clusterName" : "cluster", 
     "serviceName" : "hdfs" 
    }, 
    "config" : { 
     "items" : [ ] 
    } 
    }, { 
    "name" : "hdfs-BALANCER-BASE", 
    "displayName" : "Balancer Default Group", 
    "roleType" : "BALANCER", 
    "base" : true, 
    "serviceRef" : { 
     "clusterName" : "cluster", 
     "serviceName" : "hdfs" 
    }, 
    "config" : { 
     "items" : [ { 
     "name" : "balancer_java_heapsize", 
     "value" : "491782144" 
     } ] 
    } 
    }, { 
    "name" : "hdfs-HTTPFS-BASE", 
    "displayName" : "HttpFS Default Group", 
    "roleType" : "HTTPFS", 
    "base" : true, 
    "serviceRef" : { 
     "clusterName" : "cluster", 
     "serviceName" : "hdfs" 
    }, 
    "config" : { 
     "items" : [ ] 
    } 
    } ] 
} 

주셔서 감사합니다 예를 displayName에서

+0

당신이 날의 출력 말할 수 여기 lazartravica에서 포스트의 해결책을 발견 : – Shasha99

답변

0

항목은 목록이고 각 요소는 사전입니다. 의 각 사전 요소는이고 displayName 속성을가집니다. 당신이 있음을 언급 한 바와 같이
:

- debug: msg="{{item.displayName}}" 
    with_items: 
    - "{{ansible_local.hdfs.items}}" 

편집 : 년의 경우 당신은 목록은 다음 코드 조각을 사용할 수 있습니다 항목에 존재하는 각각의 사전 요소의 나 displayName를 인쇄하려면 "{{ansible_local.hdfs.items}}"내장 된 dict 개체의 메서드 항목을 0x7f81f42b2c58에 인쇄합니다.

항목이 일부 내장 메서드 이름과 충돌하기 때문에 이러한 현상이 발생합니다. 따라서 이름을 다른 것으로 바꿀 필요가 있습니다. 항목을 hdfs.fact 파일에 사용할 수 없습니다.


분석에 조금

: 목록에서

요소는 인덱스로 자신의 위치를 ​​사용하여 참조 할 수 있습니다. 사전에

L=[1,2,3,4] 


L[0] will give you 1. 

L[1] will give you 2. 

요소들은 를 사용하여 참조하고 사용할 수있는이 개 대회가 될 수

D ={"one" : 1, "two" : 2, "three" : 3} 


D["1"] will give you 1. 

D.two will give you 2. 

D.one will give you 1. 

D["two"] will give you 2. 
+0

불행히도 – yoramshai

+0

ansible_local.hdfs.items - 디버그 : MSG = "{{ansible_local.hdfs합니다. items}} "이 명령을 실행 해보십시오. – Shasha99

+1

루트"items "가 예상대로 변경된 후에 감사합니다. – yoramshai

0

item의 속성이 아니라 item.config의 : 나는 이미 어떤 성공하지

debug: var=ansible_local.hdfs.items[0].config.displayName 
debug: var=ansible_local.hdfs.items.config.displayName 

hdfs.fact 컨텐츠를 많은 구문을 시도했다. 그래서이 경우 ansible_local.hdfs.items[0].displayName이 작동합니다.