Support client certs when accessing remote repos (#47)
This is important for deployments where the chart repo is protected by client cert validation.
helmfile.yaml is extended to support `certFile` and `keyFile`:
```
 repositories:
   - name: roboll
     url: http://roboll.io/charts
    certFile: optional_client_cert
    keyFile: optional_client_key
```
Everything works the same if you don't provide values for them.
Regarding the implementation, the "helm repo add" command already supports the cert-file and key-file values, so we just have to pass them through.
			
			
This commit is contained in:
		
							parent
							
								
									e4961a8c34
								
							
						
					
					
						commit
						1ad426b338
					
				|  | @ -20,6 +20,8 @@ The default helmfile is `helmfile.yaml`: | |||
| repositories: | ||||
|   - name: roboll | ||||
|     url: http://roboll.io/charts | ||||
|     certFile: optional_client_cert | ||||
|     keyFile: optional_client_key | ||||
| 
 | ||||
| context: kube-context					 # kube-context (--kube-context) | ||||
| 
 | ||||
|  |  | |||
|  | @ -30,8 +30,13 @@ func (helm *execer) SetExtraArgs(args ...string) { | |||
| 	helm.extra = args | ||||
| } | ||||
| 
 | ||||
| func (helm *execer) AddRepo(name, repository string) error { | ||||
| 	out, err := helm.exec("repo", "add", name, repository) | ||||
| func (helm *execer) AddRepo(name, repository, certfile, keyfile string) error { | ||||
| 	var args []string | ||||
| 	args = append(args, "repo", "add", name, repository) | ||||
| 	if certfile != "" && keyfile != "" { | ||||
| 		args = append(args, "--cert-file", certfile, "--key-file", keyfile) | ||||
| 	} | ||||
| 	out, err := helm.exec(args...) | ||||
| 	if helm.writer != nil { | ||||
| 		helm.writer.Write(out) | ||||
| 	} | ||||
|  |  | |||
|  | @ -3,7 +3,7 @@ package helmexec | |||
| type Interface interface { | ||||
| 	SetExtraArgs(args ...string) | ||||
| 
 | ||||
| 	AddRepo(name, repository string) error | ||||
| 	AddRepo(name, repository, certfile, keyfile string) error | ||||
| 	UpdateRepo() error | ||||
| 
 | ||||
| 	SyncRelease(name, chart string, flags ...string) error | ||||
|  |  | |||
|  | @ -31,6 +31,8 @@ type HelmState struct { | |||
| type RepositorySpec struct { | ||||
| 	Name     string `yaml:"name"` | ||||
| 	URL      string `yaml:"url"` | ||||
| 	CertFile string `yaml:"certFile"` | ||||
| 	KeyFile  string `yaml:"keyFile"` | ||||
| } | ||||
| 
 | ||||
| type ReleaseSpec struct { | ||||
|  | @ -127,7 +129,7 @@ func (state *HelmState) SyncRepos(helm helmexec.Interface) []error { | |||
| 	errs := []error{} | ||||
| 
 | ||||
| 	for _, repo := range state.Repositories { | ||||
| 		if err := helm.AddRepo(repo.Name, repo.URL); err != nil { | ||||
| 		if err := helm.AddRepo(repo.Name, repo.URL, repo.CertFile, repo.KeyFile); err != nil { | ||||
| 			errs = append(errs, err) | ||||
| 		} | ||||
| 	} | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue