17
知っていると ちょっと便利なこと 若山 史郎 @r_rudi

Ansible meetup201409

  • Upload
    rrudi

  • View
    2.344

  • Download
    0

Embed Size (px)

DESCRIPTION

Ansible meetup in Tokyo

Citation preview

Page 1: Ansible meetup201409

知っていると ちょっと便利なこと

若山 史郎 @r_rudi

Page 2: Ansible meetup201409

おまえだれよ?• 若山史郎 @ ツキノワ株式会社

• お仕事募集中です

• Twitter ID: r_rudi • 著書

• Ansible: 「入門Ansible」

• Sphinx :「 Sphinxをはじめよう」

Page 3: Ansible meetup201409

今日お話すること• 知っているとちょっと便利なこと

• いろいろなな小ネタを用意しました

• 全部で7つです。お互いに関連性はありません

Page 4: Ansible meetup201409

一つ目

roles_path

検閲済み

Page 5: Ansible meetup201409

roles_path (1/7)• roleが散らばって困っていませんか

• リポジトリが違う場合など

• ansible.cfgに “roles_path” を設定できます

!

• “:”で区切って複数個指定できます

• “..” など相対パスも使えます

roles_path=/opt/roles:../roles

Page 6: Ansible meetup201409

roleの検索順序 (1/7)

• roleの検索順序

1. 自分のディレクトリの roles 以下

2. 自分のディレクトリ

3. roles_pathを前から探していく ./deploy.yml /inventory /roles/hoge/tasks /hoge/tasks/

← こっちが先

Page 7: Ansible meetup201409

whenの複数条件 (2/7)

when: ansible_os_family == "RedHat" and mode == "production"!

• 長すぎ。こう書けます

when: - ansible_os_family == "RedHat" - mode == "production"

Page 8: Ansible meetup201409

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

Page 9: Ansible meetup201409

数字として比較 (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

Page 10: Ansible meetup201409

バージョンを比較 (4/7)

• “3.0.16” などのバージョンを比較できます

vars: version: 3.0.16 tasks: - debug: msg="its old!" when: version | version_compare(‘3.0.20’, '<=')

Page 11: Ansible meetup201409

正規表現で比較 (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/.*")

Page 12: Ansible meetup201409

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"

Page 13: Ansible meetup201409

local_fact (6/7)

• /etc/ansible/facts.d/hosts.fact

• 対象ホストにファイルを置くとfactとなる

!

!

• 使い方

[group] stage=development role=webserver

- debug: msg={{ ansible_local.hosts.group.role }}

Page 14: Ansible meetup201409

local_fact (6/7)

• JSONでも書けます

!

!

• 実行権限をつけると、動的に生成できます

{ "group": { “role”:"webserver", “stage”: “development” } }

#!/bin/sh cat <<EOF {"group": { “role”:"webserver", “stage”: “development” } } EOF

Page 15: Ansible meetup201409

local_path (6/7)

• /etc/ansible/facts.d/じゃない場所を使いたい!

• setupモジュールを使う

tasks: - setup: fact_path="/home/shirou/tmp/ansible" - debug: msg={{ ansible_local.hosts.group.role }}

Page 16: Ansible meetup201409

chatops (7/7)

• slack + hubot

Page 17: Ansible meetup201409

まとめ1. role_path

2. when

3. shell

4. 数字として比較

5. cron

6. local_fact

7. hubot + slack

• 小ネタを用意しました

• 全部ドキュメントに書いてあります

• hubotは後でgistを

• 今後も便利な機能が増えていくので乞うご期待