• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
入門Ansible(未発表箇所)
 

入門Ansible(未発表箇所)

on

  • 1,953 views

 

Statistics

Views

Total Views
1,953
Views on SlideShare
1,600
Embed Views
353

Actions

Likes
4
Downloads
10
Comments
0

3 Embeds 353

http://takuan-osho.hatenablog.com 349
http://feedly.com 3
http://garbagetown.hatenablog.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    入門Ansible(未発表箇所) 入門Ansible(未発表箇所) Presentation Transcript

    • 入門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とは? ファイル分割の方法・ベストプラクティス 便利なコマンドラインオプション 実際に使って躓きやすいところ