Skip to content

Instantly share code, notes, and snippets.

diff --git a/augeas/ffi.py b/augeas/ffi.py
index 6f4b639..6d145a1 100644
--- a/augeas/ffi.py
+++ b/augeas/ffi.py
@@ -5,7 +5,8 @@ ffi.set_source("augeas",
"""
#include <augeas.h>
""",
- libraries=['augeas'])
+ libraries=['augeas'],
@lutter
lutter / ssh_authorized_key.prov
Last active March 4, 2017 22:07
Sketch of a libral provider using mruby
#! /usr/bin/env mruby
# -*- ruby -*-
class SshAuthorizedKey
AUTH_KEYS=".ssh/authorized_keys"
LENS="Authorized_keys"
# All methods that get called by the runtime get a context argument that
# provides access to convenience methods
@lutter
lutter / idempotent.rb
Created October 28, 2016 19:32
Idempotent augeas
# We want a function that makes it easier to write down how
# to make idempotent changes with augeas rather than the
# clunky mechanism the augeas Puppet type gives you today.
#
# I was thinking we could achieve this with a function like the following:
augchange(
:find => "/files/etc/hosts/*[ipaddr = '127.0.0.1']",
:create => ["ins 01 before /files/etc/hosts/*[1]",
"set /files/etc/hosts/01/ipaddr 127.0.0.1"],
:tree => {
@lutter
lutter / shell
Created June 7, 2016 21:21
Puppet augeas and ODBC inst
> puppet apply /tmp/test.pp
Notice: Compiled catalog for host.example.com in environment production in 0.04 seconds
Error: /Stage[main]/Main/Augeas[oracle odbc driver config]: Could not evaluate: Saving failed, see debug
Notice: Applied catalog in 0.02 seconds
# The debug information shows that the tree correctly has a node { "Oracle" { "Driver Logging" = "7" } }
# The failure comes from the Augeas ODBC lens which does not allow spaces in the names of the entries.
# Please file a bug at https://github.com/hercules-team/augeas/issues to make sure this gets addressed
#! /usr/bin/ruby
# To use this, untar the forge backup tarball from
# http://forge-dl-backup.s3-website-us-west-2.amazonaws.com/ somewhere and
# then run this script, passing the name of the directory where you
# unpacked the tarball.
#
# The script will print the names of the latest version of each tarball;
# you can feed that into something like 'xargs -iF tar xf DIR/F'
@lutter
lutter / TestMessages_de.properties
Last active May 26, 2016 17:16
Test resources for i18n
# test/puppetlabs/i18n/TestMessages_en.properties
msg1=Das ist deutsch
#include <locale>
#include <boost/locale.hpp>
int main() {
boost::locale::generator gen;
std::locale loc = gen("");
std::string lang = std::use_facet<boost::locale::info>(loc).language();
std::string country = std::use_facet<boost::locale::info>(loc).country();
std::cout << "Locale: " << loc.name() << std::endl;
command :unbind_node do |data|
data['name'] or error 400,
:error => "Supply 'name' to indicate which node to unbind"
if node = Razor::Data::Node.find_by_name(data['name'])
if node.policy
policy_name = node.policy.name
node.log_append(:event => :unbind, :policy => policy_name)
node.policy = nil
node.bound = false
node.save
@lutter
lutter / server-microkernel.md
Last active December 25, 2015 22:19
Some thoughts on evolving the Server/Microkernel protocol

Today

The main point of interaction between server and microkernel is the /svc/checkin/:id endpoint. It currently expects that the Microkernel peridoically posts the following JSON to that URL:

{
  "facts": { ... facts hash ... }
}
@lutter
lutter / network.xml
Created September 25, 2013 23:02
libvirt network on my laptop
<network>
<name>local</name>
<uuid>d5e4d859-721b-caf1-4842-21704dea23dd</uuid>
<forward mode='nat'/>
<bridge name='virbr2' stp='on' delay='0' />
<mac address='52:54:00:ca:8d:34'/>
<domain name='example.org'/>
<ip address='192.168.100.1' netmask='255.255.255.0'>
<tftp root='/var/lib/tftpboot' />
<dhcp>