cas_required in vault code example
Example: secrets kv-v2 in vault
#Enable KV-V2 engine
$ vault secrets enable -path=secret kv-v2
# If the KV version is version:1, upgrade it to version:2
$ vault kv enable-versioning secret/
#Put the data in the secret
$ vault kv put secret/customer/novopay name="NovoPay Pvt Limited" \
contact_email="[email protected]" # ---------->This is Version 1
#Create another data in same path
$ vault kv put secret/customer/novopay name="NovoPay Pvt Limited" \
contact_email="[email protected]" # -------->This is Version 2
#Read the secret from the same path
$ vault kv get secret/customer/novopay
#For Specific Version search
$ vault kv get -version=2 secret/customer/novopay
#Merge rest fields from same path while updating just one
$ vault kv patch secret/customer/novopay contact_email="[email protected]"
#Get the metadata from the path defined
$ vault kv metadata get secret/customer/novopay
#Limit the number of versions to retain in kv-v2
$ vault write secret/config max_versions=4
#check the changes
$ vault read secret/config
#Configure the secret at path secret/customer/novopay to limit secrets to a maximum of 4 versions.
$ vault kv metadata put -max-versions=4 secret/customer/novopay
#Get the metadata of the secret defined at the path secret/customer/novopay
$ vault kv metadata get secret/customer/novopay
#Delete multiple versions
$ vault kv delete -versions="4,5" kv/customer/novopay
#Undelete the Version on the path
$ vault kv undelete -versions=5 kv/customer/novopay
#Permanentely delete the version is through destroy
$ vault kv destroy -versions=4 kv/customer/novopay
#Delete all versions from the defined path
$ vault kv metadata delete kv/customer/novopay
#Configure the automatic deletion of versions after sepcified time
$ vault kv metadata put -delete-version-after=40s kv/customer/novopay
#Vault has another cool feature of check and set operation to stop unintentional
#secret overwrite. When you pass the cas flag to Vault, it first checks if the key already exists.
$ vault read kv/config # ----> cas_required setting is false
$ vault write kv/config cas-required=true
#Enable the same on the path inside the kv
$ vault kv metadata put -cas-required=true kv/customer/novopay
#Once check-and-set is enabled, every write operation requires the cas parameter with the current verion of the secret. Set cas to 0 when a secret at that path does not already exist.
$ vault kv put -cas=0 kv/customer/novopay name="Example Co." partner_id="123456789"
$ vault kv put -cas=1 secret/partner name="Example Co." \
partner_id="ABCDEFGHIJKLMN"