From 38bc50447513fb43364cb20c16c09b2a4adce23c Mon Sep 17 00:00:00 2001 From: Jeremy Lecour Date: Thu, 29 Sep 2016 12:03:11 +0200 Subject: [PATCH] =?UTF-8?q?ajoute=20un=20r=C3=B4le=20"rbenv"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Installe un environnement Rbenv (avec quelques plugins) pour un utilisateur, une version de Ruby et des gems par défaut. --- rbenv/README.md | 24 ++++++++ rbenv/defaults/main.yml | 13 +++++ rbenv/files/default-gems | 1 + rbenv/files/gemrc | 5 ++ rbenv/tasks/main.yml | 118 +++++++++++++++++++++++++++++++++++++++ 5 files changed, 161 insertions(+) create mode 100644 rbenv/README.md create mode 100644 rbenv/defaults/main.yml create mode 100644 rbenv/files/default-gems create mode 100644 rbenv/files/gemrc create mode 100644 rbenv/tasks/main.yml diff --git a/rbenv/README.md b/rbenv/README.md new file mode 100644 index 00000000..6366273b --- /dev/null +++ b/rbenv/README.md @@ -0,0 +1,24 @@ +# munin + +Installation de Rbenv, Ruby et des gems par défaut. + +## Taches + +L'ensemble des actions est dans le fichier `tasks/main.yml` + +## Variables possibles + +Les seules variables sont liées au hostname (court et complet) qui sont simplement déduites des facts. + +* `rbenv_version`: version de Rbenv à installer, `v1.0.0` par défaut +* `rbenv_ruby_version`: version de Ruby à installer, `2.3.1` par défaut +* `rbenv_root`: dossier d'installation, `~/.rbenv` par défaut +* `rbenv_repo`: source Git pour Rbenv +* `rbenv_plugins`: liste des plugins Rbenv à installer + +Le rôle doit être ajouté en indiquant l'utilisateur concerné : + +``` +roles: + - { role: rbenv, username: 'johndoe' } +``` diff --git a/rbenv/defaults/main.yml b/rbenv/defaults/main.yml new file mode 100644 index 00000000..23d39f07 --- /dev/null +++ b/rbenv/defaults/main.yml @@ -0,0 +1,13 @@ +--- +rbenv_version: v1.0.0 +rbenv_ruby_version: 2.3.1 +rbenv_root: "~/.rbenv" +rbenv_repo: "https://github.com/rbenv/rbenv.git" +rbenv_plugins: + - { name: "rbenv-vars", repo: "https://github.com/rbenv/rbenv-vars.git", version: "v1.2.0" } + - { name: "ruby-build", repo: "https://github.com/rbenv/ruby-build.git", version: "v20160426" } + - { name: "rbenv-default-gems", repo: "https://github.com/rbenv/rbenv-default-gems.git", version: "ead67889c91c53ad967f85f5a89d986fdb98f6fb" } + - { name: "rbenv-installer", repo: "https://github.com/rbenv/rbenv-installer.git", version: "bc21e7055dcc8f5f9bc66ce0c78cc9ae0c28cd7a" } + - { name: "rbenv-update", repo: "https://github.com/rkh/rbenv-update.git", version: "1961fa180280bb50b64cbbffe6a5df7cf70f5e50" } + - { name: "rbenv-whatis", repo: "https://github.com/rkh/rbenv-whatis.git", version: "v1.0.0" } + - { name: "rbenv-use", repo: "https://github.com/rkh/rbenv-use.git", version: "v1.0.0" } diff --git a/rbenv/files/default-gems b/rbenv/files/default-gems new file mode 100644 index 00000000..b841526f --- /dev/null +++ b/rbenv/files/default-gems @@ -0,0 +1 @@ +bundler diff --git a/rbenv/files/gemrc b/rbenv/files/gemrc new file mode 100644 index 00000000..0419b3fd --- /dev/null +++ b/rbenv/files/gemrc @@ -0,0 +1,5 @@ +--- +:sources: +- https://rubygems.org +install: --no-document +update: --no-document diff --git a/rbenv/tasks/main.yml b/rbenv/tasks/main.yml new file mode 100644 index 00000000..aac58684 --- /dev/null +++ b/rbenv/tasks/main.yml @@ -0,0 +1,118 @@ +--- + +- name: install rbenv dependencies + apt: + pkg: '{{ item }}' + install_recommends: no + state: present + with_items: + - build-essential + - git + - libcurl4-openssl-dev + - libffi-dev + - libreadline-dev + - libssl-dev + - libxml2-dev + - libxslt1-dev + - zlib1g-dev + tags: + - rbenv + - packages + +- name: checkout rbenv_repo for {{ username }} + git: + repo: '{{ rbenv_repo }}' + dest: '{{ rbenv_root }}' + version: '{{ rbenv_version }}' + accept_hostkey: yes + force: yes + become_user: "{{ username }}" + ignore_errors: yes + tags: + - rbenv + +- name: create plugins directory for {{ username }} + file: + path: '{{ rbenv_root }}/plugins' + state: directory + become_user: "{{ username }}" + ignore_errors: yes + tags: + - rbenv + +- name: install plugins for {{ username }} + git: + repo: '{{ item.repo }}' + dest: '{{ rbenv_root }}/plugins/{{ item.name }}' + version: '{{ item.version }}' + accept_hostkey: yes + force: yes + with_items: + - "{{ rbenv_plugins }}" + become_user: "{{ username }}" + ignore_errors: yes + tags: + - rbenv + +- name: Init rbenv in profile for {{ username }} + become_user: "{{ username }}" + blockinfile: + dest: '~{{ username }}/.profile' + block: | + export PATH="{{ rbenv_root }}/bin:$PATH" + eval "$(rbenv init -)" + marker: "# {mark} ANSIBLE MANAGED RBENV INIT" + +- name: set default-gems for {{ username }} + copy: + src: default-gems + dest: '{{ rbenv_root }}/default-gems' + become_user: "{{ username }}" + ignore_errors: yes + tags: + - rbenv + +- name: set gemrc for {{ username }} + copy: + src: gemrc + dest: ~/.gemrc + become_user: "{{ username }}" + ignore_errors: yes + tags: + - rbenv + +- name: check ruby {{ rbenv_ruby_version }} installed for {{ username }} + shell: /bin/bash -lc "rbenv versions | grep {{ rbenv_ruby_version }}" + become_user: "{{ username }}" + register: ruby_installed + changed_when: false + ignore_errors: yes + always_run: yes + tags: + - rbenv + +- name: install ruby {{ rbenv_ruby_version }} for {{ username }} + shell: /bin/bash -lc "TMPDIR=~/tmp rbenv install {{ rbenv_ruby_version }}" + become_user: "{{ username }}" + when: ruby_installed.rc != 0 + ignore_errors: yes + tags: + - rbenv + +- name: check if user ruby version is {{ rbenv_ruby_version }} for {{ username }} + shell: /bin/bash -lc "rbenv version | cut -d ' ' -f 1 | grep -Fx '{{ rbenv_ruby_version }}'" + become_user: "{{ username }}" + register: ruby_selected + changed_when: false + ignore_errors: yes + always_run: yes + tags: + - rbenv + +- name: set ruby {{ rbenv_ruby_version }} for {{ username }} + shell: /bin/bash -lc "rbenv global {{ rbenv_ruby_version }} && rbenv rehash" + become_user: "{{ username }}" + when: ruby_selected.rc != 0 + ignore_errors: yes + tags: + - rbenv