狠狠撸

狠狠撸Share a Scribd company logo
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
状態: absent を指定すると消せる
(moduleによる)
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=/slideshow/ansible-28755803/28755803/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=release-11
- service: name=foo state=restarted
- wait_for: port=8080 state=started
:
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 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)
AnsibleWorks AWX
Demo
or Die
Web UI demo
本当のデモ: 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
module 作成
- 超簡単
- スクリプト言語ならなんでも書ける
- 残念ながらgoは無理
- YAMLで書きにくいなら気軽にmoduleを作成
- サーバの./libraryに置いておけば使ってく
れる
handler
tasks:
- template: src=/srv/hoge.j2 dest=/etc/hoge
notify:
- restart apache
handlers:
- name: restart apache
service: name=httpd state=restarted
何台ぐらい扱えるの?
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-8x faster than SSH
モジュール绍介
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 logging=true
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 本
- 最近出ました
- 平易な英語
- 広い範囲をカバー
- 今日飛ばした部分

More Related Content

础苍蝉颈产濒别入门...?