DevOps
What is DevOps?
»DevOps is a software development method that stresses communication, collaboration and integration between software developers and IT professionals« - Wikipedia
Application Lifecycle
Develop
Deploy
Maintain
Vagrant
Puppet / Chef
Docker
Capistrano
Consul
Packer
Nagios
Why DevOps?
How does DevOps improve our process?
- Reusability
- Automation
- Faster Deploys
- Higher Quality
- Error Reduction
- Shorter Lifecycles
Vagrant
how cats use enterprise development tools for world domination
What is Vagrant?
Applications need ...
- ... their own private environment
- ... certain versions of libraries
- ... configfiles in place
- ... other circumstances
Virtual
Development Environment
The Vagrant Approach
git clone
vagrant up
Hands On
git clone https://github.com/doebi/catbook.git
How vagrant works.
base box
Vagrantfile
Provider
vagrant boxes
https://vagrantcloud.com/
$ vagrant box
vagrant box add ubuntu/trusty32
- add
- list
- outdated
- remove
- repackage
- update
Hands On
vagrant box add fhlug/trusty32
http://fhlug.at/~cd/boxes/trusty32/package.box
$ vagrant init
vagrant init ubuntu/trusty32
initialize a Vagrantfile
Hands On
vagrant init fhlug/trusty32
Vagrantfile
- config file
- ruby
- multiple machines
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "ubuntu/trusty32"
end
$ vagrant up
vagrant up
- boot a VM
- when run for the first time set up and provision according to Vagrantfile
Hands On
vagrant up
$ vagrant ssh
vagrant ssh
connect to a running VM using ssh
$ vagrant rdp
vagrant rdp
connect to a running Windows-VM using rdp
Hands On
vagrant ssh
now mess with your VM, it's desposable! ;)
just run
vagrant destroy and
vagrant up to restore a new one
Synced Folders
Benefits
- use your own IDE/Editor for development
- never loose project files in a corrupt VM
- integrate files in your usual backup strategy or git
Vagrant.configure("2") do |config|
# other config here
config.vm.synced_folder "src/", "/srv/website"
end
Hands On
edit Vagrantfile
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
...
config.vm.synced_folder "../data", "/vagrant_data"
...
end
vagrant up
Provisioning
This is where the magic happens!
Vagrant.configure("2") do |config|
# ... other configuration
config.vm.provision "file", source: "~/.gitconfig", destination: ".gitconfig"
end
config.vm.provision "shell", inline: "echo Hello, World"
config.vm.provision "shell", path: "script.sh"
config.vm.provision "shell", path: "https://example.com/provisioner.sh"
Hands On
edit Vagrantfile
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
...
config.vm.provision "shell", inline: "echo Hello, Vagrant"
...
end
vagrant provision
Provisioning
Why not use the same scripts as for deployment in production?
YOU CAN!
Provisioning
Vagrant.configure("2") do |config|
config.vm.provision "puppet" do |puppet|
puppet.manifests_path = "my_manifests"
puppet.manifest_file = "default.pp"
end
end
config.vm.provision "chef_client" do |chef|
chef.chef_server_url = "http://mychefserver.com"
chef.validation_key_path = "validation.pem"
end
config.vm.provision "docker" do |d|
d.build_image "/vagrant/app"
end
Hands On
vagrant destroy
git checkout provision
vagrant up
Vagrant.configure("2") do |config|
config.vm.network "forwarded_port", guest: 80, host: 8080
end
config.vm.network "private_network", type: "dhcp"
config.vm.network "public_network", ip: "192.168.0.17"
Networking
Hands On
edit Vagrantfile
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
...
config.vm.network "forwarded_port", guest: 80, host: 8080
...
end
vagrant reload --provision
vagrant share
sicker shit
vagrant connect
- connect to a generaly shared vagrant VM to have access to all ports
HTTP sharing
SSH sharing
General Sharing
share a VMs HTTP port on a public address
share a VMs SSH port
share any port
now go and vagrantify your projects!
Thanks
devopsreactions.tumblr.com
thecodinglove.com
securityreactions.tumblr.com
Vagrant
By doebi
Vagrant
This talk covers all basic techniques of vagrant and shows how project teams can improve their development.
- 3,709