■環境構築
■Vagrant起動
※サーバを2台立ち上げ、一方のサーバからもう一方のサーバを操作する例
1台だけ立ち上げて、自身のサーバを操作する場合はこのファイルの「ローカルで検証」を参照
以下のようにVagrantfileを作成する
Vagrant.configure(2) do |config|
config.vm.box = "centos72"
config.vm.box_check_update = false
config.vm.define "controller" do |node|
node.vm.hostname = "controller.localhost"
node.vm.synced_folder "./controller", "/var/code"
node.vm.network :forwarded_port, id: "ssh", guest: 22, host: 2210
node.vm.network "private_network", ip: "192.168.33.10"
end
config.vm.define "target" do |node|
node.vm.hostname = "target.localhost"
node.vm.synced_folder "./target", "/var/code"
node.vm.network :forwarded_port, id: "ssh", guest: 22, host: 2211
node.vm.network "private_network", ip: "192.168.33.11"
end
end
通常通り vagrant up を実行すると、controller と target の2台サーバが起動される
それぞれ以下でアクセスできる(起動直後はもちろん、HTTPではアクセスできない)
ポート: 2210
鍵: C:/vagrant/multi/.vagrant/machines/controller/virtualbox/private_key
ポート: 2211
鍵: C:/vagrant/multi/.vagrant/machines/target/virtualbox/private_key
http://192.168.33.10/
http://192.168.33.11/
なお、このサーバは vagrant halt のコマンドで停止することができ、
vagrant destroy のコマンドで破棄することができる
その後再度 vagrant up を実行すると、再度まっさらなサーバを起動できる
■controllerからtargetへのSSH接続を確認
$ hostname
controller.localhost
$ ssh -p 22 vagrant@192.168.33.11
… targetに接続
The authenticity of host '192.168.33.11 (192.168.33.11)' can't be established.
ECDSA key fingerprint is 7a:f6:47:1b:a9:04:c8:c6:90:d5:8c:48:14:03:d3:64.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.33.11' (ECDSA) to the list of known hosts.
vagrant@192.168.33.11's password: vagrant
Last login: Tue Sep 18 13:21:48 2018 from 10.0.2.2
$ hostname
target.localhost
$ exit
… targetから抜ける
以降、すべてcontrollerでの操作
■Ansibleのインストール
$ sudo su -
環境によってはSELinuxが有効になっているので、あらかじめ無効化しておく必要がある
Ansibleで無効化する方法は、後述の「SELinuxを無効化」を参照
# getenforce
Enforcing
… SELinuxが有効
# setenforce 0
… SELinuxを無効化
# getenforce
Permissive
… SELinuxが無効
# vi /etc/sysconfig/selinux
#SELINUX=enforcing
SELINUX=disabled … システム起動時にSELinuxを無効化
環境によっては、epel-release を先にインストールする必要がある
# yum -y install epel-release
以下の手順でAnsibleをインストールできる
# python --version
… Python2.6以降がインストールされていることを確認
Python 2.7.5
# yum -y install ansible
… Ansibleをインストール
# ansible --version
ansible 2.7.1
… 以下の手順は2.7の際に作成したが、2.8でも変化は同じように使えるみたい
# exit
※管理対象のサーバにもPython2.4以降が必要
■Ansibleの接続テスト(vagrantユーザでの接続)
$ ssh-keygen -t rsa
… RSAで鍵を作成。デフォルトの場所に作成。今回パスフレーズは入力しない
$ ssh-copy-id vagrant@192.168.33.11
… 対象サーバに公開鍵を渡す(渡す際に vagrant のパスワードを入力する)
$ ssh vagrant@192.168.33.11
… targetに接続(パスワード無しで接続できる)
$ exit
… targetから抜ける
Linuxコマンド【 ssh-keygen 】認証用の鍵を生成 - Linux入門 - Webkaru
https://webkaru.net/linux/ssh-keygen-command/
ssh-copy-idで公開鍵を渡す - Qiita
https://qiita.com/kentarosasaki/items/aa319e735a0b9660f1f0
■管理対象の登録
$ sudo su -
# vi /etc/ansible/hosts
… webserversの項目と、管理対象のIPアドレスを追加
[webservers]
192.168.33.11
# exit
■疎通確認
$ ansible all -m ping
… vagrantユーザで、すべてのサーバにPINGを実行
192.168.33.11 | SUCCESS => {
"changed": false,
"ping": "pong"
}
$ ansible webservers -m ping
… WebサーバにPINGを実行
$ ansible webservers -a "/bin/date"
… 日時を表示する場合
$ ansible webservers -m copy -a "src=/home/vagrant/from.txt dest=/home/vagrant/to.txt"
… ファイルを転送する場合(from.txt はあらかじめ作成しておく)
$ ansible webservers -a "mkdir /home/vagrant/test"
… ディレクトリを作成する場合
※「-m」オプションは「指定したモジュールを実行」の意味
「-a」オプションは「指定したコマンドを実行」の意味
※「"mkdir /root/test"」の指定で実行はできるが、「fileモジュールを使いましょう」と表示される
fileモジュールを使って後述のPlaybookを記述すると、変更がない場合はディレクトリの再作成は行われない
ただし自力でコマンドを記述していると、実行のたびにディレクトリは再作成される
冪等性を保つためにも、可能なものは用意されているモジュールを使うことを推奨
ただし、shellモジュールやcommandモジュールはAnsible側で冪等性を担保できないため、利用には注意が必要
ここまで来れば、Ansibleでサーバを操作できる
サーバの操作は1コマンドごと実行することもできるが、Playbookと呼ばれるファイルに作業内容をまとめて実行するといい