SlideShare ist ein Scribd-Unternehmen logo
1 von 17
Downloaden Sie, um offline zu lesen
知っていると 
ちょっと便利なこと 
若山 史郎 @r_rudi
おまえだれよ? 
• 若山史郎 @ ツキノワ株式会社 
• お仕事募集中です 
• Twitter ID: r_rudi 
• 著書 
• Ansible: 「入門Ansible」 
• Sphinx :「 Sphinxをはじめよう」
今日お話すること 
• 知っているとちょっと便利なこと 
• いろいろなな小ネタを用意しました 
• 全部で7つです。お互いに関連性はありません
一つ目 
roles_path 
検閲済み
roles_path (1/7) 
• roleが散らばって困っていませんか 
• リポジトリが違う場合など 
• ansible.cfgに “roles_path” を設定できます 
roles_path=/opt/roles:../roles 
! 
• “:”で区切って複数個指定できます 
• “..” など相対パスも使えます
roleの検索順序 (1/7) 
• roleの検索順序 
1. 自分のディレクトリの roles 以下 
2. 自分のディレクトリ 
3. roles_pathを前から探していく 
./deploy.yml 
/inventory 
/roles/hoge/tasks 
/hoge/tasks/ 
← こっちが先
whenの複数条件 (2/7) 
when: ansible_os_family == "RedHat" ! and mode == "production" 
• 長すぎ。こう書けます 
when: 
- ansible_os_family == "RedHat" 
- mode == "production"
shellで環境変数 (3/7) 
• “environment” 
• ちなみにどのモジュールでも使えます 
! 
! 
- shell: something.sh 
environment: 
PATH: /opt/bin 
• sourceは使えない。 “.” かbashで実行 
- shell: source envfile && something.sh 
stderr: /bin/sh: 1: source: not found 
- shell: . envfile && something.sh 
- shell: source envfile && something.sh 
executable=/bin/bash
数字として比較 (4/7) 
• 普通に書くと、文字列での比較となってしまう 
- shell: cat /var/log/something.log | wc -l 
register: logline 
- fail: msg="too long" 
when: logline.stdout > 300 
- shell: cat /var/log/something.log | wc -l 
register: logline 
- fail: msg="too long" 
when: logline.stdout | int > 300
バージョンを比較 (4/7) 
• “3.0.16” などのバージョンを比較できます 
vars: 
version: 3.0.16 
tasks: 
- debug: msg="its old!" 
when: version | version_compare(‘3.0.20’, '<=')
正規表現で比較 (4/7) 
vars: 
url: "http://example.com/users/foo/resources/bar" 
! 
tasks: 
- shell: "msg='パターン 1にマッチ (完全一致)’" 
when: url | match("http://example.com/users/.*/ 
resources/.*") 
! 
- debug: "msg='パターン 2にマッチ (部分一致)’" 
when: url | search("/users/.*/resources/.*")
cronモジュール (5/7) 
• crontabの書き方を忘れたりしませんか? 
• minute, hour などで指定できます 
cron: name=“check” 
minute=30 hour="5,2" job="ls -alh > /dev/null" 
! 
• @reboot なども指定できます 
cron: name="reboot" special_time=reboot job="ls -lah" 
! 
• AnsibleのDSLを覚えておけばいい
local_fact (6/7) 
• /etc/ansible/facts.d/hosts.fact 
• 対象ホストにファイルを置くとfactとなる 
[group] 
stage=! 
development 
role=webserver 
! 
• 使い方 
- debug: msg={{ ansible_local.hosts.group.role }}
local_fact (6/7) 
• JSONでも書けます 
{ 
"group": { 
! 
“role”:"webserver", 
“stage”: “development” 
} 
} 
! 
• 実行権限をつけると、動的に生成できます 
#!/bin/sh 
cat <<EOF 
{"group": { 
“role”:"webserver", 
“stage”: “development” } 
} 
EOF
local_path (6/7) 
• /etc/ansible/facts.d/じゃない場所を使いたい! 
• setupモジュールを使う 
tasks: 
- setup: fact_path="/home/shirou/tmp/ansible" 
- debug: msg={{ ansible_local.hosts.group.role }}
chatops (7/7) 
• slack + hubot
まとめ 
1. role_path 
2. when 
3. shell 
4. 数字として比較 
5. cron 
6. local_fact 
7. hubot + slack 
• 小ネタを用意しました 
• 全部ドキュメントに書い 
てあります 
• hubotは後でgistを 
• 今後も便利な機能が増え 
ていくので乞うご期待

Weitere ähnliche Inhalte

Ähnlich wie Ansible meetup201409

Sqale の Puppet と Chef (と テスト)
Sqale の Puppet と Chef (と テスト)Sqale の Puppet と Chef (と テスト)
Sqale の Puppet と Chef (と テスト)hiboma
 
知って得する標準関数の使い方
知って得する標準関数の使い方知って得する標準関数の使い方
知って得する標準関数の使い方Soudai Sone
 
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話Daichi Koike
 
ぼくのかんがえた Itamae/Serverspec 構成フレームワーク 〜 Kondate 〜
ぼくのかんがえた Itamae/Serverspec 構成フレームワーク 〜 Kondate 〜ぼくのかんがえた Itamae/Serverspec 構成フレームワーク 〜 Kondate 〜
ぼくのかんがえた Itamae/Serverspec 構成フレームワーク 〜 Kondate 〜Naotoshi Seo
 
アルゴリズム+データ構造勉強会(8)
アルゴリズム+データ構造勉強会(8)アルゴリズム+データ構造勉強会(8)
アルゴリズム+データ構造勉強会(8)noldor
 
メタメタプログラミングRuby
メタメタプログラミングRubyメタメタプログラミングRuby
メタメタプログラミングRubyemasaka
 
⑳CSSでアニメーション!その1
⑳CSSでアニメーション!その1⑳CSSでアニメーション!その1
⑳CSSでアニメーション!その1Nishida Kansuke
 
ChefユーザのためのAnsible入門
ChefユーザのためのAnsible入門ChefユーザのためのAnsible入門
ChefユーザのためのAnsible入門Mahito Ogura
 
長いの
長いの長いの
長いのemasaka
 
私がPerlを使う理由
私がPerlを使う理由私がPerlを使う理由
私がPerlを使う理由Yohei Azekatsu
 
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24Kazuhiro Sera
 
Mod lua
Mod luaMod lua
Mod luado_aki
 
Elasticsearch at CrowdWorks
Elasticsearch at CrowdWorksElasticsearch at CrowdWorks
Elasticsearch at CrowdWorks佑介 九岡
 
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発emasaka
 
WordPress中級者への道!テンプレートタグはどう動くのか!?
WordPress中級者への道!テンプレートタグはどう動くのか!?WordPress中級者への道!テンプレートタグはどう動くのか!?
WordPress中級者への道!テンプレートタグはどう動くのか!?Shinichi Nishikawa
 
クライアントサイドjavascript簡単紹介
クライアントサイドjavascript簡単紹介クライアントサイドjavascript簡単紹介
クライアントサイドjavascript簡単紹介しくみ製作所
 
ARMテンプレートでサーバーレスに挑む!
ARMテンプレートでサーバーレスに挑む!ARMテンプレートでサーバーレスに挑む!
ARMテンプレートでサーバーレスに挑む!Kazumi IWANAGA
 
RealtimeTweakPickerMode
RealtimeTweakPickerModeRealtimeTweakPickerMode
RealtimeTweakPickerModeYoh Akiyama
 

Ähnlich wie Ansible meetup201409 (20)

Sqale の Puppet と Chef (と テスト)
Sqale の Puppet と Chef (と テスト)Sqale の Puppet と Chef (と テスト)
Sqale の Puppet と Chef (と テスト)
 
知って得する標準関数の使い方
知って得する標準関数の使い方知って得する標準関数の使い方
知って得する標準関数の使い方
 
Haikara
HaikaraHaikara
Haikara
 
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
 
ぼくのかんがえた Itamae/Serverspec 構成フレームワーク 〜 Kondate 〜
ぼくのかんがえた Itamae/Serverspec 構成フレームワーク 〜 Kondate 〜ぼくのかんがえた Itamae/Serverspec 構成フレームワーク 〜 Kondate 〜
ぼくのかんがえた Itamae/Serverspec 構成フレームワーク 〜 Kondate 〜
 
アルゴリズム+データ構造勉強会(8)
アルゴリズム+データ構造勉強会(8)アルゴリズム+データ構造勉強会(8)
アルゴリズム+データ構造勉強会(8)
 
メタメタプログラミングRuby
メタメタプログラミングRubyメタメタプログラミングRuby
メタメタプログラミングRuby
 
⑳CSSでアニメーション!その1
⑳CSSでアニメーション!その1⑳CSSでアニメーション!その1
⑳CSSでアニメーション!その1
 
ChefユーザのためのAnsible入門
ChefユーザのためのAnsible入門ChefユーザのためのAnsible入門
ChefユーザのためのAnsible入門
 
長いの
長いの長いの
長いの
 
私がPerlを使う理由
私がPerlを使う理由私がPerlを使う理由
私がPerlを使う理由
 
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
 
Mod lua
Mod luaMod lua
Mod lua
 
Elasticsearch at CrowdWorks
Elasticsearch at CrowdWorksElasticsearch at CrowdWorks
Elasticsearch at CrowdWorks
 
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
 
What is chef
What is chefWhat is chef
What is chef
 
WordPress中級者への道!テンプレートタグはどう動くのか!?
WordPress中級者への道!テンプレートタグはどう動くのか!?WordPress中級者への道!テンプレートタグはどう動くのか!?
WordPress中級者への道!テンプレートタグはどう動くのか!?
 
クライアントサイドjavascript簡単紹介
クライアントサイドjavascript簡単紹介クライアントサイドjavascript簡単紹介
クライアントサイドjavascript簡単紹介
 
ARMテンプレートでサーバーレスに挑む!
ARMテンプレートでサーバーレスに挑む!ARMテンプレートでサーバーレスに挑む!
ARMテンプレートでサーバーレスに挑む!
 
RealtimeTweakPickerMode
RealtimeTweakPickerModeRealtimeTweakPickerMode
RealtimeTweakPickerMode
 

Mehr von shirou wakayama

ansible-playbook useful command line options
ansible-playbook useful command line optionsansible-playbook useful command line options
ansible-playbook useful command line optionsshirou wakayama
 
Open Stack Day - Ansibleによる環境構築の自動化
Open Stack Day - Ansibleによる環境構築の自動化Open Stack Day - Ansibleによる環境構築の自動化
Open Stack Day - Ansibleによる環境構築の自動化shirou wakayama
 
MQTT meetup in Tokyo 機能概要
MQTT meetup in Tokyo 機能概要MQTT meetup in Tokyo 機能概要
MQTT meetup in Tokyo 機能概要shirou wakayama
 
Ansible for beginners ...?
Ansible for beginners ...?Ansible for beginners ...?
Ansible for beginners ...?shirou wakayama
 
Tinkerer for pyfes 201303
Tinkerer for pyfes 201303Tinkerer for pyfes 201303
Tinkerer for pyfes 201303shirou wakayama
 

Mehr von shirou wakayama (7)

ansible-playbook useful command line options
ansible-playbook useful command line optionsansible-playbook useful command line options
ansible-playbook useful command line options
 
EdisonでMQTT
EdisonでMQTTEdisonでMQTT
EdisonでMQTT
 
Open Stack Day - Ansibleによる環境構築の自動化
Open Stack Day - Ansibleによる環境構築の自動化Open Stack Day - Ansibleによる環境構築の自動化
Open Stack Day - Ansibleによる環境構築の自動化
 
MQTT meetup in Tokyo 機能概要
MQTT meetup in Tokyo 機能概要MQTT meetup in Tokyo 機能概要
MQTT meetup in Tokyo 機能概要
 
Ansible for beginners ...?
Ansible for beginners ...?Ansible for beginners ...?
Ansible for beginners ...?
 
Ansible入門...?
Ansible入門...?Ansible入門...?
Ansible入門...?
 
Tinkerer for pyfes 201303
Tinkerer for pyfes 201303Tinkerer for pyfes 201303
Tinkerer for pyfes 201303
 

Kürzlich hochgeladen

持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見Shumpei Kishi
 
20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdfAyachika Kitazaki
 
2024 01 Virtual_Counselor
2024 01 Virtual_Counselor 2024 01 Virtual_Counselor
2024 01 Virtual_Counselor arts yokohama
 
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法ssuser370dd7
 
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdfTaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdfMatsushita Laboratory
 
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦Sadao Tokuyama
 
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~arts yokohama
 
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-LoopへTetsuya Nihonmatsu
 
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)ssuser539845
 

Kürzlich hochgeladen (12)

持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
 
20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf
 
2024 03 CTEA
2024 03 CTEA2024 03 CTEA
2024 03 CTEA
 
What is the world where you can make your own semiconductors?
What is the world where you can make your own semiconductors?What is the world where you can make your own semiconductors?
What is the world where you can make your own semiconductors?
 
2024 04 minnanoito
2024 04 minnanoito2024 04 minnanoito
2024 04 minnanoito
 
2024 01 Virtual_Counselor
2024 01 Virtual_Counselor 2024 01 Virtual_Counselor
2024 01 Virtual_Counselor
 
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
 
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdfTaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
 
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
 
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
 
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
 
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
 

Ansible meetup201409

  • 2. おまえだれよ? • 若山史郎 @ ツキノワ株式会社 • お仕事募集中です • Twitter ID: r_rudi • 著書 • Ansible: 「入門Ansible」 • Sphinx :「 Sphinxをはじめよう」
  • 3. 今日お話すること • 知っているとちょっと便利なこと • いろいろなな小ネタを用意しました • 全部で7つです。お互いに関連性はありません
  • 5. roles_path (1/7) • roleが散らばって困っていませんか • リポジトリが違う場合など • ansible.cfgに “roles_path” を設定できます roles_path=/opt/roles:../roles ! • “:”で区切って複数個指定できます • “..” など相対パスも使えます
  • 6. roleの検索順序 (1/7) • roleの検索順序 1. 自分のディレクトリの roles 以下 2. 自分のディレクトリ 3. roles_pathを前から探していく ./deploy.yml /inventory /roles/hoge/tasks /hoge/tasks/ ← こっちが先
  • 7. whenの複数条件 (2/7) when: ansible_os_family == "RedHat" ! and mode == "production" • 長すぎ。こう書けます when: - ansible_os_family == "RedHat" - mode == "production"
  • 8. shellで環境変数 (3/7) • “environment” • ちなみにどのモジュールでも使えます ! ! - shell: something.sh environment: PATH: /opt/bin • sourceは使えない。 “.” かbashで実行 - shell: source envfile && something.sh stderr: /bin/sh: 1: source: not found - shell: . envfile && something.sh - shell: source envfile && something.sh executable=/bin/bash
  • 9. 数字として比較 (4/7) • 普通に書くと、文字列での比較となってしまう - shell: cat /var/log/something.log | wc -l register: logline - fail: msg="too long" when: logline.stdout > 300 - shell: cat /var/log/something.log | wc -l register: logline - fail: msg="too long" when: logline.stdout | int > 300
  • 10. バージョンを比較 (4/7) • “3.0.16” などのバージョンを比較できます vars: version: 3.0.16 tasks: - debug: msg="its old!" when: version | version_compare(‘3.0.20’, '<=')
  • 11. 正規表現で比較 (4/7) vars: url: "http://example.com/users/foo/resources/bar" ! tasks: - shell: "msg='パターン 1にマッチ (完全一致)’" when: url | match("http://example.com/users/.*/ resources/.*") ! - debug: "msg='パターン 2にマッチ (部分一致)’" when: url | search("/users/.*/resources/.*")
  • 12. cronモジュール (5/7) • crontabの書き方を忘れたりしませんか? • minute, hour などで指定できます cron: name=“check” minute=30 hour="5,2" job="ls -alh > /dev/null" ! • @reboot なども指定できます cron: name="reboot" special_time=reboot job="ls -lah" ! • AnsibleのDSLを覚えておけばいい
  • 13. local_fact (6/7) • /etc/ansible/facts.d/hosts.fact • 対象ホストにファイルを置くとfactとなる [group] stage=! development role=webserver ! • 使い方 - debug: msg={{ ansible_local.hosts.group.role }}
  • 14. local_fact (6/7) • JSONでも書けます { "group": { ! “role”:"webserver", “stage”: “development” } } ! • 実行権限をつけると、動的に生成できます #!/bin/sh cat <<EOF {"group": { “role”:"webserver", “stage”: “development” } } EOF
  • 15. local_path (6/7) • /etc/ansible/facts.d/じゃない場所を使いたい! • setupモジュールを使う tasks: - setup: fact_path="/home/shirou/tmp/ansible" - debug: msg={{ ansible_local.hosts.group.role }}
  • 16. chatops (7/7) • slack + hubot
  • 17. まとめ 1. role_path 2. when 3. shell 4. 数字として比較 5. cron 6. local_fact 7. hubot + slack • 小ネタを用意しました • 全部ドキュメントに書い てあります • hubotは後でgistを • 今後も便利な機能が増え ていくので乞うご期待