Skip to content

Instantly share code, notes, and snippets.

View jessedearing's full-sized avatar

Jesse Dearing jessedearing

View GitHub Profile
@jessedearing
jessedearing / g.go
Last active October 3, 2019 03:22
Simple go program to record timings for git pulls, pushes, and fetches
package main
import (
"fmt"
"os"
"os/exec"
"strconv"
"strings"
"time"
)
export ETCDCTL_API=3 ETCDCTL_CACERT=$ETCD_TRUSTED_CA_FILE ETCDCTL_CERT=$ETCD_CERT_FILE ETCDCTL_KEY=$ETCD_KEY_FILE ETCDCTL_DISCOVERY_SRV=$ETCD_DISCOVERY_SRV
#!/usr/bin/env bash
set -e
# Eval so we can set the JSON values as shell variables
eval "$(jq -r '@sh "VAULT=\(.vault) UUID=\(.uuid)"')"
# Get the token or password from the first field of the second section (this is just how I store them, but you could use jq's select
password=`op get item --vault=$VAULT $UUID | jq -r '.details.sections[1].fields[0].v'`
data "external" "something_in_one_password" {
program = ["${path.cwd}/bin/one_password.sh"]
query = {
vault = "Personal"
uuid = "abc123"
}
}
resource "aws_db_instance" "main" {
allocated_storage = 10
storage_type = "gp2"
engine = "mysql"
engine_version = "5.7"
instance_class = "db.t2.micro"
name = "main"
username = "root"
password = "${data.external.something_in_one_password.result.password}"
parameter_group_name = "default.mysql5.7"
const express = require('express')
const Webtask = require('webtask-tools')
const bodyParser = require('body-parser')
const MessagingResponse = require("twilio").twiml.MessagingResponse
const request = require('request-promise-native')
var app = express();
app.use(bodyParser.json());

Risky Business

Presenter

Jesse Dearing

Abstract

As we operate production systems they inevitably fail. As they fail and fail and fail again we as operators start to identify the way they fail and we know the causes of the failures. What if we could see the future and predict failures before they happen. We're

aws --profile invision ec2 describe-instances --filters "Name=tag:Service,Values=mongo" | jq -r '.Reservations[].Instances[] | .PrivateIpAddress + " "+ (.Tags[] | select(.Key == "Name")).Value' | v -

This is a call to the RDS API to create new instances of MySQL. One of the things I've found really helpful is that as a staticly typed language, Go gives me reliable parameter autocomplete (via https://github.com/nsf/gocode) so I can pretty easily look up parameters to the *Input and *Output structs in all editors that have the integration In my case vim-go.

Amazon's Go API has a few quriks (like the pointers for everything needing the aws.String and aws.Bool convenience functions), but once you get into it flows easily.

Since the AWS functions are all in interfaces, I can mock github.com/aws/aws-sdk-go/service/rds/rdsiface using https://github.com/maxbrunsfeld/counterfeiter and write expectations in my unit tests.

Quick Reference

Mysql

Change Master

  change master to
  MASTER_HOST='',
  MASTER_PORT=3306,
  MASTER_USER='',
  MASTER_PASSWORD='',
  MASTER_LOG_FILE='',
  MASTER_LOG_POS=