Ansible: ์—ญํ• ์˜ ๊ธฐ๋ณธ ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ๋Š” ์—ฌ๋Ÿฌ ํŒŒ์ผ

์— ๋งŒ๋“  2016๋…„ 02์›” 01์ผ  ยท  44์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: ansible/ansible

๋ฌธ์ œ ์œ ํ˜•

๊ธฐ๋Šฅ ์•„์ด๋””์–ด

๊ตฌ์„ฑ ์š”์†Œ ์ด๋ฆ„

์—ญํ• 

ANSIBLE ๋ฒ„์ „

ํ•ด๋‹น ์—†์Œ

์š”์•ฝ

์ €๋Š” ์˜ต์…˜์ด ๋งŽ์€ ๋ณต์žกํ•œ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์—ญํ• ์„ ๋งก๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ defaults/main.yml์€ ๋” ๋งŽ์€ ๋ณ€์ˆ˜์™€ ํ•จ๊ป˜ ์ ์  ๋” ์ปค์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ํด๋”์—์„œ ์˜๋ฏธ์ ์œผ๋กœ ๊ด€๋ จ๋œ ๊ฐ ๋ณ€์ˆ˜ ๊ทธ๋ฃน์— ๋Œ€ํ•ด ๋‹ค์–‘ํ•œ YAML ํŒŒ์ผ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด ํด๋”์— ๋” ๋งŽ์€ ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์ง€๋งŒ ํ•ด๋‹น ์ •์˜๊ฐ€ ์˜ˆ์ƒ๋Œ€๋กœ ์„ ํƒ๋˜์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. main.yml๋งŒ ๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์ด ์ข‹์€ ๊ธฐ๋Šฅ์ด ๋  ๊ฒƒ์ด๋ผ๊ณ  ๋ฏฟ์Šต๋‹ˆ๋‹ค.

affects_2.2 affects_2.3 affects_2.4 affects_2.5 feature core

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๊ธฐ๋ณธ ์—ญํ•  ๋ณ€์ˆ˜์— include_vars ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ธฐ๋ณธ ๋ณ€์ˆ˜๊ฐ€ ์• ์ดˆ์— ์กด์žฌํ•˜๋Š” ์ด์œ , ์ฆ‰ ์—ญํ• /ํ”Œ๋ ˆ์ด๋ถ์˜ ๋‹ค๋ฅธ ๋ถ€๋ถ„์—์„œ ์‰ฝ๊ฒŒ ๋ฎ์–ด์“ธ ์ˆ˜ ์žˆ๋Š” "์ตœํ›„์˜ ์ˆ˜๋‹จ ๊ธฐ๋ณธ๊ฐ’"์„ ์ œ๊ณตํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์„ ๋ฌดํšจํ™”ํ•ฉ๋‹ˆ๋‹ค.

defaults/ ๋””๋ ‰ํ† ๋ฆฌ์— ์—ฌ๋Ÿฌ ํŒŒ์ผ์ด ์žˆ๋‹ค๋Š” ์•„์ด๋””์–ด๋Š” ์ด์ „์— IRC์—์„œ ๋…ผ์˜๋˜์—ˆ์œผ๋ฉฐ inventory/group_vars/ ๋ฐ inventory/host_vars/ ๋””๋ ‰ํ† ๋ฆฌ์™€ ์œ ์‚ฌํ•˜๊ฒŒ defaults/ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์ ธ์„œ ์ข‹๋‹ค. ํ•„์š”ํ•œ ์ฝ”๋“œ๊ฐ€ ์ด๋ฏธ ์กด์žฌํ•˜๋ฉฐ ์—ญํ•  ๊ธฐ๋ณธ๊ฐ’์— ์‰ฝ๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๋ชจ๋“  44 ๋Œ“๊ธ€

main.yml in tasks , ๋‹ค๋ฅธ ํŒŒ์ผ์„ ํฌํ•จํ•˜๋Š” tasks ํ•˜์œ„ ๋””๋ ‰ํ† ๋ฆฌ์—๋„ ์žˆ๋Š” main.yml ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

- include: foo/main.yml
- include: bar/main.yml

๊ธฐ๋ณธ ์—ญํ•  ๋ณ€์ˆ˜์— include_vars ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ธฐ๋ณธ ๋ณ€์ˆ˜๊ฐ€ ์• ์ดˆ์— ์กด์žฌํ•˜๋Š” ์ด์œ , ์ฆ‰ ์—ญํ• /ํ”Œ๋ ˆ์ด๋ถ์˜ ๋‹ค๋ฅธ ๋ถ€๋ถ„์—์„œ ์‰ฝ๊ฒŒ ๋ฎ์–ด์“ธ ์ˆ˜ ์žˆ๋Š” "์ตœํ›„์˜ ์ˆ˜๋‹จ ๊ธฐ๋ณธ๊ฐ’"์„ ์ œ๊ณตํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์„ ๋ฌดํšจํ™”ํ•ฉ๋‹ˆ๋‹ค.

defaults/ ๋””๋ ‰ํ† ๋ฆฌ์— ์—ฌ๋Ÿฌ ํŒŒ์ผ์ด ์žˆ๋‹ค๋Š” ์•„์ด๋””์–ด๋Š” ์ด์ „์— IRC์—์„œ ๋…ผ์˜๋˜์—ˆ์œผ๋ฉฐ inventory/group_vars/ ๋ฐ inventory/host_vars/ ๋””๋ ‰ํ† ๋ฆฌ์™€ ์œ ์‚ฌํ•˜๊ฒŒ defaults/ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์ ธ์„œ ์ข‹๋‹ค. ํ•„์š”ํ•œ ์ฝ”๋“œ๊ฐ€ ์ด๋ฏธ ์กด์žฌํ•˜๋ฉฐ ์—ญํ•  ๊ธฐ๋ณธ๊ฐ’์— ์‰ฝ๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

+1

+1

์žˆ์œผ๋ฉด ์ข‹์„ํ…๋ฐ!

+1

์˜ˆ, ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ defaults/*๊ฐ€ ์ž๋™์œผ๋กœ ๋ฐœ๊ฒฌ๋˜๊ณ  ๋กœ๋“œ๋œ๋‹ค๊ณ  ๊ฐ€์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ œ์•ˆ๋œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•(์ž‘์—…์˜ ์ถ”๊ฐ€ ๊ธฐ๋ณธ ํŒŒ์ผ ํฌํ•จ)์€ ๋ณ€์ˆ˜ ์šฐ์„  ์ˆœ์œ„ ๋กœ ์ธํ•ด ์ธ๋ฒคํ† ๋ฆฌ ๋ณ€์ˆ˜๋ฅผ ๋ฌด์‹œํ•˜๋ฏ€๋กœ ํ•ด๊ฒฐ๋  ๋•Œ๊นŒ์ง€ ์ด ๋ฌธ์ œ๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด 1๊ฐœ์˜ ํŒŒ์ผ๋กœ ๋ฌถ์–ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

Ansible 2.x ๋ณ€์ˆ˜ ์šฐ์„  ์ˆœ์œ„

    role defaults [1] (loading all role defaults here critical)
    inventory vars [2]
    inventory group_vars
    inventory host_vars
    playbook group_vars
    playbook host_vars
    host facts
    registered vars
    set_facts
    play vars
    play vars_prompt
    play vars_files
    role and include vars (hack coming in here will override everything above)
    block vars (only for tasks in block)
    task vars (only for the task)
    extra vars (always win precedence)

์ด๊ฒƒ์€ #8121๊ณผ ๊ด€๋ จ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

+1

+1

๊ฐ€๋ณ€ ์šฐ์„  ์ˆœ์œ„ ์ œ์•ฝ์œผ๋กœ ์ธํ•ด ๋ฐ˜๋“œ์‹œ ๊ธฐ๋Šฅ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์ด๊ฒƒ์€ ๋˜ํ•œ ๋ณ€์ˆ˜ ํด๋ž˜์Šค๋ณ„๋กœ ๊ธฐ๋ณธ ํŒŒ์ผ์„ ์ •์˜ํ•˜๊ณ  ๊นจ๋—ํ•œ ๋ถ„๋ฆฌ๋ฅผ ์œ ์ง€ํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋„คํŠธ์›Œํ‚น์—์„œ IPv4์šฉ ๊ธฐ๋ณธ ํŒŒ์ผ ํ•˜๋‚˜, IPv6์šฉ ํ•˜๋‚˜, SNMP์šฉ ํ•˜๋‚˜ ๋“ฑ์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋งˆ์ง€๋ง‰์œผ๋กœ ์ด ํŒŒ์ผ์„ "๊ธฐ๋ณธ๊ฐ’" ์•„๋ž˜์˜ ๋‹ค๋ฅธ ํด๋”์— ๋„ฃ์„ ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด๊ฑธ ์ง์ ‘ ์น˜๋ฉด ํ™•์‹คํžˆ +1

์ด๊ฒƒ์€ ์ •๋ง๋กœ PITA์ž…๋‹ˆ๋‹ค.
์†”๋ฃจ์…˜์„ ์ œ์•ˆํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด include_vars ์™€ ์œ ์‚ฌํ•˜์ง€๋งŒ meta/main.yml ์— ๋กœ๋“œ ์ˆœ์„œ๋ฅผ ์ง€์ •ํ•˜๋Š” ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

- dependencies: []
- default_vars:
  - "main.yml"
  - "{{ ansible_os_family }}-{{ ansible_distribution_major_version }}.yml"

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์˜ต์…˜์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ["main.yml"] ๋˜๊ณ  ๊ธฐ์กด ์ฝ”๋“œ๊ฐ€ ์†์ƒ๋˜์ง€ ์•Š๊ณ  ๊ฐœ๋ฐœ์ž๊ฐ€ ์„ ํƒํ•œ ์ปจํ…์ŠคํŠธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์„ธ๋ถ„ํ™”๋œ ๋ณ€์ˆ˜๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ์ด ํ•œ. ๋‚˜๋Š” ์ด๊ฒƒ์ด ์ฆ‰์‹œ ์ž‘๋™ ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์™„์ „ํžˆ ์˜์‹ฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€๋Šฅํ•œ ๋ช‡ ์•ˆ๋˜๋Š” ๊ฒฝ์šฐ ์ค‘ ํ•˜๋‚˜๋Š” ์‹ค์ œ๋กœ ์ตœ์†Œํ•œ์˜ ๋†€๋ผ์›€์˜ ์›์น™์„ ์•ฝ๊ฐ„ ์œ„๋ฐ˜ํ•ฉ๋‹ˆ๋‹ค ...

ํ™•์‹คํžˆ +1

vars/ ๋Œ€ํ•ด ๋™์ผํ•˜์ง€๋งŒ #2958์ด ์ด์— ๋Œ€ํ•ด ๊ฒฐ์ •ํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@cornfeedhobo ์˜ ์˜ˆ๋Š” ๋‚ด ์‚ฌ์šฉ ์‚ฌ๋ก€์™€ ์ •ํ™•ํžˆ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค. include_vars๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ๊ทน์— ์˜ํ•œ ๊ฐœ๋ณ„ ๋ณ€์ˆ˜์˜ ์‰ฌ์šด ์žฌ์ •์˜๋ฅผ ๋ฐฉ์ง€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์ธํ„ฐํŽ˜์ด์Šค ์˜ต์…˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ํฌํ•จ๋œ ํŒŒ์ผ์„ ๊ธฐ๋ณธ๊ฐ’์ธ ๊ฒƒ์ฒ˜๋Ÿผ ์ฒ˜๋ฆฌํ•˜๋Š” ์˜ต์…˜์„ include_vars ๋ชจ๋“ˆ 'as_default'์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

์ €์—๊ฒŒ๋Š” ๋‹จ์ผ ํŒŒ์ผ์ด ์žˆ๋Š” "๊ธฐ๋ณธ๊ฐ’" ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด ์ •๋ง ์ด์ƒํ•˜๊ณ  ์ง๊ด€์ ์ด์ง€ ์•Š๊ฒŒ ๋ณด์ž…๋‹ˆ๋‹ค.
๋‚ด ๋ง์€, ๋‹จ์ผ __main__.py ํŒŒ์ผ์ด ์žˆ๋Š” ํŒŒ์ด์ฌ ๋ชจ๋“ˆ์„ ๋ณธ ์ ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์ด๊ฒƒ์ด ๋ฐ”๋กœ ์ด ํ‹ฐ์ผ“์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•œ ๊ธฐ๋Šฅ์ด ์ด๋ฏธ ์กด์žฌํ•œ๋‹ค๊ณ  ์ง๊ด€์ ์œผ๋กœ ์ƒ๊ฐํ•œ ์ด์œ ์ž…๋‹ˆ๋‹ค. "๋ฌผ๋ก  ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ธฐ๋ณธ ํŒŒ์ผ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค."

include_role ์‚ฌ์šฉํ•˜๋ฉด defaults_from ์˜ต์…˜์„ ํ†ตํ•ด ์ด์ œ '๋Œ€์ฒด' ํŒŒ์ผ์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. http://docs.ansible.com/ansible/include_role_module.html

defaults/main.yml ๋ถ„ํ• ์ด ํ•„์š”ํ•œ ์ƒํ™ฉ์— ์ฒ˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ์— ๋‚ด ๐Ÿ‘๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์•ผ, ๋‚˜๋„ ํ•„์š”ํ•ด
+1

+1

@bcoca ๋Š” ํ›Œ๋ฅญํ•œ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์ด๋ฉฐ ์œ ์—ฐ์„ฑ์„ ์ถ”๊ฐ€ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์„œ๋Š” ๋ฌธ์ œ๋ฅผ ๋‹ค๋ฃจ์ง€ ์•Š์œผ๋ฉฐ ์ •์ƒ์ ์ธ ๊ธฐ๋ณธ๊ฐ’์„ ์‰ฝ๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์—ญํ• ์„ ๋ถ€์—ฌํ•˜๋ ค๋Š” ์˜๋„๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ํ”Œ๋ ˆ์ด๋ถ ์ž‘์„ฑ์ž์—๊ฒŒ ์ฑ…์ž„์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์œ„์˜ ๋‚ด ์˜๊ฒฌ์„ ๊ฒ€ํ† ํ•˜์‹ญ์‹œ์˜ค

์˜ˆ, ์ด๊ฒƒ์€ 2k ๋ผ์ธ์˜ ํŒŒ์ผ์„ ํ”ผํ•˜๋Š” ๋ฐ ๋งค์šฐ ์œ ์šฉํ•œ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.
+1

+1

+1

๐Ÿ‘

+1

+1

+1
๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์—ฌ๊ธฐ์— ์žˆ์Šต๋‹ˆ๋‹ค. main.yml์ด ๋„ˆ๋ฌด ์ปค์„œ ์—ฌ๋Ÿฌ ํŒŒ์ผ๋กœ ๋ถ„ํ• ๋ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์ด "๊ทธ๋ƒฅ ์ž‘๋™"ํ•˜๊ณ  dir์ด๊ธฐ ๋•Œ๋ฌธ์— defaults/ ์•„๋ž˜์— ์žˆ๋Š” ํŒŒ์ผ์˜ ๋ชจ๋“  vars๋ฅผ ๋กœ๋“œํ•  ๊ฒƒ์ด๋ผ๊ณ  ๊ฐ€์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฆ๊ฒ์ง€ ์•Š๋‹ค.

+1

+1

+1

๐Ÿ‘

+1

+1

๐Ÿ‘

์—ฌ๋Ÿฌ๋ถ„์€ ๋ชจ๋“  +1 ๋Œ“๊ธ€์„ ์‹ซ์–ดํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๊ตฌ๋…์ž ์ˆ˜๋ฅผ ์ถ”์ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์˜์‹ฌ์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ +1์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹์›ํ•˜๋Š” ์ง€์›์„ ํ‘œ์‹œํ•˜๋Š” ์ ์ ˆํ•œ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

์ด์Šˆ ๊ด€์‹ฌ์ด ์ด์Šˆ ๊ตฌ๋…์ž ์ˆ˜์™€ ๋ช…ํ™•ํ•˜๊ฒŒ ์—ฐ๊ฒฐ๋  ๋•Œ๊นŒ์ง€ +1 ๋Œ“๊ธ€์„ ๋ณผ ์ˆ˜ ์žˆ์„ ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ๊ฐ€๋Šฅํ•œ ํŒ€์ด ๋Œ€์‹  ๋ฌธ์ œ ๋Œ“๊ธ€์„ ์ž ๊ทธ๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ์ŠคํŒธ ๋ฐœ์†ก์ž๊ฐ€ ๋˜์ง€ ๋ง๊ณ  ์˜นํ˜ธํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

์˜ˆ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ๊ฐ€๋Šฅํ•œ ํŒ€์ด ๋Œ€์‹  ๋ฌธ์ œ ๋Œ“๊ธ€์„ ์ž ๊ทธ๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ์ŠคํŒธ ๋ฐœ์†ก์ž๊ฐ€ ๋˜์ง€ ๋ง๊ณ  ์˜นํ˜ธํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

๊ทธ๋“ค์€ ๊ทธ๋ ‡๊ฒŒ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ด๊ฒƒ์€ ํŠนํžˆ ์ด์ „ roles ํฌํ•จ ๋ฉ”์†Œ๋“œ์™€ ํ•จ๊ป˜ 2.x์— include_role ๋ฅผ ๋„์ž…ํ•œ ์ดํ›„๋กœ ์—ญํ• ์„ ์ ์ ˆํ•˜๊ฒŒ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋Š” ํ•ต์‹ฌ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. include_role ์™€ ํ˜ธํ™˜๋˜๋„๋ก ์—ญํ• ์„ ์„ค๊ณ„ํ•˜๋ฉด ์ด์ „ roles ๋ฐฉ๋ฒ•๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๊ฐœ๋ฐœ์„ ํ›จ์”ฌ ๋” ๋ชจ๋“ˆํ™”ํ•˜๊ณ  ์œ ์—ฐํ•˜๊ฒŒ ๋งŒ๋“ค๊ธฐ ๋•Œ๋ฌธ์— ๋” ์ข‹์Šต๋‹ˆ๋‹ค. ํ”Œ๋ ˆ์ด๋ถ์˜ ์ž‘์—…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์„ ํฌํ•จํ•˜์—ฌ ์ถ”์ ํ•˜๊ฑฐ๋‚˜, ์—ญํ• ์ด ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๊ธฐ ์œ„ํ•ด ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ ํ•„์š”๊ฐ€ ์—†๋Š” ์ตœ์ข… ์‚ฌ์šฉ์ž์—๊ฒŒ ์ฑ…์ž„์„ ์ „๊ฐ€ํ•˜๊ฑฐ๋‚˜, ํ”Œ๋žซํผ/๋ฐฐํฌ/๋ฆด๋ฆฌ์Šค๋ฅผ ์ค‘์ฒฉ๋œ ์ˆ˜์ค€์œผ๋กœ ์ถ”์ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์„ ๋ณต์žกํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ์—ญํ•  ๋ณ€์ˆ˜(Ive๊ฐ€ ์—ฌ๊ธฐ์—์„œ 20๊ฐœ์˜ ์„œ๋กœ ๋‹ค๋ฅธ ํ”Œ๋žซํผ ๋ฒ„์ „์„ ์ง€์›ํ•  ์ˆ˜ ์žˆ๋Š” ์—ญํ• ์„ ์ƒ์„ฑํ•  ๋•Œ ์ž‘๋™ํ•˜์ง€๋งŒ). ์‹ค์ œ๋กœ ์—ฌ๋Ÿฌ ํ”Œ๋žซํผ์„ ์‹ค์ œ๋กœ ์ง€์›ํ•˜๋Š” ์—ญํ• ์„ ์ž‘์„ฑํ•ด ๋ณด์…จ์Šต๋‹ˆ๊นŒ? Ansible Galaxy์˜ ๋Œ€๋ถ€๋ถ„์˜ ์—ญํ• ์ด ์—†๋Š” ์ด์œ ๋Š” ๋†€๋ผ์šด ์ผ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋Š” ์•„๋งˆ๋„ IMO ๋ชฉ๋ก์—์„œ 1์œ„์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ๊ทธ๋“ค์ด ์ด๊ฒƒ์„ ์ž ๊ทธ๊ณ  1๋…„ ๋œ ๋ฌธ์ œ์— ์ „ํ˜€ ์‘๋‹ตํ•˜์ง€ ์•Š๊ณ  ์‚ฌ๋žŒ๋“ค์ด ์‹ค์ œ ์†”๋ฃจ์…˜์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ๋ฐฉํ•ดํ•˜๋Š” ์ค‘์š”ํ•œ ๋ฌธ์ œ์— ๋Œ€ํ•ด ๋…ผ์˜ํ•˜๋Š” ๋ฐ ๊ด€์‹ฌ์ด ์—†๋‹ค๊ณ  ์ปค๋ฎค๋‹ˆํ‹ฐ์— ์‹ ํ˜ธ๋ฅผ ๋ณด๋‚ธ๋‹ค๋ฉด ์‚ฌ๋žŒ๋“ค์ด ๊ณ ์ˆ˜ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹คํžˆ ๊ธฐ๋Œ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฃผ์œ„๋ฅผ ๋‘˜๋Ÿฌ๋ณด๊ณ  ์ œํ’ˆ์„ ๊ณ„์† ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. ๊ทธ๋“ค์ด ๋‹ต์žฅ์„ ํ•˜๊ณ  ๋ฌธ์ œ์— ๋™์˜ํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์•Œ๋ฆฐ๋‹ค๋ฉด ์‚ฌ๋žŒ๋“ค์€ ๋ฌธ์ œ์— ๋Œ€ํ•œ ๊ด€์‹ฌ์„ ๋Œ๊ธฐ ์œ„ํ•ด +1์„ ์ค‘๋‹จํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•˜๋ฉด ๊ธฐ๋ณธ๊ฐ’์— ์–ด๋–ค ์˜ํ–ฅ์„ ๋ฏธ์น ์ง€ ์ƒ๊ฐํ•˜์ง€ ์•Š๊ณ  include_role ๋ฅผ ์ถœ์‹œํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์€ ๋ฌธ์ œ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. ์—ญํ• ์„ ์ œ๋Œ€๋กœ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ๋ˆ„๊ตฐ๊ฐ€์—๊ฒŒ roles ์™€ include_role ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•˜๋„๋ก ๊ฐ•์š”ํ•˜๊ฑฐ๋‚˜ ๋‘˜ ๋‹ค ๋™์‹œ์— ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ถ”๊ฐ€ ์ž‘์—…์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์—ฌ๊ธฐ์„œ ๋ฌธ์ œ์˜ ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค.

๋‚ด 2์„ผํŠธ.

์ถ”์‹  ์•Œ๋ฆผ์„ ์›ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— +1์„ ๋‹ค์šด๋ณดํŒ…ํ•˜๋Š” ๊ฒฝ์šฐ.... ์˜ค๋ฅธ์ชฝ ์ƒ๋‹จ์˜ ๊ตฌ๋… ์ทจ์†Œ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ๋” ์ด์ƒ ์•Œ๋ฆผ์„ ๋ฐ›์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋„ค, ์ด ๋ฌธ์ œ๋Š” ๋‹น์‹ ์—๊ฒŒ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์š”์ ์„ ์ดํ•ดํ•œ๋‹ค. ๋‚˜๋„. ๊ทธ๊ฒƒ์ด ๋‚ด๊ฐ€ ๊ตฌ๋…ํ•œ ์ด์œ ์ž…๋‹ˆ๋‹ค. BTW, ๊ทธ๋ž˜์„œ ๊ตฌ๋…์„ ์ทจ์†Œํ•˜๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ŠคํŒธ ๋ฐœ์†ก์ž๋ฅผ ๋ฐ˜๋Œ€ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์›๋ž˜ ๋Œ“๊ธ€ ์— ์ฐฌ์„ฑ ํˆฌํ‘œ๋ฅผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” _๊ฒŒ์œผ๋ฅธ_ ์ง€์›์„ ๋ณด์—ฌ์ฃผ๋Š” ๋ฌธ๋ช…ํ™”๋œ ๋ฐฉ๋ฒ• ์ž…๋‹ˆ๋‹ค.

์ด ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์š”์ฒญ์— ์ œ ๋ชฉ์†Œ๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์ œ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ์ž์„ธํžˆ ์„ค๋ช…ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ํฐ main.yml์„ ๋ถ„ํ•ดํ•˜๋Š” ๊ฐ„๋‹จํ•œ ๊ธฐ๋Šฅ ์™ธ์—๋„ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

- name: Some name
  include_default_vars:
  with_first_found:
    - "{{ ansible_os_family }}-{{ ansible_distribution_major_version }}.yml"
   - main.yml

์ด๊ฒƒ์œผ๋กœ ๋‹ฌ์„ฑํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฒƒ์€ [์˜ˆ๋ฅผ ๋“ค์–ด] ๋ชจ๋“  ssh_config ๋ฐ sshd_config ์˜ต์…˜์„ ์ง€์›ํ•˜๊ณ  ์—ฌ๋Ÿฌ OS ๋ฐ ๋ฒ„์ „์„ ์ง€์›ํ•˜๋Š” openssh ์—ญํ• ์ž…๋‹ˆ๋‹ค. Debian 8/9, EL6/7 ๋“ฑ] ๊ทธ๋Ÿฌ๋‚˜ ์‚ฌ์šฉ์ž๊ฐ€ vars๋ฅผ ์„ค์ •ํ•˜์ง€ ์•Š๊ณ  ํ˜ธ์ถœํ•˜๋ฉด ๊ตฌ์„ฑ์„ OS_majorversion ๊ธฐ๋ณธ ์„ค์ •์œผ๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ๋นŒ๋“œํ•˜์ง€๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์˜ต์…˜์„ ์‚ฌ์šฉ์ž๊ฐ€ ์žฌ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ ์ƒํƒœ์—์„œ ํ•ด๋‹น OS ๊ธฐ๋ณธ๊ฐ’์„ include_vars์— ๋„ฃ์œผ๋ฉด ์šฐ์„  ์ˆœ์œ„๊ฐ€ ๋„ˆ๋ฌด ๋†’์•„ ์‚ฌ์šฉ์ž๊ฐ€ ์ธ๋ฒคํ† ๋ฆฌ, group_vars/all ๋˜๋Š” group_vars/groupname ๋˜๋Š” host_vars ๋“ฑ์—์„œ ํ•ด๋‹น ์„ค์ •์„ ์žฌ์ •์˜ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ง€๊ธˆ ์ด๊ฒƒ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ• ์ด ์žˆ๋‹ค๊ณ  ํ™•์‹ ํ•˜์ง€๋งŒ, ๋‚ด๊ฐ€ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฒƒ์€ ๊ฒฉ๋ ฌํ•˜๊ฒŒ ์šฐ์•„ํ•˜์ง€ ์•Š๊ณ  ์ถ”ํ•˜๊ณ  ์œ ์ง€ํ•˜๊ธฐ ์–ด๋ ค์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ ์ ์–ด๋„ ์ด ์‹œ์ ๊นŒ์ง€ ๋‚ด๊ฐ€ ๋งŒ๋‚œ #ansible์€ ์šฐ์•„ํ•˜๊ณ  ์œ ์ง€ ๊ด€๋ฆฌ ๊ฐ€๋Šฅํ•œ ๋ฐฉ์‹์œผ๋กœ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๋” ๋‚˜์€ ์•„์ด๋””์–ด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋ฉด ์ด๋ฅผ ํ—ˆ์šฉํ•˜๊ณ  github/galaxy์—์„œ ๋” ๋†’์€ ํ’ˆ์งˆ์˜ ์—ญํ• ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

@ralphie02 ์•„๋‹ˆ์š”, ์ด ์Šค๋ ˆ๋“œ๊ฐ€ ๋ฌด์—‡์ธ์ง€์— ๋Œ€ํ•œ ์†”๋ฃจ์…˜ ๊ทผ์ฒ˜์—๋Š” ์—†์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋‹ค์ค‘ ํ”Œ๋žซํผ ์—ญํ• ์— ๋Œ€ํ•œ ๊ธฐ๋ณธ๊ฐ’ ์„ค์ • ์š”๊ตฌ ์‚ฌํ•ญ๊ณผ ๋‹ค๋ฅธ ์ผ๋ฐ˜์ ์ธ ํ˜ธ์ŠคํŠธ ๊ธฐ๋ฐ˜ ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค.

์œ ์‚ฌํ•œ vars / feature_idea: https://github.com/ansible/ansible/issues/11639

์ด๊ฒƒ์€ ์ •๋ง๋กœ PITA์ž…๋‹ˆ๋‹ค.
์†”๋ฃจ์…˜์„ ์ œ์•ˆํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด include_vars ์™€ ์œ ์‚ฌํ•˜์ง€๋งŒ meta/main.yml ์— ๋กœ๋“œ ์ˆœ์„œ๋ฅผ ์ง€์ •ํ•˜๋Š” ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

- dependencies: []
- default_vars:
  - "main.yml"
  - "{{ ansible_os_family }}-{{ ansible_distribution_major_version }}.yml"

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์˜ต์…˜์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ["main.yml"] ๋˜๊ณ  ๊ธฐ์กด ์ฝ”๋“œ๊ฐ€ ์†์ƒ๋˜์ง€ ์•Š๊ณ  ๊ฐœ๋ฐœ์ž๊ฐ€ ์„ ํƒํ•œ ์ปจํ…์ŠคํŠธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์„ธ๋ถ„ํ™”๋œ ๋ณ€์ˆ˜๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์ด ์ข‹์€ ํ•ด๊ฒฐ์ฑ…์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ง€๊ธˆ ๋‹น์žฅ์€ os/version/etc์—์„œ ๋‹ค๋ฅธ ๊ธฐ๋ณธ๊ฐ’ ์„ธํŠธ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ์‰ฌ์šด ๋ฐฉ๋ฒ•์ด ์—†์Šต๋‹ˆ๋‹ค. ์ด ๊ตฌํ˜„์€ ๋˜ํ•œ ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ์„ ์œ ์ง€ํ•˜๋ฏ€๋กœ ์ข‹์€ ์„ ํƒ์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

@abedwardsw (์•ž์— ์ฃผ์„)์— ๋”ฐ๋ผ:
@cornfeedhobo (15 :+1: !) (๋˜๋Š” @doubletwist13 ์˜ ์กฐ๊ธˆ ๋” ์ตœ๊ทผ)์˜ >2๋…„ ๋œ ์ œ์•ˆ์€ ๋‚ด๊ฐ€ ์•„๋Š” ๋งŽ์€ ์—ญํ• , ํŠนํžˆ ์ถฉ๋ถ„ํžˆ ๋ณต์žกํ•œ ์—ญํ• ์— ์ •๋ง ์œ ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
https://github.com/hortonworks/ansible-hortonworks

๊ทธ๋“ค์˜ ์˜๊ฒฌ์— ๋Œ€ํ•œ ์ง์ ‘์ ์ธ ์ฐธ์กฐ:

@geerlingguy ์˜ ์ œ์•ˆ(2016๋…„๋ถ€ํ„ฐ!)๊ณผ ๋‚ด ์˜๊ฒฌ(๊ด€๋ จ ๋ฌธ์ œ๋ฅผ ์ˆ˜์ง‘ํ•˜๋ ค๊ณ  ํ•จ)๋„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค .

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰