devops introduction @cegeka
DESCRIPTION
A DevOps introduction at Cegeka.TRANSCRIPT
devopsan introduction
Patrick Debois
Monday 14 February 2011
My Background• Independent consultant
• Have worked in different roles
• Agile and Infrastructure
• Just Enough Developed Infrastructure - http://jedi.be
• Started organizing devopsdays
• Recently joined Cutter Consortium
Monday 14 February 2011
Background check?
analysts
developer
operations
testers
network
storage
database
security
middleware
sales
manager
hr people
Monday 14 February 2011
Theproblem
DEV OPS
Theproblem
Monday 14 February 2011
Agile already did a great job
Monday 14 February 2011
But they forgot some people
Monday 14 February 2011
Monday 14 February 2011
Traditional CI Overview
http://www.javaworld.com/javaworld/jw-12-2008/images/CIOverview.jpgMonday 14 February 2011
Continuous Integration Maturity Model
http://www.anthillpro.com/blogs/anthillpro-blog/2009/05/05/1241542860000.htmlMonday 14 February 2011
The only way to measure progress
is “Working software”
Monday 14 February 2011
The only way to measure progress
is “Working software”
In production
Monday 14 February 2011
Monday 14 February 2011
Business ValueOrdered by
the value gainedOrdered by the value
protected
Increase Change Avoid Change
Monday 14 February 2011
IT Tooling is changing
Monday 14 February 2011
Virtualization
• kvm
• xen
• solaris zones
• vmware
• virtualbox
• ...
Monday 14 February 2011
Cloud showed us how to scale
Monday 14 February 2011
Abstraction API
http://www.jclouds.org/
Adrian Cole@jclouds
http://libvirt.org/
Monday 14 February 2011
Platform as a Service
Monday 14 February 2011
Hudson as Service
http://www.cloudbees.com/
Monday 14 February 2011
But who will manage
your IAASplatform?
Monday 14 February 2011
First steps of Automation
https://fedorahosted.org/cobbler/
http://spacewalk.redhat.com/
http://fai-project.org/
Monday 14 February 2011
Cloning
Monday 14 February 2011
Virtual Sprawl
Monday 14 February 2011
Configuration Management
Chef
Pallet
http://www.cfengine.org/
http://www.puppetlabs.com
http://www.opscode.com/chef
https://github.com/hugoduncan/pallet
Monday 14 February 2011
# tomcat.pp
class tomcat {
! package {! ! "java-1.6.0-sun-compat":! ! ! ensure => "installed";! ! "tomcat6":! ! ! require => [Package["java-1.6.0-sun-compat"], Package["ntc-tomcat-log4j"]],! ! ! ensure => "installed";! ! "tomcat6-admin-webapps":! ! ! ensure => "installed";! ! "log4j":! ! ! ensure => "installed";! ! "tanukiwrapper":! ! ! ensure => "installed";! ! "mysql-connector-java":! ! ! ensure => "installed";! }
! file {! ! "/etc/init.d/tomcat6": mode => "0755", owner => "root", group => "root", source => "puppet:///tomcat/tomcat6.init"; }
! user {! ! "tomcat":! ! ! ensure => "present",! ! ! require => Package["tomcat6"];! }}!
tomcat",! ! ! mode => "0755",! ! ! require => Package['tomcat6'],! ! ! content => template("headers/header-xml.erb","tomcat/tomcat6-init.erb");! ! "/etc/init.d/build-jar-repo":! ! ! owner => "tomcat", group => "tomcat", mode => "0755",! ! ! require => Package['tomcat6'], source => "puppet:///tomcat/build-jar-repo";! ! "/var/log/tomcat6/$name":! ! ! owner => "tomcat",! ! ! group => "tomcat",! ! ! mode => "0755",! ! ! require => Package['tomcat6'],! ! ! ensure => "directory";! ! "/var/cache/tomcat6/temp/$name": owner => "root", group => "root", mode => "0755",! ! ! require => Package['tomcat6'], ensure => "directory";! ! "/var/cache/tomcat6/work/$name": owner => "root", group => "root", mode => "0755",! ! ! require => Package['tomcat6'], ensure => "directory";! ! "/usr/local/tomcat6-$name/temp":! ! ! ensure => "link", require => File["/var/cache/tomcat6/temp/$name"], target => "/var/cache/tomcat6/temp/$name";! ! "/usr/local/tomcat6-$name/work":! ! ! ensure => "link", require => File["/var/cache/tomcat6/work/$name"], target => "/var/cache/tomcat6/work/$name";! ! "/usr/local/tomcat6-$name/work/Catalina": owner => "tomcat", group => "tomcat", ensure => "directory", require => File["/usr/local/tomcat6-$name/work"]; "/usr/local/tomcat6-$name/work/Catalina/localhost": owner => "tomcat", group => "tomcat", ensure => "directory", require => File["/usr/local/tomcat6-$name/work/Catalina"]; "/usr/local/tomcat6-$name/work/Catalina/localhost/manager": owner => "tomcat", group => "tomcat", ensure => "directory", require => File["/usr/local/tomcat6-$name/work/Catalina/localhost"];! }
! service { "tomcat6-$name": enable => "false", require => [Package['tomcat6'], Package['tanukiwrapper']];! ! "build-jar-repo":! ! ! enable => "true",! ! ! start => "/etc/init.d/build-jar-repo", require => File["/etc/init.d/build-jar-repo"]];! }!
Infrastructure as code
Monday 14 February 2011
Model Driven Infrastructure
Monday 14 February 2011
https://github.com/lusis/vogeler
John E. Vincent@lusis
Definitionof your
infrastructure
Monday 14 February 2011
Version Control
Monday 14 February 2011
Reusable components
https://github.com/camptocamp
Monday 14 February 2011
Code/Server SmellsPrivate Playground
The sysadmin uses the system as his toy playground, doesn't clean up.
• /tmp & /var/tmp full of old install files• / full of files
Gready Server
One server that does every function
• combined mail and web and dns and fileshares
• all users on the same systemRoot is the cause of all evil
• last show login all root• no sudo is activated• no sshd keys for logins• nfs share/root?• Chmod 777• most processes run as root
Monday 14 February 2011
Sharing Recipes/Code
http://forge.puppetlabs.com/
http://cookbooks.opscode.com/
Monday 14 February 2011
CI for systems
Monday 14 February 2011
CI for systems (2)
Monday 14 February 2011
Pipelines concept
Monday 14 February 2011
Automation without tests is
Monday 14 February 2011
Lindsay Holmwood @auxesis
Feature: google.com It should be up And I should be able to search for things
Scenario: Searching for things When I visit "http://www.google.com" And I fill in "q" with "wikipedia" And I press "Google Search" Then I should see "www.wikipedia.org"
$ cucumber-nagios google.featureCritical: 0, Warning: 0, 4 okay | passed=4, failed=0
cucumber-nagios
Monday 14 February 2011
Lindsay Holmwood @auxesis
Scenario: Checking /etc/passwd When I ssh to "example.org" with the following credentials: | username | password | keyfile | | jacob | spifeofstrife | /home/jacob/.ssh/id_dsa | And I run "cat /etc/passwd" Then I should see "jacob" in the output
cucumber-ssh
Monday 14 February 2011
Julian Simpson@builddoctor
apache.featureFeature: In order to deploy my application As a systems administrator I want to know that the config files are legal
Scenario: Valid Apache config Given a config file template apache2.conf in etc/apache2 When I generate it Then there should be a file called apache2.conf in etc/apache2 And it should be valid
cucumber-apache
http://pastie.org/693713
Monday 14 February 2011
Feature: cucumber-puppet In order to run my puppet manifest's test suite As an admin I want the cucumber-puppet gem installed
Scenario: Install cucumber-puppet Given a node of class "cucumber-puppet" When I compile the catalog Then gem "cucumber-puppet" should be "installed"
https://github.com/nistude/cucumber-puppet
cucumber-puppet
Nikolay Sturm@nistude
Monday 14 February 2011
Birth, Adoption
Life
Retired
Death
The life of a System
Monday 14 February 2011
Veewee
Allows an easy way to build your own basebox
Patrick Debois@patrickdebois
https://github.com/jedi4ever/veewee
Monday 14 February 2011
• gem install veewee
• vagrant basebox define ‘ubuntu-64’ mybox
• preseed.cfg + postinstall.sh
• vagrant basebox build mybox
• vagrant export mybox
Veewee usage
Monday 14 February 2011
Vagrant
http://vagrantup.com/
Allows an easy way to use the production recipes in your own dev environment
Mitchell Hashimoto@mitchellh
Monday 14 February 2011
• vagrant add mybox.box (adds the box)
• vagrant init myapp (starts a project)
• vagrant up (startup a box)
• vagrant ssh (logs into the box)
• vagrant provision (runs recipes)
Vagrant usage
Monday 14 February 2011
• ProjectX (git repo)
• Vagrantfile
• [manifests] (git submodule)
• tomcat ...
• ubuntu ..• [src] (git submodule)
• [definitions]
• preseed.cfg
Sample Project
Monday 14 February 2011
Global Ownership
It’s the javascript
It’s the backend
It’s the database
It’s the network
It’s the server
It’s the storage
Monday 14 February 2011
IAAS and PAAS blurring
Pull in both your recipes and your code
Monday 14 February 2011
What’s new?
I know all that
Monday 14 February 2011
The map is not
the territoryAlfred Korzybski
Monday 14 February 2011
Systems Thinking
Optimize the whole not just the individual parts
Monday 14 February 2011
Value Stream Mapping
Monday 14 February 2011
People make it happen
Monday 14 February 2011
Culture & Mindset
Monday 14 February 2011
Collaboration
TestersAnalysts
Developers
Security
ArchitectsUI Designers
Network
Sysadmins
not only when things go wrong
Monday 14 February 2011
No rock star mentality
Mine are bigger then yours
Monday 14 February 2011
Craftsmanship
Monday 14 February 2011
Trust
Monday 14 February 2011
Collaboration
TestersAnalysts
Developers
Security
ArchitectsUI Designers
Network
Sysadmins
not only when things go wrong
Monday 14 February 2011
http://voetstappen.blogspot.com/
Starting a devops culture =
restoring trust
Monday 14 February 2011
Interesting Books
Monday 14 February 2011
Want to know more?
#devops & #infratalkon twitter & irc
http://devopsdays.orghttp://devopscafe.org
http://planetdevops.netdevops googlegroup
devops-toolchain googlegroup
Monday 14 February 2011
Questions?
Monday 14 February 2011
The End
Monday 14 February 2011