Skip to content

Instantly share code, notes, and snippets.

View reidmv's full-sized avatar

Reid Vandewiele reidmv

View GitHub Profile
@reidmv
reidmv / 0_without_annotation.rb
Last active December 19, 2015 16:29
Hiera Custom Backend Annotated Example
class Hiera
module Backend
class File_backend
def initialize
Hiera.debug("Hiera File backend starting")
end
def lookup(key, scope, order_override, resolution_type)
answer = nil
vagrant_suppress_expected_warnings()
{
if [ "$1" = "sandbox" ]; then
{ \vagrant "$@" 2>&1 >&3 | egrep -v \
-e 'Check your GSSAPI C librar' \
-e 'WARNING: Nokogiri was built against LibXML' \
>&2
} 3>&1 | { egrep -v \
-e 'Invalid machine state: PoweredOff' \
-e 'code VBOX_E_INVALID_VM_STATE (0x80bb0002),' \
metadata :name => "Yum",
:description => "Agent to manage packages using yum",
:author => "Reid Vandewiele",
:license => "Apache 2.0",
:version => "1.0",
:timeout => 60
action "checkupdate", :description => "Checks for available yum updates" do
display :always
@reidmv
reidmv / gist:7808210
Last active December 30, 2015 09:19
Copy PE MCollective Master Certs
#!/bin/sh
# Assumptions: the new master system is called "remotehost.tld"
rsync -PHa --files-from - /etc/puppetlabs/ remotehost.tld:/etc/puppetlabs/ <<EOF
puppet/ssl/certs/pe-internal-broker.pem
puppet/ssl/certs/pe-internal-mcollective-servers.pem
puppet/ssl/certs/pe-internal-peadmin-mcollective-client.pem
puppet/ssl/certs/pe-internal-puppet-console-mcollective-client.pem
puppet/ssl/private_keys/pe-internal-broker.pem
@reidmv
reidmv / puppetdb_with_network.rb
Created December 26, 2013 18:59
Custom Facts indirector to inject extra Hiera-based fact
require 'puppet/indirector/facts/puppetdb'
require 'puppet/node/facts'
require 'hiera'
class Puppet::Node::Facts::PuppetdbWithNetwork < Puppet::Node::Facts::Puppetdb
# Here we override the normal save, injecting a custom fact
def save(args)
name = args.instance.name
facts = args.instance.values
facts.define_singleton_method(:lookupvar) do |key|
$value = '2'
if $value == '1' {
$conditional_require = 'example1'
} elsif $value == '3' {
$conditional_require = 'example3'
} else {
$conditional_require = []
}
#!/usr/bin/env ruby
forge "http://forge.puppetlabs.com"
mod "apt",
:git => "https://github.com/reidmv/puppetlabs-apt",
:ref => "0a753ae6962fb139fd0f1d374e739b1b5a504b5a"
mod "jenkins",
:git => "git://github.com/jenkinsci/puppet-jenkins.git",
@reidmv
reidmv / non-root-app.pp
Created March 3, 2014 16:39
Simple example of an "app" as it might look being managed by a non-root Puppet agent
class app (
$ensure = running,
) {
file { '/tmp/example.txt':
ensure => present,
content => "valuable words\n",
mode => '0644',
}
@reidmv
reidmv / init.pp
Last active August 29, 2015 14:00
openssh example
class openssh {
# The openssh::params class dynamically sets variables for things like the
# service name and package name, dependent on platform-specific
# considerations.
include openssh::params
package { 'openssh-server':
ensure => installed,
name => $openssh::params::package,
@reidmv
reidmv / transition_fragment.rb
Created November 11, 2014 00:11
autobefore in Puppet
# This type needs to implement an "autobefore" kind of behavior. Currently
# the Puppet type system only supports autorequire, so we achieve autobefore
# by hijacking autorequire.
def autorequire(rel_catalog = nil)
reqs = super
[ @parameters[:prior_to].value,
@parameters[:resource].value
].flatten.each do |rel|
reqs << Puppet::Relationship::new(self, catalog.resource(rel.to_s))