Ansible: fetchlistfromdict ํ•„ํ„ฐ

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

๋ฌธ์ œ ์œ ํ˜•

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

์‚ฌ์ „ ๋ฐฐ์—ด์ด ์žˆ๊ณ  ์‚ฌ์ „ ์†์„ฑ์ด ์žˆ๋Š” ๋ฐฐ์—ด์„ ๋งŒ๋“ค๊ณ  ์‹ถ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์—๋Š” selectattr, map ๋ฐ ์ƒˆ ์ถ”์ถœ ํ•„ํ„ฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

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

๊ทธ๊ฒƒ์€ ํ•ด๊ฒฐ์ฑ… ์ด ์žˆ๋‹ค๊ณ  ๋งํ–ˆ์Šต๋‹ˆ๋‹ค.

def fetchlistfromdict(d, l):
    result = []
    for item in l:
        result.append(d[item])

    return result

class FilterModule(object):
    def filters(self):
        return {
            'fetchlistfromdict': fetchlistfromdict,
        }

๊ทธ๋ฆฌ๊ณ  ์ง€๊ธˆ:

{{ hostvars|fetchlistfromdict(groups['webservers']) |map(attribute='custom_facts.aliases.0.ip')|list}}

์ด ๊ฒฝ์šฐ๋Š” ๋งค์šฐ ๊ตฌ์ฒด์ ์ด๋ฉฐ route53 ๋ชจ๋“ˆ๊ณผ ๊ด€๋ จ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” ์ด ํ•„ํ„ฐ๋ฅผ ๊ฐ€๋Šฅ์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ํ™๋ณด๋ฅผ ํ• ๊นŒ? ๋„ค์ด๋ฐ์€ ์–ด๋–จ๊นŒ์š”? ์›๋ณธ์„ ์ €์žฅํ–ˆ์ง€๋งŒ list_from_dict ๊ฐ€ ๋” ์ข‹์•„ ๋ณด์ž…๋‹ˆ๋‹ค.

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

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

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

{{ hostvars|fetchlistfromdict(groups['webservers']) |map(attribute='custom_facts.aliases.0.ip')|list}}

์ด๊ฒƒ์€ ๋ฌด์—‡๊ณผ ๋‹ค๋ฅธ๊ฐ€

{{ groups['webservers']|map('extract', hostvars, ['custom_facts','aliases','0','ip'])|list }}

?

@amenonsen ์ข‹์€ ์ , ์ €๋Š” map(attribute= ์œผ๋กœ๋งŒ ์ด๊ฒƒ์„ ์–ป์œผ๋ ค๊ณ  ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ƒˆ ์ถ”์ถœ ํ•„ํ„ฐ๊ฐ€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. ์ƒˆ ๋ฆด๋ฆฌ์Šค์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค!

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

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