AnsibleでSAMBAの再設定レシピを書いてみる

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

Copyright (C) 2008-2015 Satosh Saitou. All rights reserved.
戻る
日記::一覧展開
2016.06
2016.05
2015.12
2015.11
2015.08
2015.07
2015.06
2015.05
NTPを整備する (2015.05.02)
2015.04
2015.03
2015.02
2015.01
2014.12
PHPでDMC (2014.12.13)
jouornald (2014.12.07)
2014.11
2014.10
2014.09
RaspberryPi B+ (2014.09.06)
2014.08
2014.07
2014.06
2014.05
2014.04
2014.03
2014.02
2014.01
ISCP (2014.01.11)
2013.12
2013.11
2013.10
2013.09
2013.08
2013.07
Fedora19 (2013.07.20)
2013.06
Google Cloud Print (2013.06.30)
wiringPi (2013.06.01)
2013.05
2013.04
2013.03
Fedora18 (2013.03.09)
2013.02
Backupその後 (2013.02.24)
Backup (2013.02.17)
2013.01
2012.12
2012.11
2012.10
2012.09
2012.08
2012.07
2012.06
2012.05
2012.04
2012.03
2012.02
2012.01
2011.12
2011.11
2011.10
2011.09
2011.08
2011.07
2011.06
2011.05
2011.04
2011.03
2011.02
2011.01
2010.12
2010.11
2010.10
2010.09
2010.08
2010.07
2010.06
2010.05
2010.04
2010.03
2010.02
2010.01
2009.12
2009.11
2009.10
2009.09
2009.08
2009.07
2009.06
2009.05
2009.03
2009.02
2009.01
2008.12
2008.11
2008.10
2008.09
2008.08
2008.07
2008.06
2008.05
2008.04
2008.03
音が小さい (2008.03.30)
2008.02
1998.11
作成:2015.04.04
公開:2015.04.04

Valid XHTML 1.1

loading image reserved place