puppet camp dc 2014: manage heterogeneous systems with puppet (beginner)

25
Managing Heterogeneous Systems with Puppet Phil Fenstermacher [email protected]

Upload: puppet-labs

Post on 10-May-2015

348 views

Category:

Technology


0 download

DESCRIPTION

Puppet Camp DC 2014:"Manage Heterogeneous Systems with Puppet" (Beginner) by Phil Fenstermacher, The College of William & Mary

TRANSCRIPT

Page 1: Puppet Camp DC 2014: Manage Heterogeneous Systems with Puppet (Beginner)

Managing HeterogeneousSystems with Puppet

Phil [email protected]

Page 2: Puppet Camp DC 2014: Manage Heterogeneous Systems with Puppet (Beginner)

Heterogeneous?Lots of variance across what we run

VMs/BareMetalOperating SystemsBaseline ConfigurationsWhat we can reasonably manage

Page 3: Puppet Camp DC 2014: Manage Heterogeneous Systems with Puppet (Beginner)

<me>Systems/Operations EngineerCollege of William & MaryPuppeting for ~3 years

</me>

Page 4: Puppet Camp DC 2014: Manage Heterogeneous Systems with Puppet (Beginner)

You?Using Puppet?Write Modules?Higher Education?

Page 5: Puppet Camp DC 2014: Manage Heterogeneous Systems with Puppet (Beginner)

When to start listening1. Why talk about this?2. Identifying Systems3. Assigning Resources4. Keeping it Manageable5. A few extras

Page 6: Puppet Camp DC 2014: Manage Heterogeneous Systems with Puppet (Beginner)

Higher EducationIT supports our product — not a part of it

Support lots of things on campus mostly from one IT department

Multi-tennant NetworkE-MailERP SystemsHealth/Counseling Center (HIPAA)Athletics (Ticketing, eligibility, etc.)TelephonePolice (including 911)ID Card SystemsAll that academic stuff too

Page 7: Puppet Camp DC 2014: Manage Heterogeneous Systems with Puppet (Beginner)

Why talk about heterogeneity?It's not easy obvious.

But Puppet is really good at (helping you do) it

Companies getting into Puppet for heterogeneous support

Constant Contact (March 16, 2011)Dell (December 4, 2013)

Page 8: Puppet Camp DC 2014: Manage Heterogeneous Systems with Puppet (Beginner)

Puppet abstracts differencesWe don't have to figure out the apt-get vs. yum

puppet abstracts really common things

Page 9: Puppet Camp DC 2014: Manage Heterogeneous Systems with Puppet (Beginner)

Puppet can't magically handleall differenceshttpd-devel vs. apache2-dev

Page 10: Puppet Camp DC 2014: Manage Heterogeneous Systems with Puppet (Beginner)

Identifying SystemsfacterhieraEnvironmentsExternal Node Classifier (ENC)

Page 11: Puppet Camp DC 2014: Manage Heterogeneous Systems with Puppet (Beginner)

facterProvides information about system

Tells what you need to know to decide apache2 or httpd

$package = $::osfamily ? { 'Debian' => 'apache2', default => 'httpd', }

Page 12: Puppet Camp DC 2014: Manage Heterogeneous Systems with Puppet (Beginner)

hiera :hierarchy: - "%{::clientcert}" # host-00.example.com.yaml - "%{::osfamily}" # RedHat.yaml - "virtual_%{::virtual}" # virtual_vmware.yaml - "%{::custom_fact}" # cluster_01.yaml

Can merge all together

$ntp_servers = hiera_array('ntp_servers') # An array of all NTP servers, # including the special # cluster_01 servers hiera_include('classes') # Include classes merged from all levels, # global through host specific.

Or pull the first matching

$webserver = hiera('webserver') # $::osfamily says this is httpd

Page 13: Puppet Camp DC 2014: Manage Heterogeneous Systems with Puppet (Beginner)

Environments if $::environment == 'production' { # (Almost) Everything in production } elsif $::environment == 'testing' { # (Almost) Everything in testing }

Page 14: Puppet Camp DC 2014: Manage Heterogeneous Systems with Puppet (Beginner)

External Node ClassifierAssign Information Outside of Puppet

Declare ClassesAssign Global Variables*Set Environments

* Manifests still have to know what to do with this

Page 15: Puppet Camp DC 2014: Manage Heterogeneous Systems with Puppet (Beginner)

Then what?Getting from variables to resources

Page 16: Puppet Camp DC 2014: Manage Heterogeneous Systems with Puppet (Beginner)

Good Coding(Things that have bit us)

Page 17: Puppet Camp DC 2014: Manage Heterogeneous Systems with Puppet (Beginner)

Avoid Manifests ConditionalsTend to get unmanageable as manifests grow

Page 18: Puppet Camp DC 2014: Manage Heterogeneous Systems with Puppet (Beginner)

Modules don't use hiera()At least not now

Let hiera supply data to classes

hiera() inside a module isn't portable

Page 19: Puppet Camp DC 2014: Manage Heterogeneous Systems with Puppet (Beginner)

Avoid re-inventing thingsCheck the forgeIf something is established — try using itIf it doesn't quite do what you need — try forking itSend back a pull request if you can

Page 20: Puppet Camp DC 2014: Manage Heterogeneous Systems with Puppet (Beginner)

Model your modules afterothers

puppetlabs/apache and puppetlabs/ntp support a lot of OSes

Code samples of handling multiple OSes

Page 21: Puppet Camp DC 2014: Manage Heterogeneous Systems with Puppet (Beginner)

Write Versatile ModulesDon't assume your use case is the use case

Avoid giant conditional blocks

Write everything like it's going to be open sourced

Page 22: Puppet Camp DC 2014: Manage Heterogeneous Systems with Puppet (Beginner)

Write Testsspec tests seems simple – but they can prevent big errors

Especially useful for testing potential changes

Beaker tests are great for testing cross platform stuff

Page 23: Puppet Camp DC 2014: Manage Heterogeneous Systems with Puppet (Beginner)

Other Heterogeneous WinsExported Resources

mcollective filters

@@f5_node { $::fqdn: addresses => [$::ipaddress], connection_limit => 100, session_enabled_state => 'STATE_ENABLED', }

$ mco puppet runall 5 -F osfamily=Debian -C mysql::server

Page 24: Puppet Camp DC 2014: Manage Heterogeneous Systems with Puppet (Beginner)

Just SuggestionsHeterogeneity already means things are a little differentOur manifests and modules break these rulesWe also use node inheritenceNot everything can be handled by just changing some resourceparameters

package { 'puppetlabs-release': ensure => present, provider => $provider, source => $uri, }

Page 25: Puppet Camp DC 2014: Manage Heterogeneous Systems with Puppet (Beginner)

Thank YouQuestions?