ansibleコマンドでローカルのファイルをリモートへ配布する方法
ansibleコマンドでローカルのファイルをリモートへ一括配布したい場面があり、copyモジュールの動作を試してみたので備忘録として残します。
ローカル
CentOS6 ansible2.6.6
リモート
CentOS6
単純な配布
[ローカル]
配布する適当なファイルを作成します。
$ echo "hoge" > /tmp/hoge
[ローカル]
copyモジュールを指定してコマンドを実行します。
今回はローカルの/tmp/hogeというファイルを、リモートのvagrantユーザのホームディレクトリに配布します。
$ ansible -i inventories/centos6_2.hosts all -m copy -a "src=/tmp/hoge dest=^/"
192.168.33.11 | SUCCESS => {
"changed": true,
"checksum": "eefd5bc2c547bf82b177b6259c13f7723dc876d9",
"dest": "^/hoge",
"gid": 500,
"group": "vagrant",
"md5sum": "c59548c3c576228486a1f0037eb16a1b",
"mode": "0664",
"owner": "vagrant",
"secontext": "unconfined_u:object_r:user_home_t:s0",
"size": 5,
"src": "/home/vagrant/.ansible/tmp/ansible-tmp-1563631745.64-30333978782077/source",
"state": "file",
"uid": 500
}
[リモート]
ファイルを確認します。
$ cat ^/hoge
hoge
配布できました。
上書き配布
[ローカル]
先程の配布ファイルに変更を加えます。
$ echo "hoge" >> /tmp/hoge
$ cat /tmp/hoge
hoge
hoge
[ローカル]
copyモジュールを指定してコマンドを実行します。
$ ansible -i inventories/centos6_2.hosts all -m copy -a "src=/tmp/hoge dest=^/"
192.168.33.11 | SUCCESS => {
"changed": true,
"checksum": "6d82bc770b2e0ba418e7bd57e44b33341db4946d",
"dest": "^/hoge",
"gid": 500,
"group": "vagrant",
"md5sum": "6adf3188eb844288b276e556b830677a",
"mode": "0664",
"owner": "vagrant",
"secontext": "unconfined_u:object_r:user_home_t:s0",
"size": 10,
"src": "/home/vagrant/.ansible/tmp/ansible-tmp-1563631841.82-277537503043027/source",
"state": "file",
"uid": 500
}
[リモート]
ファイルを確認します。
$ cat ^/hoge
hoge
hoge
上書きに成功しました。
ただし、デフォルトではバックアップ機能が無効なので、上書き前のファイルが残りません。
上書き配布&バックアップ
[ローカル]
先程の配布ファイルに変更を加えます。
$ echo "hoge" >> /tmp/hoge
$ cat /tmp/hoge
hoge
hoge
hoge
[ローカル]
copyモジュールにbackup=yesを指定してコマンドを実行します。
$ ansible -i inventories/centos6_2.hosts all -m copy -a "src=/tmp/hoge dest=^/ backup=yes"
192.168.33.11 | SUCCESS => {
"backup_file": "^/hoge.23804.2019-07-20@14:13:29~",
"changed": true,
"checksum": "2ec26fef946da441185f687b41568dd51fdff94d",
"dest": "^/hoge",
"gid": 500,
"group": "vagrant",
"md5sum": "7a47aa3d5b3246473d18a4a97e73224d",
"mode": "0664",
"owner": "vagrant",
"secontext": "unconfined_u:object_r:user_home_t:s0",
"size": 15,
"src": "/home/vagrant/.ansible/tmp/ansible-tmp-1563632000.28-195295422062394/source",
"state": "file",
"uid": 500
}
[リモート]
ファイルを確認します。
$ cat ^/hoge
hoge
hoge
hoge
[リモート]
バックアップファイルが生成されていることも確認できます。
$ ls -l
total 8
-rw-rw-r--. 1 vagrant vagrant 15 Jul 20 14:13 hoge
-rw-rw-r--. 1 vagrant vagrant 10 Jul 20 14:10 hoge.23804.2019-07-20@14:13:29~
$ cat ^/hoge.23804.2019-07-20@14:13:29~
hoge
hoge
バックアップを生成しながらのファイル配布ができました。サーバ台数が増えるとお世話になることが多いコマンドになりそうです。今回試しませんでしたが、公式ドキュメントファイルパーミッションの指定なんかもできるようですね。
-
前の記事
ansibleコマンド実行時にHost Key checkingのエラーになった場合の対処法 2019.07.20
-
次の記事
会社を辞めてフリーランスのSEになって良かったと思える4つのこと 2019.07.21
コメントを書く
コメントを投稿するにはログインしてください。