ツナワタリマイライフ

日常ネタから技術ネタ、音楽ネタまで何でも書きます。

ansibleでvagrant上のVMにgitlabをインストールするplaybookを書いた

はじめに

ついにansibleでレシピを書きました。本はこの本を一通り読みました。良い本です。

初めてのAnsible

初めてのAnsible

ansibleのバージョン

実際使わなかったんですが、iptables moduleを使うために2.0をいれました。1.9からのアップグレードは失敗したので、pip uninstall ansibleとpip install ansibleで実施しました。

MacBook-Air:gitlab take$ ansible --version
ansible 2.0.2.0
  config file = /Users/take/vagrant/gitlab/ansible.cfg
  configured module search path = Default w/o overrides

Vagrantfile

ほとんどデフォルトです。port転送をしているのみ。

Vagrant.configure(2) do |config|
  config.vm.box = "CentOS66"
  config.vm.define :gitlab do | gitlab |
    gitlab.vm.hostname = "gitlab"
    gitlab.vm.network "forwarded_port", guest: 80, host: 8080
  end
end

vagrantに関しては、初めてのansibleでも紹介してあるとおり、以下の書籍がおすすめです。

実践 Vagrant

実践 Vagrant

playbook

gitlabのインストールは公式に従いました。

Download GitLab Community Edition (CE) | GitLab

レシピに変換した内容は以下。

sudo yum install curl openssh-server openssh-clients postfix cronie
sudo service postfix start
sudo chkconfig postfix on
sudo lokkit -s http -s ssh

curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
sudo yum install gitlab-ce

sudo gitlab-ctl reconfigure

これをplaybookで書くとこうなる。

- name: install gitlab
  hosts: gitlab
  become: true
  tasks:
    - name: install packages
      yum: name={{ item }}
      become: true
      with_items:
        - curl
        - openssh-server
        - openssh-clients
        - postfix
        - cronie
        - lokkit
    - name: start postfix
      service: name=postfix enabled=yes state=started
    - name: open http and ssh port
      command: lokkit -s ssh -s http
      become: true
    - name: download gitlab
      get_url: url=https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh dest=/tmp/script.rpm.sh
    - name: install gitlab
      command: sh /tmp/script.rpm.sh
      become: true
    - name: install gitlab-ce
      yum: name=gitlab-ce
      become: true
    - name: gitlab reconfigure
      command: gitlab-ctl reconfigure
      become: true
  • with itemsで列挙したものを繰り返しできる
  • become trueはsudo
  • commandモジュールは冪等性が担保されていない(毎回changeになってしまう)

実行する

MacBook-Air:gitlab take$ ansible-playbook playbooks/gitlab.yml 

PLAY [install gitlab] **********************************************************

TASK [setup] *******************************************************************
ok: [gitlab]

TASK [install packages] ********************************************************
skipping: [gitlab] => (item=[u'curl', u'openssh-server', u'openssh-clients', u'postfix', u'cronie', u'lokkit']) 

TASK [start postfix] ***********************************************************
ok: [gitlab]

TASK [open http and ssh port] **************************************************
changed: [gitlab]

TASK [download gitlab] *********************************************************
ok: [gitlab]

TASK [install gitlab] **********************************************************
changed: [gitlab]

TASK [install gitlab-ce] *******************************************************
ok: [gitlab]

TASK [gitlab reconfigure] ******************************************************
changed: [gitlab]

PLAY RECAP *********************************************************************
gitlab                     : ok=8    changed=3    unreachable=0    failed=0   

changedが毎回3になっちゃうのがイケてないところ。ここは改善の余地あり。

おわりに

playbook、yaml形式はとっても分かりやすいですね。

あと公式モジュールがめちゃくちゃ多くて、たいていのことはできそう。ざっくりした使い方はわかったので、今後は目的にあわせて可能な限りplaybookを作っておきたいです。

module indexのページはブックマークしないと。

Module Index — Ansible Documentation