Skip to content

Instantly share code, notes, and snippets.

@mnacharov
Last active October 30, 2023 12:14
Show Gist options
  • Save mnacharov/66db78c5da4af78188f731cb6561a75e to your computer and use it in GitHub Desktop.
Save mnacharov/66db78c5da4af78188f731cb6561a75e to your computer and use it in GitHub Desktop.
airflow: import variables&connections to Hashicorp Vault Secrets Backend
package main
import (
"encoding/json"
"fmt"
"log"
"os"
"os/exec"
"strings"
)
func jsonFileToMap(jsonFile string) (map[string]json.RawMessage, error) {
result := make(map[string]json.RawMessage)
variables, err := os.ReadFile(jsonFile)
if err != nil {
return result, err
}
err = json.Unmarshal([]byte(variables), &result)
return result, err
}
func importVariables() {
variables, err := jsonFileToMap(os.Args[2])
if err != nil {
log.Fatalf("error: %s", err)
}
prefix := os.Args[3]
for key, value := range variables {
log.Println(key)
valueMarshal, err := json.Marshal(&value)
if err != nil {
log.Fatalf("error: %s", err)
}
cmd := exec.Command("vault", "kv", "put",
fmt.Sprintf("%s/%s", prefix, key),
fmt.Sprintf("value=%s", strings.Trim(string(valueMarshal), "\"")))
vault, err := cmd.CombinedOutput()
log.Println(string(vault), err)
}
}
func jsonFileToConnections(jsonFile string) (map[string]json.RawMessage, error) {
result := make(map[string]json.RawMessage)
connections, err := os.ReadFile(jsonFile)
if err != nil {
return result, err
}
err = json.Unmarshal([]byte(connections), &result)
return result, err
}
func importConnections() {
connections, err := jsonFileToConnections(os.Args[2])
if err != nil {
log.Fatalf("error: %s", err)
}
prefix := os.Args[3]
for key, value := range connections {
log.Println(key)
valueString, err := json.Marshal(value)
if err != nil {
log.Fatalf("error: %s", err)
}
if err := os.WriteFile("data.json", valueString, 0600); err != nil {
log.Fatal(err)
}
cmd := exec.Command("vault", "kv", "put",
fmt.Sprintf("%s/%s", prefix, key), "@data.json",
)
vault, err := cmd.CombinedOutput()
if err != nil {
log.Fatalf("error: %s", err)
}
log.Println(string(vault))
}
}
func main() {
secretsType := os.Args[1]
if secretsType == "variables" {
importVariables()
} else if secretsType == "connections" {
importConnections()
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment