■AnsibleのCookbookをぼちぼちと書いています。最初戸惑ったのは文法書があるようでないことでした。AnsibleのPlaybookはYAMLで記述される、とはあるのですが、それはスクリプトの記法であって、AnsibleのPlaybook構造を規定しているわけではないので、その構造を把握するのが手探り状態でした。今はどうにか動くものを経験的に把握していますが、いまだにもやもやとしています。これはansible-playbookなどの文法チェッカが非力なことも一因です。文法違反を検出しても、その指摘が適切なものではなく、見当違いのところで引っかかっていたことが多々ありました。
とりあえずSAMBAの設定を戻すCookbookを書いてみました。自分の環境では/etc以下の設定をデフォルトから変更したものについては日々バックアップを取るようにしています。そのバックアップを戻す作業をスクリプトにしました。OSの新規インストールから再設定作業するイメージです。
作業のステップとしては次のようにします。
1)yumでsamba(smb, nmb)をインストール
2)インストールに成功したら起動時に実行するようにsystemctlでenableにする
3)初期状態の/etc/sambaを退避ディレクトリにコピーする
4)バックアップしているsambaのコンフィグを/etc/sambaに書き戻す
5)smb, nmbをリブートする
手順のうち、(2)は(1)が成功した時、(5)は(4)が実行された時に呼び出されるhandlerとして定義しました。
--- - hosts: freiheitstrom sudo: yes vars: backup_base: /custom/backup target_etc: /custom/test custom_log: /tmp/reconfig.log tasks: - name: debug debug: msg="{{ backup_base }}" debug: msg="{{ target_etc }}" - name: prepare for selfloggin shell: rm {{ custom_log }} args: removes: "{{ custom_log }}" - name: prepare for samba setup shell: mkdir {{ target_etc }}/dummy args: creates: "{{ target_etc }}/dummy" - name: install samba yum: name=samba state=latest notify: - enable_smb - enable_nmb - name: backup original samba config shell: cp -rp {{ target_etc }}/samba {{ target_etc }}/dummy/samba ignore_errors: yes - name: samba config shell: cp -rp {{ backup_base }}/etc/samba {{ target_etc }}/ notify: - reboot_smb - reboot_nmb handlers: - name: enable_smb shell: systemctl enable smb >> {{ custom_log }} - name: enable_nmb shell: systemctl enable nmb >> {{ custom_log }} - name: reboot_smb shell: systemctl restart smb >> {{ custom_log }} - name: reboot_nmb shell: systemctl restart nmb >> {{ custom_log }}
階層構造というのは、hosts,tasks,vars,handlersの関係です。ansibleのドキュメントは個別の実行処理を行うモジュールの説明は詳しいのですが、スクリプトの構造を規定するいわば制御構文にあたる部分の説明がなく、すでに多数公開されているPlaybookを参考にせよ、というスタンスです。ゼロから書くことは車輪の再発明のようなものなのかもしれませんが、いらぬ手間がかかったのも確かです。今はなんとなく解りましたが。