■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を参考にせよ、というスタンスです。ゼロから書くことは車輪の再発明のようなものなのかもしれませんが、いらぬ手間がかかったのも確かです。今はなんとなく解りましたが。