CentOS6での1台でnfs-server、nfs-clientを動かした時の問題
普通に考えたら1台のサーバでnfs-server、nfs-client同時実行で自分自身にnfs mountなんて設定はやらないので問題にはならないとは思いますが、dev環境作成等、本番同様の環境構築を一台で行うときにnfs-serverとnfs-clientが同居した時に起動時、終了時のマウントのタイミングについての問題です。
nfsのマウント、アンマウントのタイミング
nfsサーバの自動起動をONにすると
chkconfig nfs on
rc系に放り込まれるserver側の主要なリンクは以下のとおりとなります
- /etc/rc3.d/S30nfs
- /etc/rc0.d/K60nfs
- /etc/rc6.d/K60nfs
nfsのマウント、アンマウントのタイミングがnetfsで行っているので
- /etc/rc3.d/S25netfs
- /etc/rc0.d/K75netfs
- /etc/rc6.d/K75netfs
明らかに起動時はマウントデーモンが起動前にnfs mountを行い(失敗する)
シャットダウン時はマウントデーモンが死んだ後に unmountを行います(もちろん失敗)
なので、nfs-server、nfs-clientを一台に同居させるときはnetfsの起動、終了のタイミングを変更する必要があります。
netfsの起動、終了のタイミング変更
単純にmvでリネームでOK
# mv /etc/rc3.d/S25netfs /etc/rc3.d/S31netfs
# mv /etc/rc0.d/K75netfs /etc/rc0.d/K50netfs
# mv /etc/rc6.d/K75netfs /etc/rc6.d/K50netfs
これで、起動、終了が問題なく行えます
ansible playbookの作成
こっちが本題です。
上記の事象を加味してansible playbookを作成しようと思ったのですけど、ansibleのマニュアルを読む限り、リモートでのコピーはあるのですがファイルの移動が見当たりません。
(知ってる方いたら求むです)
単純にcommand等でmvを行ったら冪等性が保たれない(再実行でエラーになるかも)なので、真剣にplaybookを書いたらこんな感じなりました。
- name: Check /etc/rc3.d/S25netfs
stat: path=/etc/rc3.d/S25netfs
register: rc3netfs
- name: Setting Startup mount timing(develop)
shell: mv /etc/rc3.d/S25netfs /etc/rc3.d/S31netfs
when:
- inventory_hostname in groups['develop']
- rc3netfs.stat.exists
- name: Check /etc/rc0.d/K75netfs
stat: path=/etc/rc0.d/K75netfs
register: rc0netfs
- name: Setting rc0 unmount timing(develop)
shell: mv /etc/rc0.d/K75netfs /etc/rc0.d/K50netfs
when:
- inventory_hostname in groups['develop']
- rc0netfs.stat.exists
- name: Check /etc/rc6.d/K75netfs
stat: path=/etc/rc6.d/K75netfs
register: rc6netfs
- name: Setting rc6 unmount timing(develop)
shell: mv /etc/rc6.d/K75netfs /etc/rc6.d/K50netfs
when:
- inventory_hostname in groups['develop']
- rc6netfs.stat.exists
※もう一度書け言われると辛いのでメモ書き代わり。。。