※当サイトの記事には、広告・プロモーションが含まれます。

Ansibleの動的インベントリー(dynamic inventory)はNetBoxモジュールで実現する感じか

scienceportal.jst.go.jp

 量子の不思議な世界や、人類の活用をひもといたポスター「量子と量子技術 量子コンピュータまでの100年!」が完成し、文部科学省が公開した。学習資料として毎年作成する「一家に1枚」シリーズの第21弾。14~20日科学技術週間に合わせたもので、量子力学の基礎理論誕生から100年の節目を迎えたのを機に、量子の性質や研究の歩み、活用に向けた挑戦を紹介している。

不思議な「量子」を人類の味方に 一家に1枚ポスター、科技週間で新作 | Science Portal - 科学技術の最新情報サイト「サイエンスポータル」

⇧ 100年経ってるということは、今が2025年なので1925年が誕生ということになるんか...

www.mext.go.jp

文部科学省では、国民の皆様が科学技術に触れる機会を増やし、科学技術に関する知識を適切に捉えて柔軟に活用いただくことを目的として、平成17年より、毎年1枚、学習資料「一家に1枚」を発行しています。

https://www.mext.go.jp/stw/series.html

⇧ 小学生の自由研究の題材とかに良さそうですな。

今時の小学生は自由研究とか出題されないのかな?

Ansibleの動的インベントリー(dynamic inventory)とは

そもそも、「Ansible」の「インベントリー」とは?

docs.ansible.com

インベントリー

Ansible で Hosts と Groups を記述したファイル (デフォルトでは、Ansible は簡単な INI 形式を使用)。インベントリーは、Inventory Script (「外部インベントリースクリプト」と呼ばれることもあります) を介して提供することもできます。

https://docs.ansible.com/ansible-core/2.15_ja/reference_appendices/glossary.html#term-Inventory

⇧ うむ、分からん。

ホスト

ホストとは、Ansible が管理するリモートマシンのことです。ホストには、個別に変数を割り当てることも、グループでまとめることもできます。すべてのホストには、アクセス可能な名前 (IP アドレスまたはドメイン名) と、デフォルトの SSH ポートでアクセスしない場合は、任意でポート番号が割り当てられます。

https://docs.ansible.com/ansible-core/2.15_ja/reference_appendices/glossary.html#term-Host

グループ

グループは、プールに割り当てられた複数のホストで構成されます。これらのホストは、一緒に対象に設定でき、それらが共通して共有する特定の変数です。

https://docs.ansible.com/ansible-core/2.15_ja/reference_appendices/glossary.html#term-Group

⇧ うむ、分からん。

とりあえず、

docs.ansible.com

As shown in the preceding figure, most Ansible environments have three main components:

Control node

A system on which Ansible is installed. You run Ansible commands such as ansible or ansible-inventory on a control node.

Inventory

A list of managed nodes that are logically organized. You create an inventory on the control node to describe host deployments to Ansible.

Managed node

A remote system, or host, that Ansible controls.

https://docs.ansible.com/ansible/latest/getting_started/index.html

⇧ とあるので、「Ansible」の用語集に出てくる「ホスト」は、「Managed node」のことを言っているのだと思われる。

「グループ」は、「プール」に割り当てた複数の「ホスト」のことらしいのだが、ここで言う「プール」が何なのか説明が無い...

「Phaid」で質問してみたところ、以下の回答が返ってきた。

Ansibleにおけるプール(Pool)は、複数のホストを論理的にグループ化し、共通の設定や変数を管理できる仕組みです。

プールは主に以下のような形で存在します:

  1. 設定ファイルとしての存在
    • inventoryファイル(例:hosts.inihosts.yml)に記述されます
    • テキストベースの静的な構成情報として保存されています
  2. 動作時の扱い
    • AnsibleがPlaybookを実行する際に、inventoryファイルを読み込んでメモリ上に展開します
    • ただし、このメモリ上の状態は一時的なものであり、永続的な割り当てではありません

⇧ まぁ、「インベントリー」の設定を経由することで利用できると。

で、「インベントリー」なのだが、

docs.ansible.com

インベントリーの構築方法

Ansible は、インベントリーと呼ばれるリストまたはリストのグループを使用して、インフラストラクチャー内の管理対象ノードまたはホストでのタスクを自動化します。コマンドラインでホスト名を渡すことができますが、ほとんどの Ansible ユーザーはインベントリーファイルを作成します。

https://docs.ansible.com/ansible-core/2.15_ja/inventory_guide/intro_inventory.html

インベントリーは動的にプルできます。たとえば、動的インベントリープラグインを使用して、1 つ以上のクラウドプロバイダーのリソースを一覧表示できます。動的インベントリーの使用 を参照してください。 - 動的インベントリーと静的ファイルの両方を含む、インベントリーの複数ソースを使用できます。

https://docs.ansible.com/ansible-core/2.15_ja/inventory_guide/intro_inventory.html

⇧ 公式のドキュメントの情報が体系化されておらず、全貌が把握し辛いのだが、

  1. インベントリー
    1. 静的ファイル(静的インベントリー)
    2. 動的インベントリー

といった感じで、「インベントリー」は大きく分けて、2種類になると思われる。

で、「動的インベントリー」とは?

docs.ansible.com

動的インベントリーの使用

Ansible は、動的な外部インベントリーシステムを通じて、これらのオプションをすべて統合します。Ansible は、外部インベントリーに接続する 2 つの方法 (inventory プラグイン および inventory scripts) をサポートしています。

https://docs.ansible.com/ansible-core/2.15_ja/inventory_guide/intro_dynamic_inventory.html

docs.ansible.com

Inventory Script (インベントリースクリプト)

ホスト、ホストの グループ メンバーシップ、および変数情報を、SQL データベース、CMDB ソリューションまたは LDAP に類する外部リソースから参照する非常に簡単なプログラム (または複雑なプログラム) のことです。この概念は Puppet (「外部ノード分類子」と呼ばれています) から採用されたもので、ほぼ同じように機能します。

https://docs.ansible.com/ansible-core/2.15_ja/reference_appendices/glossary.html#term-Inventory-Script

⇧ 語弊を恐れずにザックリとまとめると、外部から情報を取得して「インベントリー」を作成するっぽい。

最終的には、「インベントリー」としての形式(フォーマット)で出力されることにはなるっぽい。

「インベントリー」としての形式(フォーマット)は、

docs.ansible.com

インベントリーソース

インベントリーソースは、インベントリープラグインが機能する入力文字列です。インベントリーソースはファイルまたはスクリプトへのパスにするか、プラグインが解釈できる生のデータになります。

https://docs.ansible.com/ansible-core/2.15_ja/dev_guide/developing_inventory.html

以下の表は、コマンドラインで -i を使用して、インベントリープラグインの例と、プラグインに渡すことができるソースタイプを示しています。

https://docs.ansible.com/ansible-core/2.15_ja/dev_guide/developing_inventory.html

⇧ 上記のページによると、Playbookの実行時のコマンド引数を除くと、

  1. INI
  2. YAML
  3. JSON

の3つが「インベントリー」としての形式(フォーマット)として用意されている模様。

Ansibleの動的インベントリー(dynamic inventory)はNetboxモジュールで実現する感じか

で、職場の方に連携いただき、「Netbox」という存在を知る。

「Ansible」の公式のドキュメントによると、

docs.ansible.com

⇧「モジュール」が用意されており、「Ansible」のバージョン2.15.0以降であれば利用できるようだ。

しかも、「Prerequire(事前要件)」、「Require(要件)」のようなものについて説明が無いので、別途、インストールが必要なども無さそう。

と思ったら、

tekunabe.hatenablog.jp

⇧ 上記サイト様によりますと、「Ansible」の「NetBox」の「モジュール」は利用しない方法もあるらしい...カオス過ぎる...

ネットの情報を漁っていた感じ、

zaki-hmkc.hatenablog.com

qiita.com

⇧ 皆々様、「プラグイン」を利用しているっぽい。

ちなみに、「Netbox」はというと、

github.com

NetBox exists to empower network engineers. Since its release in 2016, it has become the go-to solution for modeling and documenting network infrastructure for thousands of organizations worldwide. As a successor to legacy IPAM and DCIM applications, NetBox provides a cohesive, extensive, and accessible data model for all things networked. By providing a single robust user interface and programmable APIs for everything from cable maps to device configurations, NetBox serves as the central source of truth for the modern network.

https://github.com/netbox-community/netbox

⇧ とあり、「ネットワークエンジニア」を支援するツールらしい。

うむ、ワイは「ソフトウェアエンジニア」なのだが...

 

話が脱線しましたが、事前に、「NetBox」の環境を構築しておく必要があったりと、

『「Ansible」で「動的インベントリー」で「NetBox」を利用する』

ための導入手順が分り辛い...

毎度モヤモヤ感が半端ない…

今回はこのへんで。