Skip to content

Instantly share code, notes, and snippets.

View kaxil's full-sized avatar

Kaxil Naik kaxil

View GitHub Profile
import json
import sys
from datetime import datetime
from functools import lru_cache
import humanize
import requests
from typing import NamedTuple, Dict
import semver
@kaxil
kaxil / create_vault_secret.sh
Last active March 27, 2020 19:27
Create Hashicorp Vault Secret
vault kv put \
secret/connections/smtp_default \
conn_uri=smtps://user:host@relay.example.com:465
@kaxil
kaxil / install-ac-dev.sh
Last active March 27, 2020 19:39
Install a AC 1.10.10-dev release
# Install AC Airflow and Hashicorp dependency
pip install --extra-index-url https://pip.astronomer.io/simple/ \
'astronomer-certified>=1.10.10-1.dev140[hvac]'
@kaxil
kaxil / install_hashiorp_vault.sh
Created March 27, 2020 18:42
Install Vault on Mac using Homebrew
# Option 1. Official (run with no UI)
brew install vault
## Option 2. Vault CLI and GUI (reccomended becuase the Vault UI is a nice feature)
brew tap petems/vault
brew install petems/vault-prebuilt/vault
@kaxil
kaxil / vault_dag.py
Created March 27, 2020 18:41
Example DAG to test Airflow-Vault Integration
from airflow import DAG
from airflow.operators.python_operator import PythonOperator
from datetime import datetime
from airflow.hooks.base_hook import BaseHook
def get_secrets(**kwargs):
conn = BaseHook.get_connection(kwargs['my_conn_id'])
print(f"Password: {conn.password}, Login: {conn.login}, URI: {conn.get_uri()}, Host: {conn.host}")
@kaxil
kaxil / airflow_secrets_backend_config.py
Created March 27, 2020 18:39
Use Hashicorp Vault to retrieve connections in Airflow
export AIRFLOW__SECRETS__BACKEND="airflow.contrib.secrets.hashicorp_vault.VaultSecrets"
export AIRFLOW__SECRETS__BACKEND_KWARGS='{"url":"http://127.0.0.1:8200","token":"<YOUR-ROOT-TOKEN>","connections_path": "connections"}'
# Start Scheduler
airflow scheduler
@kaxil
kaxil / hashicorp_vault_get_secret.py
Last active March 27, 2020 19:36
Retrieve Secret from Hashicorp Vault
In [1]: import hvac
In [2]: client=hvac.Client(url="http://127.0.0.1:8200")
In [3]: client.token = "<YOUR-ROOT-TOKEN>"
In [4]: client.is_authenticated()
Out[4]: True
In [5]: client.secrets.kv.v2.read_secret_version(path="connections/smtp_default")
@kaxil
kaxil / airflow_dag.py
Created October 23, 2019 22:43
Generates an Airflow dag with 2048 tasks and 699050 dependencies between those tasks
# Author: Bas Harenslak
import datetime as dt
import airflow.utils.dates
from airflow.models import DAG
from airflow.operators.dummy_operator import DummyOperator
from airflow.utils.helpers import cross_downstream
dag = DAG(dag_id="megadag", schedule_interval=dt.timedelta(hours=4), start_date=airflow.utils.dates.days_ago(1))

Opening and closing an SSH tunnel in a shell script the smart way

I recently had the following problem:

  • From an unattended shell script (called by Jenkins), run a command-line tool that accesses the MySQL database on another host.
  • That tool doesn't know that the database is on another host, plus the MySQL port on that host is firewalled and not accessible from other machines.

We didn't want to open the MySQL port to the network, but it's possible to SSH from the Jenkins machine to the MySQL machine. So, basically you would do something like

ssh -L 3306:localhost:3306 remotehost

@kaxil
kaxil / ssh_key.tf
Created May 4, 2019 21:20 — forked from irvingpop/ssh_key.tf
Terraform external data source example - dynamic SSH key generation
# ssh key generator data source expects the below 3 inputs, and produces 3 outputs for use:
# "${data.external.ssh_key_generator.result.public_key}" (contents)
# "${data.external.ssh_key_generator.result.private_key}" (contents)
# "${data.external.ssh_key_generator.result.private_key_file}" (path)
data "external" "ssh_key_generator" {
program = ["bash", "${path.root}/../ssh_key_generator.sh"]
query = {
customer_name = "${var.customer_name}"
customer_group = "${var.customer_group}"