Ansible: ์ •์˜๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ with_dict ๋ฐ when์ด ์ž‘์—…์„ ๊ฑด๋„ˆ๋›ฐ์ง€ ์•Š์Œ ์‚ฌ์šฉ

์— ๋งŒ๋“  2014๋…„ 08์›” 11์ผ  ยท  3์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: ansible/ansible

๋ฌธ์ œ ์œ ํ˜•:

๋ฒ„๊ทธ ์‹ ๊ณ 

์•ค์„œ๋ธ” ๋ฒ„์ „:

๊ฐ€๋Šฅํ•œ 1.7

ํ™˜๊ฒฝ:

์‹คํ–‰ OS: OSX 10.9
๊ด€๋ฆฌ: ์šฐ๋ถ„ํˆฌ 14.04

์š”์•ฝ:

ํƒœ์Šคํฌ๊ฐ€ "with_dict" ๋ฐ "when"๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜๊ณ  when ๊ฐ’์ด false๋กœ ํ‰๊ฐ€๋˜๋ฉด,sible์€ dict ๊ฐ’์„ ํ™•์ธํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜๊ณ  ํƒœ์Šคํฌ๋ฅผ ๊ฑด๋„ˆ๋›ฐ์–ด์•ผ ํ•  ๋•Œ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

์žฌํ˜„ ๋‹จ๊ณ„:

ํ˜ธ์ŠคํŠธ:

[test]
testhost

ํ”Œ๋ ˆ์ด๋ถ.yml:

- hosts: all
  tasks:
   - name: Delete a user
     user: name="{{item}}" state=absent
     when: users_deleted is defined
     with_dict: users_deleted

๋ช…๋ น: ansible-playbook -i hosts playbook.yml
users_deleted๋ฅผ ์ •์˜ํ•˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ ์ด ์ž‘์—…์„ ๊ฑด๋„ˆ๋›ฐ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
playbook.yml์—์„œ "with_dict"๋ฅผ "with_items"๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด ์ž‘์—…์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค.

์˜ˆ์ƒ ๊ฒฐ๊ณผ:

"with_dict" ๋Œ€์‹  "with_items"๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์—…์„ ์‹คํ–‰ํ•œ ๊ฒฐ๊ณผ:

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

GATHERING FACTS ***************************************************************
ok: [testhost]

TASK: [Delete a user] *********************************************************
skipping: [testhost] => (item=users_deleted)

PLAY RECAP ********************************************************************
testhost             : ok=2    changed=0    unreachable=0    failed=0
์‹ค์ œ ๊ฒฐ๊ณผ:
PLAY [all] ********************************************************************

GATHERING FACTS ***************************************************************
ok: [testhost]

TASK: [Delete a user] *********************************************************
fatal: [testhost] => with_dict expects a dict

FATAL: all hosts have already failed -- aborting

PLAY RECAP ********************************************************************

testhost            : ok=1    changed=0    unreachable=1    failed=0

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

์•ˆ๋…•ํ•˜์„ธ์š”!

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

๋”ฐ๋ผ์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

with_dict: "{{ users_deleted | default({}) }}"

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ๋ชฉ๋ก์ด ์ •์˜๋˜์ง€ ์•Š์€ ๋Œ€์‹  ๊ธธ์ด๊ฐ€ 0์ด๊ธฐ ๋•Œ๋ฌธ์— when ์ ˆ์„ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ถ”๊ฐ€ ์งˆ๋ฌธ์ด ์žˆ์œผ์‹œ๋ฉด ์–ธ์ œ๋“ ์ง€ sible-project์— ๋“ค๋Ÿฌ์ฃผ์„ธ์š”. ๊ธฐ๊บผ์ด ๋„์™€๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ฐ์‚ฌ ํ•ด์š”!

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

์•ˆ๋…•ํ•˜์„ธ์š”!

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

๋”ฐ๋ผ์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

with_dict: "{{ users_deleted | default({}) }}"

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ๋ชฉ๋ก์ด ์ •์˜๋˜์ง€ ์•Š์€ ๋Œ€์‹  ๊ธธ์ด๊ฐ€ 0์ด๊ธฐ ๋•Œ๋ฌธ์— when ์ ˆ์„ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ถ”๊ฐ€ ์งˆ๋ฌธ์ด ์žˆ์œผ์‹œ๋ฉด ์–ธ์ œ๋“ ์ง€ sible-project์— ๋“ค๋Ÿฌ์ฃผ์„ธ์š”. ๊ธฐ๊บผ์ด ๋„์™€๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ฐ์‚ฌ ํ•ด์š”!

๋‚˜๋Š” ๊ฒฐ๊ตญ ๋‹ค์Œ์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.
with_dict: users_deleted | ๊ธฐ๋ณธ({})

์ด๊ฒƒ์€ ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•˜๊ณ  ์ž‘์—…์„ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋กœ์„œ ์ด๊ฒƒ์€ ์ž‘์—…์— ๋Œ€ํ•œ ์กฐ๊ฑด์ด ํ•„์š”ํ•  ๋•Œ ์ผ๊ด€๋˜๊ฒŒ "์–ธ์ œ:"๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์•ฝ๊ฐ„ ํ˜ผ๋ž€์Šค๋Ÿฌ์› ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ ๋ช…ํ™•ํžˆ ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

2.0.1.0 ๋ฒ„์ „์—์„œ ์—ฌ์ „ํžˆ ์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

[DEPRECATION WARNING]: Skipping task due to undefined Error, in the future this will be a fatal error.. This feature will be removed in a future
release. Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg.
fatal: [xxx.xxx.xxx.xxx]: FAILED! => {"failed": true, "msg": "with_dict expects a dict"}

์šฐํšŒํ•˜๋ ค๋ฉด ignore_errors ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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