Provisioning of a Symfony project
with Ansible
Symfony2 in London 29/10/14
Maxime Thoonsen
Symfony2
NodeJs
AngularJs
Ansible
![](https://s3.amazonaws.com/media-p.slid.es/uploads/maximethoonsen/images/758106/portrait.jpg)
Maxime Thoonsen
Dev @Theodo
![](https://s3.amazonaws.com/media-p.slid.es/uploads/maximethoonsen/images/758464/DevOpsDays.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/maximethoonsen/images/758622/house-of-cards-but-why.gif)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/maximethoonsen/images/758465/arton1856.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/maximethoonsen/images/758469/WallOfConfusion.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/maximethoonsen/images/758477/sol-agile-subpg.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/maximethoonsen/images/758482/spidey-devops.jpg)
WHAT ABOUT YOU?
![](https://s3.amazonaws.com/media-p.slid.es/uploads/maximethoonsen/images/758498/Vagrant.png)
PROD
PREPROD
STAGING
LOCAL
![](https://s3.amazonaws.com/media-p.slid.es/uploads/maximethoonsen/images/758525/Vagrant.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/maximethoonsen/images/758552/rackspace_logo_2.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/maximethoonsen/images/758552/rackspace_logo_2.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/maximethoonsen/images/758552/rackspace_logo_2.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/maximethoonsen/images/758576/ubuntu400x400.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/maximethoonsen/images/758576/ubuntu400x400.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/maximethoonsen/images/758576/ubuntu400x400.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/maximethoonsen/images/758576/ubuntu400x400.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/maximethoonsen/images/758592/sf.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/maximethoonsen/images/758592/sf.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/maximethoonsen/images/758592/sf.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/maximethoonsen/images/758592/sf.jpg)
PROD + PREPROD + STAGING + N DEV =
![](https://s3.amazonaws.com/media-p.slid.es/uploads/maximethoonsen/images/758764/machines.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/maximethoonsen/images/758773/server-meme4.png)
WHAT IS ANSIBLE?
Ansible is an automation tool
WHY ANSIBLE?
Ansible is simple
A little more about Ansible
- Use of SSH
- Written in Python
- No agent needed on the server
- YAML configuration
- Jinja2 templating (like Twig)
Many modules
- Command : command, script, shell
- Database : mongodb, mysql, postgresql, redis, riak
- Source Control : git, github_hooks
- System : authorized_key, cron, hostname, ping, user
- Utilities : assert, debug, fail, include_vars, pause
- ...
Provisioning with Ansible
- Tasks
- Roles
- Playbook
- Vagrant
Ansible task
![](https://s3.amazonaws.com/media-p.slid.es/uploads/maximethoonsen/images/769229/bigtask.png)
- Module
- Variable
- List
- Template
- Condition
- Handler
Ansible templates
![](https://s3.amazonaws.com/media-p.slid.es/uploads/maximethoonsen/images/771602/ansible-template.png)
Ansible variables
![](https://s3.amazonaws.com/media-p.slid.es/uploads/maximethoonsen/images/771625/ansible-vars.png)
Ansible handlers
![](https://s3.amazonaws.com/media-p.slid.es/uploads/maximethoonsen/images/771649/ansible-handler.png)
Let's see a role
Let's have a look at a playbook:
![](https://s3.amazonaws.com/media-p.slid.es/uploads/maximethoonsen/images/772093/Vagrant.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/maximethoonsen/images/772102/ansible.png)
Vagrantfile
# Ansible
config.vm.provision "ansible" do |ansible|
ansible.sudo = true
ansible.playbook = "provision/playbook.yml"
ansible.limit = "vagrant" # hosts group
ansible.inventory_path = "provision/hosts/vagrant"
ansible.verbose = "v" #Use vvvv to get more log
end
Vagrant tasks
![](https://s3.amazonaws.com/media-p.slid.es/uploads/maximethoonsen/images/772056/vagrant-task.png)
Vagrant provisioning
![](https://s3.amazonaws.com/media-p.slid.es/uploads/maximethoonsen/images/772081/vagrant-playbook.png)
Start a new project
- Choose the roles
- Define your variables
- Update the templates
- Define your inventories
Ansible Galaxy
- Role sharing
- Role evaluation
- Versioning
- CLI Download
ansible-galaxy install kosssi.composer,v1.0.3
![](https://s3.amazonaws.com/media-p.slid.es/uploads/simonconstans/images/627918/ansible-galaxy-screenshot.png)
Search roles
Search roles
The list of our favorites roles
My symfony playbook
Roles installation
- WEB server : kosssi.apache
- Database : ANXS.mysql
- PHP : kosssi.php
- Composer : kosssi.composer
ansible-galaxy install -i kosssi.apache,v1.0.1 --force
ansible-galaxy install -i ANXS.mysql,v1.0.2 --force
ansible-galaxy install -i kosssi.php,v1.0.0 --force
ansible-galaxy install -i kosssi.composer,v1.0.3 --force
Write inventories
[vagrant]
symfony.dev
[webservers:children]
vagrant
[dbservers:children]
vagrant
[prod]
symfony.prod
[webservers:children]
prod
[dbservers:children]
prod
/provision/hosts/vagrant :
/provision/hosts/prod :
Write the playbook
- name: Provision website
hosts: webservers
sudo: yes
vars_files:
- vars/php.yml
- vars/apache.yml
roles:
- { role: kosssi.php, tags: php }
- { role: kosssi.composer, tags: composer }
- { role: kosssi.apache, tags: apache }
- { role: www-data, tags: www-data }
![](https://s3.amazonaws.com/media-p.slid.es/uploads/maximethoonsen/images/772650/CapistranoLogo.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/maximethoonsen/images/772656/firstplace.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/maximethoonsen/images/772661/okmeme.jpeg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/maximethoonsen/images/772663/ansible.png)
Deployement
Feedback
-
Many devs like Ansible !
-
Few sysadmins appreciate it
-
Now I love Devops !
-
Ansible is easy to learn
Special thanks to
![](https://s3.amazonaws.com/media-p.slid.es/uploads/maximethoonsen/images/772527/simon.jpg)
Follow him !
![](https://s3.amazonaws.com/media-p.slid.es/uploads/maximethoonsen/images/772553/escroman.jpg)
Nico
(Don't follow him...)
Question ?
![](https://s3.amazonaws.com/media-p.slid.es/uploads/maximethoonsen/images/772606/questions.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/maximethoonsen/images/772619/thanks.gif)
Ansible provisioning for Symfony2 project
By Maxime Thoonsen
Ansible provisioning for Symfony2 project
- 4,506