Contenu connexe
Similaire à Ansible meetup201409 (20)
Plus de shirou wakayama (7)
Ansible meetup201409
- 2. おまえだれよ?
• 若山史郎 @ ツキノワ株式会社
• お仕事募集中です
• Twitter ID: r_rudi
• 著書
• Ansible: 「入門Ansible」
• Sphinx :「 Sphinxをはじめよう」
- 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 }}
- 17. まとめ
1. role_path
2. when
3. shell
4. 数字として比較
5. cron
6. local_fact
7. hubot + slack
• 小ネタを用意しました
• 全部ドキュメントに書い
てあります
• hubotは後でgistを
• 今後も便利な機能が増え
ていくので乞うご期待