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

■先日のSAMBAはyumからインストールして、後は設定ファイルを再配置するだけだったのだけど、うちの環境はapacheとPHPはtarbollからオプションを指定してbuildしている。tarbollから展開してbuildしてインストールするモジュールはまだないようなのでそこはカスタムでplaybookを書くことになります。段取りとしてはAPRとAPR-UTLからbuildして、その後httpdをbuildする流れで、この手順をapacheのroleとしてまとめます。apr, apr-utilのbuild手順はオプションがほとんど無く、同じ手順になるのでplaybookを同じにして、引数で双方のbuildに使えるようにします。httpd本体のbuildではオプション指定が幾つもあるので、build用のシェルスクリプトを呼び出すようにします。

 トップモジュールのplaybookはこんな感じの記述になります。

---
- hosts: freiheitstrom
  sudo: yes
  roles:
    - role: apache
      HTTPD_VER: 2.4.12
      APR_VER: 1.5.1
      APRUTL_VER: 1.5.4

 トップモジュールではバージョン指定をします。コンパイルのオプションは変更しないので、意識するのはバージョンの変更のみです。これを受けてroles/apache/tasksからmain.ymlが取り込まれます。最初に処理するのはaprとapr-utilのbuild処理です。これはrole/apache/tasksに配置したadd_submodule.ymlで処理します。

---
- include: add_submodule.yml
  vars:
    target: apr
    version: "{{ APR_VER }}"
    prefix: "{{ APR_PREFIX }}"
    configopt: ""
- include: add_submodule.yml
  vars:
    target: apr-util
    version: "{{ APRUTL_VER }}"
    prefix: "{{ APR_PREFIX }}"
    configopt: "--with-apr={{ APR_PREFIX }}"

 add_submodule.ymlは一種のbuildテンプレートになっていて、呼び出し元から渡されたtarget, version, prefix, configopt変数でbuild対象を切り替えています。

---
- name: expand tarboll
  unarchive:
    copy=yes
    src={{ PRDBASE }}/{{ target }}-{{ version}}.tar.gz
    dest={{ WORK }}
    creates="{{ WORK }}/{{ target }}-{{ version }}"
- name: configure
  shell: "./configure --prefix {{ prefix }} {{ configopt }}"
  args:
    chdir: "{{ WORK }}/{{ target }}-{{ version }}"
- name: make
  shell: make
  args:
    chdir: "{{ WORK }}/{{ target }}-{{ version }}"
- name: make install
  shell: make install
  args:
    chdir: "{{ WORK }}/{{ target }}-{{ version }}"

 PRDBASEはtarbollの置き場所、WORKはbuild作業場所のディレクトリです。作業用ディレクトリに展開済みのディレクトリが無い場合はtgzを展開し、展開されたディレクトリに移動してconfigureを実行、その後makeして、make installしているだけです。このadd_submodule.ymlは特定のモジュール向けには作成されていません。良くある汎用のtarboll向けplaybookではないかと思います(調べてない)。
 aprとapr-utilのbuild後、main.ymlの後続シーケンスでapache本体のbuildに入ります。

- name: extend tarboll
  unarchive:
    copy=yes
    src={{ PRDBASE }}/httpd-{{ HTTPD_VER }}.tar.gz
    dest={{ WORK }}
    creates={{ WORK }}/httpd-{{ HTTPD_VER }}
- name: copy httpd makekicker
  copy:
    src={{ PRDBASE }}/mkhttpd
    dest={{ WORK }}
    owner=root
    group=root
    mode=700
- name: configure setup
  shell: "{{ WORK }}/mkhttpd {{ HTTPD_VER }} {{ HTTPD_PREFIX }} 
                    {{ APR_PREFIX }} {{ HTTPD_ROOT }}"
  args:
    chdir: "{{ WORK }}/"
- name: make apache
  shell: make
  args:
    chdir: "{{ WORK }}/httpd-{{ HTTPD_VER }}/"
- name: apache install
  shell: make install
  args:
    chdir: "{{ WORK }}/httpd-{{ HTTPD_VER }}/"
- name: httpd conf reinstall
  shell: "cp -rp {{BACKUP}}/httpd_conf/* {{ HTTPD_PREFIX }}/conf"
- name: apache service restart
  shell: "{{ HTTPD_PREFIX }}/bin/apachectl restart"
- name: clean work area
  shell: "rm -rf {{ WORK }}/*"

 形式としてはadd_submodule.ymlの類型です。tarbollを展開し、configureを実行します。ただ、こちらの環境ではhttpdのconfigureでは指定オプションが多いのでconfigureの実行はシェルスクリプトに収めています(mkhttpd)。そのため、一旦シェルスクリプトをコピーして、実行する段取りを踏んでいます。configureしたあとmake, make installするのはadd_submodule.ymlと同じですが、httpdなので、そのあとバックアップディレクトリからhttpdのコンフィグディレクトリを丸ごとコピーして、restartしています。このあたりはプロセスの状態を確認して、restartするのか、単純にstartするのか切り替えた方が良いかもしれません。最後に作業ディレクトリをクリンアップしてこの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
2015.04
2015.03
2015.02
2015.01
2014.12
2014.11
2014.10
2014.09
2014.08
2014.07
2014.06
2014.05
2014.04
2014.03
2014.02
2014.01
2013.12
2013.11
2013.10
2013.09
2013.08
2013.07
2013.06
2013.05
2013.04
2013.03
2013.02
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.02
1998.11
作成:2015.04.05
公開:2015.04.05

Valid XHTML 1.1

loading image reserved place