Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
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
180
Microsoft Entra/Azure による Redmine の企業内利用向けカスタマイズと運用
yaegashi
0
640
バンダイナムコスタジオにおけるクラウドネイティブなゲーム開発スタジオの挑戦
yaegashi
2
1.6k
Bandai Namco DX Cloud Studios の全貌
yaegashi
0
290
DX(開発者体験)の向上を目指す ゲーム開発インフラの進化とDX(デジタル変革)
yaegashi
0
200
Azure AD対応の認証プロキシサーバをGoで作っている話
yaegashi
0
290
ゲーム開発におけるクラウドネイティブな CI/CD の最新動向
yaegashi
0
570
rclonefunction
yaegashi
0
940
大規模ゲーム開発を支えるAzure DevOpsによるクラウドネイティブなCI/CDの紹介
yaegashi
5
2.8k
Other Decks in Programming
See All in Programming
Observability in Practice:Grafana 與 Edge Device SRE 的那些事
blueswen
0
190
Haskell/Servantを通してWebミドルウェアを捉え直す
pizzacat83
0
330
継続モナドとリアクティブプログラミング
yukikurage
0
110
その問い、本当に正しいですか?AI時代のエンジニアに必要な哲学と認知科学 / ai-philosophy-cognitive-science
minodriven
14
6.6k
任せる範囲はこう広がった / How the Scope of AI Delegation Has Expanded
nrslib
1
230
Signal Forms: Details & Live Coding @enterJS 2026 in Mannheim
manfredsteyer
PRO
0
210
トークンをケチるな、設計しろ:GitHub Copilotを賢く使うコンテキスト戦略
ochtum
0
280
エンジニアにデザインハーネスを 〜デザインプロセスを規定するためのハーネス〜 / Design harness from an engineer's perspective
rkaga
2
610
act1-costs.pdf
sumedhbala
0
160
関数型プログラミングのメリットって何だろう?
wanko_it
0
110
PHPで使える日時の表現と、その知り方 #frontend_phpcon_do
o0h
PRO
0
290
ECSアプリログをFireLensでコスト削減しようとしたけど諦めた話 in Fargate×Node.js
akihisaikeda
2
4.2k
Featured
See All Featured
Designing for humans not robots
tammielis
254
26k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.4k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
500
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.5k
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.7k
The Pragmatic Product Professional
lauravandoore
37
7.4k
Agile that works and the tools we love
rasmusluckow
331
22k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
180
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.1k
Site-Speed That Sticks
csswizardry
13
1.2k
KATA
mclloyd
PRO
35
15k
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 新規モジュール承認プロセスの今後 まとめ