2016-11-23 6 views
1

여러 개의 이더넷 연결을 프로비저닝 할 때 플레이 북을 만들어야합니다.템플릿의 가능한 중첩 된 변수

템플릿에서 중첩 변수를 팩트와 사용자 변수로 혼합하는 방법은 무엇입니까? net2 등이 hosts_vars에서 그런 식으로 정의

{{ ansible_{{ net1 }}.macaddress }} 
{{ ansible_{{ net2 }}.macaddress }} 

변수 net1, :

net1: eth0 
net2: br0 

이 가능 모두가

정확히 내가 예를 들어 있음을해야합니까? 그리고 대답이 '예'라면 어떻게됩니까?

답변

1

여러 가지 방법이 있습니다.

작업 변수를 사용하거나 사전 구문을 사용하여 변수에 액세스 할 수 있습니다. test.org에 대한

- hosts: test.org 
    tasks: 
    - debug: 
     var: "{{ tmp_mac }}" 
     vars: 
     tmp_mac: ansible_{{net1}}.macaddress 
    - debug: 
     var: "hostvars[inventory_hostname]['ansible_' + net1]['macaddress']" 

호스트 변수 파일 :

는 다음 두 가지 방법을 설명하는 작전이다

net1: enp3s0 

출력 :

ok: [test.org] => { 
    "ansible_enp3s0.macaddress": "e8:b0:00:b5:bf:e2" 
} 
ok: [test.org] => { 
    "hostvars[inventory_hostname]['ansible_' + net1]['macaddress']": "e8:b0:00:b5:bf:e2" 
} 

Ansible 그렇게 Jinja2 "를 검색 Jinja2 템플릿을 사용하여 변수 네 스팅 "이 좋은 아이디어 일 수 있습니다.

+0

감사합니다. 드미트리 아주 유용했습니다. – Ilya