์ฌ์ ๋ฐฐ์ด์ด ์๊ณ ์ฌ์ ์์ฑ์ด ์๋ ๋ฐฐ์ด์ ๋ง๋ค๊ณ ์ถ๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ์ด๋ฅผ ์ํํ๋ ๋ฐฉ๋ฒ์๋ 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
๊ฐ ๋ ์ข์ ๋ณด์
๋๋ค.
{{ 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=
์ผ๋ก๋ง ์ด๊ฒ์ ์ป์ผ๋ ค๊ณ ์๋ํ์ต๋๋ค. ์ ์ถ์ถ ํํฐ๊ฐ ์์
์ ์ํํ๋ ๊ฒ์ฒ๋ผ ๋ณด์
๋๋ค. ์ ๋ฆด๋ฆฌ์ค์์ ์ฌ์ฉํ ์ ์๊ธฐ๋ฅผ ๊ธฐ๋ํฉ๋๋ค!
์ด ์์ ๋ ๋ฌธ์์ ํฌํจ๋์ด์ผ ํฉ๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ๊ธฐ ํจ์ฌ ์ ์ ๊ฒ์ํฉ๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ด ์์ ๋ ๋ฌธ์์ ํฌํจ๋์ด์ผ ํฉ๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ๊ธฐ ํจ์ฌ ์ ์ ๊ฒ์ํฉ๋๋ค.