fhコマンド作りました。
Python Fabricを真似て、リモートのサーバに対してデプロイするツールを、bashで作っています。
簡単なオプションで、リモートサーバに対して、コマンドを実行したり、シェルスクリプトを実行したりできます。
複数台のLinuxサーバを効率に設定したり、テストしたりできます。
GitHubで公開しています。
https://github.com/kuritaka/fasthandle2
https://github.com/kuritaka/fasthandle2-samples
##fhコマンドの利用例
色々な作業を自動化しましょう。
- リリースの作業を事前に準備しておき、リリースでは数行実行すればいいだけにする。
- サーバ台数が多い定期再起動を自動化する
- 何度も行う疎通確認を自動化する。結果判定も自動化する
- クラスターの起動し、ちゃんと起動したことを確認できるようにする
##fhコマンドの特徴
学習コストが低い(シンプル)
シンプルなオプションを心がけています。
「fh -h」を見れば、使い方がほぼ分かるようにしています。
fhコマンドは、簡単で、すぐに使えます。
事前学習や事前準備が、ほとんどいらないような使い方ができるので、
ちょっとだけ通信の確認に使ってみようかなという使い方ができます。
今回のリリースだけ使ってみようかなという使い方ができます。
環境依存が低い
シェルスクリプトなので、環境依存が低いです。
コードをコピペするだけで、どこでも動きます。
10年後もずっと使えるはずです。
自力でトラブル解決がしやすい
実行するのは、シェルスクリプトなので、問題発生時に、なぜうまく動かなかったか調査しやすいです。
fhコマンド自身もシェルスクリプトで、問題発生時に修正もしやすいです。
学習に応用がきく
fhコマンドは、シェルスクリプトを実行するだけということは、シェルスクリプトを書けるようになることは必要です。
バックアップやアラートやその他自動化するために、シェルスクリプトを自由自在に書ける力がエンジニアには必要ですので、強くなりましょう。
操作例
コマンド実行
fh -H host1 -c hostname #host1に対して、hostnameコマンドを実行
fh -H host1,host2 -c hostname #host1とhost2に対して、hostnameコマンドを実行
fh -H hostlist -c hostname #hostlistに記載されているホストに対して、hostnameコマンド実行コマンド実行
fh -H host1 -s -c whoami #host1に対して、sudoで、whoamiコマンドを実行
fh -H host1,host2 -s --vi FILE #host1、host2に対して、sudo vi でファイル編集
fh -H hostlist --ping #hostlistに記載のホストに対して、pingの疎通確認を実行
シェル実行
fh -H host1 -f test.sh #host1に対して、test.shシェルを実行
fh -H host1 -f test.sh:cmd_whoami #host1に対して、test.shシェルを実行。cmd_whoamiが引数。
ヘルプ
実際の使い方は、ヘルプを参照しながら使えてください。
$ fh -h
Usage: fh [options]
Options:
-h, --help show this help message and exit
--version show program's version number and exit
-v, --verbose verbose mode
-d, --debug debug mode
-H HOST1[,HOST2], --hosts=HOST1[,HOST2], -H HOSTLISTFILE, --hosts=HOSTLISTFILE
comma-separated list of hosts or <HOSTLISTFILE> to operate on
-o OUTPUTFILE, --output=OUTPUTFILE
Write output to bouth stdout and <OUTPUTFILE>
-s, --sudo Execute command or shellscript with sudo
-- COMMAND, -c COMMAND, --command=COMMAND
Execute COMMAND
-f SHELLSCRIPT, --file=SHELLSCRIPT, -f SHELLSCRIPT1 SHELLSCRIPT2
Execute ShellScript
--ping check ping test
--login login remote host
--vi FILE, --vi=FILE edit the remote file
--scp LOCLA_FILE REMOTE_DIR
transport file with scp
Connection Options:
control as whom and how to connect to hosts
-u USER, --user=USER username to use when connecting to remote hosts
-p, --password, -p PASSWORD, --password=PASSWORD
ssh password
If you do not specify a password, an input field will appear.
-i PRIVATEKEY SSH private key file.
-P PORT, --port=PORT Port to connect to on the remote host.
Usage:
Execute Commnad in Local Host:
fh -c uname -n
fh -c 'uname -n; whoami'
fh -c 'echo \$(uname -n)-------; whoami'
fh -c whoami
fh -c 'sudo whoami'
fh -s -c whoami
Execute ShellScript in Local Host:
fh -f test.sh
fh -f test.sh:cmd_whoami,uname_n
fh -f test.sh:cmd_whoami,uname_n test2.sh:arg1,arg2
fh -o outputfile -c uname -n
Execute Command in Remote Host:
fh -H host1 -c uname -n
fh -H host1 -s -c whoami
fh -H host1 -c sudo whoami
fh -H host1 -c 'uname -n; whoami'
fh -H host1 -c 'sudo uname -n; sudo whoami'
fh -H host1 -s -c 'uname -n; whoami'
fh -H host1 -c 'echo \$(uname -n)--------; whoami'
fh -H host1 -s -c 'echo \$(uname -n)--------; whoami'
fh -H host1,host2 -c uname -n
fh -H host1,host2 -s -c uname -n
Execute ShellScript in Remote Host:
fh -H host1 -f test.sh:cmd_whoami
fh -H host1 -s -f test.sh:cmd_whoami
fh -H host1,host2 -f test.sh
fh -H hostlist -f test.sh:cmd_whoami
fh -H host1 -o outputfile -c uname -n
Others
fh -H host1 --ping
fh -H host1 --login
fh -H host1 --vi FILE
fh -H host1 -s --vi FILE #-s = with sudo
fh -H host1 --scp LOCAL_FILE REMOTEDIR