λ¬Έμμ λ€μν μ¨λΌμΈ κΈ°μ¬λ₯Ό κ²μνλλ° μ€μ²©λ λ³μκ° μλ€λ μΈκΈμ μ°Ύμ μ μμ΄ κΈ°λ₯ μμ²μ μμν©λλ€. μ΄λ λ 볡μ‘νκ³ μλ λ³μ νΈμΆμ νμ©νμ¬ λ§μ νλ‘μ νΈμ λμμ΄ λ μ μμ΅λλ€.
μΌλ° λ³μλ λ€μκ³Ό κ°μ΄ μ μν μ μμ΅λλ€.
{{ variable }}
λ€λ₯Έ λ³μμ λμ μ 보λ₯Ό μ¬μ©νμ¬ λ€λ₯Έ λ³μ μ΄λ¦μ μ±μ°λ κ²μ΄ μ μ©ν κ²μ λλ€.
{{ variable{{ generated_var }} }}
λ΄ μ νν μ¬μ© μ¬λ‘λ Ansibleμ λλ€. νλμ λ³μ(ansible_interfaces)μμ λ€νΈμν¬ μΈν°νμ΄μ€ μ₯μΉ λͺ©λ‘μ κ°μ Έμ€κ³ μμ΅λλ€. κ·Έλ° λ€μ μ΄κ²μ μ¬μ©νμ¬ λ€λ₯Έ λ³μ(μ: ansible_eth0)μ μ 보λ₯Ό μ°Έμ‘°ν μ μμ΅λλ€. λ€μμ λ¬μ±νλ €λ κΈ°λ³Έ νλ μμν¬μ λλ€.
{% for interface in ansible_interfaces %}
IPADDR{{ loop.index }}={{ ansible_{{ interface }}.ipv4.address }}
NETMASK{{ loop.index }}={{ ansible_{{ interface }}.ipv4.netmask }}
{% endfor %}
Jinja2λ μΆκ° κ΄νΈκ° μ‘΄μ¬νλ κ²μ λν΄ λΆννκΈ° λλ¬Έμ λ λλ§ν λ κ·Έκ²μ μ’μνμ§ μμ΅λλ€. μ΄κ²μ ꡬννλ λ°©λ²μ λν μ΅μ μ λν΄ μ λ μ΄ λ κ°μ§ λ€λ₯Έ μμ΄λμ΄ μ€ νλλ₯Ό λ°λΌ μκ°νμ΅λλ€.
(1) λ³μ νμ₯μ νμ©ν©λλ€. μ΄κ²μ΄ λ°λ‘ μ κ° μ΄μ μ 보μ¬μ£Όμλ κ²μ λλ€. λ³μλ₯Ό λ΄λΆμμ μΈλΆλ‘ ꡬ문 λΆμν μ μμ΅λλ€.
(2) λ¬Έμμ΄μ λ³μ μ΄λ¦μΌλ‘ λ³ννλ νν°λ₯Ό μΆκ°ν©λλ€.
{% for interface in ansible_interfaces %}
{% set interface_string="ansible_%s.ipv4.address"|format(interface) %}
IPADDR{{ loop.index }}={{ interface_string|variable }}
NETMASK{{ loop.index }}={{ interface_string|variable }}
{% endfor %}
λ€μμ λ λ²μ§Έ μμ΄λμ΄λ₯Ό 보μ¬μ£Όλ κ±°μΉ(μλνμ§ μλ) μ½λμ λλ€.
# vim jinja2/jinja2/filters.py
<strong i="21">@environmentfilter</strong>
def do_variable(environment, s):
string_to_variable = "{{ %s }}" % s
return environment.from_string(string_to_variable).render()
μ΄μμ μΌλ‘ μ΅μ 1μ μ΅μ’ μ¬μ©μ μ¬μ© μΈ‘λ©΄μμ λ 볡μ‘ν©λλ€. κ·Έ λ¬Έμ μ λν λΉμ μ μκ°μ μλ €μ£ΌμΈμ. Jinja2μ μ½λλ₯Ό μ‘°μ¬ν κ²μ μ΄λ²μ΄ μ²μμ΄μ§λ§ μ½λμ λμμ΄ νμνλ©΄ λ€μ κΈ°μ¬νκ³ μΆμ΅λλ€.
http://serverfault.com/questions/762079/how-to-loop-through-interface-facts
λ€μκ³Ό κ°μ΄ ν μ μμ΅λλ€.
{{ hostvars[inventory_hostname]['ansible_%s' | format(interface)].ipv4.address }}
λλ λ§€μ° κ°νλ€ :-1: λ³μ λ³μ μ΄λ¦μ. λμ ν€λ‘ μ‘μΈμ€νκ±°λ λ°λ³΅ν΄μΌ νλ κ²½μ° μμ© νλ‘κ·Έλ¨μ΄ μ μ ν λ°μ΄ν° λͺ©λ‘/λ°μ΄ν° λͺ©λ‘μ μ 곡νμ§ μλ κ²½μ° μΌλ°μ μΌλ‘ μλͺ»λ μν€ν
μ²μ μ νΈμ
λλ€. FWIW, μ΄ hostvars
dictλ μΈν°νμ΄μ€ μ΄λ¦μ μΈν°νμ΄μ€ λ°μ΄ν°μ 맀ννλ μ μ ν dictμ λΉν΄ λ€μ μΆνλ€κ³ μκ°ν©λλ€. Ansibleμ λ¬Έμ λ₯Ό μ΄μ΄ ν΄λΉ λͺ©λ‘μ dictλ‘ λ³κ²½ν κ²μ μ μν©λλ€. dictλ₯Ό λ°λ³΅νλ©΄ ν€κ° μμ±λλ―λ‘ dictλ‘ λ³κ²½νλ©΄ μ΄μ λ²μ κ³Ό νΈνλμ§ μμ μλ μμ΅λλ€.
λλ λ³μ*N λ³μ μ΄λ¦μ μ»κΈ° μν λ΄λΆ λ λλ§μ΄ λμ μκ°μ΄λΌλ λ° 100% λμν©λλ€.
κ·Έλ¬λ λλ μΈλΆμμ λ΄λΆ λ λλ§ μ€μ²© μ μν μ루μ
μ μ°Ύλ€κ° μ¬κΈ°κΉμ§ μκ³ κ²°κ΅ μ€μ€λ‘ μ루μ
μ νμνκ² λμμ΅λλ€. κ·Έλ° κ²μ λν μ§μμ΄ μμ΅λκΉ? nested_render
νν°λ₯Ό μΆκ°νλ©΄ μ¬λλ€μκ² νΌλμ μ€ μ μλ€λ μ μμ μ΄λ‘κ±°λ ν΄λ‘μΈ μ μμ΅λκΉ?
μ€μ²© λ³μλ λ€μκ³Ό κ°μ ꡬμ±μ΄ μλ WTFormsμ λ¬Έμ λ₯Ό ν΄κ²°ν©λλ€.
{{ form.playername(value="{{ currentname }}") }}
λ΄κ° μ°Ύμ λ€λ₯Έ μ루μ
λ³΄λ€ ν¨μ¬ λͺ
νν©λλ€.
{{ form.playername(value=currentname) }}
νλ©΄ λ©λλ€. νμ§λ§ fyi, νμ¬ λ°μ΄ν°λ₯Ό μμ μμ±μμ μ λ¬νκ³ ν
νλ¦Ώμμ μ ν μ κ²½μ°μ§ μμμΌ ν©λλ€.
μ, κ°λ¨ν©λλ€! λλ κ²°κ΅ μλ°μ€ν¬λ¦½νΈλ₯Ό μ¬μ©νμ¬ currentname λ³μμ κ°μ μ€μ νμ΅λλ€. Python μ½λμμ μμ κ°μ²΄μ κΈ°λ³Έκ°μ μ€μ νλ©΄ μ λ°μ΄νΈλμ§ μμ΅λλ€.
IRCμμ #pocoo
λ₯Ό μ
λ ₯νκ³ κ±°κΈ°μ pingμ 보λ΄λ©΄(μ¬κΈ°μλ μ£Όμ μ λ§€μ° λ€λ¦
λλ€) μ¬λ°λ₯΄κ² μννλ λ°©λ²μ μλ €λ릴 μ μμ΅λλ€.
κ°μ₯ μ μ©ν λκΈ
http://serverfault.com/questions/762079/how-to-loop-through-interface-facts
λ€μκ³Ό κ°μ΄ ν μ μμ΅λλ€.
λλ λ§€μ° κ°νλ€ :-1: λ³μ λ³μ μ΄λ¦μ. λμ ν€λ‘ μ‘μΈμ€νκ±°λ λ°λ³΅ν΄μΌ νλ κ²½μ° μμ© νλ‘κ·Έλ¨μ΄ μ μ ν λ°μ΄ν° λͺ©λ‘/λ°μ΄ν° λͺ©λ‘μ μ 곡νμ§ μλ κ²½μ° μΌλ°μ μΌλ‘ μλͺ»λ μν€ν μ²μ μ νΈμ λλ€. FWIW, μ΄
hostvars
dictλ μΈν°νμ΄μ€ μ΄λ¦μ μΈν°νμ΄μ€ λ°μ΄ν°μ 맀ννλ μ μ ν dictμ λΉν΄ λ€μ μΆνλ€κ³ μκ°ν©λλ€. Ansibleμ λ¬Έμ λ₯Ό μ΄μ΄ ν΄λΉ λͺ©λ‘μ dictλ‘ λ³κ²½ν κ²μ μ μν©λλ€. dictλ₯Ό λ°λ³΅νλ©΄ ν€κ° μμ±λλ―λ‘ dictλ‘ λ³κ²½νλ©΄ μ΄μ λ²μ κ³Ό νΈνλμ§ μμ μλ μμ΅λλ€.