SlideShare une entreprise Scribd logo
1  sur  17
Télécharger pour lire hors ligne
知っていると 
ちょっと便利なこと 
若山 史郎 @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を 
• 今後も便利な機能が増え 
ていくので乞うご期待

Contenu connexe

Similaire à Ansible meetup201409

Sqale の Puppet と Chef (と テスト)
Sqale の Puppet と Chef (と テスト)Sqale の Puppet と Chef (と テスト)
Sqale の Puppet と Chef (と テスト)
hiboma
 
アルゴリズム+データ構造勉強会(8)
アルゴリズム+データ構造勉強会(8)アルゴリズム+データ構造勉強会(8)
アルゴリズム+データ構造勉強会(8)
noldor
 
長いの
長いの長いの
長いの
emasaka
 
私がPerlを使う理由
私がPerlを使う理由私がPerlを使う理由
私がPerlを使う理由
Yohei Azekatsu
 
Mod lua
Mod luaMod lua
Mod lua
do_aki
 
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
emasaka
 

Similaire à 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
 

Plus de 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
 

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を • 今後も便利な機能が増え ていくので乞うご期待