Skip to content

Instantly share code, notes, and snippets.

@neilellis
neilellis / bash_tricks.sh
Created April 16, 2015 15:05
Some useful bash features
#!/usr/bin/env bash
set -eux
#e - error if non zero return value
#u - undefined variables trigger syntax error
#x - debug
#minus sign ADDS the flags
#plus sign REMOVES the flags
@neilellis
neilellis / JsonUtil.java
Last active August 29, 2015 14:07
Convert Main style string arguments to Json. This includes using --foo bar syntax
/*
* Copyright (c) 2014 Neil Ellis
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
$GET("/v2/webshot/:key", (http) ->
$($("params", http.params()), $("query", http.queryParams()))
.$pipe(new ParamValidator())
.$pipe(new KeyValidator())
.$void(() -> $().$error(
"Sorry your key is not recognized, maybe you need to check http://app.snapito.io/#/account",
var.ErrorType.VALIDATION))
.$pipe((v) -> {
if (v.$match("userStatus", "over_free")) {
http.status(302);
@neilellis
neilellis / FirstScript.java
Created October 6, 2014 14:05
Piping in Dollar
package com.cazcade.dollar.pipe;
import com.cazcade.dollar.Script;
import com.cazcade.dollar.var;
import java.util.Date;
/**
* @author <a href="http://uk.linkedin.com/in/neilellis">Neil Ellis</a>
*/
@neilellis
neilellis / HelloScript.java
Last active August 29, 2015 14:07
An example of the http://github.com/cazcade/dollar library in action. And yes this is all valid Java!
import com.cazcade.dollar.Script;
import com.cazcade.dollar.SecondScript;
import com.cazcade.dollar.var;
import java.util.Date;
/**
* @author <a href="http://uk.linkedin.com/in/neilellis">Neil Ellis</a>
*/
public class HelloScript extends Script {
@neilellis
neilellis / therapist.sh
Last active August 29, 2015 14:06
Gets rid of shellshock on Digital ocean + Ubuntu by running security updates in parallel - requires tugboat to be installed first.
#!/bin/bash -eu
function fixIt() {
ip=$1
if ssh -o "StrictHostKeyChecking no" root@${ip} "env X='() { (a)=>\' bash -c \"echo date\"; cat echo" | grep 2014
then
ssh -o "StrictHostKeyChecking no" root@${ip} "apt-get install -y unattended-upgrades; apt-get update; unattended-upgrades; rm echo"
else
echo $ip passed
fi
@neilellis
neilellis / obtain_subnet_address.sh
Last active August 29, 2015 14:06
Create a subnet for this host to use in zettio/weave
#!/bin/bash -eu
#apt-get install -y jq
host_ip=$1
#Check to see if we have a cached session for this machine and if it is still valid
if [ -f ~/.consul_subnet_session ] && [[ -n $(< ~/.consul_subnet_session) ]] && [[ $(curl "http://localhost:8500/v1/session/info/$(< ~/.consul_subnet_session)") != null ]]
then
session=$(< ~/.consul_subnet_session)
else

Keybase proof

I hereby claim:

  • I am neilellis on github.
  • I am neilellis (https://keybase.io/neilellis) on keybase.
  • I have a public key whose fingerprint is 0ACC 8350 1CAB 2EC3 A09A 8086 EBDD DCB1 AAAF 22CE

To claim this, I am signing this object:

function errexit() {
local err=$?
set +o xtrace
local code="${1:-1}"
echo "Error in ${BASH_SOURCE[1]}:${BASH_LINENO[0]}. '${BASH_COMMAND}' exited with status $err"
# Print out the stack trace described by $function_stack
if [ ${#FUNCNAME[@]} -gt 2 ]
then
echo "Call tree:"
for ((i=1;i<${#FUNCNAME[@]}-1;i++))
@neilellis
neilellis / do_to_cf.sh
Last active August 29, 2015 14:05
Use cfcli to sync DigitalOcean host names with Cloudflare
#!/bin/bash -eu
convert() {
while read line
do
mc=$(echo $line | cut -d' ' -f1)
if echo $mc | grep $1
then
ip=$(echo $line | cut -d':' -f2 | cut -d',' -f1)
cfcli addrecord -t A $mc $ip || cfcli editrecord -t A $mc $ip