How To Install and Test Ansible on Linux

Ansible は、単一または複数のマシンを同時に構成するのに役立つ Python 言語で書かれた構成管理ツールで、広く使用されています。 Ansible は以下のタスクに使用できます。

  • 単一または複数のノードのゼロからの構成
  • デプロイメント
  • 構成の変更
  • パッチ
  • サービス管理
  • その他多数

Ansible が広く使用されている理由はそのシンプルさによるものです。 AnsibleのコードはYAML言語で書かれており、リモートマシンにエージェントをインストールする必要がありません。 Ansible はポート 22 (SSH) を使用してリモート マシンに接続し、必要な変更を行います。

22 番ポートでリモート マシンに接続できる任意のマシンは、制御ノードになることができます。 制御ノードはAnsibleをインストールできる場所であり、管理ノードは制御ノードによって管理されるようになります。

Controller ノードへの Ansible のインストールを見てみましょう。

CentOS 7 に Ansible をインストールします。

$sudo yum install python3 -y

Centos 7にAnsibleをインストールするには、まず、CentOS 7のEPELリポジトリがインストールされていることを確認します。 以下のコマンドを実行し、epelリポジトリをインストールします。

$sudo yum install epel-release

以下のupdateコマンドを実行して、システムのパッケージインデックスを更新します。

$sudo yum update -y

リポジトリがインストールされたら、yumパッケージマネージャを使用してAnsibleをインストールします。 以下のコマンドを実行し、Ansibleをインストールします。

$sudo yum install ansible -y

Ansible が正しくインストールされているか、またそのバージョンを確認します。

$ansible -v

CentOS8にAnsibleをインストールする:

CentOS 8のインストール手順を見てみましょう。 CentOS 8にpythonをインストールします。

$sudo dnf install python3

pythonがインストールされたら、以下のコマンドを実行してEPELレポをインストールします。

$sudo dnf install epel-release -y

以下のupdateコマンドを実行してシステムパッケージのインデックスを更新します。

$sudo dnf install ansible -y

Ansible が正しくインストールされているか、またそのバージョンを確認します。

$ansible -v

UbuntuにAnsibleをインストールする:

Python は現在、ほとんどのLinuxディストリビューションでデフォルトパッケージとして提供されています。 Pythonがインストールされていない場合は、以下のコマンドを実行して、Pythonパッケージをインストールしてください。

$sudo apt-get install python3

Ubuntu に Ansible をインストールするには、まず、以下のコマンドを実行してリポジトリをインストールします。

$sudo apt-add-repository ppa:ansible/ansible

以下のupdateコマンドを実行して、システムのパッケージインデックスを更新します。

$sudo apt-get update -y

次に、Ansibleをインストールします。

$sudo apt-get install -y ansible

Ansibleが正しくインストールされたか、そのバージョンを確認します。

$ansible -v

CentOS、Debian、Ubuntu で Python PIP を使用して Ansible をインストールする:

使用しているオペレーティング システムに関係なく、Python パッケージ インストーラーを使用して Ansible をインストールすることが可能です。 python3-pip.

Centos 7以下の場合:

$sudo yum install python3 python3-pip -y

Centos 8の場合:

$sudo dnf install python3 python3-pip -y

Ubuntu と Debian の場合:

$sudo apt-get install python3 python3-pip

python と pip がインストールされているので、任意のOSで以下のコマンドを実行してAnsible をインストールしましょう。

$sudo pip3 install ansible

Ansible が正しくインストールされているか、またそのバージョンを確認します。

$ansible -v

Ansible Controller Hosts の設定:

他のノードとの通信を開始する前に、まず “hosts” ファイルをセットアップする必要があります。 このファイルには、管理対象ノードのすべての IP またはホスト名が含まれます。

Note: 管理対象ノードに接続するために hosts ファイルを使用する必要は必ずしもありません。

root 権限で以下のコマンドを実行してファイルを作成します (ファイルがない場合):

$sudo touch /etc/ansible/hosts

ファイルに書き込む前に、サンプル hosts ファイルを見て理解しましょう:


alias ansible_ssh_host=your_node_server_ip

hosts ファイルは上記の文法に従わなければなりません。 各パラメータを見てみましょう。

: このパラメータはグループを作成します。 group_nameパラメーターの下にあるすべての管理ノードIPアドレスまたはホスト名は、同じグループに分類されます。 たとえば、インフラストラクチャに複数のWebサーバーがある場合、すべてのIPアドレスまたは管理ノードのホスト名をここに追加できます。

alias: このパラメーターは、管理ノードサーバーを識別するためのエイリアスを与えるために使用されます。 たとえば、インフラストラクチャに複数の Web サーバーがある場合、エイリアスとして host1、host2、host3 を指定することができます。 エイリアスを与える主な利点は、1 つのサーバーの構成を変更するために Ansible コマンドを実行するとき、エイリアスを使用してサーバー上で必要なタスクを識別して実行できることです。 このパラメーターは、エイリアスを管理ノード IP アドレスまたはホスト名に向けます。

Ansible で管理されるノードとして CentOS 8 を使用することにします。 前述のとおり、Ansible はリモートホストの 22 ポートを使用して接続します。

ここでは、CentOS の管理ノード サーバーの IP アドレスを 192.168.0.2、192.168.0.3、および 192.168.0.4 とします。

Ansible コントローラ ノードと管理ノードが通信するには、SSH ポートであるポート 22 で管理ノードにアクセスできるかどうかを確認する必要があります。 以下のコマンドを実行し、コントローラから3つの管理対象ノードに1つずつ接続を確認します。

$ssh [email protected]
$ssh [email protected]
$ssh [email protected]

すべてのノードのルートユーザのパスワードの入力を求められますので、パスワードを入力してください。 Ansibleコントローラと管理ノード間でパスワードレス認証が設定されている場合、Ansibleは非常にスムーズに動作します。 Ansibleコマンドのパラメータを変更することで、パスワード認証も動作するようになります。

Ansible コントローラと管理ノード間で ssh 接続を設定したので、すべての管理ノードに接続するために hosts ファイルを設定しましょう。 前述したように、1つのグループに複数のノードサーバーのエイリアスを追加することができます。 今回は、3つのノードを追加し、それぞれhost1, host2, host3としてエイリアスを割り当てます。 管理ノードの詳細をすべて追加した後、hostsファイルは以下のようになります。 以下のコマンドを実行して、先ほど作成したhostsファイルを編集してください。

root権限で以下のコマンドを実行してファイルを開きます。

$sudo vi /etc/ansible/hosts

hosts ファイルに以下の設定を追加してみましょう。

Ansible コントローラから管理ノードに接続してみましょう。

$ansible -m ping node_servers

上記のコマンドは、ping モジュールを使用して、上記の hosts ファイルで定義した “node_servers” グループに接続するものです。

さまざまな理由でエラーが発生する可能性があります。

  1. Ansible は、デフォルトで、あなたがユーザー名を提供しなかった場合、現在のユーザー名を使用して管理ノードに接続しようとします。
  2. ssh port 22 is not open for connection on managed nodes.そのユーザがノードサーバに存在しない場合、以下のエラーが表示されます。 (前述の通り、Ansibleはsshポートで接続します)
  3. hostsファイルのIPが正しくない場合

上記条件のいずれかに失敗すると、以下のエラーが表示されます。

host1 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh.",
"unreachable": true
}
host2 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh.",
"unreachable": true
}
host3 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh.",
"unreachable": true
}

Ansible に、特に “node_servers” グループ内の管理ノードに james ユーザで接続するように指示します。 以下に示すように group_vars ディレクトリを作成します。

$sudo mkdir /etc/ansible/group_vars

このディレクトリ内のファイルは、Ansible プレイブックで使用する変数を設定するために特に使用されます。

以下のコマンドを実行して、セットアップ用の変数ファイルを作成しましょう:

$sudo vim /etc/ansible/group_vars/node_servers.yml

ファイルに以下のコードを追加:

---
ansible_ssh_user: james

YML ファイルの最初の行は常に “—” で始まっています。 終了したらこのファイルを保存して閉じましょう。 これでAnsibleは、現在コマンドを実行しているユーザーに関係なく、node_serversグループには常にjamesユーザーを使用するようになります。

管理対象ノードの接続を確認する:

ホストの設定と、管理対象ノードに正常に接続できる十分な設定詳細が得られたので、前に実行したのと同じコマンドを試してみましょう。

$ansible -m ping servers 

Ansible はこのような出力を返します。

host1 | SUCCESS => {
"changed": false,
"ping": "pong"
}
host2 | SUCCESS => {
"changed": false,
"ping": "pong"
}

host3 | SUCCESS => { “changed”: false, “ping”: “pong”}

これは、Ansible がその管理ノードに接続されていることを確認するための基本的なテストです。

結論です。

Managed ノードに CentOS オペレーティング システムを使用する必要はありません。 CentOS、RedHat、Ubuntu、およびその他の Linux ディストリビューションで、上記で使用したのと同じテスト構成を使用できます。

How To Install and Test Ansible on Linux

コメントを残す

メールアドレスが公開されることはありません。