Skip to content

Instantly share code, notes, and snippets.

ukayani /
Created Nov 21, 2017
Bootstrapping docker image with Docker Mirror
DOCKER_MIRROR_HOST=$(/sbin/ip route | awk '/default/ { print $3 }')
# HOSTNAME is the Docker container ID, docker initializes this variable to the container ID
# APP_PORT is the container Port
export HOST_IP=$(curl $DOCKER_MIRROR/hostip)
export HOST_PORT=$(curl $DOCKER_MIRROR/container/$HOSTNAME/port/$APP_PORT)
ukayani / build.sbt
Created Nov 21, 2017
Adding dakka image to sbt akka project
View build.sbt
dockerBaseImage := "loyaltyone/dakka:0.5"
dockerEntrypoint := "/usr/local/bin/bootstrap" +: dockerEntrypoint.value
ukayani / task-definition.json
Last active Nov 21, 2017
ECS Task Definition for deploying an Akka cluster
View task-definition.json
"TaskDefinition": {
"Type": "AWS::ECS::TaskDefinition",
"Properties": {
"ContainerDefinitions": [{
"Name": "theatre-example",
"Image": "loyaltyone/theatre-example:latest",
"PortMappings": [{
"ContainerPort": 8080,
"HostPort": 0
}, {
ukayani / service.json
Last active Nov 21, 2017
A service definition for ECS
View service.json
"Service": {
"Type": "AWS::ECS::Service",
"Properties": {
"ServiceName": "theatre-service",
"TaskDefinition": {
"Ref": "TaskDefinition"
"DesiredCount": 3,
"LoadBalancers": [
ukayani /
Last active Apr 10, 2020
SSH Tunnel example to access http server on private AWS network
// Goal: Be able to do a curl from local to server in AWS private subnet
// Host - The machine running the server in a private subnet
// Bastion - A machine which has access to the Host in the private subnet. You need to have SSH access to this machine
// Local - Your local machine
// Normally, if you SSH into your Bastion, you are able to curl the DNS/IP of the private Host machine running your server
// To be able to curl from your local machine, you'll need to set up a tunnel between your local and the bastion
// When you tunnel, you have to provide the DNS/IP of the private Host as seen from the Bastion. This will typically be a private IP
// an internal DNS name
View retry-batch-source-akka-streams
object Stage {
* A source which feeds an initial batch into a provided flow and emits when entire batch is completed while retrying
* unprocessed elements with a backoff strategy.
* The provided flow must accept a set of elements and emit a subset containing unprocessed items or an empty set if
* all elements are processed successfully
* @param flow a flow which processes sets at a time and emits corresponding sets containing unprocessed items (if any)
* @param minBackoff min time to back off when retrying unprocessed elements
ukayani / sample.sbt
Last active Oct 11, 2018
SBT Environment Variables
View sample.sbt
val mavenResolver = sys.env.get("TOKEN").map(token => Seq("repo" at s"https://repourl/maven2"))
resolvers ++= mavenResolver.getOrElse(Seq.empty[Resolver])
ukayani /
Last active Dec 4, 2018
#!/usr/bin/env bash
set -o pipefail
set -o nounset # fail on unset var usage
set -o errexit # exit on command failure
err_report() {
echo "Exited with error on line $1"
# prints errors out along with line number
ukayani /
Created Jan 8, 2019
Terraform/Terragrunt wrapper module state move
# Lets say we have all resources under state /A using module A
# We decide to wrap all the resources of the module into a inner module B
# So now all resources that were orignally top level in A are now top level in B
# Normally if we try to plan our changes, terraform will want to delete all resources originally under A and create new ones under B
# However, we may not want that (what if our resources are vpc level resources that we cant afford to delete)
# Terraform provides a state move command
# We can list all the resources in a module via `terraform state list`
# We can pipe this list to xargs and for each resource we can move it to the new prefix, ie. under inner module B.
ukayani /
Created Jan 11, 2019
kubernetes rollout status external data source
resource "local_file" "kube_config" {
content = "${var.kube_config}"
filename = "${path.module}/kubeconfig"
# Hacky way to force a dependency on some external resource (since modules dont support a depends_on)
data "template_file" "deps" {
template = "${join(",", var.depends_on)}"