我在 Ubuntu Trusty x64 上使用 Vagrant。我想自动安装某些软件包,因此我使用 Ansible 作为配置程序(我是初学者)。Drush 是我想要安装的软件包之一,安装 Drush 的推荐方法是使用 Composer。我已正确安装 Composer,但没有安装 Drush。我希望将其安装在 vagrant 用户的主目录(安装全局 composer 软件包的位置)上,但它安装在 root 用户的主目录中。
我的playbook.yml
样子是这样的:
- hosts: all
gather_facts: yes
sudo: yes
roles:
- composer
- drush
我的 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 以 vagrant 用户身份运行 composer 命令。
答案1
你调查过吗Ansible 的 composer 命令?
但是,您现在不必依赖 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 更新时更改要安装的版本。