diff --git a/lemp-rhel7/roles/ansible-role-composer/.travis.yml b/lemp-rhel7/roles/ansible-role-composer/.travis.yml new file mode 100644 index 0000000..0b8b54e --- /dev/null +++ b/lemp-rhel7/roles/ansible-role-composer/.travis.yml @@ -0,0 +1,42 @@ +--- +sudo: required +language: python +python: "2.7" + +env: + - SITE=test.yml + - SITE=test-global-require.yml + +before_install: + - sudo apt-get update -qq + - sudo apt-get install curl + +install: + # Install Ansible. + - pip install ansible + + # Add ansible.cfg to pick up roles path. + - "{ echo '[defaults]'; echo 'roles_path = ../'; } >> ansible.cfg" + + # Install required dependencies. + - ansible-galaxy install geerlingguy.php + +script: + # Check the role/playbook's syntax. + - "ansible-playbook -i tests/inventory tests/$SITE --syntax-check" + + # Run the role/playbook with ansible-playbook. + - "ansible-playbook -i tests/inventory tests/$SITE --connection=local --sudo" + + # Run the role/playbook again, checking to make sure it's idempotent. + - > + ansible-playbook -i tests/inventory tests/$SITE --connection=local --sudo + | grep -q 'changed=0.*failed=0' + && (echo 'Idempotence test: pass' && exit 0) + || (echo 'Idempotence test: fail' && exit 1) + + # Check if composer is installed and working. + - composer + +notifications: + webhooks: https://galaxy.ansible.com/api/v1/notifications/ diff --git a/lemp-rhel7/roles/ansible-role-composer/README.md b/lemp-rhel7/roles/ansible-role-composer/README.md new file mode 100644 index 0000000..11def04 --- /dev/null +++ b/lemp-rhel7/roles/ansible-role-composer/README.md @@ -0,0 +1,68 @@ +# Ansible Role: Composer + +[![Build Status](https://travis-ci.org/geerlingguy/ansible-role-composer.svg?branch=master)](https://travis-ci.org/geerlingguy/ansible-role-composer) + +Installs Composer, the PHP Dependency Manager, on any Linux or UNIX system. + +## Requirements + + - `php` (version 5.4+) should be installed and working (you can use the `geerlingguy.php` role to install). + - `git` should be installed and working (you can use the `geerlingguy.git` role to install). + +## Role Variables + +Available variables are listed below, along with default values (see `defaults/main.yml`): + + composer_path: /usr/local/bin/composer + +The path where composer will be installed and available to your system. Should be in your user's `$PATH` so you can run commands simply with `composer` instead of the full path. + + composer_keep_updated: false + +Set this to `true` to update Composer to the latest release every time the playbook is run. + + composer_home_path: '~/.composer' + composer_home_owner: root + composer_home_group: root + +The `COMPOSER_HOME` path and directory ownership; this is the directory where global packages will be installed. + + composer_version: '' + +You can install a specific release of Composer, e.g. `composer_version: '1.0.0-alpha11'`. If left empty the latest development version will be installed. Note that `composer_keep_updated` will override this variable, as it will always install the latest development version. + + composer_global_packages: {} + +A list of packages to install globally (using `composer global require`). If you want to install any packages globally, add a list item with a dictionary with the `name` of the package and a `release`, e.g. `- { name: phpunit/phpunit, release: "4.7.*" }`. The 'release' is optional, and defaults to `@stable`. + + composer_add_to_path: true + +If `true`, and if there are any configured `composer_global_packages`, the `vendor/bin` directory inside `composer_home_path` will be added to the system's default `$PATH` (for all users). + + composer_github_oauth_token: '' + +GitHub OAuth token, used to avoid GitHub API rate limiting errors when building and rebuilding applications using Composer. Follow GitHub's directions to [Create a personal access token](https://help.github.com/articles/creating-an-access-token-for-command-line-use/) if you run into these rate limit errors. + + php_executable: php + +The executable name or full path to the PHP executable. This is defaulted to `php` if you don't override the variable. + +## Dependencies + +None (but make sure you've installed PHP; the `geerlingguy.php` role is recommended). + +## Example Playbook + + - hosts: servers + roles: + - geerlingguy.composer + +After the playbook runs, `composer` will be placed in `/usr/local/bin/composer` (this location is configurable), and will be accessible via normal system accounts. + +## License + +MIT / BSD + +## Author Information + +This role was created in 2014 by [Jeff Geerling](http://jeffgeerling.com/), author of [Ansible for DevOps](http://ansiblefordevops.com/). diff --git a/lemp-rhel7/roles/ansible-role-composer/defaults/main.yml b/lemp-rhel7/roles/ansible-role-composer/defaults/main.yml new file mode 100644 index 0000000..a6313ea --- /dev/null +++ b/lemp-rhel7/roles/ansible-role-composer/defaults/main.yml @@ -0,0 +1,20 @@ +--- +composer_path: /usr/local/bin/composer +composer_keep_updated: false +composer_version: '' + +# The directory where global packages will be installed. +composer_home_path: '~/.composer' +composer_home_owner: root +composer_home_group: root + +# A list of packages to install globally. See commented examples below for +# usage; the 'release' is optional, and defaults to '@stable'. +composer_global_packages: [] + # - { name: phpunit/phpunit, release: "4.7.x" } + # - { name: phpunit/phpunit, release: "@stable" } + +composer_add_to_path: true + +# GitHub OAuth token (used to help overcome API rate limits). +composer_github_oauth_token: '' diff --git a/lemp-rhel7/roles/ansible-role-composer/meta/main.yml b/lemp-rhel7/roles/ansible-role-composer/meta/main.yml new file mode 100644 index 0000000..c4b0b31 --- /dev/null +++ b/lemp-rhel7/roles/ansible-role-composer/meta/main.yml @@ -0,0 +1,43 @@ +--- +dependencies: [] + +galaxy_info: + author: geerlingguy + description: Composer PHP Dependency Manager + company: "Midwestern Mac, LLC" + license: "license (BSD, MIT)" + min_ansible_version: 1.9 + platforms: + - name: EL + versions: + - all + - name: GenericUNIX + versions: + - all + - name: Fedora + versions: + - all + - name: opensuse + versions: + - all + - name: GenericBSD + versions: + - all + - name: FreeBSD + versions: + - all + - name: Ubuntu + versions: + - all + - name: SLES + versions: + - all + - name: GenericLinux + versions: + - all + - name: Debian + versions: + - all + galaxy_tags: + - packaging + - web diff --git a/lemp-rhel7/roles/ansible-role-composer/tasks/global-require.yml b/lemp-rhel7/roles/ansible-role-composer/tasks/global-require.yml new file mode 100644 index 0000000..0f6a323 --- /dev/null +++ b/lemp-rhel7/roles/ansible-role-composer/tasks/global-require.yml @@ -0,0 +1,17 @@ +--- +- name: Install configured globally-required packages. + become: yes + become_user: "{{ composer_home_owner }}" + shell: > + COMPOSER_HOME={{ composer_home_path }} + composer global require {{ item.name }}:{{ item.release | default('@stable') }} --no-progress + creates={{ composer_home_path }}/vendor/{{ item.name }} + register: composer_global_require_result + with_items: "{{ composer_global_packages }}" + +- name: Add composer_home_path bin directory to global $PATH. + template: + src: composer.sh.j2 + dest: /etc/profile.d/composer.sh + mode: 0644 + when: composer_add_to_path diff --git a/lemp-rhel7/roles/ansible-role-composer/tasks/main.yml b/lemp-rhel7/roles/ansible-role-composer/tasks/main.yml new file mode 100644 index 0000000..6a65e99 --- /dev/null +++ b/lemp-rhel7/roles/ansible-role-composer/tasks/main.yml @@ -0,0 +1,53 @@ +--- +- name: Set php_executable variable to a default if not defined. + set_fact: + php_executable: php + when: php_executable is not defined + +- name: Check if Composer is installed. + stat: "path={{ composer_path }}" + register: composer_bin + +- name: Download Composer installer. + get_url: + url: https://getcomposer.org/installer + dest: /tmp/composer-installer.php + mode: 0755 + when: not composer_bin.stat.exists + +- name: Run Composer installer. + command: > + {{ php_executable }} composer-installer.php {% if composer_version != '' %} --version={{ composer_version }}{% endif %} + chdir=/tmp + when: not composer_bin.stat.exists + +- name: Move Composer into globally-accessible location. + shell: > + mv /tmp/composer.phar {{ composer_path }} + creates={{ composer_path }} + when: not composer_bin.stat.exists + +- name: Update Composer to latest version (if configured). + shell: > + {{ php_executable }} {{ composer_path }} self-update + register: composer_update + changed_when: "'Updating to version' in composer_update.stdout" + when: composer_keep_updated + +- name: Ensure composer directory exists. + file: + path: "{{ composer_home_path }}" + owner: "{{ composer_home_owner }}" + group: "{{ composer_home_group }}" + state: directory + +- name: Add GitHub OAuth token for Composer (if configured). + template: + src: "auth.json.j2" + dest: "{{ composer_home_path }}/auth.json" + owner: "{{ composer_home_owner }}" + group: "{{ composer_home_group }}" + when: composer_github_oauth_token != '' + +- include: global-require.yml + when: composer_global_packages|length > 0 diff --git a/lemp-rhel7/roles/ansible-role-composer/templates/auth.json.j2 b/lemp-rhel7/roles/ansible-role-composer/templates/auth.json.j2 new file mode 100644 index 0000000..a41c214 --- /dev/null +++ b/lemp-rhel7/roles/ansible-role-composer/templates/auth.json.j2 @@ -0,0 +1,5 @@ +{ + "github-oauth": { + "github.com": "{{ composer_github_oauth_token }}" + } +} diff --git a/lemp-rhel7/roles/ansible-role-composer/templates/composer.sh.j2 b/lemp-rhel7/roles/ansible-role-composer/templates/composer.sh.j2 new file mode 100644 index 0000000..3e6cd7a --- /dev/null +++ b/lemp-rhel7/roles/ansible-role-composer/templates/composer.sh.j2 @@ -0,0 +1 @@ +export PATH=$PATH:{{ composer_home_path }}/vendor/bin diff --git a/lemp-rhel7/roles/ansible-role-composer/tests/inventory b/lemp-rhel7/roles/ansible-role-composer/tests/inventory new file mode 100644 index 0000000..2fbb50c --- /dev/null +++ b/lemp-rhel7/roles/ansible-role-composer/tests/inventory @@ -0,0 +1 @@ +localhost diff --git a/lemp-rhel7/roles/ansible-role-composer/tests/test-global-require.yml b/lemp-rhel7/roles/ansible-role-composer/tests/test-global-require.yml new file mode 100644 index 0000000..1a14413 --- /dev/null +++ b/lemp-rhel7/roles/ansible-role-composer/tests/test-global-require.yml @@ -0,0 +1,12 @@ +--- +- hosts: localhost + remote_user: root + + vars: + php_enable_webserver: false + composer_global_packages: + - { name: phpunit/phpunit, release: "@stable" } + + roles: + - geerlingguy.php + - ansible-role-composer diff --git a/lemp-rhel7/roles/ansible-role-composer/tests/test.yml b/lemp-rhel7/roles/ansible-role-composer/tests/test.yml new file mode 100644 index 0000000..e90b820 --- /dev/null +++ b/lemp-rhel7/roles/ansible-role-composer/tests/test.yml @@ -0,0 +1,10 @@ +--- +- hosts: localhost + remote_user: root + + vars: + php_enable_webserver: false + + roles: + - geerlingguy.php + - ansible-role-composer