Upload
rrudi
View
2.344
Download
0
Embed Size (px)
DESCRIPTION
Ansible meetup in Tokyo
Citation preview
知っていると ちょっと便利なこと
若山 史郎 @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” • ちなみにどのモジュールでも使えます
!
!
• sourceは使えない。 “.” かbashで実行
- shell: something.sh environment: PATH: /opt/bin
- 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 などで指定できます
!
• @reboot なども指定できます
!
• AnsibleのDSLを覚えておけばいい
cron: name=“check” minute=30 hour="5,2" job="ls -alh > /dev/null"
cron: name="reboot" special_time=reboot job="ls -lah"
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を
• 今後も便利な機能が増えていくので乞うご期待