市場には多くの自動化ツールがあります。例えば、Puppet、Chef、CFEngine、Foreman、Katello、Saltstock、Space Walkなどです。
自動化ツールで何ができるのでしょうか?
自動化ツールは、人手を介さずにルーチンタスクを自動化することで、Linux管理者の作業を容易にします。これらのツールにより、ユーザーは構成管理、アプリケーションのデプロイ、リソースのプロビジョニングを実行できます。
なぜAnsibleが好きなのですか?
Ansibleはエージェントレスの自動化ツールで、SSHを使ってすべてのタスクを実行しますが、他のツールではクライアント・ノードにエージェントをインストールする必要があります。
Ansibleとは何ですか?
Ansibleは、SSH経由でクライアントノード上でタスクを実行する、オープンソースで使いやすく強力なIT自動化ツールです。
Pythonは、現在世界で最も人気があり、強力なプログラミング言語の1つです。Pythonは、すべてのモジュールを実行するために両端に必要です。
システムの設定、ソフトウェアのデプロイ、継続的なデプロイやゼロダウンタイムのローリングアップデートなどの高度な IT タスクのスケジューリングを行います。単純なものから複雑なものまで、Ansible を使用すると、あらゆる種類の自動化タスクを簡単に実行できます。
より良いタスクを作成するために、Ansibleの用語を理解する必要があります。
Ansibleはどのように機能するのですか?
Ansibleは、ansibleモジュールと呼ばれるアプレットをクライアント・ノードにプッシュすることで動作します。このモジュールはクライアント・ノードに一時的に格納され、JSONプロトコルを介してAnsibleサーバーと通信します。
AnsibleはこれらのモジュールをSSH経由で実行し、完了したら削除します。
モジュールとは、例えばPythonやPerlで書かれたスクリプトのようなものです。
- Ansibleを使用して制御ノード上でタスクを実行するホスト。複数の制御ノードを持つことはできますが、Windowsシステムホストを制御ノードとして使用することはできません。
- 制御ノードが設定したホストのリスト。
- : /etc/ansible/hostsファイルで設定されたノードが管理するホストのリストを制御します。IPアドレスやホスト名などの各ノードに関する情報が含まれており、必要に応じてこれらのノードをグループ化することができます。
- 各モジュールは特定のタスクを実行するために使用され、現在3,387のモジュールがあります。
- 一度に1つのタスクを実行でき、 /usr/bin/ansibleバイナリを使用します。
- それぞれタスクのリストを持っています。タスクは制御されたノード内で1つずつ順次実行されます。
- ピアツーピアでは1つのタスクしか実行できませんが、スクリプトを使えば複数のタスクを同時に実行できます。スクリプトはYAMLで書かれており、読みやすいです。将来的には、複雑なタスクを実行するために使用できるスクリプトについての記事が書かれる予定です。
テスト環境
この環境には、1台の制御ノードと3台の被制御ノードが含まれ、すべてのノードはオペレーティング・システムとともに仮想環境で動作します:
| Ansible Control Node | server.2g.lab | Manjaro 18 | |
| Managed Node1 | node1.2g.lab | CentOS7 | |
| Managed Node2 | node2.2g.lab | CentOS8 | |
| Managed Node3 | node3.2g.lab | Ubuntu 18.04 | |
| User: daygeek | 
前提条件
- Ansible 制御ノードと被制御ノード間のパスワードレス認証を有効にします。
- 制御ノードはPython 2またはPython 3でなければなりません。
- 制御ノードはPython 2またはPython 3でなければなりません。
- リモート・ノードでSELinuxが有効になっている場合、Ansibleでレプリケーション、ファイル、テンプレートに関連する機能を使用するには、リモート・ノードに libselinux-pythonインストールする必要もあります。
制御ノードにAnsibleをインストールする方法
Fedora/RHEL 8/CentOS 8システムの場合は、 DNF コマンド 使用してAnsibleをインストールします。
注: RHEL/CentOS システムでは、Ansible パッケージがディストリビューションの公式リポジトリで利用できないため、 EPEL リポジトリ有効にする必要があります。
$ sudo dnf install ansible
Debian/Ubuntuシステムでは、 APT-GET コマンド または APT コマンド 使用してAnsibleをインストールします。
UbuntuにAnsibleの最新安定版をインストールするために、以下のPPAを設定します。
$ sudo apt update
$ sudo apt install software-properties-common
$ sudo apt-add-repository --yes --update ppa:ansible/ansible
$ sudo apt install ansible
Debianシステムの場合、以下のソースのリストを設定します:
$ echo "deb http://../// trusty main" | sudo tee -a /etc/apt/sources.list.d/ansible.list
$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys FD7BB9C763
$ sudo apt update
$ sudo apt install ansible
Arch Linux システムでは、 Pacman コマンドを使って Ansible をインストールしてください:
$ sudo pacman -S ansible
RHEL/CentOS システムの場合は、 YUM コマンド 使用して Ansible をインストールします:
$ sudo yum install ansible
openSUSEシステムでは、 Zypper コマンド 使用してAnsibleをインストールします:
$ sudo zypper install ansible
あるいは、 Python PIP パッケージ管理ツールを使って インストールすることもできます:
$ curl https://../-.py -o get-pip.py
$ sudo python get-pip.py
$ sudo pip install ansible
コントロールノードにインストールされているAnsibleのバージョンを確認します:
$ ansible --version
ansible 2.9.2
config file = /etc/ansible/ansible.cfg
configured module search path = ['/home/daygeek/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python3.8/site-packages/ansible
executable location = /usr/bin/ansible
python version = 3.8.1 (default, Jan 8 :20) [GCC 9.2.0]
制御ノードにPythonをインストールする方法を教えてください。
コントロールされているノードに python をインストールするには、以下のコマンドを使用します:
$ sudo yum install -y python
$ sudo dnf install -y python
$ sudo zypper install -y python
$ sudo pacman -S python
$ sudo apt install -y python
LinuxでSSHキー認証を設定する方法
以下のコマンドを使用して ssh キーを作成し、リモートコンピュータにコピーします。
$ ssh-keygen
$ ssh-copy-id daygeek@node1.2g.lab
$ ssh-copy-id daygeek@node2.2g.lab
$ ssh-copy-id daygeek@node3.2g.lab
Ansibleホスト・マニフェストの作成方法
$ sudo vi /etc/ansible/hosts
node1.2g.lab
node2.2g.lab
node3.2g.lab
以下のコマンドですべてのホストを見つけられるか試してみましょう。
$ ansible all --list-hosts
hosts (3):
node1.2g.lab
node2.2g.lab
node3.2g.lab
単一のグループに対して以下のコマンドを実行します:
$ ansible web --list-hosts
hosts (2):
node1.2g.lab
node2.2g.lab
ピアツーピアコマンドを使用したタスクの実行方法
ホストリストの確認チェックが終わったら、旅に出ましょう。お見事です!
文法:
ansible [pattern] -m [module] -a "[module options]"
Details:
========
ansible: A command
pattern: Enter the entire inventory or a specific group
-m [module]: Run the given module name
-a [module options]: Specify the module arguments
Ping モジュールを使用して、ホストリスト内のすべてのノードに対して ping 操作を実行します:
$ ansible all -m ping
node3.2g.lab | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
"changed": false,
"ping": "pong"
node1.2g.lab | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
"changed": false,
"ping": "pong"
node2.2g.lab | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
"changed": false,
"ping": "pong"
どのシステムも成功を返しましたが、何も変わらず、成功のポンだけが出ました。
以下のコマンドで利用可能なモジュールのリストを取得できます。
$ ansible-doc -l
現在、3,387の組み込みモジュールがあり、Ansibleのバージョンが上がるにつれて増えていきます:
$ ansible-doc -l | wc -l
コマンドモジュールを使用して、ホストリストにあるすべてのノードでコマンドを実行します:
$ ansible all -m command -a "uptime"
node3.2g.lab | CHANGED | rc=0 >>
up 1:21, 3 users, load average: 0., 0.01
node1.2g.lab | CHANGED | rc=0 >>
up 1:21, 4 users, load average: 0., 0.05
node2.2g.lab | CHANGED | rc=0 >>
up 1:25, 3 users, load average: 0., 0.00
指定されたグループのコマンドモジュールを実行します。
アプリグループホストのメモリ使用量を確認してください:
$ ansible app -m command -a "free -m"
node3.2g.lab | CHANGED | rc=0 >>
total used free shared buff/cache available
Mem: 6
ウェブ・グループに対して hostnamectl コマンドを実行するには、以下の書式を使用します:
$ ansible web -m command -a "hostnamectl"
node1.2g.lab | CHANGED | rc=0 >>
Static hostname: CentOS7.2daygeek.com
Icon name: computer-vm
Chassis: vm
Machine ID: af248f5be1d514c
Boot ID: dcdef
Virtualization: kvm
Operating System: CentOS Linux 7 (Core)
CPE OS Name: cpe:/o:centos:centos:7
Kernel: Linux 3.7.el7.x86_64
Architecture: x86-64
node2.2g.lab | CHANGED | rc=0 >>
Static hostname: node2.2g.lab
Icon name: computer-vm
Chassis: vm
Machine ID: ebcbfcab
Boot ID: dde546da95ace03420fe12cb
Virtualization: oracle
Operating System: CentOS Linux 8 (Core)
CPE OS Name: cpe:/o:centos:centos:8
Kernel: Linux 4..el8.x86_64
Architecture: x86-64
経由:





