はじめに
Ansibleは、単一の制御ノードが多数のリモートホスト(サーバー)を監視および管理できるようにするInfrastructureasCodeツールです。
Ansibleはプレイブックを使用して、ファイルやフォルダーが存在するかどうかの確認など、リモートホストが実行するさまざまなタスクを定義します。
このチュートリアルでは、stat
の使用方法について説明します。 Ansibleのモジュールで、ファイルとフォルダがリモートホストに存在するかどうかを確認します。
前提条件
- コマンドライン/ターミナルウィンドウへのアクセス
- Ansibleのインストールと構成(WindowsへのAnsibleのインストールとUbuntuへのAnsibleのインストールに関するガイドを参照)
ファイルがAnsibleに存在するかどうかの確認
Ansibleを使用してファイルが存在するかどうかを確認する最も簡単な方法は、 stat
を使用することです。 モジュール。
stat
の目的 モジュールは、ファイルとフォルダーに関する事実を取得し、それらをレジスターに記録することです。 statモジュールは次の構文を使用します:
---
- name: Playbook name
hosts: all
tasks:
- name: Task name
stat:
path: [path to the file or directory you want to check]
register: register_name
...
場所:
-
stat:
statモジュールを使用していることを宣言します。 -
path:
チェックするファイルまたはフォルダへのパスを宣言します。 -
register:
statモジュールがファイルとフォルダーの詳細を保存するレジスターの名前を提供します。
レジスタに記録されている値の1つは、exists
です。 。この値をdebug
と組み合わせる モジュールを使用すると、ファイルまたはフォルダが存在するかどうかを詳細に示すメッセージを表示できます。
- name: Task name
debug:
msg: "The file or directory exists"
when: register_name.stat.exists
1.プレイブックの例では、最初のタスク(ファイルが存在するかどうかの確認 ) stat
を使用します test.txt
に関する事実を取得するモジュール / home / example_folderにあるファイル リモートホスト上。これらの事実をfile_data
というレジスタに記録します 。
2. 2番目のタスク(ファイルが存在するかどうかを報告する )debug
を使用します メッセージを表示するモジュール。 file_data
をチェックします exists
を登録して使用します メッセージを表示するための条件としての値。 exists
値はtrue 、モジュールはメッセージ「ファイルまたはディレクトリが存在します」を表示します 。
3. 3番目のタスク(不足しているファイルを報告する )同じことを行いますが、「ファイルまたはディレクトリが存在しません」というメッセージが表示される点が異なります。 exists
値はfalse 。
プレイブックを実行すると、次の出力が得られます。
出力は、ファイルが実際には存在しないことを示しています。
問題のファイルがフォルダではなく通常のファイルであることも確認する場合は、 isreg
を追加します。 debug
の値 モジュールの状態:
- name: Task name
debug:
msg: "The file or directory exists"
when: register_name.stat.exists and register_name.stat.isreg
ディレクトリがAnsibleに存在するかどうかの確認
Ansibleを使用してディレクトリが存在するかどうかを確認することは、ファイルが存在するかどうかを確認することとまったく同じです。唯一の違いは、 isdir
を使用することです 指定されたディレクトリへのパスを確認するための値:
- name: Task name
debug:
msg: "The file or directory exists"
when: register_name.stat.exists and register_name.stat.isdir
ファイルとフォルダが存在するかどうかに応じてAnsibleタスクを実行する
特定のファイルまたはフォルダが存在するかどうかに応じて、プレイブックでタスクを実行またはスキップしたい場合があります。
たとえば、すべてのリモートホストでファイルを作成するように設計されたプレイブックがある場合、重複が作成されないように、ファイルがすでに存在するホストをスキップする必要があります。
これを行うには、 stat
によって取得されたファイルの詳細を使用します when
を含むモジュール タスクを実行するための条件を作成するための引数:
---
- name: Playbook name
hosts: all
tasks:
- name: Task name
stat:
path: [path to the file or directory you want to check]
register: register_name
- name: Task name 2
file:
path: [path to the file you want to create]
state: touch
when: not register_name.stat.exists
...
1.上記のプレイブックでは、最初のタスク(ファイルが存在するかどうかの確認 ) stat
を使用します test.txt
の詳細を取得するモジュール example_folderにあるファイル リモートホスト上。
2. 2番目のタスク(ファイルがまだ存在しない場合はファイルを作成する )exists
を確認することから始めます レジスタの値。値がtrueの場合 、タスクはスキップされ、プレイブックは終了します。値がfalseの場合 、タスクが実行され、 test.txt
という新しいファイルが作成されます。 。