データソリューション技術グループの秋元です。主にScality RINGを担当しています。
Scality RINGをインストールするにはSaltStackが必須となりますが、今回は私が日々Scality RINGを扱って行く中で、最近その存在に気が付いたSaltStackのdiff機能についてまとめたいと思います。
なお、SaltStackの概要ついては過去にも紹介されていますので、ここでは触れません。
今回試した環境は下記となります。
[root@supv221 ~]# salt --version salt 2016.11.9 (Carbon) [root@supv221 ~]#
では本題です。
Linuxサーバを管理しているとサーバ間での設定の差分を確認したいと言うことはよくあると思います。
例えばサーバ間のrc.localの差分を確認するには下記の様なコマンドで確認が出来ます。
[root@supv221 ~]# ssh 10.22.0.11 'cat /etc/rc.d/rc.local' | diff -u /etc/rc.d/rc.local - root@10.22.0.11's password: --- /etc/rc.d/rc.local 2018-01-10 16:03:40.942156871 +0900 +++ - 2018-03-19 15:03:47.261093673 +0900 @@ -15,3 +15,4 @@ echo "0" > /sys/kernel/mm/transparent_hugepage/khugepaged/defrag echo "never" > /sys/kernel/mm/transparent_hugepage/enabled echo "never" > /sys/kernel/mm/transparent_hugepage/defrag +echo "0" > /sys/block/sdb/queue/rotational [root@supv221 ~]#
数台の確認ならこれでも問題は無いのですが、対象が多い場合はforで回すと…結局は出力全体の目視確認が必要で辛くなってきます。
[root@supv221 ~]# for i in 10.22.0.{11..16};do echo $i;ssh $i 'cat /etc/rc.d/rc.local' | diff -u /etc/rc.d/rc.local -;done 10.22.0.11 root@10.22.0.11's password: --- /etc/rc.d/rc.local 2018-01-10 16:03:40.942156871 +0900 +++ - 2018-03-19 15:05:33.203603278 +0900 @@ -15,3 +15,4 @@ echo "0" > /sys/kernel/mm/transparent_hugepage/khugepaged/defrag echo "never" > /sys/kernel/mm/transparent_hugepage/enabled echo "never" > /sys/kernel/mm/transparent_hugepage/defrag +echo "0" > /sys/block/sdb/queue/rotational 10.22.0.12 root@10.22.0.12's password: --- /etc/rc.d/rc.local 2018-01-10 16:03:40.942156871 +0900 +++ - 2018-03-19 15:05:36.357722960 +0900 @@ -15,3 +15,4 @@ echo "0" > /sys/kernel/mm/transparent_hugepage/khugepaged/defrag echo "never" > /sys/kernel/mm/transparent_hugepage/enabled echo "never" > /sys/kernel/mm/transparent_hugepage/defrag +echo "0" > /sys/block/sdb/queue/rotational 10.22.0.13 root@10.22.0.13's password: --- /etc/rc.d/rc.local 2018-01-10 16:03:40.942156871 +0900 +++ - 2018-03-19 15:05:40.062086340 +0900 @@ -15,3 +15,4 @@ echo "0" > /sys/kernel/mm/transparent_hugepage/khugepaged/defrag echo "never" > /sys/kernel/mm/transparent_hugepage/enabled echo "never" > /sys/kernel/mm/transparent_hugepage/defrag +echo "0" > /sys/block/sdb/queue/rotational : :
さすがにこれをやり続けるのは辛いのでSaltStackのドキュメントを調べると、やはりいい感じのコマンドが用意されていました。
このコマンドはファイルのみに利用できるコマンドですが、利用方法に少し癖があります。
SaltStackのドキュメントには例として下記が記載されています。
salt ‘*’ file.get_diff /home/fred/.vimrc salt://users/fred/.vimrc
“salt://~”で指定されるファイルはmaster側のファイルになりますが、これはmaster側のパラメータのfile_rootsで指定されるパスにアクセスするものになります。file_rootsはデフォルトでは/srv/salt/に設定されているので、このパスに比較したいファイルを置く必要があります。
手元のScality RINGがインストールされた環境ではRINGインストーラが設定する60_scality.confによりfile_rootsは下記のパスに設定されていました。
[root@supv221 ~]# cat /etc/salt/master.d/60_scality.conf ..snip.. file_roots: base: - /srv/scality/salt/local/ - /srv/scality/salt/formula/ ..snip.. [root@supv221 ~]#
このパスに何かファイルを置いてfile.get_diff
を試してみます。
[root@supv221 ~]# cp /etc/rc.d/rc.local /srv/scality/salt/local/ [root@supv221 ~]# ls -l /srv/scality/salt/local/ 合計 12 -rw-r--r-- 1 root root 449 3月 6 14:58 installer_top.sls -rwxr-xr-x 1 root root 656 3月 19 15:07 rc.local -rw-r--r-- 1 root root 83 2月 26 22:29 top.sls [root@supv221 ~]# salt '*' file.get_diff /etc/rc.d/rc.local salt://rc.local supv221: stor225: --- /etc/rc.d/rc.local +++ salt://rc.local @@ -15,4 +15,3 @@ echo "0" > /sys/kernel/mm/transparent_hugepage/khugepaged/defrag echo "never" > /sys/kernel/mm/transparent_hugepage/enabled echo "never" > /sys/kernel/mm/transparent_hugepage/defrag -echo "0" > /sys/block/sdb/queue/rotational conn222: conn221: stor223: --- /etc/rc.d/rc.local +++ salt://rc.local @@ -15,4 +15,3 @@ echo "0" > /sys/kernel/mm/transparent_hugepage/khugepaged/defrag echo "never" > /sys/kernel/mm/transparent_hugepage/enabled echo "never" > /sys/kernel/mm/transparent_hugepage/defrag -echo "0" > /sys/block/sdb/queue/rotational stor224: --- /etc/rc.d/rc.local +++ salt://rc.local @@ -15,4 +15,3 @@ echo "0" > /sys/kernel/mm/transparent_hugepage/khugepaged/defrag echo "never" > /sys/kernel/mm/transparent_hugepage/enabled echo "never" > /sys/kernel/mm/transparent_hugepage/defrag -echo "0" > /sys/block/sdb/queue/rotational ..snip.. [root@supv221 ~]#
出力結果としてはdiffをforで回した時とほぼ同じで、file.get_diff
では引き続き出力全体の目視確認が必要そうです。
もう一つSaltStackのドキュメントにはdiffに関する情報がありました。このコマンドは個人的にお気に入りです。
salt-run survey.diff [survey_sort=up/down] <target>
<salt-execution-module> <salt-execution-module parameters>
<salt-execution-module>にはいつも使っているcmd.run
なども指定できるので、これを試してみます。
[root@supv221 ~]# salt-run survey.diff '*' cmd.run 'cat /etc/rc.d/rc.local'
minion pool :
------------
['stor221', 'stor222', 'stor223', 'stor224', 'stor225', 'stor226']
pool size :
----------
6
pool result :
------------
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.
touch /var/lock/subsys/local
echo "0" > /sys/kernel/mm/transparent_hugepage/khugepaged/defrag
echo "never" > /sys/kernel/mm/transparent_hugepage/enabled
echo "never" > /sys/kernel/mm/transparent_hugepage/defrag
echo "0" > /sys/block/sdb/queue/rotational
minion pool :
------------
['conn221', 'conn222', 'conn223', 'supv221']
pool size :
----------
4
differences from "stor221" results :
-----------------------------------
--- stor221
+++ conn221
@@ -18 +17,0 @@
-echo "0" > /sys/block/sdb/queue/rotational
|_
----------
pool:
- stor221
- stor222
- stor223
- stor224
- stor225
- stor226
result:
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.
touch /var/lock/subsys/local
echo "0" > /sys/kernel/mm/transparent_hugepage/khugepaged/defrag
echo "never" > /sys/kernel/mm/transparent_hugepage/enabled
echo "never" > /sys/kernel/mm/transparent_hugepage/defrag
echo "0" > /sys/block/sdb/queue/rotational
|_
----------
pool:
- conn221
- conn222
- conn223
- supv221
result:
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.
touch /var/lock/subsys/local
echo "0" > /sys/kernel/mm/transparent_hugepage/khugepaged/defrag
echo "never" > /sys/kernel/mm/transparent_hugepage/enabled
echo "never" > /sys/kernel/mm/transparent_hugepage/defrag
[root@supv221 ~]#
- 文字の色がついていない前半部分では、各poolごとの差分が表示されています。
- 緑の文字色となっている後半部分では、各poolごとの実際の出力結果が表示されています。
斬新な出力結果ですが、この表示はかなり見やすい気がします。
差分が無いものはサーバごと(pool)にまとめられているので、差分の有るもの無いものが一目で分かります。
このコマンドを知ってからはSaltStackを使う環境でのサーバ間のdiffはこれ一択になりました。
これはもうお勧めです!
まとめ
salt-run survey.diff
はいい感じに差分を表示してくれるので、SaltStackを使うなら覚えておいても良いのではないでしょうか。
本ブログの情報につきましては、自社の検証に基づいた結果からの情報提供であり、
品質保証を目的としたものではございません。