Upgrade to Pro — share decks privately, control downloads, hide ads and more …

DRIVE with Vagrant and Ansible

Erika Heidi
November 19, 2015

DRIVE with Vagrant and Ansible

As presented at php[world] 2015

Erika Heidi

November 19, 2015
Tweet

More Decks by Erika Heidi

Other Decks in Programming

Transcript

  1. DRIVE with Vagrant and Ansible @erikaheidi / PHP[world] 2015 What

    if I told you... There's a way to make your development process more consistent, while also smoothing the transition from dev to prod?
  2. DRIVE with Vagrant and Ansible @erikaheidi / PHP[world] 2015 Presenting:

    D.R.I.V.E • Disposable • Replicable • Isolated • Versioned • Environment
  3. DRIVE with Vagrant and Ansible @erikaheidi / PHP[world] 2015 Presenting:

    D.R.I.V.E • Disposable • Replicable • Isolated • Versioned • Environment
  4. DRIVE with Vagrant and Ansible @erikaheidi / PHP[world] 2015 D.R.I.V.E

    Disposable & Isolated Replicable & Versioned
  5. DRIVE with Vagrant and Ansible @erikaheidi / PHP[world] 2015 D.R.I.V.E

    Disposable & Isolated • Virtual Machines, Containers Replicable & Versioned
  6. DRIVE with Vagrant and Ansible @erikaheidi / PHP[world] 2015 D.R.I.V.E

    Disposable & Isolated • Virtual Machines, Containers – VirtualBox, VMWare, KVM, etc – Docker Replicable & Versioned
  7. DRIVE with Vagrant and Ansible @erikaheidi / PHP[world] 2015 D.R.I.V.E

    Disposable & Isolated • Virtual Machines, Containers – VirtualBox, VMWare, KVM, etc – Docker Replicable & Versioned • Configuration Management
  8. DRIVE with Vagrant and Ansible @erikaheidi / PHP[world] 2015 D.R.I.V.E

    Disposable & Isolated • Virtual Machines, Containers – VirtualBox, VMWare, KVM, etc – Docker Replicable & Versioned • Configuration Management – Ansible, Puppet, Chef, Salt, etc
  9. DRIVE with Vagrant and Ansible @erikaheidi / PHP[world] 2015 Vagrant

    • Virtual Machines + Configuration Management • Easy DRIVE for DEV • Made Conf. Management popular with developers – And we nailed it!
  10. DRIVE with Vagrant and Ansible @erikaheidi / PHP[world] 2015 Otto?

    "Otto is very young and while we tout it as a successor to Vagrant, it'll take time to reach the maturity level that Vagrant is already at. We don't recommend dropping Vagrant today, but look to Otto for the future.."
  11. DRIVE with Vagrant and Ansible @erikaheidi / PHP[world] 2015 The

    Vagrantfile Vagrant.configure("2") do |config| config.vm.box = "ubuntu/trusty64" config.vm.network "forwarded_port", guest: 80, host: 8080 config.vm.synced_folder "/vagrant", "." config.vm.provision "shell", inline: "echo hello" end
  12. DRIVE with Vagrant and Ansible @erikaheidi / PHP[world] 2015 Ansible

    • Simple and straightforward language (YAML) • Agentless Architecture • Huge collection of built-in modules • Great community, very popular on Github - 13k+ stars and almost 4k forks
  13. DRIVE with Vagrant and Ansible @erikaheidi / PHP[world] 2015 Playbook

    Example --- - hosts: all sudo: true tasks: - name: Update apt-cache apt: update_cache=yes - name: Install Nginx apt: pkg=nginx state=latest
  14. DRIVE with Vagrant and Ansible @erikaheidi / PHP[world] 2015 Playbook

    Resources • Variables • Loops • Conditionals • Templates • Ansible Vault
  15. DRIVE with Vagrant and Ansible @erikaheidi / PHP[world] 2015 Vagrantfile

    #Vagrantfile Vagrant.configure("2") do |config| config.vm.box = "ubuntu/trusty64" config.vm.network "forwarded_port", guest: 80, host: 8080 config.vm.provision "ansible" do |ansible| ansible.playbook = "demo.yml" end end
  16. DRIVE with Vagrant and Ansible @erikaheidi / PHP[world] 2015 Playbook

    --- - hosts: all sudo: true vars: packages: ["nginx", "php5-fpm"] tasks: - name: Update apt-cache apt: update_cache=yes - name: Install Packages apt: pkg={{ item }} state=latest with_items: packages - name: Change Nginx Vhost File template: src=default.tpl dest=/etc/nginx/sites-available/default notify: restart nginx handlers: - name: restart nginx service: name=nginx enabled=yes state=restarted
  17. DRIVE with Vagrant and Ansible @erikaheidi / PHP[world] 2015 1.

    Roles . ├── playbook.yml └── roles ├── init │ └── tasks │ └── main.yml └── webserver ├── handlers │ └── main.yml ├── tasks │ └── main.yml └── templates └── vhost.tpl #playbook.yml --- - hosts: all sudo: true vars: doc_root: /vagrant/web roles: - init - webserver
  18. DRIVE with Vagrant and Ansible @erikaheidi / PHP[world] 2015 2.

    Phansible . ├── ansible │ ├── inventories │ │ └── dev │ ├── playbook.yml │ ├── roles │ │ ├── app │ │ ├── mysql │ │ ├── nginx │ │ ├── php │ │ ├── server │ │ └── vagrant_local │ └── vars │ └── all.yml └── Vagrantfile
  19. DRIVE with Vagrant and Ansible @erikaheidi / PHP[world] 2015 2.

    Phansible . ├── ansible │ ├── inventories │ │ └── dev │ ├── playbook.yml │ ├── roles │ │ ├── app │ │ ├── mysql │ │ ├── nginx │ │ ├── php │ │ ├── server │ │ └── vagrant_local │ └── vars │ └── all.yml └── Vagrantfile #inventories/dev [phansible-web] 192.168.33.10
  20. DRIVE with Vagrant and Ansible @erikaheidi / PHP[world] 2015 3.

    group_vars . ├── ansible │ ├── inventories │ │ ├── dev │ │ ├── test │ │ └── prod │ ├── group_vars │ │ ├── all.yml │ │ ├── web-dev.yml │ │ ├── web-prod.yml │ │ └── web-test.yml │ ├── playbook.yml │ ├── roles │ └── windows.sh └── Vagrantfile
  21. DRIVE with Vagrant and Ansible @erikaheidi / PHP[world] 2015 3.

    group_vars . ├── ansible │ ├── inventories │ │ ├── dev │ │ ├── test │ │ └── prod │ ├── group_vars │ │ ├── all.yml │ │ ├── web-dev.yml │ │ ├── web-prod.yml │ │ └── web-test.yml │ ├── playbook.yml │ ├── roles │ └── windows.sh └── Vagrantfile #inventories/prod [web-prod] myapp.io
  22. DRIVE with Vagrant and Ansible @erikaheidi / PHP[world] 2015 3.

    group_vars . ├── ansible │ ├── inventories │ │ ├── dev │ │ ├── test │ │ └── prod │ ├── group_vars │ │ ├── all.yml │ │ ├── web-dev.yml │ │ ├── web-prod.yml │ │ └── web-test.yml │ ├── playbook.yml │ ├── roles │ └── windows.sh └── Vagrantfile #group_vars/web-prod.yml project_root: /var/www doc_root: /var/www/web sys_packages: ["vim","fail2ban"] #inventories/prod [web-prod] myapp.io
  23. DRIVE with Vagrant and Ansible @erikaheidi / PHP[world] 2015 3.

    group_vars . ├── ansible │ ├── inventories │ │ ├── dev │ │ ├── test │ │ └── prod │ ├── group_vars │ │ ├── all.yml │ │ ├── web-dev.yml │ │ ├── web-prod.yml │ │ └── web-test.yml │ ├── playbook.yml │ ├── roles │ └── windows.sh └── Vagrantfile #group_vars/web-prod.yml project_root: /var/www doc_root: /var/www/web sys_packages: ["vim","fail2ban"] #inventories/prod [web-prod] myapp.io bit.ly/multistage
  24. DRIVE with Vagrant and Ansible @erikaheidi / PHP[world] 2015 4.

    ansible-vault $ ansible-vault encrypt group_vars/web-prod.yml twitter: app_token: MYSUPERTOKEN app_secret: MYSUPERSECRET otherthing: secret_thing: SECRET secret_other: TOPSECRET $ANSIBLE_VAULT;1.1;AES256 39356166303165393330613634373636 61343834313564386262323234303063 3539656138633837 32353631303265623232306338303266 65306531633835630a36306133306539 3835356331343862 32346132653432623766366161333334 66393964396261303637313335646463 before after
  25. DRIVE with Vagrant and Ansible @erikaheidi / PHP[world] 2015 4.

    ansible-vault $ ansible-playbook (…) --ask-vault-pass $ ansible-vault view path/to/varfile.yml $ ansible-vault edit path/to/varfile.yml
  26. DRIVE with Vagrant and Ansible @erikaheidi / PHP[world] 2015 Vagrant

    Cookbook leanpub.com/vagrantcookbook/c/phpworld