æ¬ç¨¿ã¯ãKLab Engineer Advent Calendar 2025ãã®25æ¥ç®ã§ããè¨äºãæ¸ãã¦ãã ãã£ãçããããç²ããã¾ã§ããï¼
ã¯ããã«
ç§ã¯éå»ã«ä½åº¦ããèªå® ã®ãã·ã³ç®¡çã«Ansibleã使ãããã¨ææ¦ãã¦ã¯æãå»ã£ã¦ãã¾ãããå®çããªãã£ãä¸çªã®çç±ã¯ããªã¼ãã¼ãã¯ããã¸ã¼ã§ã³ã¹ããæªããããã§ããåãçµé¨ããã人ãå¤ãã®ã§ã¯ãªãã§ããããã
ãããã試è¡é¯èª¤ã®æ«ãèªå® ã®ãã·ã³ç®¡çã«æé©ãªããã¹ãæåAnsibleãã«è¾¿ãçãã¾ãããæ¬ç¨¿ã§ã¯ãã®æ¦è¦ãç´¹ä»ãã¾ãã
ãªãèªå® ç°å¢ã ã¨Ansibleã¯ã³ã¹ããæªãã®ã
Ansibleãç¥ããªã人åãã«ç°¡åã«èª¬æããã¨ãAnsibleã¯è¤æ°ãã·ã³ã®ã»ããã¢ããæé ãã³ã¼ãåããæåOSSã§ããå ¸åçãªæç§æ¸éãã®Ansibleã§ã¯ã次ã®ãããªæ¦å¿µã§åãã¹ãã管çãã¾ãã
graph LR
%%{init: {'theme': 'base', 'themeVariables': { 'lineColor': '#888', 'edgeLabelBackground':'#bbb' }}}%%
Host((ãã¹ã)) -->|N:N| Group[ã°ã«ã¼ã]
Group -->|N:N| Role[Role]
Role -->|1:N| Task(Task)
ã½ããã¦ã§ã¢1åãã»ããã¢ããããæé ã®ããã¾ããRoleã¨å¼ã³ã¾ãï¼ä¾ï¼ãnginxãããMySQLãï¼ãã°ã«ã¼ãã¯ãWebãµã¼ãããDBãµã¼ãããªã©ãã¹ãã®å½¹å²ãå®ç¾©ãã¾ãã
伿¥ã®ã¤ã³ãã©ãªããåãæ§æã®Webãµã¼ãã10å°ä½ããããã«ã°ã«ã¼ãã¯å¿ é ã§ããããããèªå® ã§ã¯åãå½¹å²ã®ãã·ã³ãè¤æ°å¿ è¦ã«ãªããã¨ã¯ã¾ãããã¾ãããããããã®ãã·ã³ãç°ãªãå½¹å²ãæã¤èªå® ç°å¢ã§ãã°ã«ã¼ããã©ãæ±ããã¯æ©ã¿ã®ç¨®ã«ãªãã¾ãã
ã¾ããN:Né¢ä¿ã表ç¾ããããã«è¨å®ãã¡ã¤ã«ã®éå±¤ãæ·±ããªããåé·æ§ãé«ããªãç¹ããå人ç°å¢ã§ã®åã£ã¤ãã«ããã®åå ã¨è¨ããã§ãããã
èªå® ã§ä½¿ããªãããã¹ãæåAnsibleã
ç§ã®åºããçµè«ã¯ãèªå® ã§ã¯ã°ã«ã¼ãã®æ¦å¿µã¯ä¸è¦ã¨å²ãåããä¸è¨ã®ã¹ã¿ã¤ã«ã§éç¨ããã¨ãããã®ã§ãã
%%{init: {'theme': 'base', 'themeVariables': { 'lineColor': '#888', 'edgeLabelBackground':'#bbb' }}}%%
graph LR
Host((ãã¹ã)) -->|1:N| Role[Role]
Role -->|1:N| Task(Task)
ãããµãªã¨ä¸é層ãåããN:Né¢ä¿ãæé¤ãã¾ããã ãã®ã¢ããã¼ãã«ããã1ãã¹ãã«å¯¾å¿ããè¨å®ãã¡ã¤ã«ã¯1ãã¡ã¤ã«ã®ã¿ï¼host_varsï¼ã¨ãªããè¦éããåçã«è¯ããªãã¾ãã
å ·ä½çã«ã¯ã以ä¸ã®ããã«åãã¹ã夿°ãã¡ã¤ã«å ã§ãé©ç¨ãããRoleã®ãªã¹ãããå®ç¾©ãããããªæ¹éã§ããAnsibleã«æ«æãã人ã§ãããã®ãã¡ã¤ã«ãªãã¡ã³ããã³ã¹ã§ããã¤ã¡ã¼ã¸ãæ¹§ãã®ã§ã¯ãªãã§ããããã
--- # host_vars/raspberrypi4.lan/main.yml apply_roles: - system_bootstrap - rsyslog - prometheus.prometheus.node_exporter - name: geerlingguy.docker become: true - docker_apps docker_daemon_options: log-driver: "journald" log-opts: tag: "{{ '{{' }}.Name{{ '}}' }}" docker_apps: - dockge - alloy
site.yml ã¯æ»
å¤ã«ç·¨éããªãå®è¡ã¨ã³ã¸ã³ã«ãªã
ãã®æ§æãå®ç¾ããæå¤§ã®ãã¤ã³ãã¯ãã¡ã¤ã³ã®Playbookã§ãã site.yml ã«å
·ä½çãªæ§ææ
å ±ãä¸åæãããªããã¨ã§ãã
é常ã®Playbookã§ã¯ã°ã«ã¼ããã¨ã«å¯¾å¿ããRoleãè¨è¿°ãã¾ããããã®æ§æã§ã¯å
¨ã¦ã®ãã¹ãã«å¯¾ãã¦ã夿° apply_roles ã«æ¸ãããRoleãé çªã«å®è¡ãããã¨ããå¦çã ããè¡ãã¾ãã
--- - name: Apply dynamic roles to hosts hosts: all tasks: - name: Include roles based on host variable ansible.builtin.include_role: name: "{{ role_item.name | default(role_item) }}" apply: become: "{{ role_item.become | default(false) | bool }}" tags: "{{ role_item.tags | default([]) }}" loop: "{{ apply_roles }}" loop_control: loop_var: role_item tags: - always
ããã«ãããæ°ãããµã¼ãã¼ã追å ããéã site.yml ãç·¨éããå¿
è¦ããªããªããæ°ãããã¹ãç¨ã® host_vars ãã¡ã¤ã«ãä¸ã¤ä½ãã ãã§ä½æ¥ãå®äºãã¾ãã
æ±ç¨Roleã§çã³ã¹ããªã³ã³ããé ç½®
ç§ãéå»ã«Ansibleã«æ«æããé ã¯ãå人ã®ãã·ã³ç®¡çã«Dockerã¯å¤§ãããããã¨æã£ã¦ãã¾ãããç¹ã«èªåãã使ããªãèªä½ãã¼ã¢ã³ãã³ã³ããåããã®ã¯ã³ã¹ããåããªãã¨æãã¦ãã¾ããã
ãã®èãæ¹ãå¤ããä»åã¯ã³ã³ããåã§ãããã®ã¯å
¨ã¦ã³ã³ããåããããã«ãã¾ãããã¾ããã³ã³ãã管çã®ããã®æ±ç¨ã®ã³ã³ãããããã¤Roleï¼docker_appï¼ãç¨æãã¾ããã
ãã® Role ã¯ãdocker_apps夿°ã§æ¸¡ãããã¢ããªåï¼ä¾: alloyï¼ã«åºã¥ãã¦ã以ä¸ã®å¦çãèªåã§è¡ãã¾ãã
- è¨å®ãã¡ã¤ã«ã®æ¢ç´¢:
host_varsã¾ã㯠Role å ã®ãã³ãã¬ã¼ãããdocker-compose.ymlããã®ä»è¨å®ãã¡ã¤ã«ãæ¢ãã - é
ç½®: ãµã¼ãã¼ä¸ã®æå®ã®ãã£ã¬ã¯ããªï¼ä¾:
/opt/stacks/alloyï¼ã«ãã¡ã¤ã«ãé ç½®ã - èµ·å: docker compose up -d ãå®è¡ã
ãã«ãæ¸ã¿ã³ã³ããããããã°ãdocker-compose.yml ãæ¸ã㦠host_vars ã«1è¡è¿½å ããã ãã§ã³ã³ãããå¢ãããã®ã§ã試è¡é¯èª¤ãå¤ãèªå®
ç°å¢ã«é常ã«åãã¦ãã¾ãã
ã¾ã¨ã
èªå® ã§ã®Ansibleéç¨ãç¾å®çã«ãªã£ãããã¨ãã話ãç´¹ä»ãã¾ããã
ä»åã®èª¬æç¨Ansibleããã¸ã§ã¯ãã¯ä»¥ä¸ã®URLã§å ¬éãã¦ãã¾ããéå»ã«èªå® Ansibleã«æ«æããæ¹ã¯åèã«ãã¦ã¿ã¦ãã ããã
æ¬ç¨¿ã®åãçµã¿ã§æããã®ããAIæä»£ã«ãªã£ã¦ãã³ã¹ããã®èãæ¹ã以åã¨å¤ãã£ã¦ããããããªããï¼ã¨ãããã¨ã§ããäººã¯æ¥½ããããçãç©ãªã®ã§ãåªãã¦ãããã©è¤éããããã®ã使ãç¶ãããã¨ã¯ã§ãã¾ãããããããAIã®å©ãã§å ¥éãæ¥½ã«ãªã£ãããæ¥½ã«éç¨ããæ¹æ³ãä¸ç·ã«èãããã§ããããã«ãªãã以åãªãã³ã¹ããåããªãã£ãæè¡ãä»ãªãæ¡ç¨ã§ãããã¨ãããã¨ãä»å¾å¢ãã¦ããã®ã§ã¯ãªãã§ããããã















