Agile Operations with Puppet
Transcription
Agile Operations with Puppet
Agile Operations with Puppet How to ensure feedback loops at every level Peter Simon <[email protected]> Uwe Stuehler <[email protected]> Our Site Operations Team eBay company, most visited online market place for vehicles in Germany Germany's most visited classifieds market place ~900 systems, multiple data centre multiple OS 5-7 live deployments / day Kanban „DevOps“ Infrastructure Management Flow Provisioning Configuration Deployment Internal Framework Internal Tool inventory network, dns, dhcp config starts install Deployment Pipeline & Continuous Delivery Fully Automatic Installation (FAI) Solaris Jumpstart Apache ZooKeeper Before Puppet ● FAI on Debian (even OpenBSD) ● Re-installation to reflect changes, or the old for-loop $ vi fai/config/classes/DBMASTER $ for host in dbmaster46-1 dbmaster47-1; do > ssh -l root $host fai -v softupdate > done ● It's hard to write idempotent shell scripts :) ...and then came another platform Configuration management for Solaris/sparc was needed (Apache tier) ● JumpStart not even as useful as FAI ● Puppet tried, as proof-of-concept ● Got PuppetLabs private training... How we're using Puppet now: Overview Feedback Cycle #1: Edit, Compile, Run Feedback Cycle #2: Publish, Verify, Revise Feedback Cycle #3: Release, Monitor, React Edit, Compile, Run Per-User Puppet Environments ● Personal environments + /home on NFS, on all Puppet masters: ● Every admin has one, automatically [ustuehler] manifestdir=/home/ustuehler/puppet/manifests modulepath=/home/ustuehler/puppet/modules ● Puppet runs against personal environments, on any server: ● Smoke tests (in production) with –noop ● Test after editing, before commit dbmaster46-1$ sudo puppet agent -t --env=ustuehler Standard Puppet Environments ● production, testing, development – standard Puppet environments mapped to Git branches ● Cloned from Gerrit, always clean, local filesystem ● Updated via cron cd /etc/puppet/production git fetch gerrit git reset gerrit/master git clean -ffdx git reset --hard >/dev/null git submodule update --init Working with Git – Workspace Setup ● We use submodules for almost all modules $ git clone --recursive gerrit:puppet ● Workspaces are managed by Puppet define site::admin_user($home) { git::clone { “${home}/puppet”: source => 'gerrit:puppet' } } Working with Git – Custom Shell Prompt ● Top-level directory, branch, HEAD, stash-level: puppet38-1:~/puppet/modules [master 5f532b7 stash@{0}]$ ● Detached head warning: puppet38-1:~$ cd puppet/modules WARNING: Repository ~/puppet is in detached head state. puppet38-1:~/puppet/modules [475f8a8]$ Editor Support – Syntax Highlighting file { '/hello.txt': content => "Hello World" } vs. file { '/hello.txt': content => "Hello World" } vs. file { '/hello.txt: content => "Hello World" } Editor Support – Style Checks ● Stick to the Puppet Labs Style Guide ● vim hooks for puppet-lint puppet-lint https://github.com/rodjek/puppet-lint vim-puppet & co. https://github.com/rodjek/vim-puppet The whole setup: http://jedi.be/blog/2011/12/05/puppet-editing-like-a-pro/ Publish, Verify, Revise Gerrit Dashboard http://code.google.com/p/gerrit Gerrit Change Jenkins CI http://jenkins-ci.org/ https://wiki.jenkins-ci.org/display/JENKINS/Gerrit+Trigger Check Syntax & Style (puppet-lint, again) Catalog Compilation Module Smoke Tests cucumber-puppet Di sc on tin https://github.com/nistude/cucumber-puppet ue d Back to Gerrit, for a Change... The Human Element ● Review gets us valuable peer feedback ● Review keeps everyone „in the loop“ ● Encourages us to „think twice“ ● Helps us to avoid mistakes ● Helps us to write better code ● Review is (almost) mandatory Oh, and history becomes really useful... commit 1e5469515245721996c3a23071882f7db8dfe24f Author: Ingo Dyck <[email protected]> Date: Mon Sep 24 17:03:10 2012 +0200 zone_hostname and correct nameserver for integras Change-Id: I6cef82ef352a0948e48ef49e6c6e49fe540996a9 Reviewed-on: https://gerrit/gerrit/2161 Tested-by: Jenkins CI <[email protected]> Reviewed-by: Peter Simon <[email protected]> Reviewed-by: Sascha Curth <[email protected]> Reviewed-by: Ingo Dyck <[email protected]> Tested-by: Ingo Dyck <[email protected]> Release, Monitor, React Nagios Checks ● ● check_puppet_run (passive service check) ● triggered via cron ● freshness threshold: 24 hours ● applies the catalog ● reports success or failure check_puppet_config ● ● $environment == 'production' ? check_puppet_state ● Is puppet disabled locally? Recap We're hiring! All links can be found here: bit.ly/agile_ops