Ansible 入門
#pyfes 2013.11 in Tokyo
by @r_rudi(しろう)

…?
Ansible
Ansible
間違い
正しい

正解
Chef
Puppet
Salt
cfengine
juju
…..
構成管理
ツール
Provisiong tool
構成
管理
by Lee Thompson at Velocity 2010
一部誇張表現があります
本日の前提知識
Assumptions
Task
- name: install python
homeblew: name=python
installs_options={{ option }}
state=present
Task
タスク名(省略可)

- name: install python
引数
homeblew: name=python
モジュール名
installs_options={{ option }}
変数
state=present
状態: ...
Playbook == Taskのセット
- hostname:
name=AnsibleDemo
- apt_repository:
repo=’deb http://….’
- apt_key:
url=http://…..

実行順
実行方法
% ansible-playbook hoge.yml
-i inventory file (接続先ホストのリスト)
-u username
-k ssh pass
-C check mode
-D diff表示
OK
Let' Go !
unarchive module
- unarchive: src=blah.tar.gz dest=/tmp/
copy

Remote

unzip
untar

Local

Remote
shell module
- shell: foo.sh
copy

Remote

Run

Local

Remote

Run
ec2
- local_action: ec2
args:
instance_type: c1.medium
image: emi-329394
count: 3
Launch Instances module
- Google Compute Engine
- Digital Ocean
- Linode
- Rackspace
- Docker
:
インスタンスはいくつ?
- local_action: ec2
args:
count: 3
- local_action: ec2
args:
count: 3
- local_action: ec2
args:
count: 3
インスタンスはいくつ?
- local_action: ec2
args:
count: 3
- local_action: ec2
args:
count: 3
- local_action: ec2
args:
count: 3

9
インスタンスはいくつ?
- local_action: ec2
args:
count: 3
- local_action: ec2
args:
count: 3
- local_action: ec2
args:
count: 3

9
冪等...
ec2 elb
- local_action: ec2_elb
args:
instance_id:
“{{ ansible_ec2_instance_id }}”
state: present
deploy !!
- local_action: ec2_elb
args: state=absent
- nagios: action=disable_alert
- git: repo=.... dest=/www version=rel...
rolling update
- serial: 1
Remote

- 一台ずつ実行できる
Remote

- 数台まとめてもできる
Remote
Python API
#pyfes ですから…
ansible + flask
from ansible.inventory import Inventory
from ansible.playbook import PlayBook
from ansible import callback...
AnsibleWorks AWX
Demo
or Die
Web UI demo
本当のデモ: twilio module
- twilio APIを使うshell script
#!/usr/bin/env sh
AccountSid=AAAAAAAAA
AuthToken=07999999999999
curl -X P...
module 作成
- 超簡単
- スクリプト言語ならなんでも書ける
- 残念ながらgoは無理
- YAMLで書きにくいなら気軽にmoduleを作成
- サーバの./libraryに置いておけば使ってく
れる
handler
tasks:
- template: src=/srv/hoge.j2 dest=/etc/hoge
notify:
- restart apache
handlers:
- name: restart apache
servi...
何台ぐらい扱えるの?
We have users using Ansible in push
mode against 5000 machines at a time
Accelarated mode
- SSHでdaemonを起動
- あとはdaemonと直接通信
- このdaemonは通信が
終わると自動で終わる

- hosts: all
accelerate: true
tasks: ...

- 2...
モジュール紹介
Arista networks
- 10G/40G/100Gのスイッチ

- sshで入れる
- pythonが入っている
- Ansibleの初期からのスポンサー
Arista modules
- name: enable interface Ethernet 1
arista_interface:
interface_id=Ethernet1 admin=up
speed=10g duplex=full...
DB
- mongodb_user
- mysql_db
- mysql_replication
- postgres_user
- postgres_db
- riak
- redis
notification
- irc
- hipchat
- jabber
- mail
- osx_say
まとめ
- Ansibleは自動実行ツールとしても使えるよ
- moduleたくさんうれしいな
- notification moduleは便利
- 欲しいものがなければ簡単に作れるよ
- python必要ないよ
- 実行速度は十分速いよ
Ansible 本
- 最近出ました
- 平易な英語
- 広い範囲をカバー
- 今日飛ばした部分
Ansible入門...?
Upcoming SlideShare
Loading in...5
×

Ansible入門...?

6,713

Published on

Ansible 紹介 at #pyfes 2013.11

Published in: Technology
0 Comments
36 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
6,713
On Slideshare
0
From Embeds
0
Number of Embeds
7
Actions
Shares
0
Downloads
56
Comments
0
Likes
36
Embeds 0
No embeds

No notes for slide

Ansible入門...?

  1. 1. Ansible 入門 #pyfes 2013.11 in Tokyo by @r_rudi(しろう) …?
  2. 2. Ansible
  3. 3. Ansible 間違い 正しい 正解
  4. 4. Chef Puppet Salt cfengine juju …..
  5. 5. 構成管理 ツール Provisiong tool
  6. 6. 構成 管理
  7. 7. by Lee Thompson at Velocity 2010
  8. 8. 一部誇張表現があります
  9. 9. 本日の前提知識 Assumptions
  10. 10. Task - name: install python homeblew: name=python installs_options={{ option }} state=present
  11. 11. Task タスク名(省略可) - name: install python 引数 homeblew: name=python モジュール名 installs_options={{ option }} 変数 state=present 状態: absent を指定すると消せる (moduleによる)
  12. 12. Playbook == Taskのセット - hostname: name=AnsibleDemo - apt_repository: repo=’deb http://….’ - apt_key: url=http://….. 実行順
  13. 13. 実行方法 % ansible-playbook hoge.yml -i inventory file (接続先ホストのリスト) -u username -k ssh pass -C check mode -D diff表示
  14. 14. OK Let' Go !
  15. 15. unarchive module - unarchive: src=blah.tar.gz dest=/tmp/ copy Remote unzip untar Local Remote
  16. 16. shell module - shell: foo.sh copy Remote Run Local Remote Run
  17. 17. ec2 - local_action: ec2 args: instance_type: c1.medium image: emi-329394 count: 3
  18. 18. Launch Instances module - Google Compute Engine - Digital Ocean - Linode - Rackspace - Docker :
  19. 19. インスタンスはいくつ? - local_action: ec2 args: count: 3 - local_action: ec2 args: count: 3 - local_action: ec2 args: count: 3
  20. 20. インスタンスはいくつ? - local_action: ec2 args: count: 3 - local_action: ec2 args: count: 3 - local_action: ec2 args: count: 3 9
  21. 21. インスタンスはいくつ? - local_action: ec2 args: count: 3 - local_action: ec2 args: count: 3 - local_action: ec2 args: count: 3 9 冪等性...?
  22. 22. ec2 elb - local_action: ec2_elb args: instance_id: “{{ ansible_ec2_instance_id }}” state: present
  23. 23. deploy !! - local_action: ec2_elb args: state=absent - nagios: action=disable_alert - git: repo=.... dest=/www version=release-11 - service: name=foo state=restarted - wait_for: port=8080 state=started :
  24. 24. rolling update - serial: 1 Remote - 一台ずつ実行できる Remote - 数台まとめてもできる Remote
  25. 25. Python API #pyfes ですから…
  26. 26. ansible + flask from ansible.inventory import Inventory from ansible.playbook import PlayBook from ansible import callbacks from flask import Flask, render_template import json app = Flask(__name__) @app.route("/play") def play(): inventory = Inventory('localhost.conf') stats = callbacks.AggregateStats() playbook_cb = callbacks.PlaybookCallbacks() runner_cb = callbacks.PlaybookRunnerCallbacks(stats) results = PlayBook(playbook='pyfesdemo.yml', forks=1, remote_user='shirou', sudo=False, module_path='module', callbacks=playbook_cb, runner_callbacks=runner_cb, stats=stats, inventory=inventory).run() return json.dumps(results)
  27. 27. AnsibleWorks AWX
  28. 28. Demo or Die
  29. 29. Web UI demo
  30. 30. 本当のデモ: twilio module - twilio APIを使うshell script #!/usr/bin/env sh AccountSid=AAAAAAAAA AuthToken=07999999999999 curl -X POST 'https://api.twilio.com/2010-0401/Accounts/ACe0361e5b6236a8948191d08635bcd449/Calls.json' ¥ -d 'From=%2B815031596145' -d 'To=%2B81999999993' ¥ -d 'Url=http%3A%2F%2Fexample.com%2Fansible.html' -u ${AccountSid}:${AuthToken} echo "changed=True" exit 0
  31. 31. module 作成 - 超簡単 - スクリプト言語ならなんでも書ける - 残念ながらgoは無理 - YAMLで書きにくいなら気軽にmoduleを作成 - サーバの./libraryに置いておけば使ってく れる
  32. 32. handler tasks: - template: src=/srv/hoge.j2 dest=/etc/hoge notify: - restart apache handlers: - name: restart apache service: name=httpd state=restarted
  33. 33. 何台ぐらい扱えるの?
  34. 34. We have users using Ansible in push mode against 5000 machines at a time
  35. 35. Accelarated mode - SSHでdaemonを起動 - あとはdaemonと直接通信 - このdaemonは通信が 終わると自動で終わる - hosts: all accelerate: true tasks: ... - 2-8x faster than SSH
  36. 36. モジュール紹介
  37. 37. Arista networks - 10G/40G/100Gのスイッチ - sshで入れる - pythonが入っている - Ansibleの初期からのスポンサー
  38. 38. Arista modules - name: enable interface Ethernet 1 arista_interface: interface_id=Ethernet1 admin=up speed=10g duplex=full logging=true
  39. 39. DB - mongodb_user - mysql_db - mysql_replication - postgres_user - postgres_db - riak - redis
  40. 40. notification - irc - hipchat - jabber - mail - osx_say
  41. 41. まとめ - Ansibleは自動実行ツールとしても使えるよ - moduleたくさんうれしいな - notification moduleは便利 - 欲しいものがなければ簡単に作れるよ - python必要ないよ - 実行速度は十分速いよ
  42. 42. Ansible 本 - 最近出ました - 平易な英語 - 広い範囲をカバー - 今日飛ばした部分
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×