Ansible File モジュール

AnsibleBeginner
オンラインで実践に進む

はじめに

この実験では、Ansible File モジュールを調べます。このモジュールを使うと、リモートホスト上のファイルやディレクトリを管理できます。File モジュールには、ファイルやディレクトリの作成、削除、パーミッションの変更、存在チェックなど、幅広い機能が備えられています。

リモートホスト上にファイルを作成する

このステップでは、Ansible File モジュールを使ってリモートホストにファイルを作成します。

まず、新しい Ansible プレイブックファイル /home/labex/project/file-module-playbook.yaml を作成し、テキストエディタで開きます。
プレイブックファイルに次の内容を追加します。

- hosts: localhost
  tasks:
    - name: Create a file on remote host
      file:
        path: /home/labex/file.txt
        state: touch
  • file:ファイルシステムを操作する Ansible モジュール。
  • path:ファイルのパスを指定します。この場合、/home/labex/file.txt
  • state:ファイルの状態を指定します。ここでは、touch は、ファイルが存在しない場合は作成され、既に存在する場合はアクセス日時と変更日時が更新されます。

このプレイブックの目的は、リモートホストに file.txt という名前のファイルを作成することです。

次に、次のコマンドを使ってプレイブックを実行します。

ansible-playbook file-module-playbook.yaml

実行結果の例:

[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that
the implicit localhost does not match 'all'

PLAY [localhost] ***************************************************************

TASK [Gathering Facts] *********************************************************
ok: [localhost]

TASK [Create a file on remote host] ********************************************
changed: [localhost]

PLAY RECAP *********************************************************************
localhost : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

最後に、リモートホストの指定されたパスに file.txt ファイルが作成されていることを確認します。

ll /home/labex/file.txt

実行結果の例:

-rw-rw-r-- 1 labex labex 0 Mar 10 03:12 file.txt

/home/labex/file.txt が正常に作成されたことを示すメッセージが表示されます。

ファイルのパーミッションを管理する

このステップでは、Ansible File モジュールを使ってリモートホスト上のファイルのパーミッションを管理する方法を学びます。

まず、既存のプレイブックファイルの内容をすべて削除し、次の内容を追加して修正します。

- hosts: localhost
  tasks:
    - name: Set file permissions
      file:
        path: /home/labex/file.txt
        mode: "0644"
  • file:ファイルシステムを操作する Ansible モジュール。
  • path:ファイルのパスを指定します。この場合、/home/labex/file.txt
  • mode:このパラメータは、ファイルのパーミッションモードを設定するために使用されます。"0644" を、ファイルに望ましいパーミッションモードに置き換えてください。パーミッションモードに関する詳細は、chmod のドキュメントを参照してください。

このプレイブックの目的は、/home/labex/file.txt のファイルのパーミッションを 0644 に設定することです。

次に、次のコマンドを使ってプレイブックを実行します。

ansible-playbook file-module-playbook.yaml

実行結果の例:

[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that
the implicit localhost does not match 'all'

PLAY [localhost] ***************************************************************

TASK [Gathering Facts] *********************************************************
ok: [localhost]

TASK [Set file permissions] ****************************************************
changed: [localhost]

PLAY RECAP *********************************************************************
localhost : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

最後に、リモートホスト上で指定された通りにファイルのパーミッションが設定されていることを確認します。

ll /home/labex/file.txt

実行結果の例:

-rw-r--r-- 1 labex labex 0 Mar 10 03:12 /home/labex/file.txt

ここでの -rw-r--r-- は、/home/labex/file.txt のモードが正常に 0644 に設定されたことを示しています。

リモートホスト上のファイルを削除する

このステップでは、Ansible File モジュールを使ってリモートホスト上のファイルを削除する方法を学びます。

まず、既存のプレイブックファイルの内容をすべて削除し、次の内容を追加して修正します。

- hosts: localhost
  tasks:
    - name: Delete a file on remote host
      file:
        path: /home/labex/file.txt
        state: absent
  • file:ファイルシステムを操作する Ansible モジュール。
  • path:削除するファイルのパスを指定します。つまり、/home/labex/file.txt
  • state:このパラメータは、ファイルが absent 状態にあることを示します。したがって、このタスクの目的は、指定されたパスのファイルを削除することです。

このプレイブックの目的は、リモートホスト上の /home/labex/file.txt ファイルを削除することです。

次に、次のコマンドを使ってプレイブックを実行します。

ansible-playbook file-module-playbook.yaml

実行結果の例:

[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that
the implicit localhost does not match 'all'

PLAY [localhost] ***************************************************************

TASK [Gathering Facts] *********************************************************
ok: [localhost]

TASK [Delete a file on remote host] ********************************************
changed: [localhost]

PLAY RECAP *********************************************************************
localhost : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

最後に、file.txt ファイルが削除され、リモートホスト上に存在しなくなったことを確認します。

ll /home/labex/file.txt

実行結果の例:

ls: cannot access '/home/labex/file.txt': No such file or directory

このメッセージは、/home/labex/file.txt ファイルが正常に削除されたことを示しています。

ファイルの存在を確認する

このステップでは、Ansible File モジュールを使ってリモートホスト上のファイルの存在を確認する方法を学びます。

まず、既存のプレイブックファイルの内容をすべて削除し、次の内容を追加して修正します。

- hosts: localhost
  tasks:
    - name: Check file existence on remote host
      stat:
        path: /home/labex/file.txt
      register: file_info

    - name: Print file existence
      debug:
        msg: "File exists: {{ file_info.stat.exists }}"
  • stat:これは、ファイルまたはディレクトリに関するステータス情報を取得する Ansible のモジュールの 1 つです。
  • path:確認するファイルのパスを指定します。つまり、/home/labex/file.txt
  • registerregister キーワードを使って、モジュール実行の結果を file_info という変数に保存します。
  • debug:これは、デバッグ情報を表示する Ansible のモジュールの 1 つです。
  • msgdebug モジュールを使って、ファイルの存在に関する情報を含むメッセージを表示します。この情報は、file_info.stat.exists を通じて取得されます。

このプレイブックの目的は、リモートホスト上の /home/labex/file.txt ファイルの存在を確認し、その情報を標準出力に表示することです。

次に、次のコマンドを使ってプレイブックを実行します。

ansible-playbook file-module-playbook.yaml

実行結果の例:

[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that
the implicit localhost does not match 'all'

PLAY [localhost] ***************************************************************

TASK [Gathering Facts] *********************************************************
ok: [localhost]

TASK [Check file existence on remote host] *************************************
ok: [localhost]

TASK [Print file existence] ****************************************************
ok: [localhost] => {
    "msg": "File exists: False"
}

PLAY RECAP *********************************************************************
localhost                  : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

最後に、出力を見て、リモートホスト上に file.txt ファイルが存在するかどうかを確認します。
"msg": "File exists: False" は、/home/labex/file.txt ファイルが存在しないことを示しています。

まとめ

おめでとうございます!あなたは Ansible File モジュールの実験を成功裏に完了しました。File モジュールを使って、リモートホスト上でファイルやディレクトリを作成し、ファイルのパーミッションを管理し、ファイルを削除し、ファイルの存在を確認する方法を学びました。

File モジュールは Ansible における強力なツールで、自動化タスクの間に様々なファイル関連の操作を実行できるようにします。あなたは今、Ansible のプレイブックで File モジュールを自信を持って使って、効率的にファイルやディレクトリを管理できるようになりました。

Ansible のドキュメントや他のモジュールをさらに探求して、知識を拡充し、自動化技術を向上させましょう。楽しい Ansible の旅を!