2014-11-12 2 views
1

나는 (hostname, ip_address) 모든 쌍을 가능한 작업의 일부로 열거하는 간단한 구성 파일을 만들려고합니다.불가능한 템플릿을위한 데이터 구조 만들기

{"webservers":{"web0":"1.2.3.4","web1":"1.2.3.5"},{"caches":{"cache0":"1.2.3.6"}}} 

그러나, 나는 돈 '과 같은 데이터 구조를 방출 할

def grouped_hosts(): 
    ret = {} 
    for group in groups: 
    ret[group] = {} 

    for host in groups[group]: 
     ret[group][host] = hostvars[host]['ansible_eth0']['ipv4']['address'] 

    return json.dumps(ret) 

이 같은 (ansible의 글로벌 데이터 구조체 groupshostvars를 사용하여이) 내가 정말하고 싶은 것입니다 이 데이터 구조를 만들고 jinja2 템플릿에 전달하는 방법을 알고 있습니다. 나는 그 데이터 구조를 만들고 단지 {{ grouped_hosts()|to_nice_json }}을 넣고 하루를 부를 수 있기를 정말로 원합니다. 그러나 나는 어떻게 쓰고, 어디에 넣을 까, grouped_hosts()은 기능을합니까?

답변

0

나는 당신이 당신의 템플릿으로 만들려고하는지 모르겠지만, 당신은 단지 JSON 구조로 출력이 원하는 경우, 당신이 이런 식으로 수행 할 수 있습니다

{ 

{% set gdelim = '' %} 
{% for group in groups %} 
    {{ gdelim }}"{{group}}": { 
    {% set hdelim = '' %} 
    {% for host in groups[group] %} 
    {{ hdelim }}"{{ host }}": "{{hostvars[host]['ansible_eth0']['ipv4']['address']}}" 
    {% set hdelim = ',' %} 
    {% endfor %} 
    } 
{% set gdelim = ',' %} 
{% endfor %} 

} 

gdelimhdelim은 필요시 구분 기호를 설정하기 위해 여기에 있습니다 (개체 앞에 접두어가있는 구분 기호에 유의하십시오).

처음 실행될 때 구분 기호는 비어 있고 ","입니다. 객체에는 구분 기호가 접두사로 붙어 있기 때문에 꼬리표가없는 혼수가 없으므로 결과 JSON이 유효합니다 (그러나 약간 못 생깁니다).

+0

고마워, 예, 이런 해결책을 직접 사용했습니다. 방금 json 인코더를 다시 구현해야한다는 느낌이 들었습니다. (필자의 문서 구조가 변경됨에 따라이 템플릿을 계속해서 변경해야합니다.) 스 니펫을 가져 주셔서 감사합니다! –

관련 문제