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
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
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
690
バンダイナムコスタジオにおけるクラウドネイティブなゲーム開発スタジオの挑戦
yaegashi
2
1.7k
Bandai Namco DX Cloud Studios の全貌
yaegashi
0
350
DX(開発者体験)の向上を目指す ゲーム開発インフラの進化とDX(デジタル変革)
yaegashi
0
230
Azure AD対応の認証プロキシサーバをGoで作っている話
yaegashi
0
310
ゲーム開発におけるクラウドネイティブな CI/CD の最新動向
yaegashi
0
610
rclonefunction
yaegashi
0
960
大規模ゲーム開発を支えるAzure DevOpsによるクラウドネイティブなCI/CDの紹介
yaegashi
5
2.9k
Other Decks in Programming
See All in Programming
フロントエンドUIフレームワークのこれまでとこれから
ssssota
5
3.1k
App Intentsのビルドプロセスを支える技術
kntkymt
0
490
Everything will be SERVERLESS — 信じて運用した10年の経験値 / Everything Will be Serverless — Lessons Learned from 10 Years of Operational Experience
seike460
PRO
1
660
IBM Bob Dojo #1 仕様駆動開発入門
oniak3ibm
PRO
0
320
Embedded Swiftで作る自作USBデバイス によるiOSデバイスの自動テスト / iOSDC Japan 2026 glassfiber
glassfiber
0
250
iOSDCのペンライトを自動制御したい!
akkeylab
0
330
AI が書く Go コードの品質を劇的に向上させる Linter: “declscope”
mpyw
0
460
JPUG勉強会 OSSデータベースの内部構造を理解しよう(第2回)
oga5
0
290
Ghostty + Neovimで作る 透明でカッコ良い開発環境
j341nono
0
150
FreeBSDでZabbixを動かす
kenkino
0
340
Omarchy Tokyo やると聞いて UMPC 買ってセットアップしてきた
mtsmfm
0
200
iOSDC2026登壇資料.pdf
riofujimon
0
200
Featured
See All Featured
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.6k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
1
540
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
270
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
840
Deep Space Network (abreviated)
tonyrice
0
350
Statistics for Hackers
jakevdp
799
230k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
260
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Paper Plane (Part 1)
katiecoart
PRO
2
11k
First, design no harm
axbom
PRO
2
1.3k
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.2k
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
440
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 新規モジュール承認プロセスの今後 まとめ