今回はAnsibleで行うファイル操作として、
・コントローラーにあるファイルをターゲットに配布する
・ターゲットにあるファイルを参照する
・ターゲットにあるファイルの権限を変更する
という3種類を試してみます。
まず、コントローラーにあるファイルをターゲットに配布するやり方を試してみます。配布するファイルを準備します。
[root@ansible-ctl ~]# echo etest ct.l"" > test-ctl.txt
[root@ansible-ctl ~]# s -lls -ltr
合計 8
-rw-------. 1 root root 1213 7月 13 20:24 anaconda-ks.cfg
-rw-r--r-- 1 root root 9 7月 15 19:38 test-ctl.txt
[root@ansible-ctl ~]#
[root@ansible-ctl ~]# cat test-ctl.txt
test ctl
[root@ansible-ctl ~]#
Ansibleのコピーモジュールを使用して、ファイルをコピーします。
[root@ansible-ctl ~]# ansible -m copy -a "src=/root/test-ctl.txt dest=/root/"node1
node1 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"checksum": "8cf3af6a1058a5d643cc76561d58049293c27bab",
"dest": "/root/test-ctl.txt",
"gid": 0,
"group": "root",
"md5sum": "3300259615ef07c47a6b8ffa26a684fc",
"mode": "0644",
"owner": "root",
"size": 9,
"src": "/root/.ansible/tmp/ansible-tmp-1626345520.65-50077-156833675535605/source",
"state": "file",
"uid": 0
}
成功しました。ターゲット側を確認します。
[root@ansible-node01 ~]# pwd
/root
[root@ansible-node01 ~]#
[root@ansible-node01 ~]# ls -ltr
合計 8
-rw-------. 1 root root 1201 7月 13 20:26 anaconda-ks.cfg
-rw-r--r-- 1 root root 9 7月 15 19:38 test-ctl.txt
[root@ansible-node01 ~]#
[root@ansible-node01 ~]# cat test-ctl.txt
test ctl
ファイルが配布されていることが確認できました。
もう一度同じコマンドを実行してみます。
[root@ansible-ctl ~]# ansible node1 -m copy -a "src=/root/test-ctl.txt dest=/root/"
node1 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"checksum": "8cf3af6a1058a5d643cc76561d58049293c27bab",
"dest": "/root/test-ctl.txt",
"gid": 0,
"group": "root",
"mode": "0644",
"owner": "root",
"path": "/root/test-ctl.txt",
"size": 9,
"state": "file",
"uid": 0
}
[root@ansible-ctl ~]#
結果のステータスが”SUCCESS”になりました。これは既にターゲット側に対象のファイルが存在しているため、実行した際のステータスに変化がありました。
次に、ターゲットにあるファイルを参照してみます。
今回は/etc/hostsファイルをcatで参照してみます。
[root@ansible-ctl ~]# ansible node1 -a "cat /etc/hosts"
node1 | CHANGED | rc=0 >>
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@ansible-ctl ~]#
ファイル参照が成功し、catコマンドの結果が表示されました。
最後にターゲットにあるファイルの権限を変更します。
対象ファイルに先ほど配布した”test-ctl.txt”を使用します。
まず変更前のファイル権限を確認します。
[root@ansible-ctl ~]# ansible node1 -m file -a "dest=/root/test-ctl.txt"
node1 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"gid": 0,
"group": "root",
"mode": "0644",
"owner": "root",
"path": "/root/test-ctl.txt",
"size": 9,
"state": "file",
"uid": 0
}
[root@ansible-ctl ~]#
オーナーroot,グループroot,権限0644となっていることがわかりました。
この権限を0600に変更していきます。
[root@ansible-ctl ~]# ansible node1 -m file -a "dest=/root/test-ctl.txt mode=0600"
node1 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"gid": 0,
"group": "root",
"mode": "0600",
"owner": "root",
"path": "/root/test-ctl.txt",
"size": 9,
"state": "file",
"uid": 0
}
[root@ansible-ctl ~]#
コマンドが成功し、CHANGEDが返りました。
ファイルの状態を再度確認してみます。
[root@ansible-ctl ~]# ansible node1 -m file -a "dest=/root/test-ctl.txt"
node1 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"gid": 0,
"group": "root",
"mode": "0600",
"owner": "root",
"path": "/root/test-ctl.txt",
"size": 9,
"state": "file",
"uid": 0
}
[root@ansible-ctl ~]#
modeが0600となっていることがわかります。権限が変更できています。
Ansibleのアドホックコマンドを使用してターゲットにあるファイルの操作を行いました。サーバが複数台あり、全てのサーバに対して同じ操作をする必要がある場合、コマンド1回で操作することができます。
手順の簡略化、時間の短縮、操作ミスの軽減に使えると思います。
コメント