Skip to content

Instantly share code, notes, and snippets.

View rgpower's full-sized avatar

Rick Power rgpower

  • Halifax, NS
View GitHub Profile
@rgpower
rgpower / Semaphore.pm
Created February 15, 2021 18:10
AnyEvent Semaphore for Perl
package AnyEvent::Semaphore;
use common::sense;
use AnyEvent;
use Try::Tiny;
use Carp 'croak';
use Class::Accessor::Lite (
ro => [ qw(limit waiting) ],
);
@rgpower
rgpower / objectDigest.js
Created February 15, 2021 18:16
JSON digest for comparing parsed json payloads
goog.provide('json.digest');
goog.require('goog.array');
goog.require('goog.crypt');
goog.require('goog.crypt.Hash');
goog.require('goog.crypt.Sha1');
goog.require('goog.object');
/**
* @param {Object} item
@rgpower
rgpower / runasync.py
Created February 17, 2021 15:29
pass in a bunch of synchronous partials to get executed concurrently
"""
pass in a bunch of synchronous partials to get executed concurrently
example:
import asyncio
import functools
user_can_read = lambda res: functools.partial(
perms.can_read, some_user, some_res, some_perms,
)
is_readable = await async_gather(map(user_can_read, items)
@rgpower
rgpower / jira_release.py
Created March 1, 2021 01:23
You can use this tool to generate the list of repos, branches, and commits associated with a given Jira Project Release.
#! /usr/bin/env python3
import sys
import argparse
import json
import netrc
import textwrap
import urllib.parse
import urllib.request
import urllib.error
@rgpower
rgpower / JIra.java
Created March 4, 2021 15:00
Create Jira tickets, attach images etc, via Java
package utils.jira;
import com.google.gson.GsonBuilder;
import org.asynchttpclient.*;
import org.asynchttpclient.request.body.multipart.FilePart;
import org.asynchttpclient.uri.Uri;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.Collections;
@rgpower
rgpower / index.js
Created June 19, 2021 12:51
AWS-SDK for js exposed as a REST service
/*
* Requires Lambda Proxy Integration
*
* Example usage
*
* curl -s https://SomeGatewayID.execute-api.us-east-1.amazonaws.com/test/aws/DynamoDB.DocumentClient/default/query -X PUT -H 'X-api-key:TheKey' -d '{"TableName":"SomeTable","KeyConditionExpression":"id = :id","ExpressionAttributeValues":{":id":"SomeID"}}' -H 'Content-Type: application/json' | jq .
* curl -s https://SomeGatewayID.execute-api.us-east-1.amazonaws.com/test/aws/SimpleDB/2009-04-15/listDomains -X PUT -H 'X-api-key:TheKey' | jq .
*/
const API_KEY = '' + process.env['API_KEY']
@rgpower
rgpower / WaitForSeleniumGrid.java
Created June 29, 2021 12:06
Wait for Selenium Grid to become available
/**
* Wait for Grid to come online
* @param url to check, e.g. http://127.0.0.1:4444/wd/hub/status
* @param duration value
* @param unit of duration
*/
public static boolean waitForSeleniumGrid(String url, long duration, TemporalUnit unit) throws ExecutionException, InterruptedException {
Instant start = Instant.now();
Instant stopWaiting = start.plus(duration, unit);
final ScheduledExecutorService ses = Executors.newSingleThreadScheduledExecutor();
@rgpower
rgpower / name-values-interpolation-for-helm.yaml
Created March 18, 2022 18:52
add interpolation to env key/value pairs in values.yaml (helm)
env:
{{- if .Values.env -}}
{{- if gt (len .Values.env) 0 -}}
{{- range $k, $v := .Values.env }}
{{- if kindIs "string" $v }}
- name: {{ $k }}
value: {{ tpl ($v | toString) $ | quote }}
{{- else }}
- name: {{ $v.name }}
value: {{ tpl ($v.value | toString) $ | quote }}
@rgpower
rgpower / cloud-init-goog-mfa.yaml
Created April 23, 2022 18:36
Google Authenticator MFA for Ubuntu 22.04 LTS SSH: cloud-init
#cloud-config
locale: en_CA.UTF-8
locale_configfile: /etc/default/locale
package_update: true
package_upgrade: true
packages:
- ca-certificates
- libpam-google-authenticator
write_files:
- path: /etc/ssh/sshd_config.d/10-google-authenticator.conf
@rgpower
rgpower / nodetaints.sh
Created April 29, 2022 15:30
Clear node taints from AKS node pool
#!/usr/bin/env bash
set -euo pipefail
RG=$1
AKS=$2
POOL=$3
SUB=$(az account show -o tsv --query id)