Ansibleは以前からきちんと使えるようになりたいと思いつつ、業務が多忙だったことや、他に優先して勉強することがあるなどで、きちんと習得できていなかった。
ただ、いくら業務で使っていないからといって、いつまでもAnsibleを避けていては、従来のインフラの構築手法や知識からの発展が見込めないため、ようやく腰を据えてAnsibleを勉強しなおすことにした。
具体的には、自宅の検証環境にAnsibleコントロールノードを構築し、Linuxサーバ、Windowsサーバ、VMware仮想環境などの構成管理をAnsibleにて実現したいと考えている。
実現結果は本ブログで記事として順次公開していきたい。以下、今後記事として公開したい内容となる。
- AnsibleコントロールノードをAlmaLinux上に構築する ←★本記事
- AnsibleからLinuxサーバに接続するための事前作業
- AnsibleでLinuxサーバの初期設定と単体テストを行う
- Ansibleのベストプラクティスのディレクトリ構成でPlaybookを実行する
- AnsibleからWindows Serverに接続するための事前作業
- AnsibleでWindows Serverの初期設定と単体テストを行う
- AnsibleでESXi上に仮想マシンを構築する
まず第一弾として、本記事ではAnsibleコントロールノードをAlmaLinux上に構築する手順を記載する。
環境
コントロールノードとなるOSは、AlmaLinuxを用いる。ただし、Red Hat系のディストリビューションであるCentOSやRocky Linuxなどでも同様の手順で構築できるだろう。
- OS : AlmaLinux 8.5
- Ansible : ansible [core 2.13.1]
前提として、SELinuxとfirewalldは停止しておく。
# systemctl stop firewalld
# systemctl disable firewalld
# sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
# reboot
Ansibleコントロールノード構築手順
1. dnf
でpipをインストール
Ansibleはdnf
で直接パッケージをインストールせず、Python用のパッケージ管理ツールである「pip」を用いる。pip自体はdnf
でインストールできる。
また、AnsibleからLinuxに接続する際にSSH公開鍵認証方式ではなく、パスワード認証による接続をできるようにするため、sshpass
のインストールも併せて行う。
# dnf install epel-release python3-pip sshpass -y
2. Python3をバージョンアップ
最新版のAnsibleを利用する場合、Pythonも新しいバージョンを使用する必要がある。例えば、最近のバージョンでは以下のバージョン制約がある。
Ansible | Python |
---|---|
2.10以降 | 3.8以降 |
2.9 | 3.5以降 |
AlmaLinuxの場合、パッケージインストールされるバージョンは以下の通りとなる。
# python3 --version
Python 3.6.8
バージョンを最新化するため、dnf
を用いてpython38
をインストールする。
# dnf install python38 -y
通常利用するPythonをPython 3.6から3.8に変更するため、alternatives
を使って、以下の通り設定する。
# alternatives --list
libnssckbi.so.x86_64 auto /usr/lib64/pkcs11/p11-kit-trust.so
python auto /usr/libexec/no-python
ifup auto /usr/libexec/nm-ifup
cifs-idmap-plugin auto /usr/lib64/cifs-utils/cifs_idmap_sss.so
python3 auto /usr/bin/python3.6
# alternatives --set python3 /usr/bin/python3.8
# alternatives --list
libnssckbi.so.x86_64 auto /usr/lib64/pkcs11/p11-kit-trust.so
python auto /usr/libexec/no-python
ifup auto /usr/libexec/nm-ifup
cifs-idmap-plugin auto /usr/lib64/cifs-utils/cifs_idmap_sss.so
python3 manual /usr/bin/python3.8
3. pipをバージョンアップ
Ansibleインストール前に、pip自体をバージョンアップする。
# pip3 install --upgrade pip
WARNING: Running pip install with root privileges is generally not a good idea. Try `pip3 install --user` instead.
Collecting pip
Downloading https://files.pythonhosted.org/packages/96/2f/caec18213f6a67852f6997fb0673ae08d2e93d1b81573edb93ba4ef06970/pip-22.1.2-py3-none-any.whl (2.1MB)
|????????????????????????????????| 2.2MB 14.1MB/s
Installing collected packages: pip
Successfully installed pip-22.1.2
4. Ansibleをインストール
pipにてAnsibleをインストールする。なお、特にバージョン指定を行わない限り、最新バージョンのAnsibleが導入される。
# pip3 install ansible
WARNING: pip is being invoked by an old script wrapper. This will fail in a future version of pip.
Please see https://github.com/pypa/pip/issues/5599 for advice on fixing the underlying issue.
To avoid this problem you can invoke Python with '-m pip' instead of running pip directly.
Collecting ansible
Downloading ansible-6.0.0-py3-none-any.whl (40.3 MB)
qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq 40.3/40.3 MB 32.1 MB/s eta 0:00:00
Collecting ansible-core~=2.13.0
Downloading ansible_core-2.13.1-py3-none-any.whl (2.1 MB)
qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq 2.1/2.1 MB 33.7 MB/s eta 0:00:00
~(中略)~
Installing collected packages: resolvelib, PyYAML, pyparsing, pycparser, MarkupSafe, packaging, jinja2, cffi, cryptography, ansible-core, ansible
Successfully installed MarkupSafe-2.1.1 PyYAML-6.0 ansible-6.0.0 ansible-core-2.13.1 cffi-1.15.1 cryptography-37.0.2 jinja2-3.1.2 packaging-21.3 pycparser-2.21 pyparsing-3.0.9 resolvelib-0.8.1
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
インストールされたAnsibleのバージョンは以下の通り。2.13.1という最新バージョン (2022年7月時点) が導入されている。
# ansible --version
ansible [core 2.13.1]
config file = None
configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/local/lib/python3.8/site-packages/ansible
ansible collection location = /root/.ansible/collections:/usr/share/ansible/collections
executable location = /usr/local/bin/ansible
python version = 3.8.12 (default, Apr 21 2022, 07:55:08) [GCC 8.5.0 20210514 (Red Hat 8.5.0-10)]
jinja version = 3.1.2
libyaml = True
なお、何らかの理由で古いバージョンのAnsibleを使用したい場合は、以下の通りバージョン指定を行うことでインストールできる。以下はバージョン2.9をインストールする場合の例となる。
# pip3 install "ansible==2.9.*"
# ansible --version
ansible 2.9.27
config file = None
configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/local/lib/python3.8/site-packages/ansible
executable location = /usr/local/bin/ansible
python version = 3.8.12 (default, Apr 21 2022, 07:55:08) [GCC 8.5.0 20210514 (Red Hat 8.5.0-10)]
以上で、Ansibleコントロールノードとして必要な作業は完了となる。次は、実際にAnsibleにて接続確認まで実施してみよう。
自身のOSに対してAnsibleによる接続確認
1. Ansible実行ユーザを作成
Ansible実行のユーザを作成する。今回はansibleuser
という名前で作成した。Ansible実行ユーザは、SSHで接続できるようパスワード設定を行い、特権が必要な処理を実行するためにsudoできるよう、/etc/sudoers
に設定を行う。
# useradd -u 2001 ansibleuser
# echo 'ansibleuser:[任意のパスワードを設定]' | chpasswd
# echo 'ansibleuser ALL=(root) NOPASSWD:ALL' >> /etc/sudoers
2. インベントリファイルの作成
Ansible実行時はインベントリファイルという、実行対象のサーバや接続ユーザ情報などを記載したファイルを指定したうえで実行する。今回は、hosts
という名前で以下のようにインベントリファイルを作成した。
# vi hosts
[ansible_server]
192.168.11.25
[ansible_server:vars]
ansible_user=ansibleuser
3. Ansibleによる接続確認
Ansibleの接続確認を行うためのモジュールであるping
モジュールを使用して確認を行う。実行時のオプションの意味は以下の通りとなる。
オプション | 説明 |
---|---|
-i |
インベントリファイルを指定。 |
-m |
実行モジュールを指定。 |
--ask-pass , -k |
接続時にパスワード認証を用いる。 |
# ansible -i hosts -m ping 192.168.11.25 --ask-pass
SSH password:
192.168.11.25 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": false,
"ping": "pong"
}
実行結果でpong
と帰ってきていれば、Ansible実行に成功している。以上で、Ansibleコントロールノードの構築と接続確認は完了となる。
参考
なお、Ansibleの各種モジュールの使用方法は以下書籍が非常に詳しく参考になる。
0 件のコメント:
コメントを投稿