provider-vault

module
v4.0.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 20, 2026 License: Apache-2.0

README

Provider Vault

provider-vault is a Crossplane provider that is built using Upjet code generation tools and exposes XRM-conformant managed resources for the Vault API.

Prerequisites

This provider interacts with HashiCorp Vault. To test it you will need Vault installed. Vault has many options and various ways for how it can be installed. We will use a very simple installation approach to show how to test the provider-vault manually per below. To test this provider-vault using automated tests, please run make e2e. This will create, initialize and unseal a copy of Vault against which the automated tests are running. The list of tests is specified in the Makefile variable UPTEST_EXAMPLE_LIST. The tests it runs are specified in the examples directory.

Create a vault namespace.

kubectl create namespace vault

Add hashicorp to your helm repo.

helm repo add hashicorp https://helm.releases.hashicorp.com

Install vault. Note that the vault-0 pod will not be ready until vault is unsealed. This is expected behavior.

helm install vault hashicorp/vault -n vault

Initialize and unseal vault.

kubectl exec -it vault-0 -n vault -- sh

Inside of the vault pod, initialize it.

vault operator init

Make note of the root key and the unseal keys.

Unseal vault 3 times with a different key.

vault operator unseal

Verify that vault is unsealed.

vault status

From the commandline, forward the vault pod port.

kubectl port-forward vault-0 -n vault 8200:8200

Update the examples/providerconfig/secret.yaml.tmpl with your root token or an access token that was created in Vault for your provider. Note that this token should not be accessible by cluster operators, only by Vault admins.

Apply provider-vault package/crds.

kubectl apply -f package/crds

Apply the secret.

kubectl apply -f providerconfig/secret.yaml.tmpl

Apply the provider config.

kubectl apply -f providerconfig/providerconfig.yaml

Getting Started

Install the provider by using the following command after changing the image tag to the latest release:

up ctp provider install upbound/provider-vault:v0.1.0

Alternatively, you can use declarative installation:

cat <<EOF | kubectl apply -f -
apiVersion: pkg.crossplane.io/v1
kind: Provider
metadata:
  name: provider-vault
spec:
  package: xpkg.upbound.io/upbound/provider-vault:v0.1.0
EOF

Notice that in this example Provider resource is referencing ControllerConfig with debug enabled.

You can see the API reference here.

Developing

Initialize the repository with

make submodules

Run code-generation pipeline:

make generate

Run against a Kubernetes cluster:

make run

Build, push, and install:

make all

Build binary, image and Crossplane package (xpkg):

make build
# to build all architectures / platforms, use:
make -j2 build.all

Report a Bug

For filing bugs, suggesting improvements, or requesting new features, please open an issue.

Directories

Path Synopsis
apis
cluster
Package cluster contains Kubernetes API for the provider.
Package cluster contains Kubernetes API for the provider.
cluster/ad/v1alpha1
+kubebuilder:object:generate=true +groupName=ad.vault.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=ad.vault.upbound.io +versionName=v1alpha1
cluster/alicloud/v1alpha1
+kubebuilder:object:generate=true +groupName=alicloud.vault.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=alicloud.vault.upbound.io +versionName=v1alpha1
cluster/approle/v1alpha1
+kubebuilder:object:generate=true +groupName=approle.vault.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=approle.vault.upbound.io +versionName=v1alpha1
cluster/audit/v1alpha1
+kubebuilder:object:generate=true +groupName=audit.vault.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=audit.vault.upbound.io +versionName=v1alpha1
cluster/auth/v1alpha1
+kubebuilder:object:generate=true +groupName=auth.vault.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=auth.vault.upbound.io +versionName=v1alpha1
cluster/aws/v1alpha1
+kubebuilder:object:generate=true +groupName=aws.vault.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=aws.vault.upbound.io +versionName=v1alpha1
cluster/azure/v1alpha1
+kubebuilder:object:generate=true +groupName=azure.vault.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=azure.vault.upbound.io +versionName=v1alpha1
cluster/cert/v1alpha1
+kubebuilder:object:generate=true +groupName=cert.vault.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=cert.vault.upbound.io +versionName=v1alpha1
cluster/consul/v1alpha1
+kubebuilder:object:generate=true +groupName=consul.vault.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=consul.vault.upbound.io +versionName=v1alpha1
cluster/database/v1alpha1
+kubebuilder:object:generate=true +groupName=database.vault.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=database.vault.upbound.io +versionName=v1alpha1
cluster/egp/v1alpha1
+kubebuilder:object:generate=true +groupName=egp.vault.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=egp.vault.upbound.io +versionName=v1alpha1
cluster/gcp/v1alpha1
+kubebuilder:object:generate=true +groupName=gcp.vault.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=gcp.vault.upbound.io +versionName=v1alpha1
cluster/generic/v1alpha1
+kubebuilder:object:generate=true +groupName=generic.vault.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=generic.vault.upbound.io +versionName=v1alpha1
cluster/github/v1alpha1
+kubebuilder:object:generate=true +groupName=github.vault.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=github.vault.upbound.io +versionName=v1alpha1
cluster/identity/v1alpha1
+kubebuilder:object:generate=true +groupName=identity.vault.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=identity.vault.upbound.io +versionName=v1alpha1
cluster/jwt/v1alpha1
+kubebuilder:object:generate=true +groupName=jwt.vault.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=jwt.vault.upbound.io +versionName=v1alpha1
cluster/kmip/v1alpha1
+kubebuilder:object:generate=true +groupName=kmip.vault.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=kmip.vault.upbound.io +versionName=v1alpha1
cluster/kubernetes/v1alpha1
+kubebuilder:object:generate=true +groupName=kubernetes.vault.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=kubernetes.vault.upbound.io +versionName=v1alpha1
cluster/kv/v1alpha1
+kubebuilder:object:generate=true +groupName=kv.vault.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=kv.vault.upbound.io +versionName=v1alpha1
cluster/ldap/v1alpha1
+kubebuilder:object:generate=true +groupName=ldap.vault.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=ldap.vault.upbound.io +versionName=v1alpha1
cluster/managed/v1alpha1
+kubebuilder:object:generate=true +groupName=managed.vault.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=managed.vault.upbound.io +versionName=v1alpha1
cluster/mfa/v1alpha1
+kubebuilder:object:generate=true +groupName=mfa.vault.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=mfa.vault.upbound.io +versionName=v1alpha1
cluster/mongodbatlas/v1alpha1
+kubebuilder:object:generate=true +groupName=mongodbatlas.vault.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=mongodbatlas.vault.upbound.io +versionName=v1alpha1
cluster/nomad/v1alpha1
+kubebuilder:object:generate=true +groupName=nomad.vault.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=nomad.vault.upbound.io +versionName=v1alpha1
cluster/okta/v1alpha1
+kubebuilder:object:generate=true +groupName=okta.vault.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=okta.vault.upbound.io +versionName=v1alpha1
cluster/password/v1alpha1
+kubebuilder:object:generate=true +groupName=password.vault.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=password.vault.upbound.io +versionName=v1alpha1
cluster/pki/v1alpha1
+kubebuilder:object:generate=true +groupName=pki.vault.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=pki.vault.upbound.io +versionName=v1alpha1
cluster/quota/v1alpha1
+kubebuilder:object:generate=true +groupName=quota.vault.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=quota.vault.upbound.io +versionName=v1alpha1
cluster/rabbitmq/v1alpha1
+kubebuilder:object:generate=true +groupName=rabbitmq.vault.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=rabbitmq.vault.upbound.io +versionName=v1alpha1
cluster/raft/v1alpha1
+kubebuilder:object:generate=true +groupName=raft.vault.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=raft.vault.upbound.io +versionName=v1alpha1
cluster/rgp/v1alpha1
+kubebuilder:object:generate=true +groupName=rgp.vault.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=rgp.vault.upbound.io +versionName=v1alpha1
cluster/ssh/v1alpha1
+kubebuilder:object:generate=true +groupName=ssh.vault.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=ssh.vault.upbound.io +versionName=v1alpha1
cluster/terraform/v1alpha1
+kubebuilder:object:generate=true +groupName=terraform.vault.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=terraform.vault.upbound.io +versionName=v1alpha1
cluster/token/v1alpha1
+kubebuilder:object:generate=true +groupName=token.vault.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=token.vault.upbound.io +versionName=v1alpha1
cluster/transform/v1alpha1
+kubebuilder:object:generate=true +groupName=transform.vault.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=transform.vault.upbound.io +versionName=v1alpha1
cluster/transit/v1alpha1
+kubebuilder:object:generate=true +groupName=transit.vault.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=transit.vault.upbound.io +versionName=v1alpha1
cluster/v1alpha1
Package v1alpha1 contains the core resources of the vault jet provider.
Package v1alpha1 contains the core resources of the vault jet provider.
cluster/v1beta1
Package v1beta1 contains the core resources of the vault upjet provider.
Package v1beta1 contains the core resources of the vault upjet provider.
cluster/vault/v1alpha1
+kubebuilder:object:generate=true +groupName=vault.vault.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=vault.vault.upbound.io +versionName=v1alpha1
namespaced
Package namespaced contains Kubernetes API for the provider.
Package namespaced contains Kubernetes API for the provider.
namespaced/ad/v1alpha1
+kubebuilder:object:generate=true +groupName=ad.vault.m.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=ad.vault.m.upbound.io +versionName=v1alpha1
namespaced/alicloud/v1alpha1
+kubebuilder:object:generate=true +groupName=alicloud.vault.m.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=alicloud.vault.m.upbound.io +versionName=v1alpha1
namespaced/approle/v1alpha1
+kubebuilder:object:generate=true +groupName=approle.vault.m.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=approle.vault.m.upbound.io +versionName=v1alpha1
namespaced/audit/v1alpha1
+kubebuilder:object:generate=true +groupName=audit.vault.m.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=audit.vault.m.upbound.io +versionName=v1alpha1
namespaced/auth/v1alpha1
+kubebuilder:object:generate=true +groupName=auth.vault.m.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=auth.vault.m.upbound.io +versionName=v1alpha1
namespaced/aws/v1alpha1
+kubebuilder:object:generate=true +groupName=aws.vault.m.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=aws.vault.m.upbound.io +versionName=v1alpha1
namespaced/azure/v1alpha1
+kubebuilder:object:generate=true +groupName=azure.vault.m.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=azure.vault.m.upbound.io +versionName=v1alpha1
namespaced/cert/v1alpha1
+kubebuilder:object:generate=true +groupName=cert.vault.m.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=cert.vault.m.upbound.io +versionName=v1alpha1
namespaced/consul/v1alpha1
+kubebuilder:object:generate=true +groupName=consul.vault.m.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=consul.vault.m.upbound.io +versionName=v1alpha1
namespaced/database/v1alpha1
+kubebuilder:object:generate=true +groupName=database.vault.m.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=database.vault.m.upbound.io +versionName=v1alpha1
namespaced/egp/v1alpha1
+kubebuilder:object:generate=true +groupName=egp.vault.m.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=egp.vault.m.upbound.io +versionName=v1alpha1
namespaced/gcp/v1alpha1
+kubebuilder:object:generate=true +groupName=gcp.vault.m.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=gcp.vault.m.upbound.io +versionName=v1alpha1
namespaced/generic/v1alpha1
+kubebuilder:object:generate=true +groupName=generic.vault.m.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=generic.vault.m.upbound.io +versionName=v1alpha1
namespaced/github/v1alpha1
+kubebuilder:object:generate=true +groupName=github.vault.m.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=github.vault.m.upbound.io +versionName=v1alpha1
namespaced/identity/v1alpha1
+kubebuilder:object:generate=true +groupName=identity.vault.m.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=identity.vault.m.upbound.io +versionName=v1alpha1
namespaced/jwt/v1alpha1
+kubebuilder:object:generate=true +groupName=jwt.vault.m.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=jwt.vault.m.upbound.io +versionName=v1alpha1
namespaced/kmip/v1alpha1
+kubebuilder:object:generate=true +groupName=kmip.vault.m.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=kmip.vault.m.upbound.io +versionName=v1alpha1
namespaced/kubernetes/v1alpha1
+kubebuilder:object:generate=true +groupName=kubernetes.vault.m.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=kubernetes.vault.m.upbound.io +versionName=v1alpha1
namespaced/kv/v1alpha1
+kubebuilder:object:generate=true +groupName=kv.vault.m.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=kv.vault.m.upbound.io +versionName=v1alpha1
namespaced/ldap/v1alpha1
+kubebuilder:object:generate=true +groupName=ldap.vault.m.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=ldap.vault.m.upbound.io +versionName=v1alpha1
namespaced/managed/v1alpha1
+kubebuilder:object:generate=true +groupName=managed.vault.m.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=managed.vault.m.upbound.io +versionName=v1alpha1
namespaced/mfa/v1alpha1
+kubebuilder:object:generate=true +groupName=mfa.vault.m.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=mfa.vault.m.upbound.io +versionName=v1alpha1
namespaced/mongodbatlas/v1alpha1
+kubebuilder:object:generate=true +groupName=mongodbatlas.vault.m.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=mongodbatlas.vault.m.upbound.io +versionName=v1alpha1
namespaced/nomad/v1alpha1
+kubebuilder:object:generate=true +groupName=nomad.vault.m.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=nomad.vault.m.upbound.io +versionName=v1alpha1
namespaced/okta/v1alpha1
+kubebuilder:object:generate=true +groupName=okta.vault.m.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=okta.vault.m.upbound.io +versionName=v1alpha1
namespaced/password/v1alpha1
+kubebuilder:object:generate=true +groupName=password.vault.m.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=password.vault.m.upbound.io +versionName=v1alpha1
namespaced/pki/v1alpha1
+kubebuilder:object:generate=true +groupName=pki.vault.m.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=pki.vault.m.upbound.io +versionName=v1alpha1
namespaced/quota/v1alpha1
+kubebuilder:object:generate=true +groupName=quota.vault.m.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=quota.vault.m.upbound.io +versionName=v1alpha1
namespaced/rabbitmq/v1alpha1
+kubebuilder:object:generate=true +groupName=rabbitmq.vault.m.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=rabbitmq.vault.m.upbound.io +versionName=v1alpha1
namespaced/raft/v1alpha1
+kubebuilder:object:generate=true +groupName=raft.vault.m.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=raft.vault.m.upbound.io +versionName=v1alpha1
namespaced/rgp/v1alpha1
+kubebuilder:object:generate=true +groupName=rgp.vault.m.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=rgp.vault.m.upbound.io +versionName=v1alpha1
namespaced/ssh/v1alpha1
+kubebuilder:object:generate=true +groupName=ssh.vault.m.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=ssh.vault.m.upbound.io +versionName=v1alpha1
namespaced/terraform/v1alpha1
+kubebuilder:object:generate=true +groupName=terraform.vault.m.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=terraform.vault.m.upbound.io +versionName=v1alpha1
namespaced/token/v1alpha1
+kubebuilder:object:generate=true +groupName=token.vault.m.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=token.vault.m.upbound.io +versionName=v1alpha1
namespaced/transform/v1alpha1
+kubebuilder:object:generate=true +groupName=transform.vault.m.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=transform.vault.m.upbound.io +versionName=v1alpha1
namespaced/transit/v1alpha1
+kubebuilder:object:generate=true +groupName=transit.vault.m.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=transit.vault.m.upbound.io +versionName=v1alpha1
namespaced/v1alpha1
Package v1alpha1 contains the core resources of the vault jet provider.
Package v1alpha1 contains the core resources of the vault jet provider.
namespaced/v1beta1
Package v1beta1 contains the core resources of the vault upjet provider.
Package v1beta1 contains the core resources of the vault upjet provider.
namespaced/vault/v1alpha1
+kubebuilder:object:generate=true +groupName=vault.vault.m.upbound.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=vault.vault.m.upbound.io +versionName=v1alpha1
cmd
generator command
provider command
internal
version
Package version contains the version of provider-vault repo
Package version contains the version of provider-vault repo

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL