Skip to content
This repository has been archived by the owner on Dec 21, 2019. It is now read-only.

Commit

Permalink
feat templater: Add 'pass' lookup function
Browse files Browse the repository at this point in the history
This introduces support for looking up secret values in the 'pass' command line
tool (https://www.passwordstore.org/).

Values like passwords can be interpolated from pass and even more complex
structures like certificates for Kubernetes Secrets can be retrieved and base64-
encoded as necessary.

Fixes #2
  • Loading branch information
tazjin committed Feb 9, 2017
1 parent 4713d56 commit 2f6e008
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 0 deletions.
7 changes: 7 additions & 0 deletions example/some-api/some-api.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,11 @@
---
apiVersion: v1
kind: Secret
metadata:
name: secret-certificate
data:
cert.pem: {{ passLookup "my/secret/certificate" | b64enc }}
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
Expand Down
32 changes: 32 additions & 0 deletions templater/pass.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
// This file contains the implementation of a template function for retrieving variables from 'pass', the standard UNIX
// password manager.
package templater

import (
"fmt"
"os"
"os/exec"

"github.com/polydawn/meep"
)

type PassError struct {
meep.TraitAutodescribing
meep.TraitCausable
Output string
}

func GetFromPass(key string) (string, error) {
fmt.Fprintf(os.Stderr, "Attempting to look up %s in pass\n", key)
pass := exec.Command("pass", "show", key)

output, err := pass.CombinedOutput()
if err != nil {
return "", meep.New(
&PassError{Output: string(output)},
meep.Cause(err),
)
}

return string(output), nil
}
1 change: 1 addition & 0 deletions templater/templater.go
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,7 @@ func templateFuncs() template.FuncMap {
b, _ := json.Marshal(data)
return string(b)
}
m["passLookup"] = GetFromPass

return m
}
Expand Down

0 comments on commit 2f6e008

Please sign in to comment.