Skip to content

Instantly share code, notes, and snippets.

Henrik Lindberg hlindberg

  • Puppet Inc
  • Għarb, Gozo, Malta
Block or report user

Report or block hlindberg

Hide content and notifications from this user.

Learn more about blocking users

Contact Support about this user’s behavior.

Learn more about reporting abuse

Report abuse
View GitHub Profile
hlindberg / sorthash.pp
Created Nov 25, 2019
This is an example of how to recursively sort a Hash in the puppet language using the tree_each() function
View sorthash.pp
# When you need to process a hash with keys in sorted order
# you may have found the `sort()` function - but it only
# operates on an Array.
# Most of the time what is wanted is simply achieved
# by taking the keys of a hash and sorting those and
# then iterating over the keys.
# When, however the wanted result is a new Hash
# with all keys sorted recursively then this becomes
View example.pp
$h = { 'b' => ['banana', 'bandana'], 'o' => ['orange', 'ovaltine'] }
$h2 = $ |$k, $v | { [$k,$v[0]] }
notice "h2 = ${h2}"
notice Hash($h2)
View puppet_grammar.xhtml
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ""><html xmlns="">
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
<meta name="generator" content="Railroad Diagram Generator 1.52.1729" />
<style type="text/css">
color: #FFFEF8;
background: #1E1800;
hlindberg / any2bool.rb
Created Nov 2, 2018
Example: Puppet function calling new to create a Boolean from a String
View any2bool.rb
Puppet::Functions.create_function(:any2bool) do
dispatch :any2bool do
param 'Any', :to_be_converted
def any2bool(to_be_converted)
call_function('new', Puppet::Pops::Types::PBooleanType::DEFAULT, to_be_converted)
hlindberg / functional_puppet.pp
Created Oct 5, 2018
A fun example using Deferred to write puppet code in a functional style
View functional_puppet.pp
# Resolves a given value - if given a Deferred it will be called and all other values are returned as is.
function resolve(Any $x) {
if $x =~ Deferred { $ } else { $x }
# Resolves and evaluates a condition and either resolves and evaluates the given when_true,
# or the given when_false depending on the outcome of the evaluation of the condition.
# The result is undef if the selected when_true/when_false is undefined.
hlindberg / sample_mocking_spec.rb
Last active Oct 24, 2018
An rspec sample showing some override and mocking of 4.x functions/function loading
View sample_mocking_spec.rb
require 'spec_helper'
# Example rspec_puppet function rspec test (i.e. subject is the function 'min')
# This works for other rspec subjects as well as a compiler is always involved.
# This kind of mocking can be required when it is not enough to simply override
# a function with another implementation (which can be done with a `let(:pre_condition) { 'function min($x, $y) { ... }'}`
# The main difficulty that this overcomes is the need to let the compiler initialize and
# create the context in which it will operate before making any mocks.
StringJoiner joiner = new StringJoiner(",");
for (Item item : list) {
return joiner.toString();
hlindberg /
Last active Sep 2, 2018
Stringified output
expression type example output
literal undef nil
literal default "default"
literal integer 1
literal float 3.14
literal false false
literal true true
literal string "hello"
literal regexp "/this|that.*/"
hlindberg / set_github_labels.js
Last active Jun 16, 2019
Script to run in browser dev-mode when on label edit page for a github repo
View set_github_labels.js
'name': 'bug',
'color': 'd63230',
'desc': 'Does not work (according to specification)'
'name': 'improvement',
'color': '39a9db',
'desc': 'improvement - neither bug nor new feature'
View myjoin.pp
function myjoin(Array $a, String $delimiter) {
$formats = {
Array => {
# no delimiters = '% ', and 'a' means array
format => '% a',
separator => $delimiter,
# format strings without delimiters = '%s'
string_formats => { String => '%s' }
You can’t perform that action at this time.