
3月17日から20日(現地時間)にかけてドイツで開催される技術イベント「CloudFest」で、サーバを人力で投げ、その飛距離を競う大会「World Server Throwing Championship 2025」(WSTC 2025)が併催される。18日には男子、19日には女子予選を実施。20日には予選勝者が24年の前回王者などと対戦する「グランドファイナル」を開催する。
「世界サーバ投げ選手権」今年もドイツで開催 「インフラ業界で最もオタク的でエキサイティング」 - ITmedia NEWS
⇧ サーバーに感情というものは無いのだけれど、もし、感情が与えられたと仮定した場合、どういう気持ちなのだろうか...
感謝の気持ちを込めてスローイングしてると信じましょう(小声)
role毎にタスクを分けるのAnsibleの流儀っぽいが...
Ansibleの公式のドキュメントによりますと、
■https://docs.ansible.com/ansible/2.9_ja/user_guide/playbooks_best_practices.html#directory-layout
production # inventory file for production servers staging # inventory file for staging environment
group_vars/
group1.yml # here we assign variables to particular groups group2.yml
host_vars/
hostname1.yml # here we assign variables to particular systems hostname2.yml
library/ # if any custom modules, put them here (optional) module_utils/ # if any custom module_utils to support modules, put them here (optional) filter_plugins/ # if any custom filter plugins, put them here (optional)
site.yml # master playbook webservers.yml # playbook for webserver tier dbservers.yml # playbook for dbserver tier
roles/
common/ # this hierarchy represents a “role”
tasks/ #
main.yml # <– tasks file can include smaller files if warranted
handlers/ #
main.yml # <– handlers file
templates/ # <– files for use with the template resource
ntp.conf.j2 # <——- templates end in .j2
files/ #
bar.txt # <– files for use with the copy resource foo.sh # <– script files for use with the script resource
vars/ #
main.yml # <– variables associated with this role
defaults/ #
main.yml # <– default lower priority variables for this role
meta/ #
main.yml # <– role dependencies
library/ # roles can also include custom modules module_utils/ # roles can also include custom module_utils lookup_plugins/ # or other types of plugins, like lookup in this case
webtier/ # same kind of structure as “common” was above, done for the webtier role monitoring/ # “” fooapp/ # “”
⇧ と言った感じで、「roles」ディレクトリ配下に「ロール」毎のディレクトリを用意して、「tasks」ディレクトリにタスクのYAMLファイルを配置する感じになりますと。
で、そも「Ansible」における「ロール」とは何なのか?
ロール
ロールは、既知のファイル構造に基づいて特定の vars_files、タスク、およびハンドラーを自動的に読み込む方法です。 ロールでコンテンツをグループ化すると、他のユーザーとのロールの共有が容易になります。
https://docs.ansible.com/ansible/2.9_ja/user_guide/playbooks_reuse_roles.html
⇧ うむ、全く分らん。
Red Hatの公開しているドキュメントによりますと、
Ansible Playbook の代わりに Ansible Role を使用する理由
Ansible Role と Ansible Playbook は、どちらも自動化タスクを整理して実行するためのツールですが、それぞれの目的は異なります。Ansible Role を作成するか、すべてのタスクを Ansible Playbook に記述するかは、ユースケースと Ansible の経験値によって決まります。
https://www.redhat.com/ja/topics/automation/what-is-an-ansible-role
⇧ とあり、「Playbook」に全てのタスクを書き込むのでも問題はないらしいのだが、
再利用性と共有
ロールは自動化の再利用可能なユニットとして設計されています。ロールは、1 つの play または Playbook のコンテキストから自動化タスクの論理的なグループ化を分離するのに役立つため、複数の play または Playbook 全体で再利用したり、共有して他のプロジェクトで再利用したりすることができます。
https://www.redhat.com/ja/topics/automation/what-is-an-ansible-role
⇧「ロール」にタスクを切り出すことで、使い回しが可能になるということみたい。
とりあえず、
⇧ 上図のような感じで、「ロール」に切り出して「Playbook」から呼び出せる形にしておくのが良さそうではある。
が、「ロール」の粒度をどうすれば良いのかがいまいち、分からんのよね...
公式のドキュメントを見た感じだと、
- common
- webserbers
- apache
- postgres
とか何かバラバラなんよね...
Ansibleのタスクで共通的な処理ってどこに配置すれば良いのか
で、気になるのが、全てで利用する処理ではないが、使い回しができそうな処理とかを共通化したいことって、プログラミングの世界だとあるあるなのだが、「Ansible」のような「IaC(Infrastructure as Code)」の世界ではどうなのか?
ネットの情報を漁っていたところ、
⇧ 上記サイト様にありますように、正解は無いっぽいですと。
そもそも、このあたりの話に言及している情報がほぼ無いというね...
そして、
roles/ディレクトリ配下に呼び出しに使用する任意のロール名(ここではhello)のディレクトリ、その下にtasksディレクトリ、処理を記述するmain.ymlファイルになります。
tasksディレクトリとmain.ymlファイルの命名は固定のようです。
⇧ まさかの命名ルールの縛りがあるという...
公式のドキュメントを見てみると、
ロールは、ファイルが特定のディレクトリー名にあることを想定しています。ロールには上記のディレクトリーのいずれかを含める必要がありますが、使用されていないものは除外しても問題はありません。使用中、それぞれのディレクトリーには、関連するコンテンツが含まれている main.yml ファイルが含まれている必要があります。
tasks- このロールによって実行される主なタスクの一覧が含まれます。handlers- このロールによって使用される可能性のあるハンドラーや、このロールの外でも使用できるハンドラーが含まれます。defaults- ロールのデフォルト変数です (詳細は 変数の使用 を参照)。vars- ロールの他の変数です (詳細は 変数の使用 を参照)。files- このロールでデプロイできるファイルが含まれます。templates- このロールでデプロイできるテンプレートが含まれます。meta- このロールのメタデータを定義します。詳細は、以下を参照してください。
https://docs.ansible.com/ansible/2.9_ja/user_guide/playbooks_reuse_roles.html
⇧ 確かに、「main.yml」固定になるらしい...
う~む、ディレクトリに複数のYAMLファイルを配置できないということは、
- ディレクトリを増やす
- main.ymlにタスクをまとめる
のどちらかになるということか...
「ロール名」のディレクトリ配下をサブディレクトリにする、所謂、ネストした「ロール」が実現できるのかも分からないですし...
何やら、
⇧ 上記サイト様によりますと、「ロール名」のディレクトリに階層構造を持たせることができるらしい。
公式のドキュメントに記載しておいて欲しいよね...
プログラミング的には、
⇧ 上記サイト様にありますように、「2. main.ymlにタスクをまとめる」のアプローチは避けたいところではありますが...
「Ansible」のような「IaC(Infrastructure as Code)」の世界の思想が分からないので何とも言えないのですが...
毎度モヤモヤ感が半端ない…
今回はこのへんで。





