| Works
Ansibleでiptablesを再起動
CentOS 6の環境をAnsibleを使って設定変更していた際に、serviceモジュールで"iptables"を再起動したら応答がなくなってしまい、しばらくしてタイムアウトになってしまいました。Playbookの実行結果としては"Failed"にもならず、そのまま切断されたような感じになりました。
その対処のメモです。
問題になったタスクは何の変哲もないサービスの再起動です。
tasks:
- name: Restart iptables
service:
name: iptables
state: restarted
Ansibleにはiptablesモジュールもありますが、今回は"/etc/sysconfig/iptables"ファイルをcopyやtemplateモジュールで置き換えた後、サービスを再起動するという方法を取っていました。
また、Ansibleのモジュールはコマンドと完全に同じ処理をするわけではありませんが、一応シェルで"service iptables restart"とやれば正常に適用される内容であることは確認しています。
いろいろと調べているとCentOS 7でも似たような現象は起こるようです。
カーネルモジュールまわりで何か悪さするのでしょうか。
最終的にはこのリンク中でも言及されている通り、shellモジュールを使って"sleep"をはさみつつ非同期でサービス再起動を実行することで解決しました。
tasks:
- name: Restart iptables
shell: sleep 5 && /sbin/service iptables restart
async: 10
poll: 0
他の環境でも同じ事が起こるのか試したかったのですが、手元になかったのでそれは別の機会で。最近はCentOS 6を触ることもなくなってきたので、firewalld等を通さずにiptablesを直にいじることもなくなってきました。