![Page 2: Puppet Camp DC 2014: Manage Heterogeneous Systems with Puppet (Beginner)](https://reader033.vdocuments.net/reader033/viewer/2022051211/554f3d38b4c905cd048b51df/html5/thumbnails/2.jpg)
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)](https://reader033.vdocuments.net/reader033/viewer/2022051211/554f3d38b4c905cd048b51df/html5/thumbnails/3.jpg)
<me>Systems/Operations EngineerCollege of William & MaryPuppeting for ~3 years
</me>
![Page 4: Puppet Camp DC 2014: Manage Heterogeneous Systems with Puppet (Beginner)](https://reader033.vdocuments.net/reader033/viewer/2022051211/554f3d38b4c905cd048b51df/html5/thumbnails/4.jpg)
You?Using Puppet?Write Modules?Higher Education?
![Page 5: Puppet Camp DC 2014: Manage Heterogeneous Systems with Puppet (Beginner)](https://reader033.vdocuments.net/reader033/viewer/2022051211/554f3d38b4c905cd048b51df/html5/thumbnails/5.jpg)
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)](https://reader033.vdocuments.net/reader033/viewer/2022051211/554f3d38b4c905cd048b51df/html5/thumbnails/6.jpg)
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)](https://reader033.vdocuments.net/reader033/viewer/2022051211/554f3d38b4c905cd048b51df/html5/thumbnails/7.jpg)
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)](https://reader033.vdocuments.net/reader033/viewer/2022051211/554f3d38b4c905cd048b51df/html5/thumbnails/8.jpg)
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)](https://reader033.vdocuments.net/reader033/viewer/2022051211/554f3d38b4c905cd048b51df/html5/thumbnails/9.jpg)
Puppet can't magically handleall differenceshttpd-devel vs. apache2-dev
![Page 10: Puppet Camp DC 2014: Manage Heterogeneous Systems with Puppet (Beginner)](https://reader033.vdocuments.net/reader033/viewer/2022051211/554f3d38b4c905cd048b51df/html5/thumbnails/10.jpg)
Identifying SystemsfacterhieraEnvironmentsExternal Node Classifier (ENC)
![Page 11: Puppet Camp DC 2014: Manage Heterogeneous Systems with Puppet (Beginner)](https://reader033.vdocuments.net/reader033/viewer/2022051211/554f3d38b4c905cd048b51df/html5/thumbnails/11.jpg)
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)](https://reader033.vdocuments.net/reader033/viewer/2022051211/554f3d38b4c905cd048b51df/html5/thumbnails/12.jpg)
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)](https://reader033.vdocuments.net/reader033/viewer/2022051211/554f3d38b4c905cd048b51df/html5/thumbnails/13.jpg)
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)](https://reader033.vdocuments.net/reader033/viewer/2022051211/554f3d38b4c905cd048b51df/html5/thumbnails/14.jpg)
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)](https://reader033.vdocuments.net/reader033/viewer/2022051211/554f3d38b4c905cd048b51df/html5/thumbnails/15.jpg)
Then what?Getting from variables to resources
![Page 16: Puppet Camp DC 2014: Manage Heterogeneous Systems with Puppet (Beginner)](https://reader033.vdocuments.net/reader033/viewer/2022051211/554f3d38b4c905cd048b51df/html5/thumbnails/16.jpg)
Good Coding(Things that have bit us)
![Page 17: Puppet Camp DC 2014: Manage Heterogeneous Systems with Puppet (Beginner)](https://reader033.vdocuments.net/reader033/viewer/2022051211/554f3d38b4c905cd048b51df/html5/thumbnails/17.jpg)
Avoid Manifests ConditionalsTend to get unmanageable as manifests grow
![Page 18: Puppet Camp DC 2014: Manage Heterogeneous Systems with Puppet (Beginner)](https://reader033.vdocuments.net/reader033/viewer/2022051211/554f3d38b4c905cd048b51df/html5/thumbnails/18.jpg)
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)](https://reader033.vdocuments.net/reader033/viewer/2022051211/554f3d38b4c905cd048b51df/html5/thumbnails/19.jpg)
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)](https://reader033.vdocuments.net/reader033/viewer/2022051211/554f3d38b4c905cd048b51df/html5/thumbnails/20.jpg)
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)](https://reader033.vdocuments.net/reader033/viewer/2022051211/554f3d38b4c905cd048b51df/html5/thumbnails/21.jpg)
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)](https://reader033.vdocuments.net/reader033/viewer/2022051211/554f3d38b4c905cd048b51df/html5/thumbnails/22.jpg)
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)](https://reader033.vdocuments.net/reader033/viewer/2022051211/554f3d38b4c905cd048b51df/html5/thumbnails/23.jpg)
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)](https://reader033.vdocuments.net/reader033/viewer/2022051211/554f3d38b4c905cd048b51df/html5/thumbnails/24.jpg)
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)](https://reader033.vdocuments.net/reader033/viewer/2022051211/554f3d38b4c905cd048b51df/html5/thumbnails/25.jpg)
Thank YouQuestions?