もっと詳しく

PowerShellモジュールpsansible.Inventoryを使用すると、Ansibleインベントリスクリプトを使用して、Ansibleインベントリの動的な作成を簡素化できます。 好みのソースからデータを取得し、データを構造化し、標準化されたAnsibleインベントリを作成できます。

StéphanevanGulickによる最新の投稿 (すべてを見る)

最近多くの注目を集めている構成管理ツールはAnsibleです。 これは、RedHatによって開発および保守されているオープンソースプロジェクトです。 Ansibleは、リモートプロトコル(shh / winrm)を使用して構成管理と必要な状態構成を可能にするエージェントレスアプリケーションです。 Linuxエコシステムの他のものと同様に、Ansibleはほとんどがファイルベースであるため、シンプルでわかりやすいツールとして使用できます。

Ansibleインベントリ ^

Ansibleインベントリは、Ansibleエコシステムの中心です。 さまざまな目的で複数のノードを同時に管理するために使用されます。 スケーリングが必要な場合は、Ansibleインベントリを使用する必要があります。

Ansibleインベントリは、最も単純な形式で、環境がどのように見えるかを説明する構造化ファイルです。 ファイルは通常INI形式ですが、YAMLやJSONなどの形式も使用できます。 単純なテキストファイルであるため、このインベントリは、手動で、またはそれを生成するスクリプトを作成することによって、任意の方法で作成できます。

最も単純な形式では、Ansibleインベントリは次のようになります。

[webservers]
srv-01
srv-02
srv-03

上記の例では、srv-01、srv-02、およびsrv-03の3つのエントリがあり、これらはすべてWebサーバーグループのメンバーです。 グループのWebサーバーをターゲットにすると、そのグループに含まれているサーバーのみにアクセスして、プレイブック(ホストの構成を決定するタスクのリスト)を実行できます。

インベントリの主な目的は、ホストをグループ化することです。 はい、そうです; インベントリ内のホストに変数を割り当てて、ホストの構成を決定することもできます。 ただし、この目的にはグループ変数ファイルとホスト変数ファイルを使用することをお勧めします。 これは、psansible.inventoryも処理するものであり、今後の記事で取り上げます。

Ansibleインベントリプラグイン ^

環境が頻繁に変更されない場合は、inventory.iniファイルを手動で編集するだけで十分です。 ただし、たとえば、環境内のホストの数が頻繁に変更される場合など、物事を動的にしたい場合は、既存の動的なものを使用できます。 インベントリプラグイン さまざまなソースから在庫情報を引き出すことができます。 または、データがカスタム構成管理データベース(CMDB)に保存されている場合、または複数のデータベースに保存されている場合は、Pythonで独自のプラグインを作成する必要があります。 特に、カスタムプラグインはPythonでのみ記述できます。

Ansibleインベントリスクリプト ^

Pythonが優先言語でない場合は、 Ansibleインベントリスクリプト Ansibleインベントリを作成します。 インベントリスクリプトは、Ansibleが存在するAnsibleホストで実行できる任意の言語で記述できます。

最後の一般的なオプションは、インベントリを含むINIファイルをAnsibleに直接フィードすることです。

INIファイルは、実行が実行されるたびにAnsibleによって読み込まれます。 このINIファイルの内容は静的に作成できます。 また、頻繁な時間間隔でAnsibleインベントリを生成する外部スクリプト(サーバー上にローカルに存在するPS1ファイル)を使用して動的に作成することもできます。 これにより、インベントリの作成をAnsibleインフラストラクチャから切り離すことができ、テストがはるかに簡単になります。

最後の2つのケースでは、これが psansible.inventory 場に出る。

psansible.inventory ^

psansible.Inventoryは、Ansibleインベントリの自動作成を簡素化するヘルパーモジュールです。 これにより、好みのソースからデータをフェッチし、データを簡単に構造化し、標準化されたAnsibleインベントリを吐き出すロジックを作成できます。

Psansible.inventoryは、DBクエリをサポートされているAnsibleエクスポート形式に固定するための接着剤です。これは次のいずれかになります。

  1. a)group_varsおよびhost_varsフォルダーを含むINI形式のファイル(ファイルシステムにエクスポートする必要があります)。
  2. b)メモリベースで基本的に同じデータを含むが構造が少し異なるJSON形式のオブジェクト。

あなたのマシンでpansible.inventoryを取得するには、単純に ダウンロード PowerShellギャラリーからインストールするか、次のコマンドを使用してインストールします。

install-module psansible.inventory

既存のコマンドのリストを表示するには、次のコマンドを実行できます。

get-command -Module pansible.inventory
利用可能なpansiible.inventoryコマンドレット

利用可能なpansiible.inventoryコマンドレット

psansible.inventoryの威力を確認するために、この記事の最初からAnsibleインベントリを再作成してみましょう(1つのグループに3つのエントリ)。

最初のインベントリを作成するには、 New-AnsibleInventory コマンドレット

$Inventory = New-AnsibleInventory
$Inventory
EntryCollection    : TotalEntries: 0
Hierarchy           : AnsibleInventoryHierarchyCollection
VariableCollection : AnsibleVariableCollection
GroupCollection    : 
Path               :

$Inventory タイプのオブジェクトが含まれています AnsibleInventory、 これは、Ansibleインベントリがどのように見えるかを定義します。 に注意してください EntryCollection 言及しているプロパティ TotalEntries:0
これは、今のところ、それは空の在庫であり、率直に言って、この現在の状態ではそれほど有用ではないことを意味します。 それを変更して、在庫のエントリをいくつか作成しましょう。 このために、 new-AnsibleInventoryEntry 指図。

$Entry = New-AnsibleInventoryEntry -NodeName "srv-01"
$Entry

GroupMemberShip NodeName
--------------- --------
{}              srv-01

$ Entry タイプのオブジェクトが含まれています AnsibleInventoryEntry、 これは、グローバルなAnsibleインベントリの単一のエントリを表します。

グループメンバーシップ 空です。 それを変更して、サーバーを追加しましょう srv-01Webサーバー グループ。

$Entry.AddToGroup("webservers")
$Entry

GroupMemberShip NodeName
--------------- --------
{webservers}    srv-01

これを実現する別の方法は、 -グループ のパラメータ New-AnsibleInventoryEntry コマンドレット。

$Entry = New-AnsibleInventoryEntry -NodeName "srv-01" -Group "webservers"
$Entry

GroupMemberShip NodeName
--------------- --------
{webservers}    srv-01

最初のエントリができたので、これを使用して以前に作成したインベントリに追加できます。 addInventoryEntry() インベントリオブジェクトにアタッチされたメソッド。

$Inventory.AddInventoryEntry($Entry)
$Inventory

EntryCollection    : TotalEntries: 1
Hierarchy           : AnsibleInventoryHierarchyCollection
VariableCollection : AnsibleVariableCollection
GroupCollection    : 
Path               :

プロパティがあることがわかります EntryCollection、 今含まれています TotalEntries:1

最後の2台のサーバーを追加して、インベントリを完成させることができます。

$servers = @("srv-02","srv-03")
$GroupName = "webservers"

foreach ($server in $servers){
    $e = New-AnsibleInventoryEntry -NodeName $server -Group $GroupName
    $Inventory.AddInventoryEntry($e)
}

$Inventory

EntryCollection    : TotalEntries: 3
Hiearchy           : AnsibleInventoryHiearchyCollection
VariableCollection : AnsibleVariableCollection
GroupCollection    : 
Path               :

これで、合計3つのエントリがあることがわかります。 EntryCollection 財産。

現在インベントリにあるエントリを確認するには、 GetEntries() からの方法 $Inventory 物体。

$Inventory.GetEntries()

GroupMemberShip NodeName
--------------- --------
{webservers}    srv-01
{webservers}    srv-02
{webservers}    srv-03

コンテンツの準備ができたので、先に進んでデータをエクスポートし、Ansibleが理解できるインベントリドキュメントを生成できます。

そのためには、まず、これもエクスポートする場所にフォルダーパスを追加する必要があります。 これほど簡単なものはありません。 単に使用する .SetPath() インベントリ変数にアタッチされたメソッド。

$Inventory.SetPath('/Users/stephanevg/exports')                          
                            
$Inventory                                                                                                         
EntryCollection    : TotalEntries: 2   
Hierarchy           : AnsibleInventoryHiearchyCollection
VariableCollection : AnsibleVariableCollection
GroupCollection    : 
Path               : /Users/stephanevg/exports

追加すると、Ansible Inventoryをエクスポートし、を使用して目的のINIファイルを生成できます。 。書き出す() インベントリオブジェクトにアタッチされたメソッド次の構造が生成されます。

$ Inventory.Export()PS / Users / stephanevg / exports> Get-ChildItem | 名前を選択名前—-group_varshost_vars Inventory.ini

を詳しく見てみる Inventory.ini、 記事の冒頭からのものと同じように見えます。

PS /Users/stephanevg/exports> cat ./inventory.ini                                                      
         
[webservers]
srv-01
srv-02
srv-03

結論 ^

psansible.Inventoryは、ホストの単純なリストを作成するだけではありません。 これにより、インベントリ作成フロー全体を好みの言語で制御できます。

AzureやAWSなど、さまざまな環境向けに多くのプラグインが存在します。 インベントリデータが1つ以上のクラウドソースから、または独自のカスタムデータベースから取得する必要がある場合は、psansible.Inventoryがインベントリのデータを取得するための最良の選択です。

The post PowerShell –4sysopsでpsansible.inventoryとAnsibleインベントリスクリプトを使用してAnsibleインベントリファイルを作成します appeared first on Gamingsym Japan.