Skip to content

Instantly share code, notes, and snippets.

@ifnazar
Last active November 24, 2019 00:13
Show Gist options
  • Save ifnazar/8e69e083d9c2afcefe0f46daf62631ae to your computer and use it in GitHub Desktop.
Save ifnazar/8e69e083d9c2afcefe0f46daf62631ae to your computer and use it in GitHub Desktop.
#!/bin/bash
set -e
# UPDATE HELM REPO
helm init --client-only
helm repo add jetstack https://charts.jetstack.io
helm repo update
# UPGRADE to 0.11
## BACKUP
kubectl get -o yaml --all-namespaces issuer,clusterissuer,certificates,orders,challenges,certificaterequests > backup-cert-manager.yaml
kubectl get clusterissuer -o yaml --all-namespaces > backup-clusterissuer.yaml
kubectl get certificates -o yaml --all-namespaces > backup-certificates.yaml
kubectl get networkpolicies -o yaml --all-namespaces > backup-all-networkpolicies.yaml
kubectl get networkpolicies --all-namespaces | grep allow-certmanager | awk '{ print "kubectl get networkpolicies -o yaml -n "$1 " " $2 " >> backup-networkpolicies.yaml && echo --- >> backup-networkpolicies.yaml" }' | xargs -L 1 -I {} sh -c "{}"
kubectl get secrets --all-namespaces | grep letsencrypt-certificate | awk '{ print "kubectl get secrets -o yaml -n "$1 " " $2 " >> backup-secrets.yaml && echo --- >> backup-secrets.yaml" }' | xargs -L 1 -I {} sh -c "{}"
## RESOURCES FOR UPDATE
cp backup-cert-manager.yaml cert-manager.yaml
cp backup-certificates.yaml certificates.yaml
cp backup-clusterissuer.yaml clusterissuer.yaml
cp backup-networkpolicies.yaml networkpolicies.yaml
cp backup-orders.yaml orders.yaml
## UPDATE RESOURCES FOR NEW FORMAT (V0.7)
yq d clusterissuer.yaml items[*].spec.acme.solvers -i
yq w clusterissuer.yaml items[*].spec.acme.solvers[+].selector {} -i
yq w clusterissuer.yaml items[*].spec.acme.solvers[*].http01.ingress.name 'ingress' -i
sed -i "s|'{}'|{}|g" clusterissuer.yaml
yq d certificates.yaml items[*].spec.acme -i
yq d certificates.yaml items[*].http01 -i
## UPDATE API VERSION (V0.11)
sed -i 's|certmanager.k8s.io/v1alpha1|cert-manager.io/v1alpha2|g' clusterissuer.yaml
sed -i 's|certmanager.k8s.io/v1alpha1|cert-manager.io/v1alpha2|g' certificates.yaml
sed -i 's|certmanager.k8s.io/acme-http-domain|acme.cert-manager.io/http-domain|g' networkpolicies.yaml
## DELETE OLD CERT-MANAGER
helm delete --purge cert-manager
kubectl delete crd certificaterequests.certmanager.k8s.io
kubectl delete crd challenges.certmanager.k8s.io
kubectl delete crd orders.certmanager.k8s.io
kubectl delete crd certificates.certmanager.k8s.io
kubectl delete crd issuers.certmanager.k8s.io
kubectl delete crd clusterissuers.certmanager.k8s.io
## INSTALL NEW CERT-MANAGER
kubectl apply --validate=false -f https://raw.githubusercontent.com/jetstack/cert-manager/release-0.11/deploy/manifests/00-crds.yaml
helm install --name cert-manager --namespace cert-manager --version v0.11.0 jetstack/cert-manager
sleep 1m
## RESTORE RESOURCES
kubectl apply -f networkpolicies.yaml
kubectl apply -f clusterissuer.yaml
kubectl apply -f certificates.yaml
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment