feat templater: Add 'pass' lookup function
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
This commit is contained in:
		
							parent
							
								
									4713d565d3
								
							
						
					
					
						commit
						2f6e008121
					
				
					 3 changed files with 40 additions and 0 deletions
				
			
		|  | @ -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: | ||||
|  |  | |||
							
								
								
									
										32
									
								
								templater/pass.go
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								templater/pass.go
									
										
									
									
									
										Normal file
									
								
							|  | @ -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 | ||||
| } | ||||
|  | @ -158,6 +158,7 @@ func templateFuncs() template.FuncMap { | |||
| 		b, _ := json.Marshal(data) | ||||
| 		return string(b) | ||||
| 	} | ||||
| 	m["passLookup"] = GetFromPass | ||||
| 
 | ||||
| 	return m | ||||
| } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue