Ansibleを目にする機会が増えてきたので、VirtualBox上のCentOSにAnsibleをインストールして、学習してみようと思い環境を構築しました。
いくつかハマったところもあるので、備忘録として残していきます。
VirtualBox上のCentOSにAnsibleをインストール
環境
CentOS:CentOS7 ホスト名:centos701 Ansible用(192.168.11.a)
CentOS:CentOS7 ホスト名:centos702 配布用サーバ1(192.168.11.b)
CentOS:CentOS7 ホスト名:centos703 配布用サーバ2(192.168.11.c)
※IPの末尾をa、b、cにしてます。
VirtualBoxのネットワークは、「ブリッジアダプター」にして、外部ネットワークと内部のサーバ同士でssh接続できるようにしてあります。
Ansibleでは、ssh接続できる必要があるようです。
ホスト名の設定
まずはホスト名の設定をします。
hostnamectl set-hostname centos701
hostnamectl set-hostname centos702
hostnamectl set-hostname centos703
設定をした後は、サーバを再起動します。
shutdown -r now
Ansibleのインストール
ansibleをインストールしようとしたところ、「パッケージ ansible は利用できません。」のエラーメッセージが出力されました。
yum install ansible
epel-releaseをインストールする必要があるので、先にインストールします。
epel-releaseはサポート対象外となるため、商業用でインストールする際に検討する必要があるのかなと思いました。
epel-releaseをインストールします。
yum install epel-release
epel-releaseのインストールが完了したので、再度ansibleをインストールしてみます。
yum install ansible
今後は上手くインストールできたので、バージョン確認してみます。
ansible --version
バージョン情報が表示されました。
[root@centos701 ~]# ansible --version
ansible 2.9.27
config file = /etc/ansible/ansible.cfg
configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python2.7/site-packages/ansible
executable location = /usr/bin/ansible
python version = 2.7.5 (default, Jun 28 2022, 15:30:04) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)]
[root@centos701 ~]#
ssh認証の設定
SSHによる認証が必要なため、「ssh-keygen」で鍵を作成して、copy-idで配布します。
ssh-keygen -t rsa
ssh-copy-idで配布します。
ssh-copy-id root@192.168.11.b
ssh-copy-id root@192.168.11.c
ansibleのhostsファイルを作成します。
mkdir ansible
cd ansible
mkdir inventory
cd inventory
vi hosts
ファイルの中身を配布先のIPにします。
[targets]
192.168.11.b
192.168.11.c
まずは、ansibleコマンドでpingを実行して疎通できるか確認します。
コマンドは以下のようになっているみたいです。
※詳細については調査中です。
ansible [pattern] -m [module] -a [module options]
まずは、1台目のサーバに実行してみます。
ansible 192.168.11.15 -m ping
エラーメッセージが出力されました。
hostがちがっているというようなメッセージが出力されました。
[WARNING]: provided hosts list is empty, only localhost is available. Note that
the implicit localhost does not match 'all'
[WARNING]: Could not match supplied host pattern, ignoring: 192.168.11.15
ここでかなりつまづいたのですが、実行時に読み込むファイルを指定している場所があり、そこの参照が間違っているようでした。
/etc/ansible/配下に色々設定されている「ansible.cfg」がありました。
catで中身を見てみると、「#inventory = /etc/ansible/hosts」の記述があり、hostsファイルを参照しにいってないように見えました。
[defaults]
# some basic default values...
#inventory = /etc/ansible/hosts
#library = /usr/share/my_modules/
#module_utils = /usr/share/my_module_utils/
#remote_tmp = ~/.ansible/tmp
#local_tmp = ~/.ansible/tmp
#plugin_filters_cfg = /etc/ansible/plugin_filters.yml
#forks = 5
#poll_interval = 15
#sudo_user = root
#ask_sudo_pass = True
#ask_pass = True
#transport = smart
#remote_port = 22
#module_lang = C
#module_set_locale = False
hostsファイルの参照先を作成したhostsファイルを参照しにいくように修正してみました。
#inventory = /etc/ansible/hosts
inventory = /root/ansible/inventory/hosts
#library = /usr/share/my_modules/
hostsの参照先を変更して、再度pingを実行してみます。
今度は「SUCCESS」が帰ってきて、成功したようです。
root@centos701 ansible]# ansible 192.168.11.b -m ping
192.168.11.15 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
[root@centos701 ansible]#