ログってなんぼ

日々のメモです

Ansible:roleを用いてrbenvとrubyをインストールする

appロールを作り、rbenvとrubyをインストールして使用できるようにするメモ

hosts

[app]
app01 ansible_host=xxx.xxx.xxx.xxx

app.yml

---
  - hosts: app 
    roles:
      - app

roles/app/tasks/main.yml

---
  - name: 開発ツールをインストール
    become: True
    yum: name={{ item }} state=latest
    with_items:
      - git
      - openssl-devel
      - readline-devel
      - "@Development tools"

  - name: rbenvをインストール
    git: repo=https://github.com/sstephenson/rbenv.git dest=~/.rbenv

  - name: .bash_profileにパスを追加
    lineinfile: >
      dest="~/.bash_profile"
      line="export PATH=$HOME/.rbenv/bin:$PATH"

  - name: .bash_prifileにrbenv initを追加
    lineinfile: >
      dest="~/.bash_profile"
      line='eval "$(rbenv init -)"'

  - name: rbenv-buildのインストール
    git: repo=https://github.com/sstephenson/ruby-build.git dest=~/.rbenv/plugins/ruby-build

  - name: rubyのインストール
    shell: bash -lc "CONFIGURE_OPTS="--disable-install-rdoc" rbenv install -s {{ ruby_version }}"

  - name: globalで使用するバージョンを指定
    shell: bash -lc "rbenv global {{ ruby_version }} && rbenv rehash"

roles/app/defaults/main.yml

tasksのmain.ymlで変数を使っているので、こちらに定義しておく。

---
  ruby_version: 2.1.8

実行してみる

$ ansible-playbook app.yml

PLAY ***************************************************************************

TASK [setup] *******************************************************************
ok: [app01]

TASK [app : 開発ツールをインストール] ******************************************************
changed: [app01] => (item=[u'git', u'openssl-devel', u'readline-devel', u'@Development tools'])

TASK [app : Install htop] ******************************************************
ok: [app01]

TASK [app : rbenvをインストール] ******************************************************
ok: [app01]

TASK [app : .bash_profileにパスを追加] ***********************************************
ok: [app01]

TASK [app : .bash_prifileにrbenv initを追加] ***************************************
ok: [app01]

TASK [app : rbenv-buildのインストール] ************************************************
ok: [app01]

TASK [app : rubyのインストール] *******************************************************
changed: [app01]

TASK [app : globalで使用するバージョンを指定] ***********************************************
changed: [app01]

実行前のチェック

文法チェック

$ ansible-playbook app.yml --syntax-check

dry-run

$ ansible-playbook app.yml -C

詳細進捗付き

$ ansible-playbook app.yml -vvv
ansible、簡潔にかけるので良いですね