NGINX ์ฌ์ฉ์๋ง ๋ณ๊ฒฝํ๊ณ ๋ค๋ฅธ ๋ณ์์ ๊ธฐ๋ณธ๊ฐ์ ์ ์งํ๋ ค๋ฉด nginx_main_template
dict ์๋์ ๋ชจ๋ ๋ณ์๋ฅผ ์ ์ํด์ผ ํฉ๋๋ค.
ํด๋น ๋ณ์:
nginx_main_template_enable: true
nginx_main_template:
user: www-data
๋ค์ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
TASK [nginxinc.nginx : (Setup: All NGINX) Dynamically Generate NGINX Main Configuration File] ************************
fatal: [sandbox]: FAILED! => {"changed": false, "msg": "AnsibleUndefinedVariable: 'dict object' has no attribute 'worker_processes'"}
์ผ๋ถ ๋ณ์๋ง ์ ์ํ๊ณ ๋ค๋ฅธ ๋ณ์์ ๋ํด์๋ ๊ธฐ๋ณธ๊ฐ์ ์ ์งํ๋๋ก ํ์ฉ๋์ด์ผ ํฉ๋๋ค.
@alexsegura์ ์ ์ ์ผ๋ก ๋์ํฉ๋๋ค. ๋จ์ผ ๋งค๊ฐ๋ณ์๋ฅผ ์ ์ํ๋ ์ต์ ์ ๋ฐฑ๋ก๊ทธ์ ์์ต๋๋ค. ์ญํ ์ ๋ํ ๊ฐ๋ฐ์ ๋ด๊ฐ ์ต๊ทผ์ ์ํ๋ ๊ฒ๋ณด๋ค ์กฐ๊ธ ๋ ๋๋ ธ์ง๋ง ์์ผ๋ก ๋ช ๋ฌ ์์ ์ํฉ์ด ๋ค์ ์ข์์ง๊ธฐ ์์ํ ๊ฒ์ ๋๋ค. ์ฆ, ์ํ๋ ๊ฒฝ์ฐ ์์ ๋กญ๊ฒ PR์ ์ ์ถํ์ญ์์ค ๐
๋ฉ์์ง๋ฅผ ๋ณด๋ด์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค.
์, ํ ๋ฆฌํ์คํธ์ ๊ธฐ์ฌํ ์ ์์ต๋๋ค ๐
์ด ์ญํ ์์ ์ฌ๊ธฐ์ ๊ธฐ์ ๋ณผ ์ ์๋ ๋ฌธ์ ๋ ๊ธฐ๋ณธ๊ฐ์ด ํ๋์ฝ๋ฉ๋์ด ์๋ค๋ ๊ฒ์
๋๋ค.
๋ฐ๋ผ์ ๊ธฐ๋ณธ๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด defaults/main.yml
๋ฐ ํ
ํ๋ฆฟ์์ ๋ชจ๋ ๋ณ๊ฒฝํด์ผ ํ๋ค๋ ๊ฒ์ ๊ธฐ์ตํด์ผ ํฉ๋๋ค.
dicts๋ฅผ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ฌ์ฉํ ๋ ๋์ฒด๋๊ธฐ ๋๋ฌธ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. hash_behavior ์ค์ ์ด ์์ง๋ง ์ ์ญ์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์ญํ ์ ๋ํด "์๋์ง ์์" ๊ธฐ๋ณธ ๋ณ์๋ฅผ ๊ฒ์ํ๋ ๋ฐฉ๋ฒ์ ์๊ณ ์์ต๋๊น?
role_defaults['var_name']
์ ๊ฐ์ ๊ฒ ?
@alexsegura ์ด ๋์์ ์ํํ๋ ์ข์ ๋ฐฉ๋ฒ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ์ด์์ ์ผ๋ก๋ defaults/main.yml
์ ๊ฐ์ ์ฌ์ฉํ์ง ์๊ณ ์ญํ ์ด ์ ์ฉํ ๊ตฌ์ฑ์ ๋ฐฐํฌํ ์ ์๋ ์ค์ ์ ์ํ ๊ฒ์
๋๋ค.
๋ง์์ ๋ ์ค๋ฅด๋ ์ฃผ์ ์๊ฐ์ vars/main.yml
๋ฅผ ์ฌ์ฉํ์ฌ ์ผ๋ถ ๊ธฐ๋ณธ๊ฐ์ ํ๋์ฝ๋ฉํ ๋ค์ | default(var_main_upload_src)
์ ๊ฐ์ ์์
์ ์ํํ๋ ๊ฒ์ด์ง๋ง ์ด๊ฒ์ด ์ต์ ์ ๊ฒฝ๋ก์ธ์ง ํ์ ํ ์ ์์ต๋๋ค.
์๋ง๋ ์ด๋ฅผ ์ํํ๋ ์ ์ผํ ๋ฐฉ๋ฒ์ ๊ธฐ๋ณธ ํํฐ๊ฐ ์๋ ํ ํ๋ฆฟ ์์ฒด์์์ผ ๊ฒ์ ๋๋ค.
๋ง์ต๋๋ค. ์ด๊ฒ์ ํ ํ๋ฆฟ ๊ด๋ จ ๋งค๊ฐ๋ณ์์ ๋ํ ์ข์ ์๋ฃจ์ ์ ๋๋ค(ํ ํ๋ฆฟ ํ์ผ์ ๋ณด๋ฉด ๊ธฐ๋ณธ ํํฐ๊ฐ ์ด๋ฏธ ๋ช ๊ณณ์์ ์ฌ์ฉ๋จ). ๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ด ์๋์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๊ฒ์ด๋ผ๋ ์ ์ ์ธ์ ํฉ๋๋ค. ๊ฝค ์๊ฐ์ด ๋ง์ด ๊ฑธ๋ฆฌ๋ ์์ ์ด์ง๋ง ํ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ํ ํ๋ฆฟ๊ณผ ๊ด๋ จ๋์ง ์์ ๋ณ์์ ๋ํ ์ต์ ์ ์ ๊ทผ ๋ฐฉ์์ด ๋ฌด์์ธ์ง์ ๋ํ ์ง๋ฌธ์ด ๋จ์ ์์ผ๋ฉฐ, ๋ ๋์๊ฐ ์ต์ ์ ์ ๊ทผ ๋ฐฉ์์ด ์์ต๋๊น?
์ฌ๊ธฐ ์ ๊ธฐ์์ ๋ณธ ๊ฒ์์ ๊ธฐ๋ณธ๊ฐ์ ๋ํ ๊ฐ์ฅ ์ข์ ์ ๊ทผ ๋ฐฉ์์ dicts๋ฅผ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ ๋๋ค.
nginx_main_template_user: www-data
๋์ ์
nginx_main_template:
user: www-data
๊ทธ๋ ๊ฒ ํ๋ฉด ๋ฌธ์ ๊ฐ ๋ถ๋ถ์ ์ผ๋ก ํด๊ฒฐ๋๋ฉฐ ์ฒ์์๋ ์ญํ ์ด ๊ทธ๋ ๊ฒ ๊ตฌ์ฑ๋์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ด๊ฐ ๋ ๋ณต์กํ ํ ํ๋ฆฟ ์ต์ (์: ๋ค์ค ์์น ๋ธ๋ก)์ ๋์ ํ๊ธฐ ์์ํ์ ๋ ์ฌ์ ๊ณผ ๋ชฉ๋ก์ด ๋ ์ดํดํ๊ธฐ ์์ํ์ต๋๋ค.
๋๋ ๊ธฐ๋ณธ ๋ฐ ์ฌ์ฉ์ ๊ตฌ์ฑ์ ๋ํด ๋ณ๋์ ์ฌ์ ์ ์ฌ์ฉํ๊ณ combine
ํํฐ์ ๋ณํฉํ ์ ์์ต๋๋ค. ์ด ๋ฐฉ๋ฒ์ด ์ฌ์ฉ๋๋ ๊ธฐ๋ฅ๋ฅผ ๋ฐฐํฌํ๋ ์ญํ ์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
airflow_config: "{{ airflow_defaults_config | combine(airflow_user_config, recursive=True) }}"
์ด๊ฒ์ ๋ํ ํ
ํ๋ฆฟ์ ํ๋์ฝ๋ฉ๋ ๊ธฐ๋ณธ๊ฐ์ ๊ฐ์ง ํ์๋ฅผ ์ ๊ฑฐํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๋ด๊ฐ ์ธ๊ธํ ์ญํ ์ ์ฌ๊ธฐ์์ ํ์ธํ ์
ํ , ๊ทธ๊ฒ์ ํฅ๋ฏธ๋ก์ด ์ ๊ทผ ๋ฐฉ์์ด๋ฉฐ ์๋ํ๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค. ์ค์ ๋ก ์ผ๋ง๋ ์ ์๋ํ๋์ง ๋ณด๊ธฐ ์ํด ๋ ์์ ์ฌ์ ( main
๋๋ stream
ํ
ํ๋ฆฟ์ ์๊ฐํ๊ณ ์์) ์ค ํ๋๋ฅผ ์ฌ์ฉํ์ฌ ์์ PoC๋ฅผ ๋ง๋๋ ๊ฒ์ด ์ข์ต๋๋ค.
๋๋ ์ด๋ฏธ ๊ธฐ๋ณธ ํ
ํ๋ฆฟ์ ๋ํด ์ด๊ฒ์ ์๋ํ๊ณ ์์๋๋ก ์๋ํ์ต๋๋ค. ๊ทธ๋ฌ๋ ์ต์ํ์ ๋
ธ๋ ฅ์ ๊ธฐ์ธ์๊ธฐ ๋๋ฌธ์ ๋ ๊ฐ์ ์ฌ์ nginx_default_main_template
๊ณผ ์ฌ์ฉ์ ํ๋ ์ด๋ถ์ nginx_user_main_template
๋ฅผ nginx_main_template
๋ก ๋ณํฉํ์ต๋๋ค.
์ด๋ ๊ฒ ํ๋ฉด ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ด ๋ฐ์ํ๋ฏ๋ก ๋ณํฉ๋ ์ฌ์ ์ ์ ์ด๋ฆ์ผ๋ก ์ฌ์ฉํ๊ณ PR์ ์ ์ถํ๋๋ก ์ญํ ์ ๋ฆฌํฉํ ๋งํฉ๋๋ค.
http ํ
ํ๋ฆฟ์ ๋ณํฉํ ์ฌ์ฉ์ ์ฌ์ ์ด ์ฌ๋ฌ ๊ฐ ์์ ์ ์์ผ๋ฏ๋ก ํจ์ฌ ๋ ์ด๋ ต์ต๋๋ค. ๋ณํฉ ์ฐ์ฐ์ ์ ๊ฒฐํฉ๋ ์ต์ปค ๋ฐ ๋ณ์นญ ์ด ๋์์ด ๋ ์ ์์ง๋ง ์ฌ์ฉ์๋ ๋ณํฉ์ ์ํํ ์ฑ
์์ด ์์ต๋๋ค.
๋๋ ๊ทธ ์์์ ์๊ฐ์ ๋ณด๋ผ ๊ฒ์ด๋ค.
BTW: ์ฌ๋ฌ http ํ ํ๋ฆฟ์ ์ ์ํ๊ธฐ ์ํด ๋ชฉ๋ก ๋์ ์ฌ์ ์ ์ฌ์ฉํ๊ธฐ๋ก ์ ํํ ์ด์ ๊ฐ ์์ต๋๊น? ๋ด๊ฐ ์ฐพ์ ๊ฒ์์ ์ด์ ๋ ์ค์ ๋ก ์ฌ์ฉ๋์ง ์์ต๋๋ค.
BTW: ์ฌ๋ฌ http ํ ํ๋ฆฟ์ ์ ์ํ๊ธฐ ์ํด ๋ชฉ๋ก ๋์ ์ฌ์ ์ ์ฌ์ฉํ๊ธฐ๋ก ์ ํํ ์ด์ ๊ฐ ์์ต๋๊น? ๋ด๊ฐ ์ฐพ์ ๊ฒ์์ ์ด์ ๋ ์ค์ ๋ก ์ฌ์ฉ๋์ง ์์ต๋๋ค.
์๋ ์ ๋ง. ๋์ด์ผ ์๊ฐํด๋ณด๋ฉด ์ ์ํ ๊ฐ HTTP ํ ํ๋ฆฟ์ ๋ํ ํค๋ฅผ ๊ฐ๋ ๊ฒ์ด ๊ฐ๋ ์ฑ์ ํฅ์์ํฌ ์ ์๋ค๊ณ ์๊ฐํ์ง๋ง, ์์ ์ด ๋ ์ฌ์์ง๋ค๋ฉด ๋ชฉ๋ก์ผ๋ก ๋ณ๊ฒฝํ๋ ๊ฒ์ ๋ฐ๋ํ์ง๋ ์์ต๋๋ค.
๋๋ ๋น์ทํ ๋ฌธ์ ์ ๋ถ๋ช์ณค๊ณ ์ดํ์์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค. ์ ๋ ๋ค์๊ณผ ๊ฐ์ ๋์์ ๊ด์ ์ ์ ์ํ๊ณ ์ถ์ต๋๋ค.
๊ตฌ์ฑ์ ๊ธฐ๋ณธ๊ฐ์ ํ๋ ์ฝ๋ฉ๋์ด์๋ ์ ๋๋ฉฐ ์ค์น ์ค์ธ ์ํํธ์จ์ด์ ๋งก๊ฒจ์ผ ํฉ๋๋ค.
@alexsegura๊ฐ ์ด๋ฏธ ์ง์ ํ๋ฏ์ด ๋ฌธ์ ๋ ๊ฐ์ ๋๊ธฐํ๋ ์ํ๋ก ์ ์งํด์ผ ํ๋ค๋ ๊ฒ์ ๋๋ค. ์ด๋ ๋ณธ์ง์ ์ผ๋ก ํญ์ ๊ทธ๋ ์ง๋ ์์ต๋๋ค(์ธ๊ฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ธฐ ์ฝ์ต๋๋ค).
๊ธฐ๋ณธ ๊ตฌ์ฑ์ ์ ๊ณตํด์ผ ํ๋ค๊ณ ์๊ฐ๋๋ฉด ํ์ ์น์ ์ ๋ณ๋์ ๋๋ ํ ๋ฆฌ์ ์ ์งํ๊ณ ์ฌ์ฉ์๊ฐ ๊ฐ์ ์ง์ ํ๋ฉด ๊ฐ์ฅ ๋ฎ์ ์์ค์์ ๊ฒฐํฉํ ๋ค์ ๊ตฌ์ฑ์ ๋ณํฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๊ทธ๋ฌ๋ ๊ทธ๋ง์ ๋ ์ญํ ๋ฒ์ ๋ด์ ์์ง ์์ต๋๋ค. ๊ตฌ์ฑ์ ๋์์ ๋ณต์ฌํด์ผ ํ๋ฉฐ ํด๋น ๊ฐ์ด ์ฌ๋ฐ๋ฅธ์ง ํ์ธํ์ง ์์์ผ ํฉ๋๋ค. ๊ธฐ๊ปํด์ผ ๊ตฌ์ฑ ์ค๋ฅ๋ก ์ธํด ์ํํธ์จ์ด๋ฅผ ์์ํ ์ ์๋ ๊ฒฝ์ฐ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค(๋๋ ์ฌ์ฉ ๊ฐ๋ฅํ ๊ฒฝ์ฐ ์ํํธ์จ์ด์ ์ ํจ์ฑ ๊ฒ์ฌ ๊ธฐ๋ฅ ์ฌ์ฉ).
์ฌ๋ฏธ์๊ฒ๋ ์ ๋ ํ์ฌ ํด๋น ์ญํ ์์ ํ ํ๋ฆฟ์ด ์๋ํ๋ ๋ฐฉ์์ ๊ฐ์ ํ๋ ๋ฐฉ๋ฒ์ ์ฐ๊ตฌํ๊ณ ์์ต๋๋ค. ๋งค์ฐ ๋๋ฆฐ ํ๋ก์ธ์ค์์ต๋๋ค(ํ์ฌ ์ญํ ์ ์ ๋ ํ ์ ์๋ ๋์ญํญ์ด ๋ค์ ์ ํ๋์ด ์์). ํ์ง๋ง ์ ๋ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ ๊ด์ฐฎ์ ์๋ฃจ์ ์ ์๊ฐํด ๋๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ต๋ ๋ช ๋ฌ ์์ ๋ณ๊ฒฝ ์ฌํญ์ด ๋ณ๋์ ๋ถ๊ธฐ์ ์ ์ฉ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค ๐
์ด ๋ฌธ์ ์ ์ง์ ์ด ์์ต๋๊น?
์๋์. "๊ฐ๊น์ด" ๋ฏธ๋์ ์ด ๋ฌธ์ ๋ก ๋์๊ฐ ๊ณํ์ด ์ฌ์ ํ ์์ง๋ง ๋ช ๊ฐ์ง ๋ค๋ฅธ ์์ ์ด ์ฐ์ ์์์ ์์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋๋ ๊ธฐ๋ณธ ๋ฐ ์ฌ์ฉ์ ๊ตฌ์ฑ์ ๋ํด ๋ณ๋์ ์ฌ์ ์ ์ฌ์ฉํ๊ณ
combine
ํํฐ์ ๋ณํฉํ ์ ์์ต๋๋ค. ์ด ๋ฐฉ๋ฒ์ด ์ฌ์ฉ๋๋ ๊ธฐ๋ฅ๋ฅผ ๋ฐฐํฌํ๋ ์ญํ ์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.airflow_config: "{{ airflow_defaults_config | combine(airflow_user_config, recursive=True) }}"
์ด๊ฒ์ ๋ํ ํ ํ๋ฆฟ์ ํ๋์ฝ๋ฉ๋ ๊ธฐ๋ณธ๊ฐ์ ๊ฐ์ง ํ์๋ฅผ ์ ๊ฑฐํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๋ด๊ฐ ์ธ๊ธํ ์ญํ ์ ์ฌ๊ธฐ์์ ํ์ธํ ์