はじめに
この実験では、Ansible Copy モジュールを調べます。このモジュールを使うと、リモートホストにファイルやディレクトリをコピーできます。Copy モジュールは、Ansible の自動化タスクの一部としてファイルを転送するための、柔軟で効率的な方法を提供します。
この実験では、Ansible Copy モジュールを調べます。このモジュールを使うと、リモートホストにファイルやディレクトリをコピーできます。Copy モジュールは、Ansible の自動化タスクの一部としてファイルを転送するための、柔軟で効率的な方法を提供します。
このステップでは、Ansible Copy モジュールを使ってコントロールマシンからリモートホストにファイルをコピーします。
まず、/home/labex/project/copy-module-playbook.yaml
という名前の新しい Ansible プレイブックファイルを作成し、テキストエディタで開きます。
プレイブックファイルに以下の内容を追加します。
- hosts: localhost
tasks:
- name: Copy a file to remote host
copy:
src: /home/labex/file.txt
dest: /home/labex/project/file.txt
copy
:Ansible の copy
モジュールを利用して、コントロールノード(ローカルホスト)からリモートホストにファイルをコピーするために使用されます。src
:ソースファイルパスを指定し、ローカルホスト上でコピーするファイルのパスを示します。dest
:宛先ファイルパスを指定し、リモートホスト上のどこにファイルをコピーするかを示します。このプレイブックタスクを通じて、/home/labex/file.txt
ファイルがリモートホスト上の /home/labex/project/file.txt
パスにコピーされます。Ansible の copy
モジュールは、ファイルのコピープロセスを効率的に支援します。
次に、/home/labex
ディレクトリに file.txt
という名前のファイルを作成します。
echo "This is the content of the file." > /home/labex/file.txt
その後、以下のコマンドを使ってプレイブックを実行します。
ansible-playbook copy-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 [Copy a file to remote host] **********************************************
changed: [localhost]
PLAY RECAP *********************************************************************
localhost : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
最後に、リモートホスト上の指定された宛先パスに file.txt
ファイルが存在することを確認します。
cat /home/labex/project/file.txt
実行結果の例:
This is the content of the file.
ここで "This is the content of the file."
は /home/labex/file.txt
ファイルの内容と同じであり、これは /home/labex/file.txt
ファイルが /home/labex/project/file.txt
に正常にコピーされたことを意味します。
このステップでは、Ansible Copy モジュールを使ってコントロールマシンからリモートホストにディレクトリをコピーします。
まず、既存のプレイブックファイルの内容をすべて削除し、以下の内容を追加して修正します。
- hosts: localhost
tasks:
- name: Copy a directory to remote host
copy:
src: /home/labex/directory
dest: /home/labex/project/
ステップ 1 のタイプでは、src
がディレクトリに設定されている場合、この Playbook タスクは /home/labex/directory
ディレクトリをリモートホスト上の /home/labex/project/
パスにコピーします。
次に、/home/labex
ディレクトリに directory
という名前のディレクトリを作成し、directory
ディレクトリ内に file2.txt
という名前のファイルを作成します。
mkdir /home/labex/directory
touch /home/labex/directory/file2.txt
その後、以下のコマンドを使ってプレイブックを実行します。
ansible-playbook copy-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 [Copy a directory to remote host] *****************************************
changed: [localhost]
PLAY RECAP *********************************************************************
localhost : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
最後に、リモートホスト上の指定された宛先パスに directory
ディレクトリとその内容が存在することを確認します。
tree /home/labex/project
期待される出力:
/home/labex/project
├── copy-module-playbook.yaml
├── directory
│ └── file2.txt
└── file.txt
1 directory, 3 files
directory
と file2.txt
ファイルが対象ホスト上の /home/labex/project
ディレクトリに正常にコピーされたことがわかります。
このステップでは、Ansible Copy モジュールを使用する際に、ファイルの属性(パーミッションやタイムスタンプなど)をどのように保持するか学びます。
まず、既存のプレイブックファイルの内容をすべて削除し、以下の内容を追加して修正します。
- hosts: localhost
tasks:
- name: Preserve file attributes
copy:
src: /home/labex/file.txt
dest: /tmp/file.txt
mode: preserve
mode: preserve
:このパラメータは、コピープロセス中にソースファイルのモード(パーミッション)を保持し、宛先ファイルがソースファイルと同じパーミッションを維持するようにします。このプレイブックタスクを通じて、/home/labex/file.txt
ファイルがリモートホスト上の /tmp/file.txt
にコピーされると同時に、パーミッションなどのファイル属性が保持されます。
その後、以下のコマンドを使ってプレイブックを実行します。
ansible-playbook copy-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 [Preserve file attributes] ************************************************
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
の詳細を表示します。
ll /home/labex/file.txt
実行結果の例:
-rw-rw-r-- 1 labex labex 33 Mar 9 08:34 /home/labex/file.txt
ll
を使って /tmp/file.txt
の詳細を表示します。
ll /tmp/file.txt
実行結果の例:
-rw-rw-r-- 1 labex labex 33 Mar 9 09:00 /tmp/file.txt
この Ansible プレイブックは、複製プロセス中にパーミッションパターン(パーミッションビット)と所有者情報を保持するために使用できます。
このステップでは、Ansible Copy モジュールを使用する際にファイルのパーミッションをどのように設定するかを調べます。リモートホスト上のコピー先ファイルに特定のパーミッションを設定する方法を学びます。
まず、既存のプレイブックファイルの内容をすべて削除し、以下の内容を追加して修正します。
- hosts: localhost
tasks:
- name: Handle permissions
copy:
src: /home/labex/file.txt
dest: /tmp/file1.txt
mode: "0644"
mode
:ここで "0644"
を、ファイルに希望するパーミッションモードに置き換えます。パーミッションモードに関する詳細は、chmod のドキュメントを参照してください。このプレイブックタスクを通じて、/home/labex/file.txt
ファイルがリモートホスト上の /tmp/file1.txt
にコピーされ、指定された 0644
のパーミッションが設定されます。
その後、以下のコマンドを使ってプレイブックを実行します。
ansible-playbook copy-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 [Handle permissions] ******************************************************
changed: [localhost]
PLAY RECAP *********************************************************************
localhost : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
最後に、file1.txt
ファイルが設定されたパーミッションでリモートホスト上の指定された宛先パスにコピーされたことを確認します。
ll
を使って /home/labex/file.txt
の詳細を表示します。
ll /home/labex/file.txt
実行結果の例:
-rw-rw-r-- 1 labex labex 33 Mar 9 08:34 /home/labex/file.txt
ll
を使って /tmp/file1.txt
の詳細を表示します。
ll /tmp/file1.txt
実行結果の例:
-rw-r--r-- 1 labex labex 33 Mar 9 09:11 /tmp/file1.txt
この Ansible プレイブックは、リモートホスト上のファイルに対して読み取り、書き込み、実行などの特定のパーミッションを設定するために使用できます。
このステップでは、Ansible Copy モジュールを使ってコピー操作を冪等性にします。リモートホスト上にファイルが存在しない場合、またはソースファイルが変更されている場合にのみ、ファイルがコピーされることを確認します。
まず、既存のプレイブックファイルの内容をすべて削除し、以下の内容を追加して修正します。
- hosts: localhost
tasks:
- name: Idempotent copy
copy:
src: /home/labex/file.txt
dest: /tmp/file2.txt
remote_src: yes
remote_src: yes
:このパラメータは、src
パスがリモートホスト上にあることを指定し、Ansible にリモートホストから別の場所にファイルを転送させます。このプレイブックタスクを通じて、リモートホスト上にある /home/labex/file.txt
ファイルは、存在しない場合、またはソースファイルが変更されている場合にのみ、リモートホスト上の /tmp/file2.txt
にコピーされます。
次に、/tmp/file2.txt
ファイルが存在するかどうかを確認します。
ll /tmp/file2.txt
実行結果の例:
ls: cannot access '/tmp/file2.txt': No such file or directory
その後、以下のコマンドを使ってプレイブックを実行します。
ansible-playbook copy-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 [Idempotent copy] *********************************************************
changed: [localhost]
PLAY RECAP *********************************************************************
localhost : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
最後に、file2.txt
ファイルが存在しない場合、またはソースファイルが変更されている場合にのみ、リモートホスト上の指定された宛先パスにコピーされたことを確認します。
ll /tmp/file2.txt
実行結果の例:
-rw-rw-r-- 1 labex labex 33 Mar 9 08:34 /tmp/file2.txt
この時点で、もう一度プレイブックを実行します。
ansible-playbook copy-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 [Idempotent copy] *********************************************************
ok: [localhost]
PLAY RECAP *********************************************************************
localhost : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
changed=1
が changed=0
になることに注意してください。これは、この Ansible プレイブックが、リモートホスト上にファイルが存在しない場合、またはソースファイルが変更されている場合にのみ、ファイルをコピーすることができることを示しています。
おめでとうございます!あなたは Ansible Copy モジュールの実験を成功裏に完了しました。ファイルやディレクトリをリモートホストにコピーする方法、ファイル属性を保持する方法、パーミッションを設定する方法、および冪等性を確保する方法を学びました。
Copy モジュールは、Ansible の自動化タスクでファイルを転送するための強力なツールです。必要に応じてコピー操作をカスタマイズするためのさまざまなパラメータを提供します。
これで Copy モジュールを十分に理解したので、Ansible のプレイブックでその機能を活用して、インフラストラクチャ全体で効率的にファイル転送と同期を管理することができます。Ansible で楽しくコピーを行いましょう!