筆者は、BIP-IPを複数パーティションに分けて利用することはこれまでなかったのだが、とうとうパーティション分割する機会を得た。バッチ処理を作ろうとして困ったのでメモしておこうと思う。
運用を考えたとき、バッチ処理で処理情報や設定情報を取得したり、設定を更新したりしたいことがある。その場合、デフォルトのパーティションのCommonへの操作はBIG-IPへrootユーザーでログインしてtmshコマンドが発行できれば操作可能だ。
パーティション分割した場合、パーティションにアクセスするためのアカウントを作成するのだが、そのアカウントでリモートログインすると、tmshモードのコンソールになり、許可されたパーティション情報の参照や設定のみできる。tmshモードではバッチ処理が動かせないため、rootユーザーからtmshコマンドで処理したいが、Common以外のパーティションを参照するには工夫が必要であった。
tmshでパーティションを変更するには、cd命令を使う。
たとえば、Fogeパーティションがあるとすると、
(/Common) (tmos)# cd /Foge
(/Foge)(tmos)#
といった具合だ。
tmshコマンドでも、
# tmsh cd /Foge
といった具合にできるのだが、1リクエストのみしか処理できないため、パーティションを選択して終了という具合になる。
では、tmshコマンドで、FogeパーティションのVLAN一覧を表示させる方法で説明する。
tmshモードでVLANを表示させるコマンドは、「list net vlan」なので、以下のように実行する。
# ( echo "cd /Foge"; echo "list net vlan") | tmsh
このように実行することで、cd処理と、list処理を同時に実行可能である。
なお、printfでも可能となる。
# printf "cd /Foge\nlist net vlan" | tmsh
このように、tmshモードで実行するコマンドを先に出力処理しておき、パイプでtmshコマンドにつなげることで、tmshモードにならなくても指定のパーティションに対して操作ができるようになる。
すべてのパーティションで情報を取得できるようにするシェルを作ってみたので紹介する。
#!/bin/sh
# ?付き命令への対応
fi [ `echo "$*" | grep -c "?"` -gt 0 ]; then
tmsh $*; exit
fi
# showとlist命令以外は禁止
case $1 in
show|list) ;;
*) echo "Usage: $0 [show|list] *"; exit;;
esac
# Partition Listを取得し、ループ処理
for part in `tmsh list auth partition one-line | awk '{print $3}'`
do
# Partitionを切り替えてコマンドを実行。
# teeをつなげるのは、tmshの出力結果が多いとless表示モードになるため
printf "cd /$part\n$*" | tmsh | tee
done