vagrant & ansible scripts added inc docs in README

This commit is contained in:
Eddie Abou-Jaoude
2015-08-15 12:21:01 +01:00
parent 5df676e75c
commit 8f70b11652
18 changed files with 284 additions and 0 deletions

View File

@@ -13,12 +13,44 @@ I think the problem with patterns is that often people do know them but don't kn
You should look at and run the tests to see what happens in the example.
To do this, you should install dependencies with `Composer` first:
### [optional] Using a Virtual Machine (VM)
If you wish to use a ready made VM environment, you can easily create one with Vagrant and Ansible.
```bash
$ vagrant up
```
### Install dependencies
```bash
$ composer install
```
Read more about how to install and use `Composer` on your local machine [here](https://getcomposer.org/doc/00-intro.md#installation-linux-unix-osx).
### Running test suite
```bash
$ ./vendor/bin/phpunit
```
Output example
```bash
vagrant@design-patterns:/vagrant$ ./vendor/bin/phpunit
PHPUnit 4.6.10 by Sebastian Bergmann and contributors.
Configuration read from /vagrant/phpunit.xml
................................................................. 65 / 71 ( 91%)
......
Time: 554 ms, Memory: 5.75Mb
OK (71 tests, 128 assertions)
```
## Patterns
The patterns can be structured in roughly three different categories. Please click on the [:notebook:](http://en.wikipedia.org/wiki/Software_design_pattern) for a full explanation of the pattern on Wikipedia.

59
Vagrantfile vendored Executable file
View File

@@ -0,0 +1,59 @@
##################################################
# Generated by phansible.com
##################################################
#If your Vagrant version is lower than 1.5, you can still use this provisioning
#by commenting or removing the line below and providing the config.vm.box_url parameter,
#if it's not already defined in this Vagrantfile. Keep in mind that you won't be able
#to use the Vagrant Cloud and other newer Vagrant features.
Vagrant.require_version ">= 1.5"
# Check to determine whether we're on a windows or linux/os-x host,
# later on we use this to launch ansible in the supported way
# source: https://stackoverflow.com/questions/2108727/which-in-ruby-checking-if-program-exists-in-path-from-ruby
def which(cmd)
exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : ['']
ENV['PATH'].split(File::PATH_SEPARATOR).each do |path|
exts.each { |ext|
exe = File.join(path, "#{cmd}#{ext}")
return exe if File.executable? exe
}
end
return nil
end
Vagrant.configure("2") do |config|
config.vm.provider :virtualbox do |v|
v.name = "design-patterns"
v.customize [
"modifyvm", :id,
"--name", "design-patterns",
"--memory", 512,
"--natdnshostresolver1", "on",
"--cpus", 1,
]
end
config.vm.box = "ubuntu/trusty64"
config.vm.network :private_network, ip: "192.168.11.2"
config.ssh.forward_agent = true
#############################################################
# Ansible provisioning (you need to have ansible installed)
#############################################################
if which('ansible-playbook')
config.vm.provision "ansible" do |ansible|
ansible.playbook = "ansible/playbook.yml"
ansible.inventory_path = "ansible/inventories/dev"
ansible.limit = 'all'
end
else
config.vm.provision :shell, path: "ansible/windows.sh", args: ["default"]
end
config.vm.synced_folder "./", "/vagrant", type: "nfs"
end

2
ansible/inventories/dev Executable file
View File

@@ -0,0 +1,2 @@
[phansible-web]
192.168.11.2

11
ansible/playbook.yml Executable file
View File

@@ -0,0 +1,11 @@
---
- hosts: all
sudo: true
vars_files:
- vars/all.yml
roles:
- server
- vagrant_local
- php
- xdebug
- app

View File

@@ -0,0 +1,5 @@
---
# application tasks to be customized and to run after the main provision
- name: update file db
sudo: yes
shell: updatedb

View File

@@ -0,0 +1,3 @@
---
- name: restart php5-fpm
service: name=php5-fpm enabled=yes state=restarted

View File

@@ -0,0 +1,9 @@
---
#- stat: path=/etc/php5/fpm/php.ini
# register: phpfpm
- stat: path=/etc/php5/cli/php.ini
register: phpcli
- include: php-cli.yml
when: phpcli.stat.exists

View File

@@ -0,0 +1,25 @@
---
- name: Add ppa Repository
sudo: yes
apt_repository: repo=ppa:ondrej/{{ php.ppa }}
- name: Update apt
sudo: yes
apt: update_cache=yes
- name: Install php5
sudo: yes
apt: pkg=php5 state=latest
- name: Install PHP Packages
sudo: yes
apt: pkg={{ item }} state=latest
with_items: php.packages
when: php.packages is defined
- name: Install pear
sudo: yes
apt: pkg=php-pear state=latest
- include: configure.yml
- include: pecl.yml

View File

@@ -0,0 +1,26 @@
- name: Install
apt: pkg="php5-dev" state=present
when: php.pecl_packages is defined
- name: Install Package
shell: echo "\n\n\n\n\n\n\n\n\n" | pecl install {{ item }}
register: pecl_result
changed_when: "'already installed' not in pecl_result.stdout"
failed_when: "pecl_result.stderr or ('ERROR' in pecl_result.stdout)"
with_items: php.pecl_packages
when: php.pecl_packages is defined
- name: Create extension .ini file
template: >
src="extension.tpl"
dest="/etc/php5/mods-available/{{ item }}.ini"
owner="root"
group="root"
mode=0644
with_items: php.pecl_packages
when: php.pecl_packages is defined
- name: Enable extension
shell: php5enmod {{ item }}
with_items: php.pecl_packages
when: php.pecl_packages is defined

View File

@@ -0,0 +1,10 @@
---
- name: ensure timezone is set in cli php.ini
lineinfile: dest=/etc/php5/cli/php.ini
regexp='date.timezone ='
line='date.timezone = {{ server.timezone }}'
- name: enabling opcache cli
lineinfile: dest=/etc/php5/cli/php.ini
regexp=';opcache.enable_cli=0'
line='opcache.enable_cli=1'

View File

@@ -0,0 +1,2 @@
; Configuration for php PECL {{ item }} extension
extension={{ item }}.so

View File

@@ -0,0 +1,31 @@
---
- name: Update apt
sudo: yes
apt: update_cache=yes
- name: Install System Packages
sudo: yes
apt: pkg={{ item }} state=latest
with_items:
- curl
- wget
- python-software-properties
- name: Install Extra Packages
sudo: yes
apt: pkg={{ item }} state=latest
with_items: server.packages
when: server.packages is defined
- name: Configure the timezone
sudo: yes
template: src=timezone.tpl dest=/etc/timezone
- name: More Configure the timezone
sudo: yes
file: src=/usr/share/zoneinfo/{{server.timezone}} dest=/etc/localtime state=link force=yes backup=yes
- name: Set default system language pack
shell: locale-gen {{server.locale}}
sudo: yes

View File

@@ -0,0 +1 @@
{{server.timezone}}

View File

@@ -0,0 +1,11 @@
---
- name: Set the hostname in /etc/hostname
shell: echo {{ vagrant_local.vm.hostname }} > /etc/hostname
when: vagrant_local.vm.hostname is defined
- name: Set the hostname
shell: hostname {{ vagrant_local.vm.hostname }}
when: vagrant_local.vm.hostname is defined
- name: Update /etc/hosts
lineinfile: dest=/etc/hosts regexp='^127\.0\.0\.1' line='127.0.0.1 localhost {{ vagrant_local.vm.hostname }}' owner=root group=root mode=0644

View File

@@ -0,0 +1,7 @@
---
xdebug:
settings:
- xdebug.remote_enable=1
- xdebug.idekey=PHPSTORM
- xdebug.remote_connect_back=1
- xdebug.remote_port=9000

View File

@@ -0,0 +1,4 @@
---
- name: Install xDebug
sudo: yes
apt: pkg=php5-xdebug state=latest

15
ansible/vars/all.yml Executable file
View File

@@ -0,0 +1,15 @@
---
server:
install: '1'
packages: [vim, htop, iotop, bwm-ng]
timezone: UTC
locale: en_US.UTF-8
vagrant_local:
install: '1'
vm: { base_box: trusty64, hostname: design-patterns, ip: 192.168.11.2, sharedfolder: ./, enableWindows: '1', useVagrantCloud: '1', syncType: nfs }
php:
install: '1'
ppa: php5-5.6
packages: [php5-cli, php5-intl, php5-mcrypt, php5-mysql, php5-curl, php5-json]
xdebug:
install: '1'

31
ansible/windows.sh Executable file
View File

@@ -0,0 +1,31 @@
#!/usr/bin/env bash
# Update Repositories
sudo apt-get update
# Determine Ubuntu Version
. /etc/lsb-release
# Decide on package to install for `add-apt-repository` command
#
# USE_COMMON=1 when using a distribution over 12.04
# USE_COMMON=0 when using a distribution at 12.04 or older
USE_COMMON=$(echo "$DISTRIB_RELEASE > 12.04" | bc)
if [ "$USE_COMMON" -eq "1" ];
then
sudo apt-get install -y software-properties-common
else
sudo apt-get install -y python-software-properties
fi
# Add Ansible Repository & Install Ansible
sudo add-apt-repository -y ppa:ansible/ansible
sudo apt-get update
sudo apt-get install -y ansible
# Setup Ansible for Local Use and Run
cp /vagrant/ansible/inventories/dev /etc/ansible/hosts -f
chmod 666 /etc/ansible/hosts
cat /vagrant/ansible/files/authorized_keys >> /home/vagrant/.ssh/authorized_keys
sudo ansible-playbook /vagrant/ansible/playbook.yml -e hostname=$1 --connection=local