SlideShare uma empresa Scribd logo
1 de 84
Baixar para ler offline
入門Ansible
@takuan_osho
๏
๏
๏

๏

自己紹介

Agenda

本セッションについて

•
•

本セッションの対象者
本セッションで話すこと・話さないこと

Ansibleとは何か?

•
•
•
•

そもそもどういうものなのか?
Ansibleを使うと何が嬉しいのか?
他の類似ツールとは何が違うのか?
どんな企業が実際に使っているのか?

Ansibleの基本的な使い方

•
•
•
•
•
•

具体例
コマンドの種類と使い方
playbook, inventory fileとは?
ファイル分割の方法・ベストプラクティス
便利なコマンドラインオプション
実際に使って躓きやすいところ
Ansibleの

基本的な使い方

• 具体例
• コマンドの種類と使い方
• playbook, inventory fileとは?
• ファイル分割の方法・ベストプラクティス
• 便利なコマンドラインオプション
• 実際に使って躓きやすいところ
Ansibleの

基本的な使い方

• 具体例
• コマンドの種類と使い方
• playbook, inventory fileとは?
• ファイル分割の方法・ベストプラクティス
• 便利なコマンドラインオプション
• 実際に使って躓きやすいところ
具体例
๏以下のgithub, bitbucket上の
リポジトリを基に解説する

• https://github.com/takuan-osho/
pyconapac2013-ansible-session

• https://bitbucket.org/

takuan_osho/pyconapac2013ansible-session
具体例
๏ 前述のリポジトリのケースの説明
✦ Vagrant、VirtualBoxを利用
✦ リモートホストは
Ubuntu 12.04 LTS

✦ 設定する内容は以下の通り
• build-essentialなど
•
•

各種パッケージをインストール
apacheをインストール・起動
MySQLをインストール・起動
具体例
๏ 「最も基本的な形」のリポジトリ
• https://github.com/takuan-osho/

pyconapac2013-ansible-session/tree/
master/step-00

๏ 以下の順序で解説する
1. ディレクトリ構成
2. 使用するファイルの中身
3. 使用するコマンド
ディレクトリ構成
├── hosts
└── setup.yml
ディレクトリ構成
├── hosts
└── setup.yml
hosts

= inventory file

setup.yml = playbook
ファイルの中身
├── hosts
└── setup.yml
ファイルの中身
├── hosts
(inventory file = INI形式)
└── setup.yml
hostsの中身

[local]
192.168.33.50 ansible_ssh_user=vagrant ansible_ssh_port=22
ファイルの中身
├── hosts
└── setup.yml
(playbook = YAML形式)
setup.ymlの中身

(各種パッケージインストールの箇所)
--- hosts: all
user: vagrant
sudo: True
tasks:
- name: 基本的なパッケージをインストール
apt: pkg={{ item }} state=latest update_cache=yes
tags: packages
with_items:
- build-essential
(省略)
- git
setup.ymlの中身
(apacheインストール・起動の箇所)

- name: apacheのインストール
apt: pkg=apache2 state=latest update_cache=yes
tags: apache
- name: apacheを起動
service: name=apache2 state=started
tags: apache
setup.ymlの中身
(MySQLインストール・起動の箇所)

- name: MySQLのインストール
apt: pkg=mysql-server-5.5 state=present update_cache=yes
tags: mysql
- name: MySQLを起動
service: name=mysql state=started
tags: mysql
使用するコマンド
•

以下のコマンドを実行する

•

ansible-playbook -i hosts setup.yml
結果
PLAY [all] ********************************************************************
GATHERING FACTS ***************************************************************
ok: [192.168.33.50]
TASK: [基本的なパッケージをインストール] ******************************************************
changed: [192.168.33.50] => (item=build-essential,libsqlite3-dev,libreadline6-dev,libgdbmdev,zlib1g-dev,libbz2-dev,sqlite3,tk-dev,zip,git)
TASK: [apacheのインストール] *********************************************************
changed: [192.168.33.50]
TASK: [apacheを起動] *******************************************************
ok: [192.168.33.50]
TASK: [MySQLのインストール] **********************************************************
changed: [192.168.33.50]
TASK: [MySQLを起動] ********************************************************
ok: [192.168.33.50]
PLAY RECAP ********************************************************************
192.168.33.50
: ok=6
changed=3
unreachable=0
failed=0
もう一度

同じコマンドを実行

ansible-playbook -i hosts setup.yml
結果
PLAY [all] ********************************************************************
GATHERING FACTS ***************************************************************
ok: [192.168.33.50]
TASK: [基本的なパッケージをインストール] ******************************************************
ok: [192.168.33.50] => (item=build-essential,libsqlite3-dev,libreadline6-dev,libgdbmdev,zlib1g-dev,libbz2-dev,sqlite3,tk-dev,zip,git)
TASK: [apacheのインストール] *********************************************************
ok: [192.168.33.50]
TASK: [apacheを起動] *******************************************************
ok: [192.168.33.50]
TASK: [MySQLのインストール] **********************************************************
ok: [192.168.33.50]
TASK: [MySQLを起動] ********************************************************
ok: [192.168.33.50]
PLAY RECAP ********************************************************************
192.168.33.50
: ok=6
changed=0
unreachable=0
failed=0
結果(1度目)
PLAY [all] ********************************************************************
GATHERING FACTS ***************************************************************
ok: [192.168.33.50]
TASK: [基本的なパッケージをインストール] ******************************************************
changed: [192.168.33.50] => (item=build-essential,libsqlite3-dev,libreadline6-dev,libgdbmdev,zlib1g-dev,libbz2-dev,sqlite3,tk-dev,zip,git)
TASK: [apacheのインストール] *********************************************************
changed: [192.168.33.50]
TASK: [apacheを起動] *******************************************************
ok: [192.168.33.50]
TASK: [MySQLのインストール] **********************************************************
changed: [192.168.33.50]
TASK: [MySQLを起動] ********************************************************
ok: [192.168.33.50]
PLAY RECAP ********************************************************************
192.168.33.50
: ok=6
changed=3
unreachable=0
failed=0
結果(2度目)
PLAY [all] ********************************************************************
GATHERING FACTS ***************************************************************
ok: [192.168.33.50]
TASK: [基本的なパッケージをインストール] ******************************************************
ok: [192.168.33.50] => (item=build-essential,libsqlite3-dev,libreadline6-dev,libgdbmdev,zlib1g-dev,libbz2-dev,sqlite3,tk-dev,zip,git)
TASK: [apacheのインストール] *********************************************************
ok: [192.168.33.50]
TASK: [apacheを起動] *******************************************************
ok: [192.168.33.50]
TASK: [MySQLのインストール] **********************************************************
ok: [192.168.33.50]
TASK: [MySQLを起動] ********************************************************
ok: [192.168.33.50]
PLAY RECAP ********************************************************************
192.168.33.50
: ok=6
changed=0
unreachable=0
failed=0
冪等性
•

何回やっても結果が同じになること

•

今回の場合

•

1度目

•

各種パッケージ・apache・MySQLが
新しくインストールされる
(=changed)

•

2度目

•

各種パッケージ・apache・MySQLは

既にインストールされているので無視される
(=ok)
Ansibleの

基本的な使い方

• 具体例
• コマンドの種類と使い方
• playbook, inventory fileとは?
• ファイル分割の方法・ベストプラクティス
• 便利なコマンドラインオプション
• 実際に使って躓きやすいところ
コマンドの種類と使い方
๏

Ansible関連のコマンドは
4種類ある
1. ansible
2. ansible-playbook
3. ansible-doc
4. ansible-pull
コマンドの種類と使い方
๏ 基本のコマンド - 2つ
• ansible
• ansible-playbook
๏ リファレンス関連のコマンド - 1つ
• ansible-doc
๏ 応用のコマンド - 1つ
• ansible-pull
基本のコマンド

• どちらも使い方は似たようなもの
•
•

ansible 192.168.33.50 -i hosts -m ping

ansible-playbook (-l local) -i hosts setup.yml

•
•
•

黄色 : 実行して欲しい処理を送る先
   (=リモートホスト)の指定
橙色 : 実行して欲しい処理を送る先のリスト
   (= inventory file)の指定
水色 : 実行して欲しい処理の中身
   (= モジュール, playbook)の指定
基本のコマンド
๏ ansibleコマンド
• モジュール一つの命令だけ
実行できる

• Adhocに実行できる
๏ ansible-playbookコマンド
• playbookというYAML形式の
ファイルに書いてある分だけ
複数の命令を実行できる
モジュール?
モジュールとは?
๏ リモートホストの

リソースを制御したり、

システムコマンドを実行するもの

๏ 独自のものを作ることも出来る
๏ (標準の)モジュールは冪等
• リモートホストの状態を
変更する必要が無い限り、
変更は行わない
モジュールの例

๏

๏

๏

(v1.3より一部)

クラウド
cloudformation
digital_ocean
ec2
linode
rds
route53
s3
コマンド
command
raw
script
shell
データベース
mysql_db
postgres_db
redis
riak

•
•
•
•
•
•
•
•
•
•
•
•
•
•
•

๏

๏
๏

๏

ファイル関連
copy
file
lineinfile
template
パッケージング
apt
yum
ソース管理
bzr
git
hg
subversion
システム管理
ping
service
selinux

•
•
•
•
•
•
•
•
•
•
•
•
•
モジュールの使い方

ansible local -m ping
ansible local -m command -a "/sbin/reboot -t now"
ansible local -m service -a "name=httpd state=running"
モジュールの使い方

ansible local -m ping
ansible local -m command -a "/sbin/reboot -t now"
ansible local -m service -a "name=httpd state=running"
リファレンス関連の
コマンド

๏ansible-doc
• 基本的に公式ドキュメントの
Ansible Modules と同一

• オフラインで実行可能
応用のコマンド
๏ansible-pull
• 基本push型のAnsibleに

pull型の機能を持たせたコマンド
Ansibleの

基本的な使い方

• 具体例
• コマンドの種類と使い方
• playbook, inventory fileとは?
• ファイル分割の方法・ベストプラクティス
• 便利なコマンドラインオプション
• 実際に使って躓きやすいところ
playbook,
inventory file
とは?
├── hosts
└── setup.yml
hosts

= inventory file

setup.yml = playbook
inventory fileとは?
๏ 処理して欲しい命令

(module, playbook)を

送る先(リモートホスト)のリスト

๏ INI形式で記述
๏ デフォルトでは

/etc/ansible/hostsが利用される

• 無い場合、

コマンドオプション等で指定する必要がある
hostsの中身

[local]
192.168.33.50 ansible_ssh_user=vagrant ansible_ssh_port=22
hostsの中身
[production]
192.168.33.52 ansible_ssh_user=vagrant ansible_ssh_port=22
[staging]
192.168.33.51 ansible_ssh_user=vagrant ansible_ssh_port=22
[local]
192.168.33.50 ansible_ssh_user=vagrant ansible_ssh_port=22
local, stagingだけに
処理を送りたい

[production]
192.168.33.52 ansible_ssh_user=vagrant ansible_ssh_port=22
[staging]
192.168.33.51 ansible_ssh_user=vagrant ansible_ssh_port=22
[local]
192.168.33.50 ansible_ssh_user=vagrant ansible_ssh_port=22
local, stagingだけに
処理を送りたい

[production]
192.168.33.52 ansible_ssh_user=vagrant ansible_ssh_port=22
[staging]
192.168.33.51 ansible_ssh_user=vagrant ansible_ssh_port=22
[local]
192.168.33.50 ansible_ssh_user=vagrant ansible_ssh_port=22
local, stagingだけに
処理を送りたい

ansible-playbook
-i hosts setup.yml -l local,staging
設定できるパラメータ
๏

事前に定義されている変数

•
•
•
•
•
•
•
•
•

ansible_ssh_host
ansible_ssh_port
ansible_ssh_user
ansible_ssh_pass
ansible_connection
ansible_ssh_private_key_file
ansible_syslog_facility
ansible_python_interpreter
ansible_*_interpreter
playbookとは?
๏ 複数の play で構成されている
๏ play の目的は

以下の2つを関連(map)づけること

• ホストのグループ
• task
๏ task とは「モジュールの呼び出し」
• つまり、実際に行う処理の内容が書かれている
๏ YAML形式で記述
playbookとは?
--- hosts: all
user: vagrant
sudo: True
 
tasks:
- name: apacheのインストール
apt: pkg=apache2 state=latest update_cache=yes
tags: apache
 
- name: MySQLのインストール
apt: pkg=mysql-server-5.5 state=present update_cache=yes
tags: mysql
ホストとユーザ、
sudoからの実行

--- hosts: all
user: vagrant
sudo: True
 
tasks:
- name: apacheのインストール
apt: pkg=apache2 state=latest update_cache=yes
tags: apache
 
- name: MySQLのインストール
apt: pkg=mysql-server-5.5 state=present update_cache=yes
tags: mysql
タスクリスト
--- hosts: all
user: vagrant
sudo: True
 
tasks:
- name: apacheのインストール
apt: pkg=apache2 state=latest update_cache=yes
tags: apache
 
- name: MySQLのインストール
apt: pkg=mysql-server-5.5 state=present update_cache=yes
tags: mysql
Name
--- hosts: all
user: vagrant
sudo: True
 
tasks:
- name: apacheのインストール
apt: pkg=apache2 state=latest update_cache=yes
tags: apache
 
- name: MySQLのインストール
apt: pkg=mysql-server-5.5 state=present update_cache=yes
tags: mysql
モジュール
--- hosts: all
user: vagrant
sudo: True
 
tasks:
- name: apacheのインストール
apt: pkg=apache2 state=latest update_cache=yes
tags: apache
 
- name: MySQLのインストール
apt: pkg=mysql-server-5.5 state=present update_cache=yes
tags: mysql
Ansibleの

基本的な使い方

• 具体例
• コマンドの種類と使い方
• playbook, inventory fileとは?
• ファイル分割の方法・ベストプラクティス
• 便利なコマンドラインオプション
• 実際に使って躓きやすいところ
ファイル分割の方法・

ベストプラクティスについて

๏何故ファイルの分割が必要になるか?
• playbookの肥大化 → 見通しの悪さ
• playbookの
再利用・再配布のしやすさのため

• 保守しやすい
ファイル分割の方法・

ベストプラクティスについて

๏ファイル分割の方法は
主に以下の種類がある

• includeディレクティブの使用
• vars_filesディレクティブの使用
• role機能の使用
include

ディレクティブ

๏具体例
• https://github.com/takuan-osho/
pyconapac2013-ansible-session/
tree/master/step-01

๏playbook内のtasksの箇所に

include: foo.yml
と書くとfoo.ymlに書かれた処理が
読み込まれる
include

ディレクティブ
tasks:
- include: packages.yml
- include: apache.yml
- include: mysql.yml
vars_files

ディレクティブ

๏ 具体例
• https://github.com/takuan-osho/

pyconapac2013-ansible-session/tree/
master/step-02

๏ 特定の情報を別のファイルに
切り出すようにできる

• ソースコード管理下に置きたくない情報

(パスワードなど)を切り出すのにも使える
vars_files

---

ディレクティブ

- hosts: all

user: root
vars:

favcolor: blue

vars_files:

- /vars/external_vars.yml

tasks:

- name: this is just a placeholder

action: command /bin/echo foo
role機能
๏ 具体例
• https://github.com/takuan-osho/

pyconapac2013-ansible-session/tree/
master/step-04

๏ includeディレクティブが
基になっている

•

ディレクトリ構成・ファイルを

決められた形にしておくだけで

自動的にファイルがincludeされる機能
role機能
--- hosts: all
user: vagrant
sudo: True
roles:
- foo
role機能
└── roles
└── foo
├── files
│ └── main.yml
├── handlers
│ └── main.yml
├── tasks
│ └── main.yml
├── templates
│ └── main.yml
└── vars
└── main.yml

全てのmain.ymlが
自動でincludeされる
ベストプラクティスに
ついて

๏公式ドキュメントの

Best Practices に詳細あり

• role機能を使って

playbookを切り分けることが基本

• 汎用性を重視しすぎないことがコツ
ベストプラクティスに
ついて

• 参考になるplaybookの例
• https://github.com/ansible/ansibleexamples

• https://github.com/edx/configuration
• https://github.com/yteraoka/ansibletutorial/tree/playbook

• Ansible AWXのplaybook
Ansibleの

基本的な使い方

• 具体例
• コマンドの種類と使い方
• playbook, inventory fileとは?
• ファイル分割の方法・ベストプラクティス
• 便利なコマンドラインオプション
• 実際に使って躓きやすいところ
便利な

コマンドラインオプション
๏ ansible-playbookの場合
• -t TAGS, --tags=TAGS
• --skip-tags (New in version1.3)
• -l SUBSET, --limit=SUBSET
• -v, --verbose(-vvv for more)
• -C, --check
• -D, --diff
-t TAGS,

--tags=TAGS
๏ ansible-playbook -i hosts setup.yml -t apache
• playbook内で
•

tags: apache と記載された箇所のみ実行する

逆に tags: apache の所だけ実行「しない」
ようにするのが --skip-tagsオプション
(v1.3から使用可)
-t TAGS,

--tags=TAGS
--- hosts: all
user: vagrant
sudo: True
 
tasks:
- name: apacheのインストール
apt: pkg=apache2 state=latest update_cache=yes
tags: apache
 
- name: MySQLのインストール
apt: pkg=mysql-server-5.5 state=present update_cache=yes
tags: mysql
-t TAGS,

--tags=TAGS
--- hosts: all
user: vagrant
sudo: True
 
tasks:
- name: apacheのインストール
apt: pkg=apache2 state=latest update_cache=yes
tags: apache
 
- name: MySQLのインストール
apt: pkg=mysql-server-5.5 state=present update_cache=yes
tags: mysql
limit

(-l SUBSET, --limit SUBSET)
•
•

ansible-playbook -i hosts setup.yml
-l local,staging
inventory fileの中で
local, stagingのグループだけに
処理を実行させるようにする
limit

(-l SUBSET, --limit SUBSET)
[production]
192.168.33.52 ansible_ssh_user=vagrant ansible_ssh_port=22
[staging]
192.168.33.51 ansible_ssh_user=vagrant ansible_ssh_port=22
[local]
192.168.33.50 ansible_ssh_user=vagrant ansible_ssh_port=22
limit

(-l SUBSET, --limit SUBSET)
[production]
192.168.33.52 ansible_ssh_user=vagrant ansible_ssh_port=22
[staging]
192.168.33.51 ansible_ssh_user=vagrant ansible_ssh_port=22
[local]
192.168.33.50 ansible_ssh_user=vagrant ansible_ssh_port=22
-v, --verbose

(-vvv for more)
๏ verbose mode
• リモートホストの状態の変化や
•

エラーメッセージなどを詳細に出力する
-vvvのオプションを付けて実行すると
より詳細な出力を得られる
オプション無しの場合
PLAY [all] ********************************************************************
GATHERING FACTS ***************************************************************
ok: [192.168.33.50]
TASK: [基本的なパッケージをインストール] ******************************************************
changed: [192.168.33.50] => (item=build-essential,libsqlite3-dev,libreadline6-dev,libgdbmdev,zlib1g-dev,libbz2-dev,sqlite3,tk-dev,zip,git)
TASK: [apacheのインストール] *********************************************************
changed: [192.168.33.50]
TASK: [apacheを起動] *******************************************************
ok: [192.168.33.50]
TASK: [MySQLのインストール] **********************************************************
changed: [192.168.33.50]
TASK: [MySQLを起動] ********************************************************
ok: [192.168.33.50]
PLAY RECAP ********************************************************************
192.168.33.50
: ok=6
changed=3
unreachable=0
failed=0
-v, --verboseの場合
PLAY [all] ********************************************************************
GATHERING FACTS ***************************************************************
ok: [192.168.33.50]
TASK: [基本的なパッケージをインストール] ******************************************************
changed: [192.168.33.50] => (item=build-essential,libsqlite3-dev,libreadline6-dev,libgdbmdev,zlib1g-dev,libbz2-dev,sqlite3,tk-dev,zip,git) => {"changed": true, "item": "buildessential,libsqlite3-dev,libreadline6-dev,libgdbm-dev,zlib1g-dev,libbz2-dev,sqlite3,tkdev,zip,git"}
TASK: [apacheのインストール] *********************************************************
changed: [192.168.33.50] => {"changed": true}
TASK: [apacheを起動] *************************************************************
ok: [192.168.33.50] => {"changed": false, "name": "apache2", "state": "started"}
TASK: [MySQLのインストール] **********************************************************
changed: [192.168.33.50] => {"changed": true}
TASK: [MySQLを起動] **************************************************************
ok: [192.168.33.50] => {"changed": false, "name": "mysql", "state": "started"}
PLAY RECAP ********************************************************************
192.168.33.50
: ok=6
changed=3
unreachable=0
failed=0
-vvvの場合

PLAY [all] ********************************************************************
(省略)
TASK: [基本的なパッケージをインストール] ******************************************************
<192.168.33.50> ESTABLISH CONNECTION FOR USER: vagrant
<192.168.33.50> EXEC ['ssh', '-tt', '-q', '-o', 'ControlMaster=auto', '-o',
'ControlPersist=60s', '-o', 'ControlPath=/Users/taku/.ansible/cp/ansible-ssh-%h-%p-%r', 'o', 'Port=22', '-o', 'KbdInteractiveAuthentication=no', '-o', 'PasswordAuthentication=no',
'-o', 'User=vagrant', '-o', 'ConnectTimeout=10', '192.168.33.50', "/bin/sh -c 'mkdir -p
$HOME/.ansible/tmp/ansible-1378945838.83-150453254074721 && chmod a+rx $HOME/.ansible/tmp/
ansible-1378945838.83-150453254074721 && echo $HOME/.ansible/tmp/
ansible-1378945838.83-150453254074721'"]
<192.168.33.50> REMOTE_MODULE apt pkg=build-essential,libsqlite3-dev,libreadline6dev,libgdbm-dev,zlib1g-dev,libbz2-dev,sqlite3,tk-dev,zip,git state=latest update_cache=yes
<192.168.33.50> PUT /var/folders/zc/pv2v17_92v974vs5443sbgs00000gn/T/tmpq31N8W TO /home/
vagrant/.ansible/tmp/ansible-1378945838.83-150453254074721/apt
<192.168.33.50> EXEC ['ssh', '-tt', '-q', '-o', 'ControlMaster=auto', '-o',
'ControlPersist=60s', '-o', 'ControlPath=/Users/taku/.ansible/cp/ansible-ssh-%h-%p-%r', 'o', 'Port=22', '-o', 'KbdInteractiveAuthentication=no', '-o', 'PasswordAuthentication=no',
'-o', 'User=vagrant', '-o', 'ConnectTimeout=10', '192.168.33.50', '/bin/sh -c 'sudo -k &&
sudo -H -S -p "[sudo via ansible, key=ibflcvkpbpjbebfjuefckjhxeydiialv] password: " -u
root /bin/sh -c '"'"'/usr/bin/python /home/vagrant/.ansible/tmp/
ansible-1378945838.83-150453254074721/apt; rm -rf /home/vagrant/.ansible/tmp/
ansible-1378945838.83-150453254074721/ >/dev/null 2>&1'"'"''']
changed: [192.168.33.50] => (item=build-essential,libsqlite3-dev,libreadline6-dev,libgdbmdev,zlib1g-dev,libbz2-dev,sqlite3,tk-dev,zip,git) => {"changed": true, "item": "buildessential,libsqlite3-dev,libreadline6-dev,libgdbm-dev,zlib1g-dev,libbz2-dev,sqlite3,tkdev,zip,git"}
(省略)
PLAY RECAP ********************************************************************
192.168.33.50
: ok=6
changed=3
unreachable=0
failed=0
-C, --check
๏ Check Mode ( Dry Run )
• リモートホストの状態を変化させずに

「実行するとどういう状態変化が起きるか」

•

ということをチェックだけできる機能
always_runディレクティブを使うと
常にCheck Modeで実行する

•
•

New in version 1.3
http://www.ansibleworks.com/docs/
playbooks2.html#id31
-C, --check
PLAY [all] ********************************************************************
GATHERING FACTS ***************************************************************
ok: [192.168.33.50]
TASK: [基本的なパッケージをインストール] ******************************************************
changed: [192.168.33.50] => (item=build-essential,libsqlite3-dev,libreadline6-dev,libgdbmdev,zlib1g-dev,libbz2-dev,sqlite3,tk-dev,zip,git)
TASK: [apacheのインストール] *********************************************************
changed: [192.168.33.50]
TASK: [apacheを起動] *************************************************************
failed: [192.168.33.50] => {"failed": true}
msg: cannot find 'service' binary or init script for service,
name?, aborting

possible typo in service

FATAL: all hosts have already failed -- aborting
PLAY RECAP ********************************************************************
to retry, use: --limit @/Users/taku/setup.retry
192.168.33.50

: ok=3

changed=2

unreachable=0

failed=1
コマンドの失敗を
無視する方法

๏ ignore_errorsディレクティブを使用する
๏ 詳しくは公式ドキュメント
Advanced Playbooks 内の
Ignoring Failed Commands を参照

•

http://www.ansibleworks.com/docs/
playbooks2.html#id4
-C, --check
PLAY [all] ********************************************************************
GATHERING FACTS ***************************************************************
ok: [192.168.33.50]
TASK: [基本的なパッケージをインストール] ******************************************************
changed: [192.168.33.50] => (item=build-essential,libsqlite3-dev,libreadline6-dev,libgdbmdev,zlib1g-dev,libbz2-dev,sqlite3,tk-dev,zip,git)
TASK: [apacheのインストール] *********************************************************
changed: [192.168.33.50]
TASK: [apacheを起動] *************************************************************
failed: [192.168.33.50] => {"failed": true}
msg: cannot find 'service' binary or init script for service,
name?, aborting
...ignoring

possible typo in service

TASK: [MySQLのインストール] **********************************************************
changed: [192.168.33.50]
TASK: [MySQLを起動] **************************************************************
failed: [192.168.33.50] => {"failed": true}
msg: cannot find 'service' binary or init script for service,
name?, aborting
...ignoring

possible typo in service

PLAY RECAP ********************************************************************
192.168.33.50
: ok=6
changed=3
unreachable=0
failed=0
-D, --diff
๏ リモートホストのテンプレート出力ファイルを
変更したとき、その変更内容を出力する

•

--checkと併用すると強力
-D, --diff
TASK: [Set up sshd_config] ****************************************************
--- before
+++ after
@@ -1,15 +1,15 @@
# Package generated configuration file
# See the sshd_config(5) manpage for details
# What ports, IPs and protocols we listen for
-Port 22
+Port 60223
(省略)
# Authentication:
LoginGraceTime 120
-PermitRootLogin yes
+PermitRootLogin no
StrictModes yes
(省略)
# Change to no to disable tunnelled clear text passwords
-#PasswordAuthentication yes
+PasswordAuthentication no
changed: [192.168.33.11]
PLAY RECAP ********************************************************************
192.168.33.11
: ok=3
changed=2
unreachable=0
failed=0
Ansibleの

基本的な使い方

• 具体例
• コマンドの種類と使い方
• playbook, inventory fileとは?
• ファイル分割の方法・ベストプラクティス
• 便利なコマンドラインオプション
• 実際に使って躓きやすいところ
実際に使って

躓きやすいところ
• エラーが出てそもそもAnsibleが
動かない

• 途中で実行が止まる
• エラーの原因がよく分からない
Ansibleの

基本的な使い方

• 具体例
• コマンドの種類と使い方
• playbook, inventory fileとは?
• ファイル分割の方法・ベストプラクティス
• 便利なコマンドラインオプション
• 実際に使って躓きやすいところ
๏
๏
๏

๏

自己紹介

Agenda

本セッションについて

•
•

本セッションの対象者
本セッションで話すこと・話さないこと

Ansibleとは何か?

•
•
•
•

そもそもどういうものなのか?
Ansibleを使うと何が嬉しいのか?
他の類似ツールとは何が違うのか?
どんな企業が実際に使っているのか?

Ansibleの基本的な使い方

•
•
•
•
•
•

具体例
コマンドの種類と使い方
playbook, inventory fileとは?
ファイル分割の方法・ベストプラクティス
便利なコマンドラインオプション
実際に使って躓きやすいところ

Mais conteúdo relacionado

Mais procurados

20130723 ecシステムにchefを導入してみた v1.0
20130723 ecシステムにchefを導入してみた v1.020130723 ecシステムにchefを導入してみた v1.0
20130723 ecシステムにchefを導入してみた v1.0
NIFTY Cloud
 
Chefを利用した運用省力化とDevOpsの取り組みについて
Chefを利用した運用省力化とDevOpsの取り組みについてChefを利用した運用省力化とDevOpsの取り組みについて
Chefを利用した運用省力化とDevOpsの取り組みについて
Yuuki Namikawa
 

Mais procurados (20)

アプリエンジニアからクラウド専用のインフラエンジニアになってみて
アプリエンジニアからクラウド専用のインフラエンジニアになってみてアプリエンジニアからクラウド専用のインフラエンジニアになってみて
アプリエンジニアからクラウド専用のインフラエンジニアになってみて
 
事前準備の手引書
事前準備の手引書事前準備の手引書
事前準備の手引書
 
気が狂わないサーバ増設x10
気が狂わないサーバ増設x10気が狂わないサーバ増設x10
気が狂わないサーバ増設x10
 
Ansible x softlayer Provisioning
Ansible x softlayer ProvisioningAnsible x softlayer Provisioning
Ansible x softlayer Provisioning
 
2015-05-23 クラウドの運用になって インフラエンジニアは何が変わるのか?
2015-05-23 クラウドの運用になって インフラエンジニアは何が変わるのか?2015-05-23 クラウドの運用になって インフラエンジニアは何が変わるのか?
2015-05-23 クラウドの運用になって インフラエンジニアは何が変わるのか?
 
Ansible AWXで一歩進んだプロビジョニング
Ansible AWXで一歩進んだプロビジョニングAnsible AWXで一歩進んだプロビジョニング
Ansible AWXで一歩進んだプロビジョニング
 
2人でOpenStackを開発環境に導入した話
2人でOpenStackを開発環境に導入した話2人でOpenStackを開発環境に導入した話
2人でOpenStackを開発環境に導入した話
 
a-blog cms の基本 Ver.Kochi
a-blog cms の基本 Ver.Kochia-blog cms の基本 Ver.Kochi
a-blog cms の基本 Ver.Kochi
 
新卒3年目のぼくが、でぶおぷす???なオジサンだらけのエンプラ金融PJにAnsibleを導入してみた
新卒3年目のぼくが、でぶおぷす???なオジサンだらけのエンプラ金融PJにAnsibleを導入してみた新卒3年目のぼくが、でぶおぷす???なオジサンだらけのエンプラ金融PJにAnsibleを導入してみた
新卒3年目のぼくが、でぶおぷす???なオジサンだらけのエンプラ金融PJにAnsibleを導入してみた
 
Ansible入門 20151226
Ansible入門 20151226Ansible入門 20151226
Ansible入門 20151226
 
仮想マシンを使った開発環境の簡単共有方法
仮想マシンを使った開発環境の簡単共有方法 仮想マシンを使った開発環境の簡単共有方法
仮想マシンを使った開発環境の簡単共有方法
 
Playfabmeetup#4
Playfabmeetup#4Playfabmeetup#4
Playfabmeetup#4
 
実環境にTerraform導入したら驚いた
実環境にTerraform導入したら驚いた実環境にTerraform導入したら驚いた
実環境にTerraform導入したら驚いた
 
20130723 ecシステムにchefを導入してみた v1.0
20130723 ecシステムにchefを導入してみた v1.020130723 ecシステムにchefを導入してみた v1.0
20130723 ecシステムにchefを導入してみた v1.0
 
DevOpsを実現するChef活用テクニック
DevOpsを実現するChef活用テクニックDevOpsを実現するChef活用テクニック
DevOpsを実現するChef活用テクニック
 
EC-CUBEによるECサイトの負荷対策
EC-CUBEによるECサイトの負荷対策EC-CUBEによるECサイトの負荷対策
EC-CUBEによるECサイトの負荷対策
 
Chefを利用した運用省力化とDevOpsの取り組みについて
Chefを利用した運用省力化とDevOpsの取り組みについてChefを利用した運用省力化とDevOpsの取り組みについて
Chefを利用した運用省力化とDevOpsの取り組みについて
 
AWSを使いこなすポイント(仮)
AWSを使いこなすポイント(仮)AWSを使いこなすポイント(仮)
AWSを使いこなすポイント(仮)
 
Isomorphic web development with scala and scala.js
Isomorphic web development  with scala and scala.jsIsomorphic web development  with scala and scala.js
Isomorphic web development with scala and scala.js
 
Immutable infrastructure
Immutable infrastructureImmutable infrastructure
Immutable infrastructure
 

Destaque

Destaque (8)

AWSCLI Lambda
AWSCLI LambdaAWSCLI Lambda
AWSCLI Lambda
 
雑兵MeetUp #1 LT資料
雑兵MeetUp #1 LT資料雑兵MeetUp #1 LT資料
雑兵MeetUp #1 LT資料
 
20160115nodered design patterns
20160115nodered design patterns20160115nodered design patterns
20160115nodered design patterns
 
ユーザー体験を盛り上げるアプリとBluemix
ユーザー体験を盛り上げるアプリとBluemixユーザー体験を盛り上げるアプリとBluemix
ユーザー体験を盛り上げるアプリとBluemix
 
グループ会社を巻き込んで勉強会をやってみるには
グループ会社を巻き込んで勉強会をやってみるにはグループ会社を巻き込んで勉強会をやってみるには
グループ会社を巻き込んで勉強会をやってみるには
 
インフラ自動構築エンジン "Ansible"の勘所を1日でつかむ ~基礎入門編~
インフラ自動構築エンジン "Ansible"の勘所を1日でつかむ ~基礎入門編~インフラ自動構築エンジン "Ansible"の勘所を1日でつかむ ~基礎入門編~
インフラ自動構築エンジン "Ansible"の勘所を1日でつかむ ~基礎入門編~
 
Sphinxで社内勉強会(Git)の
資料を作ってみた
Sphinxで社内勉強会(Git)の
資料を作ってみたSphinxで社内勉強会(Git)の
資料を作ってみた
Sphinxで社内勉強会(Git)の
資料を作ってみた
 
Docker PaaSとしての OpenShift, Deis, Flynn比較
Docker PaaSとしての OpenShift, Deis, Flynn比較Docker PaaSとしての OpenShift, Deis, Flynn比較
Docker PaaSとしての OpenShift, Deis, Flynn比較
 

入門Ansible(未発表箇所)