入門Ansible(未発表箇所)
-
Upload
taku-shimizu -
Category
Technology
-
view
2.338 -
download
2
description
Transcript of 入門Ansible(未発表箇所)
入門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/pyconapac2013-ansible-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.ymlhosts = inventory filesetup.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,libgdbm-dev,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,libgdbm-dev,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,libgdbm-dev,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,libgdbm-dev,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. ansible2. ansible-playbook3. ansible-doc4. 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 pingansible local -m command -a "/sbin/reboot -t now"ansible local -m service -a "name=httpd state=running"
モジュールの使い方
ansible local -m pingansible 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.ymlhosts = inventory filesetup.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/ansible-examples
• https://github.com/edx/configuration• https://github.com/yteraoka/ansible-tutorial/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,libgdbm-dev,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,libgdbm-dev,zlib1g-dev,libbz2-dev,sqlite3,tk-dev,zip,git) => {"changed": true, "item": "build-essential,libsqlite3-dev,libreadline6-dev,libgdbm-dev,zlib1g-dev,libbz2-dev,sqlite3,tk-dev,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,libreadline6-dev,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,libgdbm-dev,zlib1g-dev,libbz2-dev,sqlite3,tk-dev,zip,git) => {"changed": true, "item": "build-essential,libsqlite3-dev,libreadline6-dev,libgdbm-dev,zlib1g-dev,libbz2-dev,sqlite3,tk-dev,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, --checkPLAY [all] ********************************************************************
GATHERING FACTS *************************************************************** ok: [192.168.33.50]
TASK: [基本的なパッケージをインストール] ****************************************************** changed: [192.168.33.50] => (item=build-essential,libsqlite3-dev,libreadline6-dev,libgdbm-dev,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, possible typo in service name?, aborting
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, --checkPLAY [all] ********************************************************************
GATHERING FACTS *************************************************************** ok: [192.168.33.50]
TASK: [基本的なパッケージをインストール] ****************************************************** changed: [192.168.33.50] => (item=build-essential,libsqlite3-dev,libreadline6-dev,libgdbm-dev,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, possible typo in service name?, aborting...ignoring
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, possible typo in service name?, aborting...ignoring
PLAY RECAP ******************************************************************** 192.168.33.50 : ok=6 changed=3 unreachable=0 failed=0
-D, --diff
๏リモートホストのテンプレート出力ファイルを変更したとき、その変更内容を出力する
• --checkと併用すると強力
-D, --diffTASK: [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とは?
• ファイル分割の方法・ベストプラクティス
• 便利なコマンドラインオプション
• 実際に使って躓きやすいところ