Skip to content

Instantly share code, notes, and snippets.

View hlindberg's full-sized avatar

Henrik Lindberg hlindberg

  • Bebalon Ltd
  • Għarb, Gozo, Malta
  • X @hel
View GitHub Profile
@hlindberg
hlindberg / haddock.rb
Created July 6, 2023 15:57
Ruby code to return random captain haddock curse
class Haddock
CURSES = [
"Aardvark",
"Abecedarians",
"Addle-pated lumps of anthracite",
"Anachronisms",
"Anacoluthons",
"Antediluvian bulldozer",
"Anthracite",
"Anthropithecus",
Puppet::Functions.create_function(:env_data) do
# @since 4.8.0
dispatch :env_data do
param 'Struct[{}]', :options
param 'Puppet::LookupContext', :context
end
def env_data(options, context)
ENV.to_h
end
[ 1000, 2000, 3000, "", 4000, "", 5000, 6000, "", 7000, 8000, 9000, "", 10000,
].reduce([0]) |$memo, $v| { if $v == "" { $memo << 0 } else { $memo[0,-2] << $memo[-1]+$v } }
.map() |$i,$x| { [$i,$x] }
.sort() |$a,$b| { compare($b[1], $a[1]) }
.then() |$x| { $x[0] }
.then() |$x| { "Elf ${x[0]} has ${x[1]} calories" }
.notice()
@hlindberg
hlindberg / sorthash.pp
Last active July 20, 2022 12:36
This is an example of how to recursively sort a Hash in the puppet language using the tree_each() function. Note that in versions before Puppet 6.0 the `convert_to` function does not accept the extra 'hash_tree' arg.ument.
# 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
@hlindberg
hlindberg / sample_mocking_spec.rb
Last active October 4, 2021 07:17
An rspec sample showing some override and mocking of 4.x functions/function loading
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.
#
@hlindberg
hlindberg / fizzbuzz.pp
Last active July 9, 2020 23:31
FizzBuzz in Puppet 4.1
notice Integer[0,99].map |$x| {
case [$x % 3, $x % 5] {
[0, 0] : { fizzbuzz }
[0, default] : { fizz }
[default, 0] : { buzz }
default : { $x }
}
}
Puppet::Parser::Functions.newfunction(:default_content,
:type => :rvalue,
:doc => <<-'ENDOFDOC'
Takes an optional content and an optional template name and returns the
contents of a file.
Examples:
$config_file_content = default_content($file_content, $template_location)
file { '/tmp/x':
# Puppet EBNF (kind of)
# Try with: http://www.bottlecaps.de/rr/ui
ACTOR ::= 'actor' ( '(' PARAMS ')')? ('inherits' NAME)?
'{'
(QUEUE | INBOX | ACTION | SEQUENCE | PARALLEL | FUNCTION | STATE | CONSTANT | LOCAL_TYPE)*
'}'
SEQUENCE ::= 'sequence' '{' (ACTION | SEQUENCE | PARALLEL)* '}'
PARALLEL ::= 'parallel' '{' (ACTION | SEQUENCE | PARALLEL)* '}'
# The latch function remembers what it was called with
# and returns what it was previously called with.
#
# This is using global namespace - in your code use a module namespace
#
Puppet::Functions.create_function(:latch) do
dispatch :example do
repeated_param 'Any', :arg
end
@hlindberg
hlindberg / set_github_labels.js
Last active June 16, 2019 08:27
Script to run in browser dev-mode when on label edit page for a github repo
[
{
'name': 'bug',
'color': 'd63230',
'desc': 'Does not work (according to specification)'
},
{
'name': 'improvement',
'color': '39a9db',
'desc': 'improvement - neither bug nor new feature'