-
Notifications
You must be signed in to change notification settings - Fork 93
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #203 from ezgidemirel/smaller-provider-doc
- Loading branch information
Showing
3 changed files
with
347 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,158 @@ | ||
|
||
# Configuration Migration to Smaller Providers | ||
|
||
1. Backup managed resource, composite and claim manifests: | ||
|
||
```bash | ||
kubectl get managed -o yaml > backup-mrs.yaml | ||
kubectl get composite -o yaml > backup-composites.yaml | ||
kubectl get claim -n $NAMESPACE -o yaml > backup-claims.yaml | ||
``` | ||
|
||
2. Update deletion policy to `Orphan`: | ||
|
||
P.S: If this field is used in the composition files, we need to have special treatment | ||
|
||
```bash | ||
kubectl patch $(kubectl get managed -o name) -p '{"spec":{"deletionPolicy":"Orphan"}}' --type=merge | ||
``` | ||
|
||
3. Generate smaller provider manifests | ||
|
||
```bash | ||
version_aws=v0.37.0 | ||
version_azure=v0.34.0 | ||
version_gcp=v0.34.0 | ||
|
||
rm -f "sp-manual.yaml" && touch "sp-manual.yaml" | ||
rm -f "sp-family-manual.yaml" && touch "sp-family-manual.yaml" | ||
kubectl get managed --no-headers -o jsonpath='{range .items[*]}{.apiVersion}{"\n"}{end}' | grep -E '(aws|gcp|azure).upbound.io' | sort | uniq | while read -r line | ||
do | ||
service=$(echo "${line}" | cut -d. -f1) | ||
provider=$(echo "${line}" | cut -d. -f2) | ||
if [[ ${provider} == "upbound" ]]; then | ||
# azure.upbound.io is an exception where apiVersion does not contain the service name | ||
# we have those resources in the family package | ||
provider="azure" | ||
fi | ||
eval version=\$"version_${provider}" | ||
|
||
for sp in config ${service}; do | ||
filename="sp-manual.yaml" | ||
providername="${provider}-${sp}" | ||
|
||
if [[ "${sp}" == "config" ]] || [[ "${sp}" == "azure" ]]; then | ||
# azure.upbound.io is an exception where apiVersion does not contain the service name | ||
# we have those resources in the family package | ||
providername="family-$provider" | ||
filename="sp-family-manual.yaml" | ||
fi | ||
if ! cat "${filename}" | grep provider-${providername}:${version} > /dev/null; then | ||
echo "apiVersion: pkg.crossplane.io/v1 | ||
kind: Provider | ||
metadata: | ||
name: upbound-release-candidates-provider-${providername} | ||
spec: | ||
package: xpkg.upbound.io/upbound-release-candidates/provider-${providername}:${version} | ||
revisionActivationPolicy: Manual" >> "${filename}" | ||
echo "---" >> "${filename}" | ||
fi | ||
done | ||
done | ||
``` | ||
|
||
4. Install config providers with `revisionActivationPolicy: Manual`: | ||
|
||
Verify that `sp-family-manual.yaml` files are generated with the correct content | ||
|
||
```bash | ||
cat sp-family-manual.yaml | ||
``` | ||
|
||
Install the family provider(s) | ||
|
||
```bash | ||
kubectl apply -f sp-family-manual.yaml | ||
``` | ||
|
||
Make sure the family provider(s) are in `Installed: False` and `Healthy: True` state: | ||
|
||
```bash | ||
kubectl get providers.pkg | ||
``` | ||
|
||
5. Install smaller providers with `revisionActivationPolicy: Manual`: | ||
|
||
Verify that `sp-manual.yaml` files are generated with the correct content | ||
|
||
```bash | ||
cat sp-manual.yaml | ||
``` | ||
|
||
Install the family provider | ||
|
||
```bash | ||
kubectl apply -f sp-manual.yaml | ||
``` | ||
|
||
Make sure the smaller providers are in `Installed: False` and `Healthy: True` state: | ||
|
||
```bash | ||
kubectl get providers.pkg | ||
``` | ||
|
||
6. Remove monolith provider(s) from dependsOn. Build/push and update the configuration | ||
|
||
7. Delete monolith provider(s): | ||
|
||
```bash | ||
kubectl delete provider.pkg $PROVIDER_NAME | ||
``` | ||
|
||
8. Update smaller providers with `revisionActivationPolicy:Automatic`: | ||
|
||
```bash | ||
sed 's/revisionActivationPolicy: Manual/revisionActivationPolicy: Automatic/' sp-family-manual.yaml > sp-family-automatic.yaml | ||
|
||
kubectl apply -f sp-family-automatic.yaml | ||
``` | ||
|
||
|
||
```bash | ||
sed 's/revisionActivationPolicy: Manual/revisionActivationPolicy: Automatic/' sp-manual.yaml > sp-automatic.yaml | ||
|
||
kubectl apply -f sp-automatic.yaml | ||
``` | ||
|
||
9. Verify that MRs and providers are ready: | ||
|
||
```bash | ||
kubectl get managed | ||
kubectl get provider.pkg | ||
``` | ||
|
||
10. Find new dependencies and add them to `dependsOn`: | ||
|
||
```bash | ||
providers=( "aws:v0.37.0" "gcp:v0.34.0" "azure:v0.34.0" ) | ||
|
||
for pp in ${providers[@]}; do | ||
provider="${pp%%:*}" | ||
version="${pp##*:}" | ||
smaller=$(grep -irn ${provider}.upbound.io/v1beta1 ${CONF_PATH} | awk '{print $3}'| cut -d '.' -f 1 | sort | uniq) | ||
|
||
for s in ${smaller[@]}; do | ||
if [ $s != "azure" ]; then | ||
echo "- provider: xpkg.upbound.io/upbound-release-candidates/provider-$provider-$s";echo " version: \">=$version\""; | ||
fi | ||
done | ||
done | ||
``` | ||
|
||
12. Build/push/update the configuration to the new version | ||
|
||
13. Update deletion policy to `Delete`: | ||
|
||
```bash | ||
kubectl patch $(kubectl get managed -o name) -p '{"spec":{"deletionPolicy":"Delete"}}' --type=merge | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,135 @@ | ||
# Managed Resource Migration to Smaller Providers | ||
|
||
1. Backup managed resources: | ||
|
||
```bash | ||
kubectl get managed -o yaml > backup-mrs.yaml | ||
``` | ||
|
||
2. Update deletion policy to `Orphan`: | ||
|
||
P.S: If this field is used in the managed resources, we need to have special treatment | ||
|
||
```bash | ||
kubectl patch $(kubectl get managed -o name) -p '{"spec":{"deletionPolicy":"Orphan"}}' --type=merge | ||
``` | ||
|
||
3. Generate smaller provider manifests | ||
|
||
```bash | ||
version_aws=v0.37.0 | ||
version_azure=v0.34.0 | ||
version_gcp=v0.34.0 | ||
|
||
rm -f "sp-manual.yaml" && touch "sp-manual.yaml" | ||
rm -f "sp-family-manual.yaml" && touch "sp-family-manual.yaml" | ||
kubectl get managed --no-headers -o jsonpath='{range .items[*]}{.apiVersion}{"\n"}{end}' | grep -E '(aws|gcp|azure).upbound.io' | sort | uniq | while read -r line | ||
do | ||
service=$(echo "${line}" | cut -d. -f1) | ||
provider=$(echo "${line}" | cut -d. -f2) | ||
if [[ ${provider} == "upbound" ]]; then | ||
# azure.upbound.io is an exception where apiVersion does not contain the service name | ||
# we have those resources in the family package | ||
provider="azure" | ||
fi | ||
eval version=\$"version_${provider}" | ||
|
||
for sp in config ${service}; do | ||
filename="sp-manual.yaml" | ||
providername="${provider}-${sp}" | ||
|
||
if [[ "${sp}" == "config" ]] || [[ "${sp}" == "azure" ]]; then | ||
# azure.upbound.io is an exception where apiVersion does not contain the service name | ||
# we have those resources in the family package | ||
providername="family-$provider" | ||
filename="sp-family-manual.yaml" | ||
fi | ||
if ! cat "${filename}" | grep provider-${providername}:${version} > /dev/null; then | ||
echo "apiVersion: pkg.crossplane.io/v1 | ||
kind: Provider | ||
metadata: | ||
name: upbound-release-candidates-provider-${providername} | ||
spec: | ||
package: xpkg.upbound.io/upbound-release-candidates/provider-${providername}:${version} | ||
revisionActivationPolicy: Manual" >> "${filename}" | ||
echo "---" >> "${filename}" | ||
fi | ||
done | ||
done | ||
``` | ||
|
||
4. Install config providers with `revisionActivationPolicy: Manual`: | ||
|
||
|
||
Verify that `sp-config-manual.yaml` files are generated with the correct content | ||
|
||
```bash | ||
cat sp-config-manual.yaml | ||
``` | ||
|
||
Install the config provider(s) | ||
|
||
```bash | ||
kubectl apply -f sp-config-manual.yaml | ||
``` | ||
|
||
Make sure the config provider(s) are in `Installed: False` and `Healthy: True` state: | ||
|
||
```bash | ||
kubectl get providers.pkg | ||
``` | ||
|
||
5. Install smaller providers with `revisionActivationPolicy: Manual`: | ||
|
||
|
||
Verify that `sp-manual.yaml` files are generated with the correct content | ||
|
||
```bash | ||
cat sp-manual.yaml | ||
``` | ||
|
||
Install the config provider | ||
|
||
```bash | ||
kubectl apply -f sp-manual.yaml | ||
``` | ||
|
||
Make sure the smaller providers are in `Installed: False` and `Healthy: True` state: | ||
|
||
```bash | ||
kubectl get providers.pkg | ||
``` | ||
|
||
6. Delete monolith provider(s): | ||
|
||
```bash | ||
kubectl delete provider.pkg $PROVIDER_NAME | ||
``` | ||
|
||
7. Update smaller providers with `revisionActivationPolicy:Automatic`: | ||
|
||
```bash | ||
sed 's/revisionActivationPolicy: Manual/revisionActivationPolicy: Automatic/' sp-config-manual.yaml > sp-config-automatic.yaml | ||
|
||
kubectl apply -f sp-config-automatic.yaml | ||
``` | ||
|
||
|
||
```bash | ||
sed 's/revisionActivationPolicy: Manual/revisionActivationPolicy: Automatic/' sp-manual.yaml > sp-automatic.yaml | ||
|
||
kubectl apply -f sp-automatic.yaml | ||
``` | ||
|
||
8. Verify that MRs and providers are ready: | ||
|
||
```bash | ||
kubectl get managed | ||
kubectl get provider.pkg | ||
``` | ||
|
||
9. Update deletion policy to `Delete`: | ||
|
||
```bash | ||
kubectl patch $(kubectl get managed -o name) -p '{"spec":{"deletionPolicy":"Delete"}}' --type=merge | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
# Reverting back to Monolith Providers | ||
|
||
1. Backup managed resource manifests: | ||
|
||
```bash | ||
kubectl get managed -o yaml > backup-mrs.yaml | ||
``` | ||
|
||
2. Update deletion policy to `Orphan`: | ||
|
||
P.S: If this field is used in the managed resources, we need to have special treatment | ||
|
||
```bash | ||
kubectl patch $(kubectl get managed -o name) -p '{"spec":{"deletionPolicy":"Orphan"}}' --type=merge | ||
``` | ||
|
||
3. Install monolith provider: | ||
|
||
```bash | ||
kubectl apply -f - <<EOF | ||
apiVersion: pkg.crossplane.io/v1 | ||
kind: Provider | ||
Metadata: | ||
name: $PROVIDER_NAME | ||
spec: | ||
package: $PACKAGE | ||
revisionActivationPolicy: Manual | ||
EOF | ||
``` | ||
|
||
5. Delete smaller provider(s): | ||
|
||
```bash | ||
kubectl delete provider.pkg $(kubectl get provider.pkg |grep upbound-release-candidates |awk '{print $1}') | ||
``` | ||
|
||
6. Update monolith providers with `revisionActivationPolicy:Automatic`: | ||
|
||
```bash | ||
kubectl patch provider.pkg $PROVIDER_NAME --type=merge -p='{"spec":{"revisionActivationPolicy":"Automatic"}}' | ||
``` | ||
|
||
7. Verify that MRs and providers are ready: | ||
|
||
```bash | ||
kubectl get managed | ||
kubectl get provider.pkg | ||
``` | ||
|
||
8. Update deletion policy to `Delete`: | ||
|
||
```bash | ||
kubectl patch $(kubectl get managed -o name) -p '{"spec":{"deletionPolicy":"Delete"}}' --type=merge | ||
``` |