Merge pull request #168 from eddiejaoude/vagrant-ansible

Vagrant ansible environment setup
This commit is contained in:
Dominik Liebler
2015-08-21 08:50:21 +02:00
16 changed files with 236 additions and 0 deletions

3
.gitignore vendored
View File

@@ -4,3 +4,6 @@
/vendor/
_build/
*.mo
.vagrant/
phpunit.xml
composer.phar

View File

@@ -13,12 +13,32 @@ 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
```
Then `vagrant ssh` and `cd /vagrant`
More information on [vagrant](https://www.vagrantup.com)
### 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
```
## 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,6 @@
---
- stat: path=/etc/php5/cli/php.ini
register: phpcli
- include: php-cli.yml
when: phpcli.stat.exists

View File

@@ -0,0 +1,20 @@
---
- 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
- include: configure.yml

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,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