Update Vault issuer

This commit is contained in:
James Munnelly 2018-08-06 17:02:20 +01:00
parent a46774fe44
commit 7ee345f88c
2 changed files with 19 additions and 46 deletions

View File

@ -100,7 +100,7 @@ func (v *Vault) initVaultClient() (*vault.Client, error) {
if tokenRef.Name != "" {
token, err := v.vaultTokenRef(tokenRef.Name, tokenRef.Key)
if err != nil {
return nil, fmt.Errorf("error reading Vault token from secret %s/%s: %s", v.issuerResourcesNamespace, tokenRef.Name, err.Error())
return nil, fmt.Errorf("error reading Vault token from secret %s/%s: %s", v.resourceNamespace, tokenRef.Name, err.Error())
}
client.SetToken(token)
@ -124,7 +124,7 @@ func (v *Vault) initVaultClient() (*vault.Client, error) {
func (v *Vault) requestTokenWithAppRoleRef(client *vault.Client, appRole *v1alpha1.VaultAppRole) (string, error) {
roleId, secretId, err := v.appRoleRef(appRole)
if err != nil {
return "", fmt.Errorf("error reading Vault AppRole from secret: %s/%s: %s", appRole.SecretRef.Name, v.issuerResourcesNamespace, err.Error())
return "", fmt.Errorf("error reading Vault AppRole from secret: %s/%s: %s", appRole.SecretRef.Name, v.resourceNamespace, err.Error())
}
parameters := map[string]string{
@ -221,7 +221,7 @@ func (v *Vault) requestVaultCert(commonName string, altNames []string, csr []byt
func (v *Vault) appRoleRef(appRole *v1alpha1.VaultAppRole) (roleId, secretId string, err error) {
roleId = strings.TrimSpace(appRole.RoleId)
secret, err := v.secretsLister.Secrets(v.issuerResourcesNamespace).Get(appRole.SecretRef.Name)
secret, err := v.secretsLister.Secrets(v.resourceNamespace).Get(appRole.SecretRef.Name)
if err != nil {
return "", "", err
}
@ -233,7 +233,7 @@ func (v *Vault) appRoleRef(appRole *v1alpha1.VaultAppRole) (roleId, secretId str
keyBytes, ok := secret.Data[key]
if !ok {
return "", "", fmt.Errorf("no data for %q in secret '%s/%s'", key, appRole.SecretRef.Name, v.issuerResourcesNamespace)
return "", "", fmt.Errorf("no data for %q in secret '%s/%s'", key, appRole.SecretRef.Name, v.resourceNamespace)
}
secretId = string(keyBytes)
@ -243,7 +243,7 @@ func (v *Vault) appRoleRef(appRole *v1alpha1.VaultAppRole) (roleId, secretId str
}
func (v *Vault) vaultTokenRef(name, key string) (string, error) {
secret, err := v.secretsLister.Secrets(v.issuerResourcesNamespace).Get(name)
secret, err := v.secretsLister.Secrets(v.resourceNamespace).Get(name)
if err != nil {
return "", err
}
@ -254,7 +254,7 @@ func (v *Vault) vaultTokenRef(name, key string) (string, error) {
keyBytes, ok := secret.Data[key]
if !ok {
return "", fmt.Errorf("no data for %q in secret '%s/%s'", key, name, v.issuerResourcesNamespace)
return "", fmt.Errorf("no data for %q in secret '%s/%s'", key, name, v.resourceNamespace)
}
token := string(keyBytes)

View File

@ -1,64 +1,37 @@
package vault
import (
"k8s.io/client-go/kubernetes"
corelisters "k8s.io/client-go/listers/core/v1"
"k8s.io/client-go/tools/record"
"github.com/jetstack/cert-manager/pkg/apis/certmanager/v1alpha1"
clientset "github.com/jetstack/cert-manager/pkg/client/clientset/versioned"
"github.com/jetstack/cert-manager/pkg/controller"
"github.com/jetstack/cert-manager/pkg/issuer"
)
type Vault struct {
*controller.Context
issuer v1alpha1.GenericIssuer
client kubernetes.Interface
cmclient clientset.Interface
recorder record.EventRecorder
secretsLister corelisters.SecretLister
// issuerResourcesNamespace is a namespace to store resources in. This is
// here so we can easily support ClusterIssuers with the same codepath. By
// setting this field to either the namespace of the Issuer, or the
// clusterResourceNamespace specified on the CLI, we can easily continue
// to work with supplemental (e.g. secrets) resources without significant
// refactoring.
issuerResourcesNamespace string
// Namespace in which to read resources related to this Issuer from.
// For Issuers, this will be the namespace of the Issuer.
// For ClusterIssuers, this will be the cluster resource namespace.
resourceNamespace string
}
func NewVault(issuerObj v1alpha1.GenericIssuer,
cl kubernetes.Interface,
cmclient clientset.Interface,
recorder record.EventRecorder,
resourceNamespace string,
secretsLister corelisters.SecretLister) (issuer.Interface, error) {
func NewVault(ctx *controller.Context, issuer v1alpha1.GenericIssuer) (issuer.Interface, error) {
secretsLister := ctx.KubeSharedInformerFactory.Core().V1().Secrets().Lister()
return &Vault{
issuer: issuerObj,
client: cl,
cmclient: cmclient,
recorder: recorder,
issuerResourcesNamespace: resourceNamespace,
secretsLister: secretsLister,
Context: ctx,
issuer: issuer,
secretsLister: secretsLister,
resourceNamespace: ctx.IssuerOptions.ResourceNamespace(issuer),
}, nil
}
// Register this Issuer with the issuer factory
func init() {
issuer.Register(issuer.IssuerVault, func(issuer v1alpha1.GenericIssuer, ctx *issuer.Context) (issuer.Interface, error) {
issuerResourcesNamespace := issuer.GetObjectMeta().Namespace
if issuerResourcesNamespace == "" {
issuerResourcesNamespace = ctx.ClusterResourceNamespace
}
return NewVault(
issuer,
ctx.Client,
ctx.CMClient,
ctx.Recorder,
issuerResourcesNamespace,
ctx.KubeSharedInformerFactory.Core().V1().Secrets().Lister(),
)
})
controller.RegisterIssuer(controller.IssuerVault, NewVault)
}