ansible インストール

投稿者: | 2017年12月13日

ansibleは複数サーバに対して同じ設定をするときや、構築をリピートするときなんかに最適な最強ツール。

※余談だけど、ansibleは元RedHat社のマイケル・ディハン氏が開発したものらしい。

ansible用サーバ環境要件

リソース 要件 備考
ディストリビューション(OS) CentOS7.4 ※CentOS7系だったら大きな変化は無し
ホスト名 ansible_sv 任意
IPアドレス 192.168.3.8/24 自宅環境なのでクラスCアドレス
ゲートウェイ 192.168.3.1 自宅HGW
ネームサーバ 192.168.3.1 自宅HGW

■ansible関連パッケージのインストール

①リポジトリをインストール
標準のリポジトリ設定だとインストールできないため、ansible用のリポジトリをインストールする。
インストールするリポジトリ名は「epel-release」で、yumコマンドでインストールする。

[root@ansible_sv ~]# yum install epel-release
        :
        :
================================================================================
 Package                アーキテクチャー バージョン      リポジトリー      容量
================================================================================
インストール中:
 epel-release           noarch           7-9             extras            14 k

トランザクションの要約
================================================================================
インストール  1 パッケージ

総ダウンロード容量: 14 k
インストール容量: 24 k
Is this ok [y/d/N]: y
Downloading packages:
epel-release-7-9.noarch.rpm                                |  14 kB   00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  インストール中          : epel-release-7-9.noarch                         1/1
  検証中                  : epel-release-7-9.noarch                         1/1

インストール:
  epel-release.noarch 0:7-9

完了しました!

②ansibleをインストール
リポジトリのインストールが終わったら、ansibleをyumコマンドでインストール。

[root@ansible_sv ~]# yum install ansible
        :
        :
依存性を解決しました

================================================================================
 Package                              アーキテクチャー
                                              バージョン         リポジトリー
                                                                           容量
================================================================================
インストール中:
 ansible                              noarch  2.4.2.0-1.el7      epel     7.6 M
依存性関連でのインストールをします:
 PyYAML                               x86_64  3.10-11.el7        base     153 k
 libtomcrypt                          x86_64  1.17-26.el7        extras   224 k
 libtommath                           x86_64  0.42.0-6.el7       extras    36 k
 libyaml                              x86_64  0.1.4-11.el7_0     base      55 k
 python-babel                         noarch  0.9.6-8.el7        base     1.4 M
 python-backports                     x86_64  1.0-8.el7          base     5.8 k
 python-backports-ssl_match_hostname  noarch  3.4.0.2-4.el7      base      12 k
 python-cffi                          x86_64  1.6.0-5.el7        base     218 k
 python-enum34                        noarch  1.0.4-1.el7        base      52 k
 python-httplib2                      noarch  0.9.2-1.el7        extras   115 k
 python-idna                          noarch  2.4-1.el7          base      94 k
 python-ipaddress                     noarch  1.0.16-2.el7       base      34 k
 python-jinja2                        noarch  2.7.2-2.el7        base     515 k
 python-keyczar                       noarch  0.71c-2.el7        epel     218 k
 python-markupsafe                    x86_64  0.11-10.el7        base      25 k
 python-paramiko                      noarch  2.1.1-2.el7        extras   267 k
 python-ply                           noarch  3.4-11.el7         base     123 k
 python-pycparser                     noarch  2.14-1.el7         base     104 k
 python-setuptools                    noarch  0.9.8-7.el7        base     397 k
 python-six                           noarch  1.9.0-2.el7        base      29 k
 python2-crypto                       x86_64  2.6.1-15.el7       extras   477 k
 python2-cryptography                 x86_64  1.7.2-1.el7_4.1    updates  502 k
 python2-jmespath                     noarch  0.9.0-3.el7        extras    39 k
 python2-pyasn1                       noarch  0.1.9-7.el7        base     100 k
 sshpass                              x86_64  1.06-2.el7         extras    21 k

トランザクションの要約
================================================================================
インストール  1 パッケージ (+25 個の依存関係のパッケージ)

総ダウンロード容量: 13 M
インストール容量: 61 M
Is this ok [y/d/N]: y
        :
        :
Importing GPG key 0x352C64E5:
 Userid     : "Fedora EPEL (7) <epel@fedoraproject.org>"
 Fingerprint: 91e9 7d7c 4a5e 96f1 7f3e 888f 6a2f aea2 352c 64e5
 Package    : epel-release-7-9.noarch (@extras)
 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
上記の処理を行います。よろしいでしょうか? [y/N]y    -> 途中の質問も「y」を入力する
        :
        :
インストール:
  ansible.noarch 0:2.4.2.0-1.el7
        :
        :
  python2-jmespath.noarch 0:0.9.0-3.el7
  python2-pyasn1.noarch 0:0.1.9-7.el7
  sshpass.x86_64 0:1.06-2.el7

完了しました!

全部「完了しました!」と表示されればOK。
念のため本当にインストールされているか、ansibleコマンドでバージョン確認してみる。

[root@ansible_sv ~]# ansible --version
ansible 2.4.2.0
  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, Aug  4 2017, 00:39:18) [GCC 4.8.5 20150623 (Red Hat 4.8.5-16)]

コマンド実行結果は現時点の最新版が表示される。


■/etc/ansible/ansible.cfgの設定

ansibleインストール直後、/etc/ansibleディレクトリ配下に以下のファイルとディレクトリが作成される。

[root@ansible_sv ~]# ls -lrt /etc/ansible
合計 24
drwxr-xr-x. 2 root root     6 11月 30 07:40 roles
-rw-r--r--. 1 root root  1016 11月 30 07:40 hosts
-rw-r--r--. 1 root root 19155 11月 30 07:40 ansible.cfg

「roles」 ⇒ ansibleのrole機能を使うときに使うディレクトリ。詳細は別途。
「hosts」 ⇒ yml形式で書いたスクリプト(playbookという)をどのホストで行うかを設定するファイル。playbook内で指定するホスト名と、IPアドレスを記述する。
「ansible.cfg」 ⇒ ansibleの実行環境を設定するコンフィグファイル。

ここではまずansible.cfgの内容を設定する。
一応、cfgファイルを編集するときはバックアップも忘れずに。

[root@ansible_sv ~]# cp -p /etc/ansible/ansible.cfg /etc/ansible/ansible.cfg.bk
[root@ansible_sv ~]# vi /etc/ansible/ansible.cfg
        :
        :
     10 [defaults]
     11
     12 # some basic default values...
     13
     14 #inventory      = /etc/ansible/hosts
     15 #library        = /usr/share/my_modules/
     16 #module_utils   = /usr/share/my_module_utils/
     17 #remote_tmp     = ~/.ansible/tmp
     18 #local_tmp      = ~/.ansible/tmp
     19 #forks          = 5
     20 #poll_interval  = 15
     21 #sudo_user      = root
     22 #ask_sudo_pass = True
     23 #ask_pass      = True
     24 #transport      = smart
     25 #remote_port    = 22
     26 #module_lang    = C
     27 #module_set_locale = False
        :
     35 #gathering = implicit
        :
    240 #retry_files_enabled = False
        :

ansible.cfgの内容を見るとコメントアウトされた注釈文やパラメータが色々存在するが、まずまず気にしなければいけないのは以下のパラメータ。

inventory = /etc/ansible/hosts
hostsファイルの場所を指定する。
sudo_user = root
hostsで指定したアクセス先で実行するsudoのユーザを指定。一般ユーザでansibleを実行する場合は、実行先のサーバでyum等のroot権限が必要な場合があるのでここはrootにしておいたほうが無難。
ask_sudo_pass = True
hostsで指定したアクセス先でsudoを実行する場合、パスワードを聞かれるようにする。セキュリティ対策としては「True」のほうがいいが、聞かれないようにする場合は「False」と記述する。
ask_pass = True  hostsで指定したアクセス先にansible-playbookコマンドでアクセスするときに、パスワードを聞かれるようにする。下のremote_port=22の場合はsshなので、「True」ではsshログイン時のパスワードを聞かれる。聞かれないようにするには「False」と記述する。
remote_port = 22  hostsで指定したアクセス先のlistenポート。sshでアクセスするのが一般的なので、22で。

gathering = implicit  ansibleを実行した際に、hostsで指定したアクセス先に無事にアクセスできるかどうかを事前に確認するための設定。「implicit」は確認あり、「explicit」は確認なし。コメントアウトしているときは「implicit」と同様となる。必要なければexplicitでも問題ない。

retry_files_enabled = False  ansibleを実行すると、デフォルトではplaybookと同じディレクトリに~.retryというファイルが生成される。中身を見るとansibleを実行したホストのIPアドレスが記述されるが、なくても特にansible生活には支障ない。必要なければコメントアウトを外して生成されないようにするとよい。

ansibleの特徴の一つとして、ansible.cfgの設定内容が反映される場面というのは、ansible-playbookコマンドやplaybookで指定したモジュール(ansible.cfgと同等の設定を記述した場合)よりも優先順位が低いということ。つまり、コメントアウトしたままでもansible-playbookコマンドのオプションやplaybookの中でも上記コンフィグ内容を指定することができるのだ。なので、ansible.cfg内のあるパラメータをどのくらいの使用頻度でansibleを使うのかとか、自分のスタイルを踏まえてコメントアウトを外すかどうか決めてOKかと。

ちなみに、小生の設定は以下。

[root@ansible_sv ~]# vi /etc/ansible/ansible.cfg
        :
        :
     10 [defaults]
     11
     12 # some basic default values...
     13
     14 inventory      = /etc/ansible/hosts
     15 #library        = /usr/share/my_modules/
     16 #module_utils   = /usr/share/my_module_utils/
     17 #remote_tmp     = ~/.ansible/tmp
     18 #local_tmp      = ~/.ansible/tmp
     19 #forks          = 5
     20 #poll_interval  = 15
     21 #sudo_user      = root
     22 #ask_sudo_pass = True
     23 ask_pass      = True
     24 #transport      = smart
     25 #remote_port    = 22
     26 #module_lang    = C
     27 #module_set_locale = False
        :
     35 #gathering = implicit
        :
    240 retry_files_enabled = False
        :

■/etc/ansible/hostsの設定

playbookを実行するホストの情報を記述する。例えばこんな感じ。

[root@ansible_sv ~]# vi /etc/ansible/hosts
[ldap_sv]
192.168.3.7

実行するホスト名を[]で囲み、その下にIPアドレスを記述する。ホストを複数指定する場合は、

[ldap_sv]
192.168.3.3
192.168.3.4
192.168.3.5

とか、

[ldap_sv1]
192.168.3.3

[ldap_sv2]
192.168.3.4

という感じで記述する。

※※※注意点※※※
[]のホスト名はplaybook内で指定するホスト名であって、必ずしもhostname等で表示されるホスト名と同一である必要はない。また、ansibleをインストールしたサーバ自体のIPアドレスを指定しても、そのIPアドレスに対してはplaybookは実行されず、スキップしてしまう。自分自身にplaybookを実行させたい場合は、

# ansible-playbook -i 192.168.3.8, <playbook名>
のように、コマンドの-iオプションで自分のIPアドレス(最後のカンマは必須!)を指定してplaybookを実行すると、自分に対してplaybookを実行してくれる。-iオプションは結構便利で、hostsに何も記述していなくても、-iオプションでansibleを実行したいホストのIPアドレスを指定してやれば、どのサーバに対しても実行してくれる。

まずは、インストールと各ファイルの設定はこれで完了!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA