Skip to content

Instantly share code, notes, and snippets.

View mpasternacki's full-sized avatar

Maciej Pasternacki mpasternacki

View GitHub Profile
@mpasternacki
mpasternacki / perl_module_build.rb
Created December 29, 2011 21:59
Opscode Chef definition to upgrade Module::Build using perl cookbook's cpan_install script
# Example usage:
# perl_module_build "0.3601"
define :perl_module_build do
execute "/usr/local/bin/cpan_install Module::Build" do
cwd "/root"
path [ "/usr/local/bin", "/usr/bin", "/bin" ]
not_if { `perl -mModule::Build -e 'print $Module::Build::VERSION'`.to_f >= params[:name].to_f }
end
end
@mpasternacki
mpasternacki / rename-node.rb
Created March 1, 2012 19:17
A knife exec script to change Chef node's name.
#!./bin/knife exec
# A knife exec script to change chef node's name, preserving all the attributes.
#
# Usage: knife exec rename-node.rb old-name new-name
#
# Script retrieves the Node object, changes its 'name' attribute,
# creates new Node object with updated name and rest of attributes
# untouched. Then it deletes old Node and Client objects from
# database, and logs into the server to update it:
@mpasternacki
mpasternacki / google-multilogin.scpt
Created April 28, 2012 23:40
AppleScript to consistently log into multiple Google Apps account in Safari
on js(jscpt)
set jscpt to "(function _l () {" & jscpt & "}());"
tell application "Safari" to do JavaScript jscpt in document 1
end js
on log_into_google(method, username, password)
tell application "Safari" to set URL of document 1 to "https://accounts.google.com/" & method
delay 2
js("var f = document.getElementById('gaia_loginform');
f.Email.value = '" & username & "';
@mpasternacki
mpasternacki / 00-packages_builder.rb
Created May 29, 2012 09:44
Debian packaging continuous integration
# Chef resources describing how to set up package repository server,
# simplified fromactual cookbook (not open sourced yet). Sets up apt
# repository in /srv/apt directory, with system user "apt-repo". Packages
# are GPG-signed to prevent apt-get from complaining on every install.
#
# Directory /srv/apt should be reachable to clients via http or other
# means. This is left as an exercise for the reader.
#
# For extra explanations, see:
# http://joseph.ruscio.org/blog/2010/08/19/setting-up-an-apt-repository/
@mpasternacki
mpasternacki / override_print.py
Created June 8, 2012 17:24
Track down Python print statements that clutter your output.
# Trace 'print' statement calls cluttering your test suite output.
#
# It is not that simple to track 'print' statement in Python 2.x - it
# cannot be monkey-patched itself, because it's not a function. So we
# override sys.stdout and check the backtrace when stdout is written
# to.
#
# The overload happens only if TRACE_PRINT environment variable is
# set. By default, only the offending file name and line number is
# printed; if TRACE_PRINT environment variable is set to 'traceback',
@mpasternacki
mpasternacki / README.md
Last active January 18, 2018 10:56
A Continuous Packaging Pipeline: The Materials

A Continuous Packaging Pipeline

A list of tools mentioned in my Ignite talk from Devopsdays Rome 2012 on a continuous packaging pipeline, with links and short description for each tool.

The talk slides are at https://speakerdeck.com/mpasternacki/a-continuous-packaging-pipeline; a longer blog post will be written soon.

Vendorificator

Available at https://github.com/3ofcoins/vendorificator/ or with gem install vendorificator

Include third party modules in your git repo, using pristine branches to sanely maintain local changes, upgrades, and merges.

@mpasternacki
mpasternacki / soup_download.rb
Last active December 15, 2015 09:39
Download lolcats from your soup.io while it's up! Needs Ruby (used with MRI - "the regular ruby" - 1.9.3, should work with 1.9.2 or 2.0.0; 1.8.7 is a "maybe") and the Nokogiri gem (http://nokogiri.org).
require 'fileutils'
require 'open-uri'
require 'yaml'
require 'rubygems'
require 'nokogiri'
FileUtils.mkdir_p 'items'
feed = Nokogiri::XML(File.open('3fc1319c496ea1aacde451cecbdc17e3.rss'))
@mpasternacki
mpasternacki / runner.pl
Last active December 16, 2015 03:39
A runner script to run any command and save its stdout and stderr in a timestamped log file, ready to be harvested by Logstash. Adds JSON metadata, and optionally locks the command, ensuring it doesn't run in multiple copies at the same time.
#!/usr/bin/env perl -w
#
# DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
# Version 2, December 2004
#
# Copyright (C) 2013 Maciej Pasternacki <maciej@pasternacki.net>
#
# Everyone is permitted to copy and distribute verbatim or modified
# copies of this license document, and changing it is allowed as long
# as the name is changed.
@mpasternacki
mpasternacki / bundle-activate.sh
Created May 28, 2013 10:11
Script to activate Ruby Gem Bundler environment in current shell session.
#!/bin/sh
#
# This script activates a Gem Bundler environment in current shell
# session. This lets you type commands without `bundle exec` all the
# time, even if you leave the project's directory, and without complex
# magic that runs with every command.
#
# Usage: save this file somewhere. Use following command to activate
# current directory's bundle in current shell session:
#
#!/usr/bin/env python
import json
import sys
def pp(vv, prefix='$'):
if isinstance(vv, (list,tuple)):
for i, v in enumerate(vv):
pp(v, "{0}[{1}]".format(prefix, i))
elif isinstance(vv, dict):