Я использую Vagrant с Ubuntu Trusty x64. Я хочу автоматизировать установку определенных пакетов, поэтому я использовал Ansible в качестве инициатора (я новичок). Drush - один из тех пакетов, которые я хочу установить, и рекомендуемый способ установки Drush - использование Composer. У меня правильно установлен Composer, но нет Drush. Я хочу, чтобы он был установлен в домашнем каталоге пользователя vagrant (где установлены пакеты global composer), но он устанавливается в домашний каталог пользователя root.
Мой playbook.yml
выглядит так:
- hosts: all
gather_facts: yes
sudo: yes
roles:
- composer
- drush
Мой друш main.yml
задача выглядит так:
---
- name: Install Drush
remote_user: vagrant
shell: composer global require drush/drush
Мой композитор main.yml
задача выглядит так:
---
- name: Download Composer installer
get_url: url=https://getcomposer.org/installer dest=/tmp/composer-installer.php mode=0755
- name: Run Composer installer
shell: php composer-installer.php chdir=/tmp creates=/usr/local/bin/composer
- name: Make Composer accessible globally
shell: mv /tmp/composer.phar /usr/local/bin/composer creates=/usr/local/bin/composer
- name: Add Composer's global packages to path
copy: src=composer_envvar.sh dest=/etc/profile.d
Где composer_envvar.sh
содержит ff:
export PATH="~/.composer/vendor/bin:$PATH"
Должен быть способ сообщить ansible, что нужно запускать команду composer от имени бродячего пользователя.
Вы заглянули в Команда композитора Ansible?
Но вместо того, чтобы полагаться на композитора для Drush, теперь вы можете использовать drush.phar
файл, который поставляется с каждым выпуском. Это очень просто и понятно.
Вот пример задачи, которая проверяет, установлен ли Drush, и, если нет, загружает файл phar, делает его исполняемым и доступным в вашем $PATH
:
---
- name: Check if Drush is installed
stat:
path: "{{ drush_path }}"
register: drush
- name: Check Drush version
shell: drush --version | awk '{print $4}' | head -n1
register: drush_version_check
when: drush.stat.exists == true
- name: Install Drush globally
get_url:
url: https://github.com/drush-ops/drush/releases/download/{{ drush_version }}/drush.phar
dest: "{{ drush_path }}"
when: drush.stat.exists == false or drush_version_check.stdout != "{{ drush_version }}"
- name: Make Drush executable
file:
path: "{{ drush_path }}"
mode: 0755
when: drush.stat.exists == true or drush_version_check.stdout != "{{ drush_version }}"
А затем положите drush_path: /usr/local/bin/drush
в vars.yml
файл на случай, если вы хотите изменить $PATH
в будущем. drush_version: 8.0.1
позволяет вам изменить версию, которая будет установлена при обновлении Drush.