Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Ansible モジュール 作成・配布・貢献
Search
YAEGASHI Takeshi
September 14, 2015
Programming
4k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Ansible モジュール 作成・配布・貢献
YAEGASHI Takeshi
September 14, 2015
More Decks by YAEGASHI Takeshi
See All by YAEGASHI Takeshi
Microsoft Entra IDとAzure App Serviceによる エンタープライズWebアプリ・サービスのプラットフォーム構築
yaegashi
0
190
Microsoft Entra/Azure による Redmine の企業内利用向けカスタマイズと運用
yaegashi
0
670
バンダイナムコスタジオにおけるクラウドネイティブなゲーム開発スタジオの挑戦
yaegashi
2
1.7k
Bandai Namco DX Cloud Studios の全貌
yaegashi
0
310
DX(開発者体験)の向上を目指す ゲーム開発インフラの進化とDX(デジタル変革)
yaegashi
0
230
Azure AD対応の認証プロキシサーバをGoで作っている話
yaegashi
0
300
ゲーム開発におけるクラウドネイティブな CI/CD の最新動向
yaegashi
0
600
rclonefunction
yaegashi
0
960
大規模ゲーム開発を支えるAzure DevOpsによるクラウドネイティブなCI/CDの紹介
yaegashi
5
2.9k
Other Decks in Programming
See All in Programming
[DroidKaigi 2026] Bring your own phones to Gradle Managed Devices
f2lk
0
110
Hello, Hiroshima Geospatial Data! — Exploring DoboX with Python
ra0kley
0
180
ALB ログから Trace を気合で繋げる技術
fohte
7
880
マイコン向けの軽量Ruby「PicoRuby」で各種デバイスを制御するネイティブアプリの実現手法
bash0c7
0
180
Laravelのアプリケーションをどこにデプロイするか #ツナギメオフライン.9
akase244
0
120
不幸な GC
chencmd
0
890
まだ間に合う!今年の夏こそSchemeのマクロ展開器を完全理解!
omasanori
0
640
「AI時代、配布するPythonコードをどう守るか: 難読化の実験と判断軸」 #PyconJP2026
pkshadeck
PRO
2
180
標準パッケージに uuid が追加された 背景から見る Go らしい意思決定 / go_127_uuid_decision
convto
4
3.4k
思考垂れ流し開発 ~音声入力 × AIエージェント × 開発ハーネスによる試行錯誤~
npostring
0
990
『寄り添うラジオ』をAIで作る 体験価値から逆算した、会話しないUXと品質設計
theoriatec2024
3
140
AIを上手に使っていこうとしたら越境せざるを得なくなった話 〜実践1年で見えた境界を越えなければならない理由と進め方〜 / Crossing borders with AI
tomoyakitaura
4
1.1k
Featured
See All Featured
The Spectacular Lies of Maps
axbom
PRO
1
980
Navigating Team Friction
lara
192
16k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.7k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
820
The browser strikes back
jonoalderson
0
1.6k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.6k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
520
The Curse of the Amulet
leimatthew05
2
14k
Amusing Abliteration
ianozsvald
1
290
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.1k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
510
Transcript
Ansible モジュール 作成・配布・貢献 八重樫 剛史 GitHub: @yaegashi Twitter: @hogegashi
自己紹介 八重樫 剛史 (YAEGASHI Takeshi) - Twitter @hogegashi - GitHub
@yaegashi Ansible を個人的に使用しています Python の腕前は素人に毛がはえた程度です
今日の話題 Ansible モジュールの紹介: blockinfile Ansible モジュールの作成と配布のノウハウ・ベストプラクティス Ansible アップストリーム (本家) への貢献の道
yaegashi 自身の経験をもとにお話します スライドを作りすぎましたが全部発表します スライドは後ほど公開します
blockinfile モジュールの紹介
blockinfile モジュールの紹介 テキストファイルに複数行のブロックを挿入・更新・削除するモジュール 名前は標準モジュール lineinfile からの連想 Ansible にはなぜか複数行のテキストを扱うモジュールがないので作った - lineinfile
は 1 行しか挿入・更新・削除できない - ansible-project などで相談すると、だいたい template や assemble を使うことを 勧められるが、そういうのを使わず既存ファイルを修正したいときもある
blockinfile 利用例 apache2 の設定ファイルに <Location> ブロックを挿入するタスク - name: insert <Location>
block in apache2 config blockinfile: dest: /etc/apache2/sites-available/default.conf insertbefore: </VirtualHost> block: | <Location /app> ProxyPass http://127.0.0.1:8000 ProxyPassReverse http://127.0.0.1:8000 </Location>
/etc/apache2/sites-available/default.conf (before) blockinfile 利用例 <VirtualHost *:80> <Directory ...> </Directory> </VirtualHost>
- name: insert <Location> block in apache2 … blockinfile: dest: /etc/apache2/sites-available/… insertbefore: </VirtualHost> block: | <Location /app> ProxyPass http://localhost:8080 ProxyPassReverse http://localhost:8080 </Location>
/etc/apache2/sites-available/default.conf (after) <VirtualHost *:80> <Directory ...> </Directory> # BEGIN ANSIBLE
MANAGED BLOCK <Location /app> ProxyPass http://localhost:8080 ProxyPassReverse http://localhost:8080 </Location> # END ANSIBLE MANAGED BLOCK </VirtualHost> blockinfile 利用例 blockinfile に 追加されたマーカー (変更可)
blockinfile モジュールまとめ 簡単にセットアップできて便利なのでみなさんぜひ使ってください GitHub: ansible-role-blockinfile Ansible Galaxy: blockinfile 関連ブログポスト: -
http://blog.keshi.org/hogememo/2014/08/24/ansible-blockinfile-module - http://blog.keshi.org/hogememo/2015/04/26/ansible-blockinfile-v0-3
Ansible モジュール開発のノウハウ
Ansible モジュール開発のノウハウ 時間が足りないので省略 ユニットテストやドキュメントの自動生成などネタはあるが、またの機会に… 最初は似た機能の標準モジュールを真似するところから始めるのが良いと思う blockinfile モジュールも lineinfile や replace
からのコピペで作りました
Ansible モジュール配布のノウハウ (今日の本題 1)
Ansible モジュール配布のノウハウ モジュールはロールの形にして GitHub で公開しましょう
モジュールをロールに格納する http://github.com/yaegashi/ansible-role-blockinfile の構造 - ├─/ansible-role-blockinfile ├─/library │ └─blockinfile.py ├─/meta │
└─default.yml ├─/tasks (なし) ├─/tests └─README.md /library がロール実行時にモジュール検索パスに追加される ひとつのロールに複数のモジュールを収録できる /meta/default.yml の中でロール依存関係の記述も可能 モジュールのユニットテストも入れておくとよい ロールおよびモジュールのドキュメント ロールはタスクを含んでいる必要はない
Ansible Galaxy にロールを登録 ユーザによるレビュー・評価を受けられ る GitHub がバックエンド - Issue Tracker
でバグ報告をしてもらえる - パッチをプルリクエストしてもらえる yaegashi.blockinfile ロール https://galaxy.ansible.com/list#/roles/1475
Ansible Galaxy にロールを登録 Ansible Galaxy で公開したロールは インストールやアップデートが簡単!! $ ansible-galaxy install
yaegashi.blockinfile
Ansible Galaxy 登録ロールからのモジュール利用 blockinfile モジュールを利用するプレイブック一式のディレクトリ構成 ├─/roles │ ├─/yaegashi.blockinfile │ ├─/library
│ │ └─blockinfile.py │ └─/meta │ └─default.yml ├─/library │ └─othermodule.py ├─playbook1.yml ├─playbook2.yml ansible-galaxy でインストールした yaegashi.blockinfile ロール
Ansible Galaxy 登録ロールからのモジュール利用 blockinfile モジュールを利用するプレイブックの構成 --- - hosts: all roles:
- yaegashi.blockinfile - role1 - role2 tasks: - shell: ... - blockinfile: ... yaegashi.blockinfile ロールを 最初に呼び出す yaegashi.blockinfile ロールの モジュールは別のロールからも呼び出せ る プレイブックのタスクでも モジュールが使用できる
Ansible モジュール貢献のノウハウ (今日の本題 2)
Ansible モジュール 貢献のノウハウ 自作の Ansible モジュールが好評! Ansible アップストリーム (本家) にモジュールをコントリビュート
(寄贈) しよう!
モジュール追加のプルリクエストを GitHub の ansible-modules-extras に出す Ansible 新規モジュール プルリクエスト ansible-modules-extras とは?
- Ansible の新規モジュールが追加される登竜門リポジトリ - これに収録されたモジュールは Ansible のリリースと一緒に配布される - 重要度の高いモジュールは ansible-modules-core に昇格することもあ る
Ansible 新規モジュール チェックリスト Module Checklist をよく読んでモジュールを仕上げましょう Module Checklist の主な内容 ライセンス:
GPL version 3 最初の Python コメントに明記すること ドキュメント: - required: は全パラメータに設定必須 - default: は required: false なら必須、そうでなければ不要 - author: に作者名と GitHub アカウント名を明記すること - U() C() I() M() などのテキスト修飾を適切に使うこと - などなど コード: - いかなる例外も出さないこと 例外出したらそれはバグ - エラーは sys.exit() で終了しない 代わりに fail_json() を使うこと - from ansible.module_utils.basic import * は最後に書くこと - などなど
Ansible 新規モジュール 承認基準 (2015/05) Travis CI による自動ビルドチェックが成功する - Python 2.4
で動かないモジュールは失敗する (PEP 308 使ってるなど) Module Checklist に適合している 既存モジュール作者 (148名) によるレビューと推薦 - 2 人以上からの +1 があり、 -1 がないこと - 既存モジュール作者が提出するモジュールは自薦の +1 を含めてよい (マージ後) モジュールの作者がメンテナとしてバグ報告などに対処できること
Ansible 新規モジュール プルリクエスト実例と経過 (今日の本題 3)
Ansible 新規モジュール プルリクエスト実例と経過 ansible-modules-extras に 2 つのプルリクエストを出しているのだが… - Aug 14:
#832 New module: blockinfile - Sep 11: #958 New modules: openvz, openvz_exec コメント数 0 誰もレビューしてくれない (T_T)
Ansible 新規モジュール プルリクエスト実例と経過 Google Groups の ansible-devel で愚痴ったのだが… スレッドに自分以外の投稿なし 誰も反応してくれない
(T_T)
Ansible 新規モジュール プルリクエスト実例と経過 そこに Ansible Community Guy を名乗る男からメールが!
Ansible 新規モジュール 承認プロセスの現状 Greg DeKoenigsberg 曰く - 率直にいって現在の新規モジュール承認プロセスはあまりうまくいってない - 手続きが煩雑すぎる
- レビュアーに対する動機付けが弱い - レビュアーを既存モジュール作者に限定したのは間違いだったかもしれない
Ansible 新規モジュール 承認プロセスの改革 Greg DeKoenigsberg 曰く - 新規モジュール承認プロセスの修正を検討している - 既存モジュール作者にレビュアーを限定しない予定である
新規モジュール承認基準の要点 - 誰かが検査・レビューすること - 誰かが実際に自分の環境でテストすること - モジュール作者がマージ後もメンテナンスすること - ユニットテストがあること (core モジュールのみ)
Ansible 新規モジュール 承認プロセスの感想 yaegashi の感想 - 増え続けるモジュールを core と extras
に分離し、 extras モジュールのレビューと メンテナンスをコミュニティに任せようとする方針は正しい - しかしながら、現時点ではコミュニティメンバーが他人の作ったモジュールのレ ビューを行う動機付けに乏しい - 既存モジュール作者にコネがなければレビューもしてもらえないのではないか - 自分の専門外の分野のモジュールのレビューはできないのではないか - 他の上手くいっているプロジェクトから学ぶことはないだろうか - Linux カーネルとか… 規模が違いすぎる?
新規モジュール コントリビュート完遂の道のりは険しい - 現時点ではコネがない限り、新規モジュールのマージは難しそう - Ansible, Inc. でも現状を問題に感じており、改革をしようとしている - しばらくプルリクエストの放置プレイが続きそうだが、気長に待ちましょう
- 新規ユーザ獲得の努力、コネを作る努力は地道にしておきましょう Ansible 新規モジュール 承認プロセス まとめ
まとめ
blockinfile モジュールの紹介 Ansible モジュール配布のノウハウ・ベストプラクティス Ansible モジュール寄贈の概要・実例 Ansible 新規モジュール承認プロセスの今後 まとめ