この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
こんにちは。AC20周年のサントラ発売で浮かれている闘争を求める民佐々木です。
今回は小ネタですがAnsibleを使ったファイルコピーで検証したことがあったのでメモ程度に記事にしてみます。
やりたいこと
前提として実現したかったことは以下のようなことです。
- Ansibleを使って所定のディレクトリへファイルをコピーしたい。ファイルはplaybookと一緒にリポジトリで管理する
- Ansibleは次の2パターンで実行する
- ローカルからリモートのサーバへSSHへ実行する(ローカルからファイルをコピー)
- サーバ上でPlaybookをチェックアウトしてサーバ内でコピーする
できれば同じPlaybookでできたら嬉しいですね。いいか、俺は面倒が嫌いなんだ。
検証の方法
次のような方法で検証しました。
- ローカル→ローカルでファイルをコピーするPlaybookを作る
- 1.のPlaybookをリモートのホストに対して実行する
Playbook
Playbookはcopy moduleのドキュメントを参照して素直に下記のように記述しました。
- hosts: targets
become: yes
tasks:
- name: copy files
copy:
src: "{{ item }}"
dest: /tmp/copy_here/
owner: root
group: root
mode: 0644
with_fileglob:
- ./files/*.txt
またインベントリファイルは下記の通りです。
[targets]
localhost ansible_connection=local
<リモートサーバのホスト名> ansible_ssh_private_key_file=~/.ssh/your_key_is_here.pem
結果
下記の通り2つのホスト上でコピーが行えました。
ec2-user@ip-172-31-22-225 copy_ansible]$ ansible-playbook -i hosts copy_task.yml
PLAY [targets] *************************************************************************************************************************************************************************************************************************************************************************************************************************************************************
TASK [Gathering Facts] *****************************************************************************************************************************************************************************************************************************************************************************************************************************************************
ok: [localhost]
ok: [172.31.21.85]
TASK [copy files] **********************************************************************************************************************************************************************************************************************************************************************************************************************************************************
changed: [localhost] => (item=/home/ec2-user/copy_ansible/./files/hoge.txt)
changed: [172.31.21.85] => (item=/home/ec2-user/copy_ansible/./files/hoge.txt)
changed: [localhost] => (item=/home/ec2-user/copy_ansible/./files/fuga.txt)
changed: [172.31.21.85] => (item=/home/ec2-user/copy_ansible/./files/fuga.txt)
PLAY RECAP *****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************
172.31.21.85 : ok=2 changed=1 unreachable=0 failed=0
localhost : ok=2 changed=1 unreachable=0 failed=0
ローカルで確認
[ec2-user@ip-172-31-22-225 copy_ansible]$ ls -l /tmp/copy_here/
合計 0
-rw-r--r-- 1 root root 0 7月 12 07:47 fuga.txt
-rw-r--r-- 1 root root 0 7月 12 07:47 hoge.txt
リモートで確認
[ec2-user@ip-172-31-22-225 copy_ansible]$ ssh -i ~/.ssh/ec2-default.pem ec2-user@172.31.21.85 "ls -l /tmp/copy_here/"
合計 0
-rw-r--r-- 1 root root 0 7月 12 07:47 fuga.txt
-rw-r--r-- 1 root root 0 7月 12 07:47 hoge.txt
最後に
世に平穏のあらんことを