入門Ansible(未発表箇所)

4,091 views
3,942 views

Published on

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

No Downloads
Views
Total views
4,091
On SlideShare
0
From Embeds
0
Number of Embeds
1,143
Actions
Shares
0
Downloads
20
Comments
0
Likes
17
Embeds 0
No embeds

No notes for slide

入門Ansible(未発表箇所)

  1. 1. 入門Ansible @takuan_osho
  2. 2. ๏ ๏ ๏ ๏ 自己紹介 Agenda 本セッションについて • • 本セッションの対象者 本セッションで話すこと・話さないこと Ansibleとは何か? • • • • そもそもどういうものなのか? Ansibleを使うと何が嬉しいのか? 他の類似ツールとは何が違うのか? どんな企業が実際に使っているのか? Ansibleの基本的な使い方 • • • • • • 具体例 コマンドの種類と使い方 playbook, inventory fileとは? ファイル分割の方法・ベストプラクティス 便利なコマンドラインオプション 実際に使って躓きやすいところ
  3. 3. Ansibleの 基本的な使い方 • 具体例 • コマンドの種類と使い方 • playbook, inventory fileとは? • ファイル分割の方法・ベストプラクティス • 便利なコマンドラインオプション • 実際に使って躓きやすいところ
  4. 4. Ansibleの 基本的な使い方 • 具体例 • コマンドの種類と使い方 • playbook, inventory fileとは? • ファイル分割の方法・ベストプラクティス • 便利なコマンドラインオプション • 実際に使って躓きやすいところ
  5. 5. 具体例 ๏以下のgithub, bitbucket上の リポジトリを基に解説する • https://github.com/takuan-osho/ pyconapac2013-ansible-session • https://bitbucket.org/ takuan_osho/pyconapac2013ansible-session
  6. 6. 具体例 ๏ 前述のリポジトリのケースの説明 ✦ Vagrant、VirtualBoxを利用 ✦ リモートホストは Ubuntu 12.04 LTS ✦ 設定する内容は以下の通り • build-essentialなど • • 各種パッケージをインストール apacheをインストール・起動 MySQLをインストール・起動
  7. 7. 具体例 ๏ 「最も基本的な形」のリポジトリ • https://github.com/takuan-osho/ pyconapac2013-ansible-session/tree/ master/step-00 ๏ 以下の順序で解説する 1. ディレクトリ構成 2. 使用するファイルの中身 3. 使用するコマンド
  8. 8. ディレクトリ構成 ├── hosts └── setup.yml
  9. 9. ディレクトリ構成 ├── hosts └── setup.yml hosts = inventory file setup.yml = playbook
  10. 10. ファイルの中身 ├── hosts └── setup.yml
  11. 11. ファイルの中身 ├── hosts (inventory file = INI形式) └── setup.yml
  12. 12. hostsの中身 [local] 192.168.33.50 ansible_ssh_user=vagrant ansible_ssh_port=22
  13. 13. ファイルの中身 ├── hosts └── setup.yml (playbook = YAML形式)
  14. 14. 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
  15. 15. setup.ymlの中身 (apacheインストール・起動の箇所) - name: apacheのインストール apt: pkg=apache2 state=latest update_cache=yes tags: apache - name: apacheを起動 service: name=apache2 state=started tags: apache
  16. 16. 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
  17. 17. 使用するコマンド • 以下のコマンドを実行する • ansible-playbook -i hosts setup.yml
  18. 18. 結果 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
  19. 19. もう一度 同じコマンドを実行 ansible-playbook -i hosts setup.yml
  20. 20. 結果 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
  21. 21. 結果(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
  22. 22. 結果(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
  23. 23. 冪等性 • 何回やっても結果が同じになること • 今回の場合 • 1度目 • 各種パッケージ・apache・MySQLが 新しくインストールされる (=changed) • 2度目 • 各種パッケージ・apache・MySQLは 既にインストールされているので無視される (=ok)
  24. 24. Ansibleの 基本的な使い方 • 具体例 • コマンドの種類と使い方 • playbook, inventory fileとは? • ファイル分割の方法・ベストプラクティス • 便利なコマンドラインオプション • 実際に使って躓きやすいところ
  25. 25. コマンドの種類と使い方 ๏ Ansible関連のコマンドは 4種類ある 1. ansible 2. ansible-playbook 3. ansible-doc 4. ansible-pull
  26. 26. コマンドの種類と使い方 ๏ 基本のコマンド - 2つ • ansible • ansible-playbook ๏ リファレンス関連のコマンド - 1つ • ansible-doc ๏ 応用のコマンド - 1つ • ansible-pull
  27. 27. 基本のコマンド • どちらも使い方は似たようなもの • • ansible 192.168.33.50 -i hosts -m ping ansible-playbook (-l local) -i hosts setup.yml • • • 黄色 : 実行して欲しい処理を送る先    (=リモートホスト)の指定 橙色 : 実行して欲しい処理を送る先のリスト    (= inventory file)の指定 水色 : 実行して欲しい処理の中身    (= モジュール, playbook)の指定
  28. 28. 基本のコマンド ๏ ansibleコマンド • モジュール一つの命令だけ 実行できる • Adhocに実行できる ๏ ansible-playbookコマンド • playbookというYAML形式の ファイルに書いてある分だけ 複数の命令を実行できる
  29. 29. モジュール?
  30. 30. モジュールとは? ๏ リモートホストの リソースを制御したり、 システムコマンドを実行するもの ๏ 独自のものを作ることも出来る ๏ (標準の)モジュールは冪等 • リモートホストの状態を 変更する必要が無い限り、 変更は行わない
  31. 31. モジュールの例 ๏ ๏ ๏ (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 • • • • • • • • • • • • •
  32. 32. モジュールの使い方 ansible local -m ping ansible local -m command -a "/sbin/reboot -t now" ansible local -m service -a "name=httpd state=running"
  33. 33. モジュールの使い方 ansible local -m ping ansible local -m command -a "/sbin/reboot -t now" ansible local -m service -a "name=httpd state=running"
  34. 34. リファレンス関連の コマンド ๏ansible-doc • 基本的に公式ドキュメントの Ansible Modules と同一 • オフラインで実行可能
  35. 35. 応用のコマンド ๏ansible-pull • 基本push型のAnsibleに pull型の機能を持たせたコマンド
  36. 36. Ansibleの 基本的な使い方 • 具体例 • コマンドの種類と使い方 • playbook, inventory fileとは? • ファイル分割の方法・ベストプラクティス • 便利なコマンドラインオプション • 実際に使って躓きやすいところ
  37. 37. playbook, inventory file とは? ├── hosts └── setup.yml hosts = inventory file setup.yml = playbook
  38. 38. inventory fileとは? ๏ 処理して欲しい命令 (module, playbook)を 送る先(リモートホスト)のリスト ๏ INI形式で記述 ๏ デフォルトでは /etc/ansible/hostsが利用される • 無い場合、 コマンドオプション等で指定する必要がある
  39. 39. hostsの中身 [local] 192.168.33.50 ansible_ssh_user=vagrant ansible_ssh_port=22
  40. 40. 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
  41. 41. 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
  42. 42. 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
  43. 43. local, stagingだけに 処理を送りたい ansible-playbook -i hosts setup.yml -l local,staging
  44. 44. 設定できるパラメータ ๏ 事前に定義されている変数 • • • • • • • • • 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
  45. 45. playbookとは? ๏ 複数の play で構成されている ๏ play の目的は 以下の2つを関連(map)づけること • ホストのグループ • task ๏ task とは「モジュールの呼び出し」 • つまり、実際に行う処理の内容が書かれている ๏ YAML形式で記述
  46. 46. 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
  47. 47. ホストとユーザ、 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
  48. 48. タスクリスト --- 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
  49. 49. 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
  50. 50. モジュール --- 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
  51. 51. Ansibleの 基本的な使い方 • 具体例 • コマンドの種類と使い方 • playbook, inventory fileとは? • ファイル分割の方法・ベストプラクティス • 便利なコマンドラインオプション • 実際に使って躓きやすいところ
  52. 52. ファイル分割の方法・ ベストプラクティスについて ๏何故ファイルの分割が必要になるか? • playbookの肥大化 → 見通しの悪さ • playbookの 再利用・再配布のしやすさのため • 保守しやすい
  53. 53. ファイル分割の方法・ ベストプラクティスについて ๏ファイル分割の方法は 主に以下の種類がある • includeディレクティブの使用 • vars_filesディレクティブの使用 • role機能の使用
  54. 54. include ディレクティブ ๏具体例 • https://github.com/takuan-osho/ pyconapac2013-ansible-session/ tree/master/step-01 ๏playbook内のtasksの箇所に include: foo.yml と書くとfoo.ymlに書かれた処理が 読み込まれる
  55. 55. include ディレクティブ tasks: - include: packages.yml - include: apache.yml - include: mysql.yml
  56. 56. vars_files ディレクティブ ๏ 具体例 • https://github.com/takuan-osho/ pyconapac2013-ansible-session/tree/ master/step-02 ๏ 特定の情報を別のファイルに 切り出すようにできる • ソースコード管理下に置きたくない情報 (パスワードなど)を切り出すのにも使える
  57. 57. 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
  58. 58. role機能 ๏ 具体例 • https://github.com/takuan-osho/ pyconapac2013-ansible-session/tree/ master/step-04 ๏ includeディレクティブが 基になっている • ディレクトリ構成・ファイルを 決められた形にしておくだけで 自動的にファイルがincludeされる機能
  59. 59. role機能 --- hosts: all user: vagrant sudo: True roles: - foo
  60. 60. role機能 └── roles └── foo ├── files │ └── main.yml ├── handlers │ └── main.yml ├── tasks │ └── main.yml ├── templates │ └── main.yml └── vars └── main.yml 全てのmain.ymlが 自動でincludeされる
  61. 61. ベストプラクティスに ついて ๏公式ドキュメントの Best Practices に詳細あり • role機能を使って playbookを切り分けることが基本 • 汎用性を重視しすぎないことがコツ
  62. 62. ベストプラクティスに ついて • 参考になるplaybookの例 • https://github.com/ansible/ansibleexamples • https://github.com/edx/configuration • https://github.com/yteraoka/ansibletutorial/tree/playbook • Ansible AWXのplaybook
  63. 63. Ansibleの 基本的な使い方 • 具体例 • コマンドの種類と使い方 • playbook, inventory fileとは? • ファイル分割の方法・ベストプラクティス • 便利なコマンドラインオプション • 実際に使って躓きやすいところ
  64. 64. 便利な コマンドラインオプション ๏ 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
  65. 65. -t TAGS, --tags=TAGS ๏ ansible-playbook -i hosts setup.yml -t apache • playbook内で • tags: apache と記載された箇所のみ実行する 逆に tags: apache の所だけ実行「しない」 ようにするのが --skip-tagsオプション (v1.3から使用可)
  66. 66. -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
  67. 67. -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
  68. 68. limit (-l SUBSET, --limit SUBSET) • • ansible-playbook -i hosts setup.yml -l local,staging inventory fileの中で local, stagingのグループだけに 処理を実行させるようにする
  69. 69. 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
  70. 70. 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
  71. 71. -v, --verbose (-vvv for more) ๏ verbose mode • リモートホストの状態の変化や • エラーメッセージなどを詳細に出力する -vvvのオプションを付けて実行すると より詳細な出力を得られる
  72. 72. オプション無しの場合 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
  73. 73. -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
  74. 74. -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
  75. 75. -C, --check ๏ Check Mode ( Dry Run ) • リモートホストの状態を変化させずに 「実行するとどういう状態変化が起きるか」 • ということをチェックだけできる機能 always_runディレクティブを使うと 常にCheck Modeで実行する • • New in version 1.3 http://www.ansibleworks.com/docs/ playbooks2.html#id31
  76. 76. -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
  77. 77. コマンドの失敗を 無視する方法 ๏ ignore_errorsディレクティブを使用する ๏ 詳しくは公式ドキュメント Advanced Playbooks 内の Ignoring Failed Commands を参照 • http://www.ansibleworks.com/docs/ playbooks2.html#id4
  78. 78. -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
  79. 79. -D, --diff ๏ リモートホストのテンプレート出力ファイルを 変更したとき、その変更内容を出力する • --checkと併用すると強力
  80. 80. -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
  81. 81. Ansibleの 基本的な使い方 • 具体例 • コマンドの種類と使い方 • playbook, inventory fileとは? • ファイル分割の方法・ベストプラクティス • 便利なコマンドラインオプション • 実際に使って躓きやすいところ
  82. 82. 実際に使って 躓きやすいところ • エラーが出てそもそもAnsibleが 動かない • 途中で実行が止まる • エラーの原因がよく分からない
  83. 83. Ansibleの 基本的な使い方 • 具体例 • コマンドの種類と使い方 • playbook, inventory fileとは? • ファイル分割の方法・ベストプラクティス • 便利なコマンドラインオプション • 実際に使って躓きやすいところ
  84. 84. ๏ ๏ ๏ ๏ 自己紹介 Agenda 本セッションについて • • 本セッションの対象者 本セッションで話すこと・話さないこと Ansibleとは何か? • • • • そもそもどういうものなのか? Ansibleを使うと何が嬉しいのか? 他の類似ツールとは何が違うのか? どんな企業が実際に使っているのか? Ansibleの基本的な使い方 • • • • • • 具体例 コマンドの種類と使い方 playbook, inventory fileとは? ファイル分割の方法・ベストプラクティス 便利なコマンドラインオプション 実際に使って躓きやすいところ

×