GNU/Linux >> Linux の 問題 >  >> Linux

Ansibleインベントリおよび構成ファイル

数日前、Vagrantを使用して3ノードのAnsibleラボをセットアップする方法について説明しました。 Linuxでは。この記事では、Ansibleインベントリや構成ファイルなどのAnsibleの基本的な概念について詳しく学習します。

Ansibleの基本構造

ansibleを使い始めるとき、理解しておくべき2つの重要なファイルがあります。 1つはAnsibleインベントリです ファイルと2番目はAnsible構成です ファイル。

構成 ファイルには、実行時にansibleが使用するすべての構成が含まれています。 OSパッケージマネージャーを使用してansibleをインストールすると、「ansible.cfg」という名前のデフォルトの構成ファイルがあることがわかります。 "/etc/ansibleで作成 ディレクトリ。

インベントリファイル 使用する管理対象ホストのリストに関するIPアドレスまたはDNS情報が含まれています。 Ansibleはインベントリファイルからホスト名を読み取り、タスク/再生はそのノードで実行されます。インベントリファイルはiniで作成できます 、yaml 、およびjson フォーマット。

以下は私のプロジェクトの構造です。 ansible.cfgがあります 構成ファイル、hostsファイル、およびyamlで記述されたプレイブック フォーマット。

プレイブックをトリガーすると、ansibleはansible.cfgから構成を読み取ります プレイを実行するためのファイルとhostsファイルからのホストの詳細。

[email protected]:~/ansible_project$ tree .
.
├── ansible.cfg
├── hosts
└── playbook.yml

0 directories, 3 files

これら2つのファイルについて詳しく話しましょう。最終的に、いくつかのアドホックコマンドを実行します。

Ansible構成ファイル

Ansibleは、構成ファイルを使用して、ansibleタスクの実行に必要なパラメーターをロードします。 パッケージマネージャーを使用してansibleをインストールした場合ansible.cfgがあります /etc/ansible内のファイル ディレクトリ。

以下は、ansible.cfgのサンプルです。 ファイル。

Ansibleは次の順序で構成ファイルを検索します。

  • ANSIBLE_CONFIG -環境変数
  • ansible.cfg -コマンドを実行している現在のディレクトリ
  • .ansible.cfg -ユーザーのホームディレクトリ
  • /etc/ansible/ansible.cfg -/etc/ansible内 ディレクトリ

ansible --versionを実行します コマンドを使用して、ansibleが選択している構成ファイルを確認します。

$ ansible --version
ansible [core 2.12.3]
  config file = /home/vagrant/ansible_project/ansible.cfg
  configured module search path = ['/home/vagrant/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/local/lib/python3.8/dist-packages/ansible
  ansible collection location = /home/vagrant/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/local/bin/ansible
  python version = 3.8.10 (default, Nov 26 2021, 20:14:08) [GCC 9.3.0]
  jinja version = 2.10.1
  libyaml = True

カスタムプロジェクトディレクトリを作成し、ansible.cfgを作成しました ファイル。私の設定ファイルには、インベントリの場所と無効になっているホストキーチェックの2つのプロパティしか含まれていません。

[defaults]
inventory = /home/karthick/ansible_project/hosts
host_key_checking = False

他にもたくさんのプロパティがありますが、現時点では「インベントリ」プロパティだけを追加することでそれらを使い始めることができます。

Ansible Inventory File

インベントリファイルでは、サーバー名、ネットワークデバイス、クラウドサービス、またはansibleが使用できるものすべてのIPアドレスまたはDNSを指定します。

インベントリはiniで記述できます 、json 、およびyaml フォーマットであり、ある在庫フォーマットを他のフォーマットに変換するためのスクリプトもあります。

デフォルトでは、インベントリファイル(ホスト)は/etc/ansibleにあります。 OSパッケージマネージャーを使用してansibleをインストールした場合はディレクトリ。別のプロジェクトディレクトリを作成し、インベントリと構成ファイルを作成することを常にお勧めします。

次の表は、私のansibleラボがどのように設定されているかを表しています。このラボセットアップ用のインベントリファイルを作成し、pingモジュールを実行して、インベントリファイルでの動作を示します。

ノードタイプ ノード名 IPアドレス OSフレーバー
コントロールノード controller.anslab.com 192.168.10.3 ubuntu / focus64
管理対象ノード managed1.anslab.com 192.168.10.4 ubuntu / focus64
管理対象ノード managed2.anslab.com 192.168.10.5 ubuntu / focus64

明示的なグループ化のないインベントリファイル

インベントリファイルには、リソースをグループ化し、そのグループに対してタスクを実行するグ​​ループ化と呼ばれる概念があります。次のような構造になります。

[group-name]
Resource1
Resource2
....
Resource N

グループを使用せずにインベントリファイルを作成できます。この場合、Ansibleは2つのデフォルトグループ "all"を使用します および「グループ化されていない」

  • すべてのグループ -インベントリファイルでデフォルトで使用可能なすべてのリソースは、すべてのグループに割り当てられます 。
  • グループ化されていない -ユーザー定義グループの一部ではないリソースは、グループ化されていないグループに自動的に割り当てられます 。

グループなしでインベントリファイルを作成しました。これで、これら2つのノードは、グループ化されていないグループだけでなく、すべてのグループに分類されます。

$ cat hosts
managed1.anslab.com
managed2.anslab.com

次のansibleコマンドを実行して、すべてのグループ化されていないグループの下にあるホストのリストを確認できます。

$ ansible all --list-hosts
  hosts (2):
    managed1.anslab.com
    managed2.anslab.com
$ ansible ungrouped --list-hosts
  hosts (2):
    managed1.anslab.com
    managed2.anslab.com

グループ化された在庫ファイル

先に述べたように、グループ化はリソースを整理するための優れた方法であるため、特定のグループに対してタスクを簡単に実行できます。 2つの管理対象ノードがあり、Ubuntu20.04LTSを実行しています。

OSタイプに基づいてインベントリファイルをグループ化したい場合、インベントリファイルは次のようになります。ここでubuntu はグループ名です。

[ubuntu]
managed1.anslab.com
managed2.anslab.com

このグループに対してタスクを実行できます。

$ ansible ubuntu -m ping -o
managed1.anslab.com | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python3"},"changed": false,"ping": "pong"}
managed2.anslab.com | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python3"},"changed": false,"ping": "pong"}

ここで「グループ化されていない」グループを確認すると、ホストは存在しません。

$ ansible ungrouped --list-hosts
[WARNING]: No hosts matched, nothing to do
hosts (0):

インベントリファイルに必要な数のグループを作成し、同じリソース名を使用できます。

[ubuntu]
managed1.anslab.com
managed2.anslab.com

[dev]
managed1.anslab.com

[test]
managed2.anslab.com
$ ansible ubuntu -m ping -o
$ ansible dev -m ping -o
$ ansible test -m ping -o

範囲のある在庫ファイル

リソースに共通の命名パターンがある場合は、範囲を使用できます。 DNSを繰り返す代わりに、範囲を使用して短縮した以下の例を見てください。

[ubuntu]
managed[1:2].anslab.com

子グループを含むインベントリファイル

グループを作成し、その下で他のグループ名を使用できます。以下の例を見てください。サーバー名を持つubuntuグループがあります。 ubuntuグループを含むserverという名前の別のグループを作成しました。

:childrenを追加することが重要です それ以外の場合、サーバーグループは「 ubuntu」を扱います。 「グループ名の代わりにサーバー名として。

[ubuntu]
managed[1:2].anslab.com

[server:children]
ubuntu

ホスト変数とグループ変数を含むインベントリファイル

インベントリファイルは、ホスト変数とグループ変数をサポートします。ホスト変数は、インベントリファイルでホストに渡される変数とその値に他なりません。以下の構成では、 ostechnixを使用するようにansibleに指示しています。 私のユーザーとして 標準のsshポートを使用する代わりに、ポート2222を使用します 。

[ubuntu]
managed1.anslab.com ansible_user=ostechnix ansible_port=2222
managed2.anslab.com ansible_user=ostechnix ansible_port=2222

グループ変数はホスト変数と同じですが、変数は単一のホストではなくグループ全体に適用されます。上記の設定からわかるように、ansible_userとansible_portは両方のノードで同じです。したがって、変数がグループ内のすべてのノードに継承されるグループ変数を作成できます。 :varsを追加する必要があります グループをグループ変数として作成します。

[ubuntu]
managed1.anslab.com
managed2.anslab.com

[ubuntu:vars]
ansible_user=ostechnix
ansible_port=2222

ヘッズアップ: 同じノードにグループ変数とホスト変数の両方がある場合、ホスト変数が優先されます。

使用できるインベントリパラメータは多数あり、公式ドキュメントからリストを取得できます。 。

エイリアス付きインベントリファイル

以下のように、リソースのエイリアスを作成できます。ここで、m1とm2はエイリアスです。

[ubuntu]
m1 ansible_host=managed1.anslab.com
m2 ansible_host=managed2.anslab.com

これで、このエイリアスを使用していくつかのタスクを実行できます。

$ ansible m1 -m ping -o
m1 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python3"},"changed": false,"ping": "pong"}
$ ansible m2 -m ping -o
m2 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python3"},"changed": false,"ping": "pong"}

YAML形式のインベントリファイル

インベントリファイルはYAML形式で書き込むこともできます。前のセクションで説明したものはすべて、YAML形式で記述されています。

次の画像は、2つのホスト変数を持つ2つのノードを表しています。

下の画像は、グループ変数を持つ2つのノードを表しています。

Ansible Inventory Command

Ansibleには、インベントリファイル情報を表示するのに非常に役立つインベントリコマンドがあります。

サポートされているオプションのリストを取得するには、helpコマンドを実行します。

$ ansible-inventory --help

在庫の詳細をグラフ形式で取得するには、--graphを使用します 国旗。異なるインベントリファイルがある場合は、-iを使用できます インベントリファイルを明示的に指すフラグ。

$ ansible-inventory --graph

--varsを渡すことで、ホストとグループの変数情報を出力できます。 --graphとともにフラグを立てる フラグ。

$ ansible-inventory --graph --vars

--listを使用する場合 フラグを立てると、出力はJSON形式になります。

$ ansible-inventory -list

--hostを使用して、特定のノードに関する情報を取得できます。 フラグ。

$ ansible-inventory --host managed1.anslab.com

結論

この記事では、ansibleアーキテクチャのコアを形成する重要な概念を見てきました。初心者の場合は、ini形式でインベントリを作成することに集中してください。そうすれば、本番プロジェクトでの作業を開始するときに、ベストプラクティスについて詳しく知ることができます。

次を読む:

  • AnsibleSSH認証と特権昇格
  • Ansibleアドホックコマンドの使用を開始する

Linux
  1. Linuxでファイルとディレクトリを隠す簡単な方法

  2. Ansibleの静的および動的ホストインベントリを管理する方法

  3. Linuxで.gzファイルと.tar.gzファイルを抽出する方法

  1. MySQL、PHP、Apacheの設定ファイルを見つける方法

  2. Ansibleガイド:Ansibleを使用してファイルを管理する

  3. デバイスファイルとデバイスドライバーの違い

  1. LinuxでのLsコマンド(ファイルとディレクトリのリスト)

  2. Ubuntuでスワップファイルを作成および削除する

  3. wget vs curl:wget と curl を使用してファイルをダウンロードする方法