Установить компас с ansible

Я пытаюсь использовать Ansible для установки компаса, который необходим для одного из наших сервисов, на сервер EC2. Обычно мы устанавливаем его вручную, используя следующие команды -

curl -L https://get.rvm.io | bash -s stable
gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
source ~/.rvm/scripts/rvm
echo "source ~/.rvm/scripts/rvm" >> ~/.bashrc
rvm install 2.1.2
rvm use 2.1.2 --default
gem install compass

А затем запустите компас компиляции успешно. Теперь, когда я пытаюсь выполнить эти команды с Ansible playbook (используя модуль оболочки), команда compass не найдена системой.

Я попытался использовать официальную роль Ansible RVM ( https://github.com/rvm/rvm1-ansible), и все, что я получил, это больше ошибок.

Я попытался установить rubydev и rubygems-интеграции с помощью apt, а затем установить gem с помощью модуля gem. Это распознает команду компаса, но когда я пытаюсь скомпилировать или даже показать версию компаса, она возвращает ошибки. Вот ошибка для запуска compass -v, например:

Errno::ENOENT on line ["25"] of /usr/lib/ruby/vendor_ruby/compass/version.rb: No such file or directory - /usr/lib/ruby/vendor_ruby/compass/../../VERSION.yml
Run with --trace to see the full backtrace  

Это книга, в которой удалось установить компас, но у меня остались ошибки, о которых я упоминал:

---
- hosts: "{{ host_name }}"
  become: yes
  become_method : sudo
  tasks:
    - name: install ruby-dev
      apt: 
        name: ruby-dev
    - name: install rubygems
      apt: 
        name: rubygems-integration
    - name: install ruby compass
      apt: 
        name: ruby-compass
  ...

Хотелось бы помочь.

2 ответа

Решение

Это пьеса, которая в итоге сработала у меня для установки компаса -

---
- hosts: "{{ host_name }}"
  become: yes
  become_user : deploy3
  tasks:
    #- name: get gpg
    #  shell: "gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3"
    - name: install rvm
      shell: "curl -L https://get.rvm.io | bash -s stable"
    - name: install rvm 2.1.2
      shell: "/home/deploy2/.rvm/bin/rvm install 2.1.2"
    - name: use rvm 2.1.2 by default and install compass
      shell: "bash -lc \"/home/deploy2/.rvm/bin/rvm use 2.1.2 --default && /home/deploy3/.rvm/rubies/ruby-2.1.2/bin/gem install compass\""
...

Вы также можете использовать модуль gem, это лучше, чем сценарий оболочки, потому что он не зависит от используемых вами дистрибутивов Linux, например:

Один пример playbook

- name: Installing ruby
  apt:
    pkg: "{{ item }}"
    state: present
  with_items:
    - ruby2.0
    - ruby2.0-dev

- name: Symlink exists for Ruby 2.0
  file: src=/usr/bin/ruby2.0 dest=/usr/local/bin/ruby state=link

- name: Symlink exists for Ruby Gems 2.0
  file: src=/usr/bin/gem2.0 dest=/usr/local/bin/gem state=link

- name: install compass
  gem:
    name: compass
    state: latest

Кстати, вы можете узнать больше о модуле gem здесь в документации ANSI: http://docs.ansible.com/ansible/latest/gem_module.html

Другие вопросы по тегам