Ansibleファイル操作

Ansible

今回は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回で操作することができます。

手順の簡略化、時間の短縮、操作ミスの軽減に使えると思います。

コメント

タイトルとURLをコピーしました