Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

入門Ansible(未発表箇所)

4,839 views

Published on

Published in: Technology
  • Be the first to comment

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

×