ansibleをちょっと試した。

Terrariaのサーバの実装であるTShockが1.3系のサポートを始めたようなので、アップデート作業をしようと思った。
が、手順書コピペは今風じゃないので、ansibleか何かでやってみようと思った。

まだまだ書き途中だけど、monoのインストールまではうまくいったので、とりあえず。


tarの展開とビルド時間がかなりかかるので、2回目以降はskipするようにしてる。
yumも応答が遅すぎるのでどうにかできないか調べてる。インストール済みでskipしてほしいタスクに10秒はちょっとなー。

ファイルが存在したら何もしない動作にwhenとcreatesが使えるようなんだけど、どっちが良いのかわからない。
whenのほうはstatのタスクを1個書いてregisterで変数みたいなものを作る必要があるし、createsだと同じ記述を繰り返さないといけない可能性がある。

あと、そもそもmonoがアップデートされたら、このplaybookじゃmonoのアップデートできないじゃん、という問題もあるので、どうするかなぁ、というところ。引数とるようにしてmonoを置いてるディレクトリを削除すればよいのだけども。

そんなたくさんのサーバ管理しているわけでもないし手でやったほうがまだいいかなぁ、という感じ。
でもこういうところで始めないと覚えないしなぁ。

---
- hosts: terraria-server
  sudo: no
  vars:
    workspace_path: '~/src'
    mono_home: '~/local/mono'
    mono_tarball_name: 'mono-4.0.2'
    mono_tarball_url: "http://download.mono-project.com/sources/mono/{{ mono_tarball_name }}.5.tar.bz2"
  tasks:
    - name: 'install dependency packages'
      yum: name={{ item }} state=latest
      sudo: yes
      with_items:
        - gcc
        - gcc-c++
        - gettext
        - make

    - name: 'create workspace'
      file: path="{{ workspace_path }}" state=directory

    - name: 'check exists local mono'
      stat: path="{{ mono_home }}/bin/mono"
      register: check_mono

    - name: 'download mono souce'
      get_url: url="{{ mono_tarball_url }}"
               dest="{{ workspace_path }}/{{mono_tarball_name}}.tar.bz2"
      when: not check_mono.stat.exists

    - name: 'extract mono source'
      command: tar xjvf "{{mono_tarball_name}}.tar.bz2"
               chdir="{{ workspace_path }}"
               creates="{{ workspace_path }}/{{ mono_tarball_name }}"
      when: not check_mono.stat.exists

    - name: 'configure mono'
      # "--prefix=~/..." was error. so, i was using "--prefix ~/..."
      command: ./configure --prefix "{{ mono_home }}"
               chdir="{{ workspace_path }}/{{ mono_tarball_name }}"
      when: not check_mono.stat.exists

    - name: 'build mono'
      command: make -j4
               chdir="{{ workspace_path }}/{{ mono_tarball_name }}"
      when: not check_mono.stat.exists

    - name: 'install mono'
      command: make install
               chdir="{{ workspace_path }}/{{ mono_tarball_name }}"
      when: not check_mono.stat.exists