Ansible: with_ ๋ฃจํ”„ ๊ตฌ์„ฑ ๊ฐ€๋Šฅ

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

๋ฌธ์ œ ์œ ํ˜•

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

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

ํ•ต์‹ฌ

ANSIBLE ๋ฒ„์ „

2.1

๊ตฌ์„ฑ
OS / ํ™˜๊ฒฝ
์š”์•ฝ
how: 
    forks: 1
    pause: 0
    squash: name
    label: "{{item.name}}"
    end: on_fail
with_items: ...
  • forks: ๋ฃจํ”„ ๋‚ด์—์„œ ํ•ญ๋ชฉ์„ ๋ณ‘๋ ฌ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ถ„๊ธฐ, ๊ธฐ๋ณธ๊ฐ’ 1, ๊ฒฝ๊ณ ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  • ์ผ์‹œ ์ค‘์ง€: ๋ฃจํ”„ ์‹คํ–‰ ์‚ฌ์ด, ์กฐ์ ˆ๋œ API ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ์œ ์šฉ _2.2์—์„œ ์™„๋ฃŒ_
  • ์Šค์ฟผ์‹œ: ๋ชจ๋“  ํ•ญ๋ชฉ์„ ๋ชฉ๋ก์— ๊ฒฐํ•ฉํ•˜๊ณ  ์ œ๊ณต๋œ ์˜ต์…˜์— ์ „๋‹ฌ, apt, yum ๋“ฑ์— ๋Œ€ํ•œ ํ˜„์žฌ ํ•˜๋“œ์ฝ”๋”ฉ๋œ ์˜ต์…˜์ฒ˜๋Ÿผ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์—†์Œ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค . _abandon_: ๋ฐ˜๋Œ€ ์˜๊ฒฌ, ์ด ๊ธฐ๋Šฅ์„ ์ œ๊ฑฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ๋: ๋ฃจํ”„๋ฅผ ์ค‘๋‹จํ•  ๋•Œ ๊ธฐ๋ณธ๊ฐ’์€ '๋งˆ์ง€๋ง‰ ํ•ญ๋ชฉ'์ž…๋‹ˆ๋‹ค. ์˜ต์…˜์€? on_fail, on_success(์ฒซ ๋ฒˆ์งธ)?
  • label: (#13710) item ๋ฃจํ”„๋ฅผ ์ถœ๋ ฅํ•  ๋•Œ ํ‘œ์‹œํ•  ๋‚ด์šฉ _Done in 2.2_

๋ฌธ์„œ๋ฅผ ํ˜„์žฌ ์ƒํƒœ๋กœ:

http://docs.ansible.com/ansible/playbooks_loops.html#loop -์ œ์–ด

๋ฒˆ์‹ ๋‹จ๊ณ„
์˜ˆ์ƒ ๊ฒฐ๊ณผ
์‹ค์ œ ๊ฒฐ๊ณผ
affects_2.1 affects_2.3 feature core

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

+1 ํฌํฌ

100๊ฐœ ์ด์ƒ์˜ ํ•ญ๋ชฉ์—์„œ with_ ๋ฃจํ”„๋ฅผ ๋ฐ˜๋ณตํ•˜๋Š” openstack ๋ชจ๋“ˆ์„ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค...
image

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

how ๋ผ๊ณ  ๋ถ€๋ฅด์ง€ ๋ง™์‹œ๋‹ค. become: true ๋ณด๋‹ค ์ฝ๊ธฐ๊ฐ€ ๋” ๋‚˜์ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ ์•„๋ž˜์˜ ๊ธฐ๋Šฅ์€ ํ›Œ๋ฅญํ•ด ๋ณด์ž…๋‹ˆ๋‹ค.

#10695์— ๋Œ€ํ•œ ์ˆ˜์ • ์‚ฌํ•ญ ํฌํ•จ

ํ›Œ๋ฅญํ•œ. ์ž์ „๊ฑฐ ์ด๋™์„ looping: ๋ผ๊ณ  ๋ถ€๋ฅผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

:+1:

+1

ํŠนํžˆ ํ˜ธ์ŠคํŠธ ๋ณ‘๋ ฌํ™”์— ๋Œ€ํ•ด +1!

:+1:

:+1:
ํ•˜์ง€๋งŒ ๊ทธ๊ฒƒ์„ "์–ด๋–ป๊ฒŒ"๋ผ๊ณ  ๋ถ€๋ฅด์ง€ ๋ง์ž

์ฒซ ๋ฒˆ์งธ ์‹คํŒจ ํ›„ ๋ฃจํ”„ ์ž‘์—…์„ ์ค‘๋‹จํ•˜๋Š” ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

- hosts: localhost
  vars:
    myvar:
        - 1
        - 2
        - 3
        - 4
        - 5
  tasks:
    - name: break loop after 3
      debug: msg={{item}}
      failed_when: item == 3
      register: myresults
      when: not (myresults|default({}))|failed
      with_items: "{{myvar}}"

@bcoca ๊ฐ€ ๋์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(ansible 1.9.3 ์šฐ๋ถ„ํˆฌ)

TASK: [3 ์ดํ›„ ๋ฃจํ”„ ์ค‘๋‹จ] * * * * * * * * * * * * * * ** *
ํ™•์ธ: [๋กœ์ปฌ ํ˜ธ์ŠคํŠธ] => (ํ•ญ๋ชฉ=1) => {
"์‹คํŒจ": ๊ฑฐ์ง“,
"failed_when_result": ๊ฑฐ์ง“,
"ํ•ญ๋ชฉ": 1,
"๋ฉ”์‹œ์ง€": "1"
}
ํ™•์ธ: [๋กœ์ปฌ ํ˜ธ์ŠคํŠธ] => (ํ•ญ๋ชฉ=2) => {
"์‹คํŒจ": ๊ฑฐ์ง“,
"failed_when_result": ๊ฑฐ์ง“,
"ํ•ญ๋ชฉ": 2,
"๋ฉ”์‹œ์ง€": "2"
}
์‹คํŒจ: [localhost] => (ํ•ญ๋ชฉ=3) => {"์‹คํŒจ": true, "failed_when_result": true, "ํ•ญ๋ชฉ": 3, "verbose_always": true}
๋ฉ”์‹œ์ง€: 3
ํ™•์ธ: [localhost] => (ํ•ญ๋ชฉ=4) => {
"์‹คํŒจ": ๊ฑฐ์ง“,
"failed_when_result": ๊ฑฐ์ง“,
"ํ•ญ๋ชฉ": 4,
"๋ฉ”์‹œ์ง€": "4"
}
ํ™•์ธ: [localhost] => (ํ•ญ๋ชฉ=5) => {
"์‹คํŒจ": ๊ฑฐ์ง“,
"failed_when_result": ๊ฑฐ์ง“,
"ํ•ญ๋ชฉ": 5,
"๋ฉ”์‹œ์ง€": "5"
}

์•„, ์˜ˆ, ๋ฃจํ”„๊ฐ€ ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๋“ฑ๋ก์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” 1.9์—์„œ์™€ ๊ฐ™์ด 2.0์—์„œ ๊ทธ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

ํฌํฌ์— +1

+1
์•„๋งˆ๋„ "๋ฐฉ๋ฒ•", loop_details ๋˜๋Š” ์˜ต์…˜ ๋Œ€์‹ ?

+1

+1, $ localhost wait_for ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ 100๊ฐœ์˜ EC2 ํ˜ธ์ŠคํŠธ๊ฐ€ ์˜ฌ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ฒƒ์€ ์ €๋ฅผ ์ฃฝ์ด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค...

senderista์™€ ๋น„์Šทํ•œ ์ด์œ ๋กœ +1

+1

:+1:

squash ๋ฐ forks ๋Š” ๋ชจ๋‘ Ansible ์‹คํ–‰ ์†๋„๋ฅผ ์—„์ฒญ๋‚˜๊ฒŒ ๋†’์ผ ์ˆ˜ ์žˆ๋Š” ๋ฉ‹์ง„ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ how ๋ฅผ loop_details , loop_settings , loop_options ๋˜๋Š” ์ด์™€ ์œ ์‚ฌํ•œ ๊ฒƒ์œผ๋กœ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค.

loop_control , ์ด๋ฏธ label ๋ถ€๋ถ„์ด ๊ตฌํ˜„๋œ 2.1์— ์žˆ์Šต๋‹ˆ๋‹ค.

์Šค์ฟผ์‹œ๋Š” ๊ทธ๊ฒƒ์„ ์ง€์›ํ•˜๋Š” ๋ชจ๋“ˆ์— ๋ชฉ๋ก์„ ์ „๋‹ฌํ•˜๊ธฐ ์‰ฝ๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋ƒฅ ์‚ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

apt: name={{listofpackages}}

๋ฃจํ”„๋ฅผ ์™„์ „ํžˆ ํ”ผํ•˜์‹ญ์‹œ์˜ค

+1 ํฌํฌ

+1 ํฌํฌ

์กฐ๊ฑด๋ถ€ ์ค‘๋‹จ break_when ์— ๋Œ€ํ•œ ์ƒˆ ๊ตฌ์„ฑ์— ๋Œ€ํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

+1 ํฌํฌ ๋ฐ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‹คํ–‰ํ•  ์ž‘์—… ์‹œํ€€์Šค๋ฅผ ๋ณ‘๋ ฌํ™”ํ•˜๋Š” ๋ฐ๋„ ์ž‘๋™ํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.
- include: service.yml
with_items: "{{services|default([])}}"

๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด async/async_status ๊ฐ€ ์ด๋ฏธ ์žˆ์Šต๋‹ˆ๋‹ค.

+1 ํฌํฌ

100๊ฐœ ์ด์ƒ์˜ ํ•ญ๋ชฉ์—์„œ with_ ๋ฃจํ”„๋ฅผ ๋ฐ˜๋ณตํ•˜๋Š” openstack ๋ชจ๋“ˆ์„ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค...
image

ํฌํฌ์— +1. ๋ชจ๋“  AWS ๋ฆฌ์ „์— AMI๋ฅผ ๋ณต์‚ฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํฌํฌ์— +1. ์ œ๋ฐœ! loop_control์˜ ์ผ๋ถ€๋กœ ๋งŒ๋“œ์‹ญ์‹œ์˜ค.

ํฌํฌ์— +1

ํฌํฌ์— +1

+1, ํฌํฌ๋„ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค :-)

ํฌํฌ์— +1

ํฌํฌ์— +1

ํฌํฌ๋Š” ๊ต‰์žฅํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค, +1

๋‚˜๋Š” ์ŠคํŒธ์— ๊ธฐ์—ฌํ•˜๊ณ  ์‹ถ์ง€ ์•Š๊ณ  ํ•ญ์ƒ ์นจ๋ฌต ์†์— ์•‰์•„ ์žˆ์Šต๋‹ˆ๋‹ค. ํ™˜์˜ํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํ”„๋กœ์ ํŠธ ์‚ฌ์ด์— ์ธก์ •ํ•˜๊ธฐ ์–ด๋ ต๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํฌํฌ +1 ๊ธฐ์ฐจ๊ฐ€ ์—ญ์„ ๋– ๋‚œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค!

ํฌํฌ์— +1

ํฌํฌ์— +1

ํฌํฌ์— +1

:+1: ํฌํฌ์—

@bcoca ์•ˆ๋…•ํ•˜์„ธ์š”! ์‹œ๊ฐ„์„ ๋‚ด์–ด ์ด ๋ฌธ์ œ๋ฅผ ์—ด์–ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ๊ท€ํ•˜์˜ ๋ฌธ์ œ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋ ค๋ฉด ์กฐ๊ธˆ ๋” ๋งŽ์€ ์ •๋ณด๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์„ค๋ช…์—์„œ ์ฐพ์„ ์ˆ˜ ์—†๋Š” ํ•ญ๋ชฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ๋ฌธ์ œ ์œ ํ˜•
  • ๊ฐ€๋Šฅํ•œ ๋ฒ„์ „
  • ๊ตฌ์„ฑ ์š”์†Œ ์ด๋ฆ„

์ด ํ…œํ”Œ๋ฆฟ์œผ๋กœ ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ์„ค๋ช…์„ ์„ค์ •ํ•˜์„ธ์š”.
https://raw.githubusercontent.com/ansible/ansible/devel/.github/ISSUE_TEMPLATE.md

๋ด‡ ๋„์›€๋ง์„ ๋ณด๋ ค๋ฉด ์—ฌ๊ธฐ๋ฅผ ํด๋ฆญํ•˜์‹ญ์‹œ์˜ค

ํฌํฌ์— +1

ํฌํฌ์— +1!

ํฌํฌ์— +1!

ํฌํฌ์— +1!

ํฌํฌ์— +1!

ํฌํฌ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ์–ธ์ œ์ฏค ์ค€๋น„ํ•ด์•ผ ํ• ๊นŒ์š”?
๋‚ด ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” with_sequence ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋ฒ„์—์„œ ์•ฝ 20๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ธ์Šคํ„ด์Šคํ™”ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด์ œ ์‹œ๊ฐ„์ด ๋„ˆ๋ฌด ๋งŽ์ด ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค :(
๋„์›€์ด ๋œ๋‹ค๋ฉด ๊ธฐ์˜์ง€๋งŒ ์†์„ ๋Œˆ ๊ณณ์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ํŒ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

@bitliner ์•„๋ฌด๋„ ๊ทธ๊ฒƒ์— ๋Œ€ํ•œ PR์„ ๋งŒ๋“ค์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ๋‹น์‹ ์ด ์š”๊ตฌํ•˜๋Š” ๊ฒƒ์ด๋ผ๋ฉด ์‹ค์ œ๋กœ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ˆ˜ํ–‰ํ•˜๊ธฐ๊ฐ€ ๋งค์šฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ์˜ ๊ฒฝ์šฐ ์ธ๋ฒคํ† ๋ฆฌ์—์„œ X ํ˜ธ์ŠคํŠธ๋ฅผ ์„ ์–ธํ•˜๊ณ  $# with_ hosts: ๋ฅผ ๋ฐ˜๋ณตํ•˜์—ฌ ๋ณ‘๋ ฌ๋กœ ์ƒ์„ฑํ•˜์‹ญ์‹œ์˜ค.

๋ชฉ๋ก:

[containers]
container[000:020]
hosts: containers
gather_facts: false
tasks:
   - container: state=present name={{inventory_hostname}}

์ฆ‰, ์ปจํ…Œ์ด๋„ˆ๋Š” '๊ตฌ์„ฑ๋œ' ๋ชจ๋“ˆ์ž…๋‹ˆ๋‹ค.

@bcoca ๊ท€ํ•˜์˜ ์†”๋ฃจ์…˜์€ ๋‚˜์—๊ฒŒ ๋ช…ํ™•ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ™•์‹คํžˆ, ์ด๊ฒƒ์ด ๋‹น์‹ ์ด ์˜๋ฏธํ•˜๋Š” ๋ฐ”์ž…๋‹ˆ๊นŒ?

ํ˜ธ์ŠคํŠธ ํŒŒ์ผ

[containers]
192.168.1.100
192.168.1.100
192.168.1.100
192.168.1.100
... and so on based on the degree of parallelism I want to get ...

main.yml ํŒŒ์ผ

hosts: containers
gather_facts: false
tasks:
   - container: state=present name={{inventory_hostname}}

๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ ๋ชจ๋“ˆ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๊นŒ? ์ด ๊ฒฝ์šฐ ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋™์ผํ•œ ์ด๋ฆ„์„ ๊ฐ–๊ฒŒ ๋˜๋ฉฐ ์ด๋Š” ํ—ˆ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋งž์Šต๋‹ˆ๊นŒ?

๋˜ํ•œ ๋ฃจํ”„๋ฅผ ๋ณ‘๋ ฌ๋กœ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ์–ด๋–ค ์–ด๋ ค์›€์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋‚ด ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ์ด ์ž‘์—…์˜ ์†๋„๋ฅผ ๋†’์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

- name: "Start clients"
  docker_container:
    name: "mycontainer-{{ item }}"
    image: myimage
    links: 
      - server-{{item}}:server-{{item}}
  with_sequence: count={{ scale }}

ํŠน์ • ๋ฐฉ์‹์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ ๊ฐ„์— ํŠธ๋ž˜ํ”ฝ์„ ๋ผ์šฐํŒ…ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— docker-compose scale ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค(์ด๊ฒƒ์ด ๋‹ค๋ฅธ ๋„์ปค ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด with_sequence ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค).

์ปจํ…Œ์ด๋„ˆ ์„ ์–ธ์„ ์ทจํ•˜๊ณ  scale ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์›๊ฒฉ์œผ๋กœ ์—ฌ๋Ÿฌ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ณ‘๋ ฌ๋กœ ์ธ์Šคํ„ด์Šคํ™”ํ•˜๋Š” ๋ชจ๋“ˆ์„ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ง์ด ๋˜๋‚˜์š”? myModule docker_container ๋ชจ๋“ˆ์—์„œ ํ˜ธ์ถœ/์žฌ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ Ansible์ด ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์ œ๊ณตํ•˜๋Š” API๋ฅผ ์ดํ•ดํ•˜๋Š” ๋ฐ ๋„์›€์ด ์žˆ์Šต๋‹ˆ๊นŒ?

@bitliner ๋‹น์‹ ์€ ๋‚ด ์ง€์‹œ๋ฅผ ๋”ฐ๋ฅด์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ธ๋ฒคํ† ๋ฆฌ์— ๊ณ ์œ ํ•œ ์ด๋ฆ„์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค(๋ฒ”์œ„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹œํ€€์Šค์ฒ˜๋Ÿผ ์ž‘๋™ํ•จ). ์ด๋ฆ„์€ ์ธ๋ฒคํ† ๋ฆฌ์—์„œ ๊ณ ์œ ํ•˜๋ฏ€๋กœ ๋™์ผํ•œ ์ด๋ฆ„์„ N๋ฒˆ ์„ ์–ธํ–ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ํ•˜๋‚˜์˜ ํ˜ธ์ŠคํŠธ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ 1๊ฐœ์˜ ํ˜ธ์ŠคํŠธ์— ๋Œ€ํ•ด์„œ๋งŒ ๋ฃจํ”„๋ฅผ ๋Œ๊ธฐ ๋•Œ๋ฌธ์— ์ปจํ…Œ์ด๋„ˆ์˜ ์†์ž„์ˆ˜ ์ด๋ฆ„์— ๋‘ ๋ฒˆ์งธ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์–ด๋–ค ๊ฒฝ์šฐ๋“  ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ›„์† ์กฐ์น˜๋ฅผ ์ทจํ•˜๋ ค๋ฉด ์ด ํ‹ฐ์ผ“์˜ ์ฃผ์ œ์—์„œ ์•ฝ๊ฐ„ ๋ฒ—์–ด๋‚œ ML ๋˜๋Š” IRC๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.

@bcoca 20๊ฐœ์˜ ํ˜ธ์ŠคํŠธ๋ฅผ ์„ ์–ธํ–ˆ๋Š”๋ฐ ์–ด๋–ป๊ฒŒ ํ•˜๋‚˜์˜ ํ˜ธ์ŠคํŠธ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‚˜์š”?

[containers]
container[000:020]

container001 , container002 ๋“ฑ์— ์—ฐ๊ฒฐํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์€ ๊ณ ์œ ํ•œ ์ด๋ฆ„์„ ๊ฐ€์งˆ ๋•Œ ์ž‘๋™ํ•˜์ง€๋งŒ ๋‚˜์—๊ฒŒ ๋ช…ํ™•ํ•˜์ง€ ์•Š์€ ๊ฒƒ์€ ๋‚ด๊ฐ€ ์—ฌ์ „ํžˆ ํ•˜๋‚˜์˜ ํ˜ธ์ŠคํŠธ(20 ๋Œ€์‹ )๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๊ณ  ๋งํ•˜๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค.
hosts:containers ๋Š” ๋‚˜์—๊ฒŒ ํ•˜๋‚˜๊ฐ€ ์•„๋‹ˆ๋ผ 20๋ช…์˜ ํ˜ธ์ŠคํŠธ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ด ์†”๋ฃจ์…˜์—์„œ ๋ฌด์—‡์„ ๋ฌด์‹œํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

@bitliner ๋Š” ๋‹ค์Œ์„ ์œ ๋ฐœํ•ฉ๋‹ˆ๋‹ค.

[containers]
192.168.1.100
192.168.1.100
192.168.1.100
192.168.1.100

4๊ฐœ์˜ ํ˜ธ์ŠคํŠธ๊ฐ€ ์•„๋‹ˆ๋ผ 1๊ฐœ์˜ ํ˜ธ์ŠคํŠธ์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ ์ด ์‹œ์ ์—์„œ ์ด๊ฒƒ์€ ์ฃผ์ œ์—์„œ ๋ฒ—์–ด๋‚œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ๋„์›€์„ ๊ณ„์† ๋ฐ›๊ณ  ์‹ถ๋‹ค๋ฉด IRC ๋˜๋Š” ML๋กœ ์ด๋™ํ•˜์‹ญ์‹œ์˜ค.

๋‚˜๋Š” ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๊ฒฐํ–ˆ๋‹ค

[containers]
ip[000:020] ansible_host=192.168.1.100

๊ทธ๋ฆฌ๊ณ 

- name: "Start containers"
  docker_container:
    name: "my-container-{{ inventory_hostname }}"

์งˆ๋ฌธ: fork ๋ฌธ์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•œ ์ด๋ฏธ์ง•, ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ ๋ฐ ๋น„๋™๊ธฐํ™” ์ˆ˜์ค€์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด run_loop ๋ฉ”์„œ๋“œ๋ฅผ ๋‹ค์‹œ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๊ตฌ์„ฑ๋ฉ๋‹ˆ๊นŒ?

๊ทธ๋Ÿฐ ๋‹ค์Œ '์žฌ๋ฏธ'๋˜๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค ...:

  • ๋ฃจํ”„ ํฌํฌ๋Š” ์ „์—ญ --forks ์— ๋Œ€ํ•ด ๊ณ„์‚ฐํ•ฉ๋‹ˆ๊นŒ?
  • ํ•ญ๋ชฉ์ด ์ด์ „ ํ•ญ๋ชฉ(์ž‘์—… ์‹คํ–‰๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์กฐ๊ฑด๋ฌธ ๋“ฑ)์— ์˜์กดํ•  ๋•Œ ๋ฃจํ”„๋กœ ๋ฌด์—‡์„ ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?
  • ์—ฌ๋Ÿฌ ํฌํฌ๊ฐ€ ๋™์ผํ•œ ํ˜ธ์ŠคํŠธ์—์„œ ์‹คํ–‰๋  ๋•Œ ๋™์‹œ์„ฑ ๋ฌธ์ œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์ฆ‰, ๋™์ผํ•œ ํŒŒ์ผ์„ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.
  • ์šฐ๋ฆฌ๋Š” ์ฒญ์†Œ๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๊นŒ? ์ง€๊ธˆ์€ tmp dir์„ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ฐ ์‹คํ–‰์€ ์ž๋™์œผ๋กœ ์ •๋ฆฌ๋˜๋ฏ€๋กœ ์ด์ œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์•Œ๊ณ  ์žˆ๋Š” ๋ช‡ ๊ฐ€์ง€ ๋‹ค๋ฅธ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๊ทธ๊ฒƒ์„ ๊ตฌํ˜„ํ•˜๋ ค๊ณ  ํ•  ๋•Œ๊นŒ์ง€ ๋‚ด๊ฐ€ ์•Œ์ง€ ๋ชปํ•  ๋งŽ์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ช‡ ๊ฐ€์ง€์— ๋Œ€ํ•œ ์†”๋ฃจ์…˜์ด ์žˆ์ง€๋งŒ ๊ฝค ๋นจ๋ฆฌ ์†์—์„œ ๋ฒ—์–ด๋‚˜๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

@bcoca ๋ฃจํ”„ ๋ถ„๊ธฐ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ํ™œ์„ฑํ™”๋˜์–ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์ด 1๋กœ ์„ค์ •๋œ ๊ฒƒ์„ ๋ณด๊ณ  forks ๋˜๋Š” serial ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋„์ž…ํ•˜์ง€๋งŒ ๊ฒฝ๊ณ ๋ฅผ ํฌํ•จํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ผ๋ถ€ ๊ธฐ์กด ์ฝ”๋“œ๊ฐ€ ์†์ƒ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์ด ๊ธฐ๋Šฅ์„ ๋งค์šฐ ๊ธฐ๋Œ€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค(ํŠนํžˆ delegate_to ๊ฐ€ ํ•„์š”ํ•œ ์ž‘์—…์˜ ๊ฒฝ์šฐ).

ํฌํฌ์˜ ๊ฒฝ์šฐ +1(๊ธฐ๋ณธ์ ์œผ๋กœ false)

+1 ํฌํฌ

+1 ํฌํฌ

+1 ํฌํฌ

+1 ํฌํฌ

+1 ํฌํฌ

ํฌํฌ์˜ ๊ฒฝ์šฐ์—๋„ +1์ด์ง€๋งŒ ๊ทธ ๋™์•ˆ ์ผ๋ฐ˜์ ์œผ๋กœ ํฐ ์„ฑ๋Šฅ ํ–ฅ์ƒ๊ณผ with_items ๋ฃจํ”„๋ฅผ ์ œ๊ณตํ•˜๋Š” ์ƒˆ๋กœ์šด Ansible ์ „๋žต ํ”Œ๋Ÿฌ๊ทธ์ธ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ์„ฑ๋Šฅ์ƒ์˜ ์ด์œ ๋กœ ํฌํฌ๋ฅผ ์›ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ๋Š” ๋‹ค์Œ์„ ์‚ดํŽด๋ณผ ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

https://github.com/dw/mitogen
https://mitogen.readthedocs.io/en/latest/ansible.html

์ด๊ฒƒ์ด with_items ๋ฃจํ”„๋ฅผ ์ •ํ™•ํžˆ ์–ด๋–ป๊ฒŒ ๊ฐœ์„ ํ• ์ง€ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด ํ”Œ๋Ÿฌ๊ทธ์ธ
ssh๋ฅผ ์—ฐ๊ฒฐ ๋ฐฉ๋ฒ•์œผ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐœ์ƒํ•˜๋Š” ์„ฑ๋Šฅ ๋ฌธ์ œ๋ฅผ ๊ฐœ์„ ํ•ฉ๋‹ˆ๋‹ค.
ํŠนํžˆ ์žฅ๊ฑฐ๋ฆฌ ๋ฐ ์ž ์žฌ ๋„คํŠธ์›Œํฌ์—์„œ ๋งŽ์€ ์ˆ˜
์„œ๋ฒ„์˜.

์ด๊ฒƒ์€ ์‹คํ–‰์ด ํ•„์š”ํ•œ AWS ๋˜๋Š” Azure ํด๋ผ์šฐ๋“œ ๊ธฐ๋Šฅ์—๋Š” ๋„์›€์ด ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๊ฐ€๋Šฅํ•œ ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ๋ฐœ์ƒํ•˜๊ณ  ํ•ญ๋ชฉ ์ง‘ํ•ฉ์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
ํ•ด๋‹น ํด๋ผ์šฐ๋“œ ์‹œ์Šคํ…œ์€ ํ˜ธ์ŠคํŠธ์— ์ „ํ˜€ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
with_items๊ฐ€ ๋Š๋ฆฐ ์ฃผ์š” ๋ฌธ์ œ. ๊ทธ๊ฒƒ์€ ํฐ ์„ธํŠธ์™€ ๊ด€๋ จ์ด ์—†์Šต๋‹ˆ๋‹ค
์‹œ์Šคํ…œ ๋˜๋Š” ๋Œ€๊ธฐ ์‹œ๊ฐ„ ๋˜๋Š” ssh์™€ ๊ด€๋ จ๋œ ๋ชจ๋“  ๊ฒƒ. ๊ทธ๊ฒƒ์€ ๋‹จ์ˆœํžˆ ์‚ฌ์‹ค์ด๋‹ค
์ง๋ ฌ๋กœ with_items ๋ฃจํ”„์—์„œ ํด๋ผ์šฐ๋“œ ๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ•˜๊ณ  ์•„๋ฌด ๊ฒƒ๋„ ์‹คํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
ํด๋ผ์šฐ๋“œ ๊ณต๊ธ‰์ž๊ฐ€ ์†๋„๋ฅผ ๊ฐœ์„ ํ•˜๊ฑฐ๋‚˜
์ด๋Ÿฌํ•œ ํด๋ผ์šฐ๋“œ ๊ธฐ๋Šฅ์˜ ๋ณ‘๋ ฌ ์‹คํ–‰์€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ๊ธฐ์‚ฌ์—์„œ with_items์— ๋Œ€ํ•ด ์ „ํ˜€ ์–ธ๊ธ‰ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋ฐฉ๋ฒ•์„ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
์ด๊ฒƒ์€ ์•„์ฃผ ์ž‘์€ ๋ถ€๋ถ„์—๋„ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ข€ ๋” ์„ค๋ช…ํ•ด์ฃผ์‹ค ์ˆ˜ ์žˆ๋‚˜์š”
์ด๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ๋„์›€์ด ๋ ๊นŒ์š”? ๋‚ด๊ฐ€ ๋ˆ„๋ฝ๋œ ๊ฒฝ์šฐ ๋‚ด๊ฐ€ ๋ฌด์—‡์„ ๋†“์น˜๊ณ  ์žˆ๋Š”์ง€ ์•Œ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค
์—ฌ๊ธฐ ๋ญ”๊ฐ€.

2018๋…„ 3์›” 10์ผ ํ† ์š”์ผ 21:58 NielsH [email protected] ์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

ํฌํฌ์—๋„ +1์ด ์žˆ์ง€๋งŒ ๊ทธ ๋™์•ˆ ์ƒˆ๋กœ์šด Ansible๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
์ผ๋ฐ˜์ ์œผ๋กœ ํฐ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์ œ๊ณตํ•˜๋Š” ์ „๋žต ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฐ
with_items ๋ฃจํ”„์˜ ๊ฒฝ์šฐ. ์•„๋งˆ๋„ ์„ฑ๋Šฅ์„ ์œ„ํ•ด ํฌํฌ๋ฅผ ์›ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด
์‚ดํŽด๋ณผ ๊ฐ€์น˜๊ฐ€ ์žˆ๋Š” ์ด์œ :

https://github.com/dw/mitogen
https://mitogen.readthedocs.io/en/latest/ansible.html

โ€”
๋‹น์‹ ์ด ๋Œ“๊ธ€์„ ๋‹ฌ์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/ansible/ansible/issues/12086#issuecomment-372070418 ,
๋˜๋Š” ์Šค๋ ˆ๋“œ ์Œ์†Œ๊ฑฐ
https://github.com/notifications/unsubscribe-auth/AJd59qWI9n_DNmUqpmZYiIOMZAyjJy3uks5tdEyQgaJpZM4Fx8zF
.

์‚ฌ์‹ค ๋ชจ๋“  ๊ฒฝ์šฐ์— ๋„์›€์ด ๋˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚ด๊ฐ€ with_items์—์„œ ํฌํฌ๋ฅผ ์ฐพ๋Š” ์ด์œ ๋Š” ๊ฐ ํ•ญ๋ชฉ์„ ๊ฐœ๋ณ„์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ์†๋„๊ฐ€ ๋Š๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค(ํŒŒ์ดํ”„๋ผ์ด๋‹์„ ์‚ฌ์šฉํ•˜๋”๋ผ๋„). ๋•Œ๋กœ๋Š” host_vars๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŽ์€ ์ˆ˜(์ˆ˜๋ฐฑ ๊ฐœ)์˜ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์ˆ˜๋ฐฑ ๊ฐœ์˜ ํŒŒ์ผ์„ ํ…œํ”Œ๋ฆฟํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ €๋Š” ์ฃผ๋กœ file ๋ฐ template ๋ชจ๋“ˆ์„ ๋ฐ˜๋ณตํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ํ•œ ๋ฒˆ with_items๋ฅผ ํ†ตํ•ด 100๊ฐœ์˜ ๊ฐœ๋ณ„ ํŒŒ์ผ์— 100๊ฐœ์˜ ํŒŒ์ผ์„ ํ…œํ”Œ๋ฆฟํ™”ํ•˜๋Š” ๊ฒƒ๊ณผ jinja ํ…œํ”Œ๋ฆฟ ์ž์ฒด์˜ ํ•ญ๋ชฉ์„ ๋ฐ˜๋ณตํ•˜๊ณ  ํ…œํ”Œ๋ฆฟ์„ ํ•˜๋‚˜์˜ ํฐ ํŒŒ์ผ์— ๋ณ‘ํ•ฉํ•˜๋Š” ๊ฒƒ์„ ํ…Œ์ŠคํŠธํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹จ์ผ ํŒŒ์ผ์˜ ๋ชจ๋“  ์ž‘์—…์€ 5์ดˆ๊ฐ€ ๊ฑธ๋ฆฌ์ง€๋งŒ 100๊ฐœ์˜ ๊ฐœ๋ณ„ ๊ตฌ์„ฑ ํŒŒ์ผ์„ ๋งŒ๋“œ๋Š” ๋ฐ๋Š” 30๋ถ„์ด ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค.

์ œ๊ฐ€ ์–ธ๊ธ‰ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ์ €์—๊ฒŒ ํฐ ๊ฐœ์„ ์„ ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” ์—ฌ๊ธฐ์„œ ์–ธ๊ธ‰ํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ฃจํ”„๋Š” ํ•ญ๋ชฉ๋‹น ๋™์ผํ•œ ์ž‘์—…์„ ํ•œ ๋ฒˆ๋งŒ ์‹คํ–‰ํ•˜๋ฏ€๋กœ ์ž‘์—… ์‹คํ–‰ ์†๋„๊ฐ€ ํ–ฅ์ƒ๋˜๋ฉด ๋ฃจํ”„๊ฐ€ ๋” ๋นจ๋ผ์ง‘๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ '์›๊ฒฉ ์ž‘์—…'์—๋งŒ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋ฏ€๋กœ ๋กœ์ปฌ์—๋Š” ์ด๋“์ด ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋™์˜. ๋กœ์ปฌ ์ž‘์—…๋งŒ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ, ์‹ญ์—ฌ ๊ฐœ ์ •๋„์˜ ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ sible์€ ์ง๋ ฌ๋กœ ๋นŒ๋“œํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹œ๊ฐ„์ด ๋งŽ์ด ๊ฑธ๋ฆฌ๊ณ  ๋ฉ€ํ‹ฐ์ฝ”์–ด CPU ํ™œ์šฉ๋„๊ฐ€ ๋‚ฎ์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ๋ณ‘๋ ฌ๋กœ ๋งŒ๋“ค๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

@gjcarneiro ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋ฐ์ดํ„ฐ๋กœ ์ •์˜ํ•˜์ง€ ์•Š๊ณ  ํ˜ธ์ŠคํŠธ๋กœ ์ •์˜ํ•˜๊ณ  ๋Œ€์ƒ์œผ๋กœ ์ง€์ •ํ•œ ๋‹ค์Œ delegate_to: localhost ๋กœ ์ž‘์—…์„ ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

ํ•˜, ๊น”๋”ํ•œ ํŠธ๋ฆญ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. :) ํ•˜์ง€๋งŒ ์ž‘๋™ํ•˜๋”๋ผ๋„(ํ…Œ์ŠคํŠธํ•˜์ง€ ์•Š์•˜์ง€๋งŒ) ์ž‘์—…์„ ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰ํ•˜๋Š” ๋‹ค์†Œ ๋ณต์žกํ•œ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ ๋‹ค์‹œ, ๋‚˜๋Š” ์˜๋„ ํ•œ ๊ฒƒ๊ณผ ์™„์ „ํžˆ ๋‹ค๋ฅธ ๋ชฉ์ ์œผ๋กœ ๊ฐ€๋Šฅํ•œ ๊ฒƒ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์–ด๋–ค๋ฉด์—์„œ๋Š” ๋‚ด ์ž˜๋ชป์ž…๋‹ˆ๋‹ค :(

์‹ค์ œ๋กœ ๋ณต์žกํ•˜์ง€๋Š” ์•Š์ง€๋งŒ Ansible์ด ๋ณ€์ˆ˜๊ฐ€ ์•„๋‹Œ ํ˜ธ์ŠคํŠธ๋ณ„๋กœ ๋ณ‘๋ ฌํ™”๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

์˜ˆ, ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. Ansible์˜ ์ž˜๋ชป์ด ์•„๋‹™๋‹ˆ๋‹ค. ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Ansible์€ ๋Œ€๋ถ€๋ถ„์˜ ๋ฉด์—์„œ ๋นŒ๋“œ ์‹œ์Šคํ…œ์œผ๋กœ ํ›Œ๋ฅญํ•˜๊ธฐ ๋•Œ๋ฌธ์— (์˜ˆ๋ฅผ ๋“ค์–ด make ๋Œ€์‹ ) ๋นŒ๋“œ ์‹œ์Šคํ…œ์œผ๋กœ Ansible์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚ด ์ƒ๊ฐ์—๋Š” ๋นŒ๋“œ ์‹œ์Šคํ…œ์œผ๋กœ ์ƒ๊ฐํ•˜๋Š” "ํ˜ธ์ŠคํŠธ"๊ฐ€ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. "make"์™€ ๊ฐ™์€ ๋นŒ๋“œ ์‹œ์Šคํ…œ์€ "ํ˜ธ์ŠคํŠธ"์— ๋Œ€ํ•ด ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š๊ณ  ํŒŒ์ผ๊ณผ ์ž‘์—…์—๋งŒ ๊ด€์‹ฌ์„ ๊ฐ–์Šต๋‹ˆ๋‹ค. Ansible์„ ๋นŒ๋“œ ์‹œ์Šคํ…œ์œผ๋กœ ์‚ฌ์šฉํ•˜๋„๋ก ๊ฐ•์ œํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์ด๋กœ ์ธํ•ด ์•ฝ๊ฐ„์˜ ์ธ์ง€ ๋ถ€์กฐํ™”๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒŒ ์ „๋ถ€์ž…๋‹ˆ๋‹ค.

Ansible์€ ํ˜ธ์ŠคํŠธ์™€ ์ž‘์—…์—๋งŒ ๊ด€์‹ฌ์„ ๋‘๊ณ  ์žˆ์œผ๋ฉฐ, 'ํ˜ธ์ŠคํŠธ'๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ  ์žˆ๋Š” ์ด๋ฏธ์ง€๋ฅผ ๊ณ ๋ คํ•˜๋ฉด ๊ฐ‘์ž๊ธฐ ๋‘ ํŒจ๋Ÿฌ๋‹ค์ž„์— ๋ชจ๋‘ ๋งž์Šต๋‹ˆ๋‹ค.

Ansible์€ ๋‹ค๋ฅธ ๋งŽ์€ ๊ฒƒ๋“ค์„ ์œ„ํ•œ ๊ตฌ์„ฑ ๊ด€๋ฆฌ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.
๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—„์ฒญ๋‚œ ์–‘์˜ ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค๋ฅผ ์œ„ํ•œ ์‹ค์ œ ๋ฐ ๊ฐ€์ƒ ์žฅ์น˜
elastic beanstalk, ๋žŒ๋‹ค ๋ฐ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ๊ฐ™์€ ์›น ์„œ๋น„์Šค
IAM ๋ณด์•ˆ ๊ตฌ์„ฑ ์š”์†Œ์ฒ˜๋Ÿผ ์ ์šฉ๋˜๋Š” ๊ตฌ์„ฑ ์š”์†Œ์ธ ๋ฐ˜๋ฉด Ansible์€
์—ฌ์ „ํžˆ ๋Œ€๋ถ€๋ถ„์˜ VM/ํ˜ธ์ŠคํŠธ๋ฅผ ๊ธฐ๋ณธ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ ํ˜ธ์ŠคํŠธ์— ๋Šฅ์ˆ™ํ•ฉ๋‹ˆ๋‹ค.
2000๋…„๋Œ€ ์ดˆ๋ฐ˜ IT. ์—ฌ๊ธฐ์—์„œ ๋ˆ„๊ตฐ๊ฐ€๋ฅผ ํ™”๋‚˜๊ฒŒํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ๋•Œ๋•Œ๋กœ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.
VM ๋˜๋Š” ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์ด์œ ๋Š” ๋ชจ๋‘
๋ ˆ๊ฑฐ์‹œ ์ด์œ . ์‹ค์ œ๋กœ ์ ์  ๋” ๋งŽ์€ ํ˜ธ์ŠคํŠธ๊ฐ€
์ž๋™ํ™”ํ•˜๋Š” ๊ฒƒ. IMO ๋งŒ์•ฝ ์šฐ๋ฆฌ๊ฐ€ with_items์™€ ํ‰ํ–‰ํ•˜์ง€ ์•Š๋‹ค๋ฉด ์šฐ๋ฆฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋ชจ๋‘ ํ•จ๊ป˜ ์Šคํฌ๋žฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์—์„œ ๊ธ์ •์ ์œผ๋กœ ์ƒ๊ฐํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค.
์ผ๋ถ€ ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค์˜ ๊ฒฝ์šฐ delegate_to 200+์—์„œ ์‹คํ–‰์„ ์‹œ๋„ํ•œ ์ ์ด ์—†์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
์ด๋Ÿฐ ์‹์œผ๋กœ ํ•„์š”ํ•œ ํด๋ผ์šฐ๋“œ ๊ตฌ์„ฑ ์š”์†Œ๋Š” ๋ชฉ๋ก์„ ์ฟผ๋ฆฌํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
๊ฐ€๋Šฅํ•œ ํ˜ธ์ŠคํŠธ ํ˜•์‹์˜ ํ˜ธ์ŠคํŠธ ํŒŒ์ผ์— ๋คํ”„ ํ•œ ๋‹ค์Œ ์‹œ๋„ํ•˜์‹ญ์‹œ์˜ค.
delegate_to: localhost ์—ฌ๊ธฐ์— ๊ฒฐ๊ณผ๋ฅผ ํ”ผ๋“œ๋ฐฑํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์—์„œ ์ž‘๋™ํ•˜๋Š” ๊ฒฝ์šฐ
์ ์–ด๋„ ์šฐ๋ฆฌ๋Š” ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๋ฌธ์„œ ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ with_item ๋ฃจํ”„ ์ง๋ ฌ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์— ๋Œ€ํ•œ ๋งํฌ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ํด๋ผ์šฐ๋“œ ๋ชจ๋“ˆ ์„น์…˜ ๋ฐ docker ์„น์…˜์— ์žˆ์Šต๋‹ˆ๋‹ค.

2018๋…„ 3์›” 12์ผ ์›”์š”์ผ 18:49์— Brian Coca [email protected] ์ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

Ansible์€ Hosts์™€ Tasks์—๋งŒ ๊ด€์‹ฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
'ํ˜ธ์ŠคํŠธ'๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ  ๊ฐ‘์ž๊ธฐ ๋‘ ํŒจ๋Ÿฌ๋‹ค์ž„์— ๋ชจ๋‘ ๋งž์Šต๋‹ˆ๋‹ค.

โ€”
๋‹น์‹ ์ด ๋Œ“๊ธ€์„ ๋‹ฌ์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/ansible/ansible/issues/12086#issuecomment-372422169 ,
๋˜๋Š” ์Šค๋ ˆ๋“œ ์Œ์†Œ๊ฑฐ
https://github.com/notifications/unsubscribe-auth/AJd59nhLIM3s3BL_xM_WwbJS6-uROzjSks5tdsNCgaJpZM4Fx8zF
.

@gjcarneiro ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋ฐ์ดํ„ฐ๋กœ ์ •์˜ํ•˜์ง€ ์•Š๊ณ  ํ˜ธ์ŠคํŠธ๋กœ ์ •์˜ํ•˜๊ณ  ๋Œ€์ƒ์œผ๋กœ ์ง€์ •ํ•œ ๋‹ค์Œ delegate_to: localhost๋กœ ์ž‘์—…์„ ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋งค์šฐ ์ข‹์€ ์ ‘๊ทผ ๋ฐฉ์‹์ด์ง€๋งŒ serial=1 ์‹œ๋ฎฌ๋ ˆ์ด์…˜(#12170)์„ ์‚ฌ์šฉํ•œ ๋กค๋ง ์žฌ์‹œ์ž‘์— ๋Œ€ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• ๋‚ด์—์„œ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ณ‘๋ ฌํ™” ์˜ต์…˜์€ ํ›จ์”ฌ ๋” ๋งŽ์€ ์œ ์—ฐ์„ฑ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

์˜์‹ฌ์˜ ์—ฌ์ง€๊ฐ€ ์—†์ง€๋งŒ ๊ทธ๊ฒƒ์€ ๋˜ํ•œ ๋ณต์žก์„ฑ์˜ ๊ฑฐ๋Œ€ํ•œ ๊ณ„์ธต์„ ์ถ”๊ฐ€ํ•˜๊ณ  ๋‹จ์ผ ํ˜ธ์ŠคํŠธ์—์„œ ๋™์‹œ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ํ•„์š”์„ฑ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. hosts:all + lineinfile + delegate_to: localhost

Hrrm ์ง€๊ธˆ๊นŒ์ง€ ๋‚˜๋Š” delegate_to: 127.0.0.1์— ๋Œ€ํ•œ ์ž‘์€ ํ…Œ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.
์‚ญ์ œ ์ž‘์—…์€ ๋Œ€๋Ÿ‰ ๊ทœ๋ชจ์˜ ๊ณ ํ†ต์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ํ”Œ๋ ˆ์ด๋ถ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ํ˜ธ์ŠคํŠธ: "{{ ๋ฐฐํฌ ๊ทธ๋ฃน }}"

    ์ž‘์—…:

    • ์ด๋ฆ„: VM ๋ฐ ๋ชจ๋“  ๊ด€๋ จ ๋ฆฌ์†Œ์Šค ์ œ๊ฑฐ
      azure_rm_virtualmachine:
      resource_group: "{{ host_vars[ํ•ญ๋ชฉ]['resource_group'] }}"
      ์ด๋ฆ„: "{{ ์ธ๋ฒคํ† ๋ฆฌ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„ }}"
      ์ƒํƒœ: ๋ถ€์žฌ

    ๋Œ€๋ฆฌ์ธ ๋Œ€์ƒ: 127.0.0.1


๋ถˆํ–‰ํžˆ๋„ ์—ฌ์ „ํžˆ ํ˜ธ์ŠคํŠธ์— ๋‚˜์—ด๋œ ์‹œ์Šคํ…œ์— ์—ฐ๊ฒฐ์„ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค.
azure ์ž‘์—… azure_rm_virtualmachine์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
๋‚˜๋Š” ์ด๊ฒƒ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํ•˜๊ณ  ์žˆ๋Š”๊ฐ€? ๋‚ด๊ฐ€ ๋ญ”๊ฐ€๋ฅผ ๋†“์น˜๊ณ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์ง€๋งŒ ์ด๊ฒƒ์„ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค.
์ด์ „์—๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ
์ด๊ฒƒ.

์ด๊ฒƒ์ด ์‹ค์ œ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ? ๋ฐ”๋ผ๊ฑด๋Œ€ ์ด๊ฒƒ์€ ๋‹จ์ง€ ๊ตฌ๋ฌธ ๋ฌธ์ œ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค.

2018๋…„ 3์›” 12์ผ ์›”์š”์ผ ์˜คํ›„ 7์‹œ 55๋ถ„, Isaac Egglestone < [email protected]

์ผ๋‹ค:

Ansible์€ ๋‹ค๋ฅธ ๋งŽ์€ ๊ฒƒ๋“ค์„ ์œ„ํ•œ ๊ตฌ์„ฑ ๊ด€๋ฆฌ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.
์—„์ฒญ๋‚œ ์–‘์˜ ํด๋ผ์šฐ๋“œ๋ฅผ ์œ„ํ•œ ์‹ค์ œ ๋ฐ ๊ฐ€์ƒ ๋„คํŠธ์›Œํฌ ์žฅ์น˜
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ๊ฐ™์€ ์„œ๋น„์Šค, elastic beanstalk, ๋žŒ๋‹ค์™€ ๊ฐ™์€ ์›น ์„œ๋น„์Šค
IAM ๋ณด์•ˆ ๊ตฌ์„ฑ ์š”์†Œ์™€ ๊ฐ™์ด ์—ฌ๊ธฐ์— ์ ์šฉ๋˜๋Š” ๋ชจ๋“  ๊ตฌ์„ฑ ์š”์†Œ์™€
Ansible์€ ์—ฌ์ „ํžˆ โ€‹โ€‹๋Œ€๋ถ€๋ถ„์˜ VM/ํ˜ธ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ ํ˜ธ์ŠคํŠธ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.
๊ธฐ๋ณธ์ ์œผ๋กœ 2000๋…„๋Œ€ ์ดˆ๋ฐ˜ IT. ์—ฌ๊ธฐ์—์„œ ๋ˆ„๊ตฐ๊ฐ€๋ฅผ ๋ถˆ์พŒํ•˜๊ฒŒํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
VM ๋˜๋Š” ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์ค‘์š”ํ•œ ์ด์œ ์ด์ง€๋งŒ ๋ชจ๋‘
๋ ˆ๊ฑฐ์‹œ ์ด์œ ์— ๋‹ค์‹œ ์ค„๊ธฐ. ์‹ค์ œ๋กœ ์ ์  ๋” ๋งŽ์€ ํ˜ธ์ŠคํŠธ๊ฐ€
์ž๋™ํ™”๋˜๋Š” ๊ฒƒ๋ณด๋‹ค ์ ์–ด์ง‘๋‹ˆ๋‹ค. IMO ์šฐ๋ฆฌ๊ฐ€ ํ‰ํ–‰์„ ์–ป์ง€ ๋ชปํ•œ๋‹ค๋ฉด
with_items ์šฐ๋ฆฌ๋Š” ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๊ฒƒ์„ ํ•จ๊ป˜ ํ๊ธฐํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์—์„œ ๊ธ์ •์ ์œผ๋กœ ์ƒ๊ฐํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค.
์ผ๋ถ€ ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค์˜ ๊ฒฝ์šฐ delegate_to 200+์—์„œ ์‹คํ–‰์„ ์‹œ๋„ํ•œ ์ ์ด ์—†์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
์ด๋Ÿฐ ์‹์œผ๋กœ ํ•„์š”ํ•œ ํด๋ผ์šฐ๋“œ ๊ตฌ์„ฑ ์š”์†Œ๋Š” ๋ชฉ๋ก์„ ์ฟผ๋ฆฌํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
๊ฐ€๋Šฅํ•œ ํ˜ธ์ŠคํŠธ ํ˜•์‹์˜ ํ˜ธ์ŠคํŠธ ํŒŒ์ผ์— ๋คํ”„ ํ•œ ๋‹ค์Œ ์‹œ๋„ํ•˜์‹ญ์‹œ์˜ค.
delegate_to: localhost ์—ฌ๊ธฐ์— ๊ฒฐ๊ณผ๋ฅผ ํ”ผ๋“œ๋ฐฑํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์—์„œ ์ž‘๋™ํ•˜๋Š” ๊ฒฝ์šฐ
์ ์–ด๋„ ์šฐ๋ฆฌ๋Š” ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๋ฌธ์„œ ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ with_item ๋ฃจํ”„ ์ง๋ ฌ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์— ๋Œ€ํ•œ ๋งํฌ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ํด๋ผ์šฐ๋“œ ๋ชจ๋“ˆ ์„น์…˜ ๋ฐ docker ์„น์…˜์— ์žˆ์Šต๋‹ˆ๋‹ค.

2018๋…„ 3์›” 12์ผ ์›”์š”์ผ 18:49์— Brian Coca [email protected] ์ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

Ansible์€ Hosts์™€ Tasks์—๋งŒ ๊ด€์‹ฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
'ํ˜ธ์ŠคํŠธ'๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ  ๊ฐ‘์ž๊ธฐ ๋‘ ํŒจ๋Ÿฌ๋‹ค์ž„์— ๋ชจ๋‘ ๋งž์Šต๋‹ˆ๋‹ค.

โ€”
๋‹น์‹ ์ด ๋Œ“๊ธ€์„ ๋‹ฌ์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/ansible/ansible/issues/12086#issuecomment-372422169 ,
๋˜๋Š” ์Šค๋ ˆ๋“œ ์Œ์†Œ๊ฑฐ
https://github.com/notifications/unsubscribe-auth/AJd59nhLIM3s3BL_xM_WwbJS6-uROzjSks5tdsNCgaJpZM4Fx8zF
.

์ข‹์Šต๋‹ˆ๋‹ค. ์‚ฌ์‹ค ์ˆ˜์ง‘์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๋ฉด ์ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์ง€๋งŒ
๋˜ ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” host_vars๊ฐ€ ๋” ์ด์ƒ azure ๋™์  ์ธ๋ฒคํ† ๋ฆฌ๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
ํ‘œ์ค€์—.

๋”ฐ๋ผ์„œ resource_group: "{{ host_vars[item]['resource_group'] }}"๋Š”
์œ„์—์„œ ์ž‘๋™ํ•˜๊ณ  ๋ฆฌ์†Œ์Šค ๊ทธ๋ฃน ์ด๋ฆ„์œผ๋กœ ํ•˜๋“œ ์ฝ”๋”ฉ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

2018๋…„ 3์›” 18์ผ ์ผ์š”์ผ ์˜ค์ „ 11:14, Isaac Egglestone <
[email protected]> ์“ด:

Hrrm ์ง€๊ธˆ๊นŒ์ง€ ๋‚˜๋Š” delegate_to: 127.0.0.1์— ๋Œ€ํ•œ ์ž‘์€ ํ…Œ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.
์‚ญ์ œ ์ž‘์—…์€ ๋Œ€๋Ÿ‰ ๊ทœ๋ชจ์˜ ๊ณ ํ†ต์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ํ”Œ๋ ˆ์ด๋ถ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ํ˜ธ์ŠคํŠธ: "{{ ๋ฐฐํฌ ๊ทธ๋ฃน }}"

    ์ž‘์—…:

    • ์ด๋ฆ„: VM ๋ฐ ๋ชจ๋“  ๊ด€๋ จ ๋ฆฌ์†Œ์Šค ์ œ๊ฑฐ
      azure_rm_virtualmachine:
      resource_group: "{{ host_vars[ํ•ญ๋ชฉ]['resource_group'] }}"
      ์ด๋ฆ„: "{{ ์ธ๋ฒคํ† ๋ฆฌ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„ }}"
      ์ƒํƒœ: ๋ถ€์žฌ

    ๋Œ€๋ฆฌ์ธ ๋Œ€์ƒ: 127.0.0.1


๋ถˆํ–‰ํžˆ๋„ ์—ฌ์ „ํžˆ ํ˜ธ์ŠคํŠธ์— ๋‚˜์—ด๋œ ์‹œ์Šคํ…œ์— ์—ฐ๊ฒฐ์„ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค.
azure ์ž‘์—… azure_rm_virtualmachine์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
๋‚˜๋Š” ์ด๊ฒƒ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํ•˜๊ณ  ์žˆ๋Š”๊ฐ€? ๋‚ด๊ฐ€ ๋ญ”๊ฐ€๋ฅผ ๋†“์น˜๊ณ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์ง€๋งŒ ์ด๊ฒƒ์„ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค.
์ด์ „์—๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ
์ด๊ฒƒ.

์ด๊ฒƒ์ด ์‹ค์ œ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ? ๋ฐ”๋ผ๊ฑด๋Œ€ ์ด๊ฒƒ์€ ๋‹จ์ง€ ๊ตฌ๋ฌธ ๋ฌธ์ œ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค.

2018๋…„ 3์›” 12์ผ ์›”์š”์ผ ์˜คํ›„ 7์‹œ 55๋ถ„, Isaac Egglestone <
[email protected]> ์“ด:

Ansible์€ ๋‹ค๋ฅธ ๋งŽ์€ ๊ฒƒ๋“ค์„ ์œ„ํ•œ ๊ตฌ์„ฑ ๊ด€๋ฆฌ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.
์—„์ฒญ๋‚œ ์–‘์˜ ํด๋ผ์šฐ๋“œ๋ฅผ ์œ„ํ•œ ์‹ค์ œ ๋ฐ ๊ฐ€์ƒ ๋„คํŠธ์›Œํฌ ์žฅ์น˜
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ๊ฐ™์€ ์„œ๋น„์Šค, elastic beanstalk, ๋žŒ๋‹ค์™€ ๊ฐ™์€ ์›น ์„œ๋น„์Šค
IAM ๋ณด์•ˆ ๊ตฌ์„ฑ ์š”์†Œ์™€ ๊ฐ™์ด ์—ฌ๊ธฐ์— ์ ์šฉ๋˜๋Š” ๋ชจ๋“  ๊ตฌ์„ฑ ์š”์†Œ์™€
Ansible์€ ์—ฌ์ „ํžˆ โ€‹โ€‹๋Œ€๋ถ€๋ถ„์˜ VM/ํ˜ธ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ ํ˜ธ์ŠคํŠธ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.
๊ธฐ๋ณธ์ ์œผ๋กœ 2000๋…„๋Œ€ ์ดˆ๋ฐ˜ IT. ์—ฌ๊ธฐ์—์„œ ๋ˆ„๊ตฐ๊ฐ€๋ฅผ ๋ถˆ์พŒํ•˜๊ฒŒํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
VM ๋˜๋Š” ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์ค‘์š”ํ•œ ์ด์œ ์ด์ง€๋งŒ ๋ชจ๋‘
๋ ˆ๊ฑฐ์‹œ ์ด์œ ์— ๋‹ค์‹œ ์ค„๊ธฐ. ์‹ค์ œ๋กœ ์ ์  ๋” ๋งŽ์€ ํ˜ธ์ŠคํŠธ๊ฐ€
์ž๋™ํ™”๋˜๋Š” ๊ฒƒ๋ณด๋‹ค ์ ์–ด์ง‘๋‹ˆ๋‹ค. IMO ์šฐ๋ฆฌ๊ฐ€ ํ‰ํ–‰์„ ์–ป์ง€ ๋ชปํ•œ๋‹ค๋ฉด
with_items ์šฐ๋ฆฌ๋Š” ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๊ฒƒ์„ ํ•จ๊ป˜ ํ๊ธฐํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์—์„œ ๊ธ์ •์ ์œผ๋กœ ์ƒ๊ฐํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค.
์ผ๋ถ€ ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค์˜ ๊ฒฝ์šฐ delegate_to 200+์—์„œ ์‹คํ–‰์„ ์‹œ๋„ํ•œ ์ ์ด ์—†์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
์ด๋Ÿฐ ์‹์œผ๋กœ ํ•„์š”ํ•œ ํด๋ผ์šฐ๋“œ ๊ตฌ์„ฑ ์š”์†Œ๋Š” ๋ชฉ๋ก์„ ์ฟผ๋ฆฌํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
๊ฐ€๋Šฅํ•œ ํ˜ธ์ŠคํŠธ ํ˜•์‹์˜ ํ˜ธ์ŠคํŠธ ํŒŒ์ผ์— ๋คํ”„ ํ•œ ๋‹ค์Œ ์‹œ๋„ํ•˜์‹ญ์‹œ์˜ค.
delegate_to: localhost ์—ฌ๊ธฐ์— ๊ฒฐ๊ณผ๋ฅผ ํ”ผ๋“œ๋ฐฑํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์—์„œ ์ž‘๋™ํ•˜๋Š” ๊ฒฝ์šฐ
์ ์–ด๋„ ์šฐ๋ฆฌ๋Š” ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๋ฌธ์„œ ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ with_item ๋ฃจํ”„ ์ง๋ ฌ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์— ๋Œ€ํ•œ ๋งํฌ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ํด๋ผ์šฐ๋“œ ๋ชจ๋“ˆ ์„น์…˜ ๋ฐ docker ์„น์…˜์— ์žˆ์Šต๋‹ˆ๋‹ค.

2018๋…„ 3์›” 12์ผ ์›”์š”์ผ, 18:49, Brian Coca [email protected]
์ผ๋‹ค:

Ansible์€ Hosts์™€ Tasks์—๋งŒ ๊ด€์‹ฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
'ํ˜ธ์ŠคํŠธ'๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ  ๊ฐ‘์ž๊ธฐ ๋‘ ํŒจ๋Ÿฌ๋‹ค์ž„์— ๋ชจ๋‘ ๋งž์Šต๋‹ˆ๋‹ค.

โ€”
๋‹น์‹ ์ด ๋Œ“๊ธ€์„ ๋‹ฌ์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/ansible/ansible/issues/12086#issuecomment-372422169 ,
๋˜๋Š” ์Šค๋ ˆ๋“œ ์Œ์†Œ๊ฑฐ
https://github.com/notifications/unsubscribe-auth/AJd59nhLIM3s3BL_xM_WwbJS6-uROzjSks5tdsNCgaJpZM4Fx8zF
.

์ข‹์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ๊ฐ€์ง€๋ฅผ ์‹œ๋„ํ•˜๊ธฐ ์œ„ํ•ด ์•„๋ž˜ ํ”Œ๋ ˆ์ด๋ถ์„ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

1st ๋‚˜๋Š” delegate_facts: True ์„ค์ •์„ ์‹œ๋„ํ–ˆ์ง€๋งŒ ์ด๊ฒƒ์ด ๋„์›€์ด ๋˜์—ˆ์ง€๋งŒ ๋ฌผ๋ก 
๋ฌธ์„œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœํ•˜๋”๋ผ๋„ ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์‹ค์ œ๋กœ ์ž‘๋™ ํ•  ๊ฒƒ์ด๋ผ๊ณ  ๊ธฐ๋Œ€ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
2nd gather_facts: no๋ฅผ ์„ค์ •ํ•˜๊ณ  ์„ค์ •์„ ์‹คํ–‰ํ•˜์—ฌ ์‚ฌ์‹ค์„ ์ค„์ด๋ ค๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค.
์ „ํ˜€ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š๊ธฐ๋ฅผ ๋ฐ”๋ผ๋ฉด์„œ ์•„๋ฌด๊ฒƒ๋„ ๋ชจ์œผ์ง€ ๋งŒ
๋ฌผ๋ก  ์˜ˆ์ƒ๋Œ€๋กœ ์—ฌ์ „ํžˆ ๊ธฐ๊ณ„์— ์—ฐ๊ฒฐ์„ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค.
3๋ฒˆ์งธ ์—ฐ๊ฒฐ ์„ค์ • ์‹œ๋„: localhost ํ•˜์ง€๋งŒ ์ด์ƒํ•˜๊ฒŒ๋„ ์—ฌ์ „ํžˆ
๊ธฐ๊ณ„๊ฐ€ ์•Œ๊ณ  ์žˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์‚ฌ์‹ค์„ ์ˆ˜์ง‘ํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ๊ณ„์— ์›๊ฒฉ์œผ๋กœ ์—ฐ๊ฒฐ
๋กœ์ปฌ์—์„œ ํ”Œ๋ ˆ์ด๋ฅผ ์‹คํ–‰ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์•ฝ๊ฐ„ ์„ฑ๊ฐ€์‹œ์ง€๋งŒ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋…ผ๋ฆฌ๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค.
์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๊ณ  ๋ฌธ์ œ์˜ ํ˜ธ์ŠคํŠธ์— ๋Œ€ํ•œ ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ์–ด๋–ป๊ฒŒ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?
์ด๊ฒƒ..

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

์ง€๊ธˆ๊นŒ์ง€ with_items ๋ณ‘๋ ฌ ๋Œ€์‹  ์†”๋ฃจ์…˜์œผ๋กœ ์ด๊ฒƒ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์†”๋ฃจ์…˜์€ ์ž ์žฌ๋ ฅ์ด ์žˆ์ง€๋งŒ ๋ฌธ์ œ์˜ ๊ธฐ๊ณ„๋Š” ์—ฌ์ „ํžˆ
azure_rm.py์—์„œ ์–ด๋–ค ์ข…๋ฅ˜์˜ ์‚ฌ์‹ค์ด๋ผ๋„ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ตœ์†Œํ•œ ํ•˜๋‚˜์˜ ์ฃผ์˜ ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์•Œ์ง€ ์•Š๋Š” ํ•œ
ํ‘œ์ค€์„ ํ†ตํ•ด ์ „๋‹ฌ๋˜๋Š” azure์—์„œ host_vars์— ์•ก์„ธ์Šคํ•˜๋Š” ๋ฐฉ๋ฒ•
์ˆ˜์ง‘ํ•  ๋•Œ: ์•„๋‹ˆ์š”

์‚ฌ์‹ค ๋‚˜๋Š” ์ด๊ฒƒ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  ๊ฒƒ์„ ์‹คํ–‰ํ•  ๋•Œ ๋ฌผ๋ก  ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
with_items ๋ชฉ๋ก, ๊ทธ๋Ÿฌ๋‚˜ ๋‚ด๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ ํ•ด๋‹น ๋ฌธ์ œ๋ฅผ ํ”ผํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค.
ํ˜ธ์ŠคํŠธ๋ฅผ ๋‹ค์‹œ ์‚ฌ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ azure_rm.py๋ฅผ
๋ช…๋ น์ค„์—์„œ json ํŒŒ์ผ์„ ๊ฐ€์ ธ์˜จ ๋‹ค์Œ ๋ณ€์ˆ˜์— ๋กœ๋“œํ•˜์—ฌ ๊ฐ€์ ธ์˜ค๊ธฐ
๋‹ค์‹œ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ˆ˜๋ฐฑ ๋˜๋Š” ์ˆ˜์ฒœ์„ ์ˆ˜์ •ํ•˜๋Š” ์ตœ์ข… ๋ชฉํ‘œ๊ฐ€ ์—ฌ๊ธฐ์—์„œ ๊ธฐ๋Œ€๋œ๋‹ค๋ฉด
๋ณ‘๋ ฌ๋กœ ์„œ๋ฒ„๋ฆฌ์Šค ๊ตฌ์„ฑ ์š”์†Œ์˜
azure_rm_functionapp_facts์™€ ๊ฐ™์€ ๊ฒƒ์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.
http://docs.ansible.com/ansible/latest/azure_rm_functionapp_facts_module.html
์—๊ฒŒ
๊ทธ๋“ค์— ๋Œ€ํ•œ ์‚ฌ์‹ค์„ ์ˆ˜์ง‘ํ•˜๊ณ  ์ด๋ก ์œผ๋กœ ์—ฐ๊ทน์—์„œ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.
์•„์ง ํ…Œ์ŠคํŠธ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์ด๊ฒƒ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ํ›Œ๋ฅญํ•œ ๋…ผ๋ฆฌ๊ฐ€ ์•„์ง ์—†์Šต๋‹ˆ๋‹ค.
๋ฐฉ๋ฒ•์ด ์ง€๊ธˆ๊นŒ์ง€ ํฌ๊ฒŒ ๋ณด์ด๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์ด์— ๋Œ€ํ•œ ๋ฌธ์„œ ํ’€ ์š”์ฒญ
๋‹น์‹ ์ดํ•˜๋Š” ์ผ์— ๋”ฐ๋ผ ๋‹ค๋ฅด๋ฉฐ ์‚ฌ์šฉ์„ ์ œ์•ˆํ•˜๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
์„ค๋ช…์„œ์˜ json ๋คํ”„ ํ•ดํ‚น.

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


  • ํ˜ธ์ŠคํŠธ: "{{ ๋ฐฐํฌ ๊ทธ๋ฃน }}"
    gather_facts: ์•„๋‹ˆ์š”
    ์ž‘์—…:

    • ์„ค์ •:

      gather_subset=!all,!min

    • ์ด๋ฆ„: VM ๋ฐ ๋ชจ๋“  ๊ด€๋ จ ๋ฆฌ์†Œ์Šค ์ œ๊ฑฐ

      azure_rm_virtualmachine:

      resource_group: "{{ host_vars[inventory_hostname]['resource_group']

      }}"

      ์ด๋ฆ„: "{{ ์ธ๋ฒคํ† ๋ฆฌ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„ }}"

      ์ƒํƒœ: ๋ถ€์žฌ

      delegate_to: ๋กœ์ปฌ ํ˜ธ์ŠคํŠธ

      delegate_facts: ์ฐธ


2018๋…„ 3์›” 18์ผ ์ผ์š”์ผ ์˜คํ›„ 12:04, Isaac Egglestone <
[email protected]> ์“ด:

์ข‹์Šต๋‹ˆ๋‹ค. ์‚ฌ์‹ค ์ˆ˜์ง‘์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๋ฉด ์ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์ง€๋งŒ
๋˜ ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” host_vars๊ฐ€ ๋” ์ด์ƒ azure ๋™์  ์ธ๋ฒคํ† ๋ฆฌ๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
ํ‘œ์ค€์—.

๋”ฐ๋ผ์„œ resource_group: "{{ host_vars[item]['resource_group'] }}"
์œ„์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š์œผ๋ฉฐ ๋ฆฌ์†Œ์Šค ๊ทธ๋ฃน์— ํ•˜๋“œ ์ฝ”๋”ฉ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์ด๋ฆ„.

2018๋…„ 3์›” 18์ผ ์ผ์š”์ผ ์˜ค์ „ 11:14, Isaac Egglestone <
[email protected]> ์“ด:

Hrrm ์ง€๊ธˆ๊นŒ์ง€ ๋‚˜๋Š” delegate_to: 127.0.0.1์— ๋Œ€ํ•œ ์ž‘์€ ํ…Œ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.
์‚ญ์ œ ์ž‘์—…์€ ๋Œ€๋Ÿ‰ ๊ทœ๋ชจ์˜ ๊ณ ํ†ต์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ํ”Œ๋ ˆ์ด๋ถ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ํ˜ธ์ŠคํŠธ: "{{ ๋ฐฐํฌ ๊ทธ๋ฃน }}"

    ์ž‘์—…:

    • ์ด๋ฆ„: VM ๋ฐ ๋ชจ๋“  ๊ด€๋ จ ๋ฆฌ์†Œ์Šค ์ œ๊ฑฐ
      azure_rm_virtualmachine:
      resource_group: "{{ host_vars[ํ•ญ๋ชฉ]['resource_group'] }}"
      ์ด๋ฆ„: "{{ ์ธ๋ฒคํ† ๋ฆฌ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„ }}"
      ์ƒํƒœ: ๋ถ€์žฌ

    ๋Œ€๋ฆฌ์ธ ๋Œ€์ƒ: 127.0.0.1


๋ถˆํ–‰ํžˆ๋„ ์—ฌ์ „ํžˆ ํ˜ธ์ŠคํŠธ์— ๋‚˜์—ด๋œ ์‹œ์Šคํ…œ์— ์—ฐ๊ฒฐ์„ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค.
azure ์ž‘์—… azure_rm_virtualmachine์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
๋‚˜๋Š” ์ด๊ฒƒ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํ•˜๊ณ  ์žˆ๋Š”๊ฐ€? ๋‚ด๊ฐ€ ๋ญ”๊ฐ€๋ฅผ ๋†“์น˜๊ณ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์ง€๋งŒ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค.
์ด๊ฒƒ์€ ์ด์ „์— ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ์ด๋ฃจ์–ด์กŒ๊ธฐ ๋•Œ๋ฌธ์—
์ด ์ž‘์—…์„ ์ˆ˜ํ–‰.

์ด๊ฒƒ์ด ์‹ค์ œ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ? ๋ฐ”๋ผ๊ฑด๋Œ€ ์ด๊ฒƒ์€ ๋‹จ์ง€ ๊ตฌ๋ฌธ ๋ฌธ์ œ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค.

2018๋…„ 3์›” 12์ผ ์›”์š”์ผ ์˜คํ›„ 7์‹œ 55๋ถ„, Isaac Egglestone <
[email protected]> ์“ด:

Ansible์€ ๋‹ค๋ฅธ ๋งŽ์€ ๊ฒƒ๋“ค์„ ์œ„ํ•œ ๊ตฌ์„ฑ ๊ด€๋ฆฌ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.
์—„์ฒญ๋‚œ ์–‘์˜ ํด๋ผ์šฐ๋“œ๋ฅผ ์œ„ํ•œ ์‹ค์ œ ๋ฐ ๊ฐ€์ƒ ๋„คํŠธ์›Œํฌ ์žฅ์น˜
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ๊ฐ™์€ ์„œ๋น„์Šค, elastic beanstalk, ๋žŒ๋‹ค์™€ ๊ฐ™์€ ์›น ์„œ๋น„์Šค
IAM ๋ณด์•ˆ ๊ตฌ์„ฑ ์š”์†Œ์™€ ๊ฐ™์ด ์—ฌ๊ธฐ์— ์ ์šฉ๋˜๋Š” ๋ชจ๋“  ๊ตฌ์„ฑ ์š”์†Œ์™€
Ansible์€ ์—ฌ์ „ํžˆ โ€‹โ€‹๋Œ€๋ถ€๋ถ„์˜ VM/ํ˜ธ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ ํ˜ธ์ŠคํŠธ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.
๊ธฐ๋ณธ์ ์œผ๋กœ 2000๋…„๋Œ€ ์ดˆ๋ฐ˜ IT. ์—ฌ๊ธฐ์—์„œ ๋ˆ„๊ตฐ๊ฐ€๋ฅผ ๋ถˆ์พŒํ•˜๊ฒŒํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
VM ๋˜๋Š” ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์ค‘์š”ํ•œ ์ด์œ ์ด์ง€๋งŒ ๋ชจ๋‘
๋ ˆ๊ฑฐ์‹œ ์ด์œ ์— ๋‹ค์‹œ ์ค„๊ธฐ. ์‹ค์ œ๋กœ ์ ์  ๋” ๋งŽ์€ ํ˜ธ์ŠคํŠธ๊ฐ€
์ž๋™ํ™”๋˜๋Š” ๊ฒƒ๋ณด๋‹ค ์ ์–ด์ง‘๋‹ˆ๋‹ค. IMO ์šฐ๋ฆฌ๊ฐ€ ํ‰ํ–‰์„ ์–ป์ง€ ๋ชปํ•œ๋‹ค๋ฉด
with_items ์šฐ๋ฆฌ๋Š” ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๊ฒƒ์„ ํ•จ๊ป˜ ํ๊ธฐํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์—์„œ ๊ธ์ •์ ์œผ๋กœ ์ƒ๊ฐํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค.
์ผ๋ถ€ ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค์˜ ๊ฒฝ์šฐ delegate_to 200+์—์„œ ์‹คํ–‰์„ ์‹œ๋„ํ•œ ์ ์ด ์—†์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
์ด๋Ÿฐ ์‹์œผ๋กœ ํ•„์š”ํ•œ ํด๋ผ์šฐ๋“œ ๊ตฌ์„ฑ ์š”์†Œ๋Š” ๋ชฉ๋ก์„ ์ฟผ๋ฆฌํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
๊ฐ€๋Šฅํ•œ ํ˜ธ์ŠคํŠธ ํ˜•์‹์˜ ํ˜ธ์ŠคํŠธ ํŒŒ์ผ์— ๋คํ”„ ํ•œ ๋‹ค์Œ ์‹œ๋„ํ•˜์‹ญ์‹œ์˜ค.
delegate_to: localhost ์—ฌ๊ธฐ์— ๊ฒฐ๊ณผ๋ฅผ ํ”ผ๋“œ๋ฐฑํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์—์„œ ์ž‘๋™ํ•˜๋Š” ๊ฒฝ์šฐ
์ ์–ด๋„ ์šฐ๋ฆฌ๋Š” ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๋ฌธ์„œ ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ with_item ๋ฃจํ”„ ์ง๋ ฌ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์— ๋Œ€ํ•œ ๋งํฌ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ํด๋ผ์šฐ๋“œ ๋ชจ๋“ˆ ์„น์…˜ ๋ฐ docker ์„น์…˜์— ์žˆ์Šต๋‹ˆ๋‹ค.

2018๋…„ 3์›” 12์ผ ์›”์š”์ผ, 18:49, Brian Coca [email protected]
์ผ๋‹ค:

Ansible์€ Hosts์™€ Tasks์—๋งŒ ๊ด€์‹ฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
'ํ˜ธ์ŠคํŠธ'๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ  ๊ฐ‘์ž๊ธฐ ๋‘ ํŒจ๋Ÿฌ๋‹ค์ž„์— ๋ชจ๋‘ ๋งž์Šต๋‹ˆ๋‹ค.

โ€”
๋‹น์‹ ์ด ๋Œ“๊ธ€์„ ๋‹ฌ์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/ansible/ansible/issues/12086#issuecomment-372422169 ,
๋˜๋Š” ์Šค๋ ˆ๋“œ ์Œ์†Œ๊ฑฐ
https://github.com/notifications/unsubscribe-auth/AJd59nhLIM3s3BL_xM_WwbJS6-uROzjSks5tdsNCgaJpZM4Fx8zF
.

ํฌํฌ์— ๋Œ€ํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€๋„ ์žˆ์œผ๋ฏ€๋กœ ์ด๋ฅผ ํ›จ์”ฌ ์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”Œ๋ ˆ์ด๋ถ์€ ๋ฌด์ž‘์œ„๋กœ ์„ ํƒ๋œ ๋ถ€๋™ IP๊ฐ€ ์žˆ๋Š” ํ…Œ๋ผํผ์„ ํ†ตํ•ด ์—ฌ๋Ÿฌ ๊ฐœ์˜ openstack ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฐฐํฌํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ip๋ฅผ ๋ฐ˜๋ณตํ•˜์—ฌ ์ƒ์„ฑ๋œ ๊ฐ ํ˜ธ์ŠคํŠธ์—์„œ ํฌํŠธ 22๊ฐ€ ์—ด๋ ค ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ํ˜„์žฌ ๋ฐฉ๋ฒ•์€ ๋ฉ€ํ‹ฐํ”Œ๋ ˆ์ด ํ”Œ๋ ˆ์ด๋ถ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

- hosts: localhost
  connection: local
  gather_facts: no
  tasks:
...
  - name: Run terraform
    terraform:
      plan_file: '{{tf_plan | default(omit)}}'
      project_path: '{{terraform_path}}/{{infra}}'
      state: '{{state}}'
      state_file: '{{stat_tfstate.stat.exists | ternary(stat_tfstate.stat.path, omit)}}'
      variables: '{{terraform_vars | default(omit)}}'
    register: tf_output

  - name: Add new hosts
    with_items: '{{tf_output.outputs.ip.value}}' # configued this in terraform to output a list of assigned ips.
    add_host:
      name: '{{item}}'
      groups: new_hosts

- hosts: new_hosts
  gather_facts: no
  connection: local
  tasks:
   - name: Wait for port 22 to become available
     wait_for:
       host: '{{ansible_host}}'
       port: 22
       state: started
       timeout: 60

์ด๊ฒƒ์€ ansible-playbook -i localhost, deploy-test-clients.yml --extra-vars="infra=terraform_os_instances state=present" ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
๋ฌผ๋ก  ์ด๊ฒƒ์€ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ๋Š” ๊น”๋”ํ•˜๊ฒŒ ์ธ๋ฒคํ† ๋ฆฌ ๊ตฌ๋ฌธ ๋ถ„์„ ๊ฐ€๋Šฅํ•œ IP ๋ชฉ๋ก์ด ํ•ญ์ƒ ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ œํ•œ๋œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ๋กœ์ปฌ์—์„œ ํŒŒ์ผ์„ ํ…œํ”Œ๋ฆฟํ•˜๋Š” ๋ฐ ์–ด๋ ค์›€์„ ๊ฒช๊ณ  ์žˆ๋Š” ๊ฒƒ ๊ฐ™๊ธฐ ๋•Œ๋ฌธ์— ์ด ํŠน์ • ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํŠน์ • template_local ๋ชจ๋“ˆ์„ ๋Œ€์‹  ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ ์–ด๋„ ์‹œ์ž‘์€ ๋  ํ…๋ฐ... ์ง์ ‘ ๊ฐ€๋ณผ ์ˆ˜๋Š” ์žˆ๊ฒ ์ง€๋งŒ ๊ฐ€๊นŒ์šด ์žฅ๋ž˜์— ์‹œ๊ฐ„์ด ์—†์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

jinja๋กœ 5์ดˆ ์•ˆ์— ํ•  ์ˆ˜ ์žˆ๋Š” 100๊ฐœ์˜ ํŒŒ์ผ์„ ํ…œํ”Œ๋ฆฟํ™”ํ•˜๋Š” ๋ฐ 30๋ถ„ ์ด์ƒ์€ ์šฐ์Šค๊ฝ์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค.

@saplla ํ…œํ”Œ๋ฆฟ์€ ํ•ญ์ƒ ๋กœ์ปฌ์—์„œ ๋ฐœ์ƒํ•˜๋ฉฐ ์›๊ฒฉ์œผ๋กœ ๋ฐœ์ƒํ•˜๋Š” ์œ ์ผํ•œ ์ž‘์—…์€ ํ…œํ”Œ๋ฆฟ์„ ๋ณต์‚ฌํ•˜๊ณ  ๊ถŒํ•œ์„ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ช…ํ™•ํžˆ ํ•˜๊ธฐ ์œ„ํ•ด, ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค๋ฅธ ๋นŒ๋“œ ์‹œ์Šคํ…œ์— ํ”ผ๋“œํ•˜๊ฑฐ๋‚˜ ์ œ ๊ฒฝ์šฐ์—๋Š” kubectl์„ ์‚ฌ์šฉํ•˜์—ฌ k8s ๋ฆฌ์†Œ์Šค๋ฅผ ๋ฐฐํฌํ•˜๊ธฐ ์œ„ํ•ด ๋กœ์ปฌ ์ž‘์—…์œผ๋กœ ํ…œํ”Œ๋ฆฟ ํŒŒ์ผ์„ ์›ํ•˜๋Š” ์‚ฌ์šฉ์ž์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด ๋ง์€ ๋‹จ์ˆœํ•œ ๋ž˜ํผ์ธ ๋ชจ๋“ˆ์„ ํ†ตํ•ด ๋ฃจํ•‘๊ณผ ํ…œํ”Œ๋ฆฟ์„ jinja๋กœ ์˜คํ”„๋กœ๋“œํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ชจ๋“ˆ์€ ์ปจํ…์ŠคํŠธ์™€ ๋ฃจํ”„ ์ •์˜(์ผ๋ฐ˜์ ์œผ๋กœ with_nested ๋ฐ ์นœ๊ตฌ์— ๋„ฃ๋Š” ๊ฒƒ)๋ฅผ ์ทจํ•˜๊ณ  ์ด ์ž‘์—…์„ ์œ„ํ•ด ์™„์ „ํžˆ ์ž˜๋ผ๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์•„๋งˆ๋„ ๋ž˜ํผ๊ฐ€ ์†๋„๋ฅผ ๋†’์ด๋ฉด jinja๋ฅผ ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Œ) .

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

    template_parallel:
      src: "{{ item[0] }}"
      dest: "{{ tempdir }}/{{ item[1] }}-{{ item[0] | basename }}"
      context: "{{ hostvars[inventory_hostname] }}"
      nested:
      - "{{ templates.stdout_lines }}"
      - "{{ namespaces.stdout_lines }}"

์œ„์˜ ์˜ˆ๋Š” ansible์— ์˜ํ•ด ์ •์˜๋œ ๋ชจ๋“  ๋ณ€์ˆ˜๋ฅผ ์ปจํ…์ŠคํŠธ๋กœ ์‚ฌ์šฉํ•˜์ง€๋งŒ ์–ด๋–ค dict๋„ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋งํ–ˆ๋“ฏ์ด ์ง€๊ธˆ์€ ์ด ์ž‘์—…์„ ํ•  ์‹œ๊ฐ„์ด ์—†์ง€๋งŒ ์ ‘๊ทผ ๋ฐฉ์‹์ด @bcoca ์—์„œ ์‹คํ˜„ ๊ฐ€๋Šฅํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๋“ค๋ฆฝ๋‹ˆ๊นŒ?

์ด๋Š” ๊ฐ ํ•ญ๋ชฉ์ด ๋…๋ฆฝ์ ์ด๋ผ๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ํ•ญ์ƒ ๊ทธ๋Ÿฐ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ํ˜„์žฌ ํ•ญ๋ชฉ ๊ฐ’์„ ์ด์ „ ํ•ญ๋ชฉ ๋ฐ/๋˜๋Š” ์ด์ „ ๋ฐ˜๋ณต์˜ ๊ฒฐ๊ณผ์— ์˜์กดํ•˜๋„๋ก ๋งŒ๋“ค๊ฑฐ๋‚˜ ๋‹จ์ˆœํžˆ ๋ˆ„์ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ…œํ”Œ๋ฆฟ์— ์†Œ์š”๋˜๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์‹œ๊ฐ„์€ ํ…œํ”Œ๋ฆฟ ์ž์ฒด๊ฐ€ ์•„๋‹ˆ๋ผ ๋ณ€์ˆ˜์™€ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๊ด€์„ฑ์ด ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ˜„์žฌ ๊ฐ€์ •์„ ๊นจ๋Š” ๋™์ž‘์„ ๊ธฐ๊บผ์ด ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋Š” ํ•œ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ์—์„œ ๋งŽ์€ ์ด์ ์„ ์–ป์ง€ ๋ชปํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ ํ…œํ”Œ๋ฆฟ์€ ํ•ญ๋ชฉ๋ณ„๋กœ๊ฐ€ ์•„๋‹ˆ๋ผ ํ˜ธ์ŠคํŠธ๋ณ„๋กœ ์ด๋ฏธ ๋ณ‘๋ ฌ์ž…๋‹ˆ๋‹ค.

๋„ค, ์ƒ๊ฐํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ๋‚ด ์‚ฌ์šฉ ์‚ฌ๋ก€์— ์ถฉ๋ถ„ํ•  ๊ฒƒ์ด๊ณ  ์ด ์Šค๋ ˆ๋“œ์˜ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ €๋Š” ๊ณ„์ธต์  ๊ตฌ์„ฑ๊ณผ ํ…œํ”Œ๋ฆฟ ํŒŒ์ผ์„ ๋ฐฐํฌํ•˜๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ(kubectl, helm ๋“ฑ)๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์ „์— ๋กœ์ปฌ๋กœ ansible์„ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ๋“œํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์„ฑ๋Šฅ์ด ๋„ˆ๋ฌด ์ข‹์•„์„œ ํ…œํ”Œ๋ฆฟ ์‹œ๊ฐ„์„ ๋ช‡ ๋ถ„์—์„œ ๋ช‡ ์ดˆ๋กœ ์ค„์ธ๋‹ค๋ฉด ์•„์ฃผ ๊ฐ„๋‹จํ•˜๊ณ  ๊ฐ€๋ฒผ์šด ํ…œํ”Œ๋ฆฟ ๋ชจ๋“ˆ์— ๋งŒ์กฑํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๋‚˜๋ฅผ ๋•Œ๋ฆฌ์ง€ ์•Š๋Š” ํ•œ ์ด๊ฒƒ์ด ์šฐ๋ฆฌ์—๊ฒŒ ๋ฌธ์ œ๊ฐ€ ๋  ๋•Œ ์ด๊ฒƒ์„ ๋ณด๋ ค๊ณ  ๋…ธ๋ ฅํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ์›๋ž˜ #10695๋ฅผ ์ œ์ถœํ–ˆ์ง€๋งŒ ์ด๊ฒƒ์ด ํ•จ๊ป˜ ํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆด ๊ฒƒ์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์‰˜ ์Šคํฌ๋ฆฝํŠธ๋กœ ์ด๋Ÿฌํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ํ•ด๊ฒฐํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค(์˜ˆ: ๋‹จ์ผ ํ˜ธ์ŠคํŠธ์—์„œ 50๊ฐœ์˜ Git ์ €์žฅ์†Œ์—์„œ ๋ญ”๊ฐ€๋ฅผ ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ๋งํ•˜๋ฉด, ์ €๋Š” Ansible์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. 50๋ฒˆ ์ˆ˜ํ–‰ํ•˜๋Š” ๋‹จ์ผ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ•œ ๋ฒˆ ์‹คํ–‰). ๋ถˆํ–‰ํžˆ๋„ ์ด๊ฒƒ์€ ๋งค์šฐ ์„ธ๋ถ„ํ™”๋œ ๋ณ€๊ฒฝ ๋ณด๊ณ ์™€ ๊ฐ™์ด Ansible์—์„œ ๋ฌด๋ฃŒ๋กœ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ผ๋ถ€ ํ•ญ๋ชฉ์„ ํฌ๊ธฐํ•˜๊ณ  ๋ชจ๋“  "๋งŒ์•ฝ ์‹คํ–‰๋˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ์‹คํ–‰" ๋…ผ๋ฆฌ๋ฅผ ์ง์ ‘ ๊ตฌํ˜„ํ•˜๊ณ  ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ์— ๋Œ€ํ•ด ๋งค์šฐ ์ฃผ์˜ํ•ด์•ผ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์•„๋งˆ๋„ 2๋ฐฐ ๋” ๋น ๋ฅผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋‚˜์ค‘์— "๋ณ‘๋ ฌ" ์˜ต์…˜์„ ์–ป๊ฒŒ ๋˜๋”๋ผ๋„ ๋‚ด ์‚ฌ์šฉ์ž ์ง€์ • ์Šคํฌ๋ฆฝํŠธ๋งŒํผ ๋น ๋ฅด์ง€ ์•Š์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ ์•„๋งˆ๋„ ์ด ์˜ต์…˜์œผ๋กœ ์ „ํ™˜ํ•˜๋Š” ๋ฐ ์‹ ๊ฒฝ์„ ์“ฐ์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@wincent Ansible์€ '์•ก์…˜ ์ ์šฉ' ์ด์ƒ์˜ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋ฏ€๋กœ ๋ณ‘๋ ฌ ๋ฃจํ”„๋Š” ์—ฌ์ „ํžˆ ์‰˜ ์Šคํฌ๋ฆฝํŠธ/์ „์šฉ ํ”„๋กœ๊ทธ๋žจ๋ณด๋‹ค ํ•ญ์ƒ ๋Š๋ฆด ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@bcoca : ๋„ค, ์ œ ์ดํ•ด๋ฅผ ํ™•์ธ์‹œ์ผœ์ค๋‹ˆ๋‹ค.

@saplla k8s_raw๊ฐ€ ํ…œํ”Œ๋ฆฟ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋‚ซ์Šต๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ธ๋ฒคํ† ๋ฆฌ์— yaml์„ ์ธ๋ผ์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. :) (์ด PR์˜ ์ฃผ์ œ๊ฐ€ ์•„๋‹˜)
์ด๊ฒƒ์— ๋Œ€ํ•œ ํ˜„์žฌ ์ƒํƒœ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? 2.6 @bcoca ์—์„œ ๋ญ”๊ฐ€๋ฅผ ๊ธฐ๋Œ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?
๋‚ด DB ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์ˆ˜์ฒœ ๊ฐœ์˜ postgresql ๊ถŒํ•œ์„ ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ์œผ๋ฉฐ 25๋ถ„์ด ๋งค์šฐ ๋Š๋ฆฝ๋‹ˆ๋‹ค.

@nerzhul ๊ฐ์‚ฌํ•˜์ง€๋งŒ ์šฐ๋ฆฌ์—๊ฒŒ๋Š” ๋” ์ข‹์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋„ˆ๋ฌด ๋งŽ์€ ๋งˆ๋ฒ•. ํ…œํ”Œ๋ฆฟ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

@sapila ํ…œํ”Œ๋ฆฟ๋‹น ํ˜ธ์ŠคํŠธ ๋Œ€์ƒ์„ ํ•ญ์ƒ ์ƒ์„ฑํ•˜์—ฌ ํ…œํ”Œ๋ฆฟ์„ ์ตœ๋Œ€ํ•œ ๋ณ‘๋ ฌํ™”ํ•œ ๋‹ค์Œ ํ›„์† ์žฌ์ƒ ๋˜๋Š” ์œ„์ž„์„ ์‚ฌ์šฉํ•˜์—ฌ ์ ์ ˆํ•œ ์‹ค์ œ ํ˜ธ์ŠคํŠธ์— ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@bcoca ์กฐ๊ธˆ ํ•ดํ‚ค :)

์ „ํ˜€, ๋งŽ์€ ํ•ดํ‚น์ด ์•„๋‹ˆ์ง€๋งŒ ์˜ค๋Š˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

https://github.com/ansible/proposals/issues/140 ์— ์ฐฌ์„ฑํ•˜์—ฌ ๋งˆ๊ฐ

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