From 17dad523ceb0e889a64087d7481d6439582e2b50 Mon Sep 17 00:00:00 2001 From: Gus Parvin Date: Tue, 5 Mar 2024 08:50:18 -0500 Subject: [PATCH] Make it easier to deploy with argo Adding a simple script to help make it easy to deploy policies with argocd. Signed-off-by: Gus Parvin --- README.md | 2 + deploy/README.md | 7 ++- deploy/argoDeploy.sh | 135 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 143 insertions(+), 1 deletion(-) create mode 100755 deploy/argoDeploy.sh diff --git a/README.md b/README.md index afe0901f7..40bb3578f 100644 --- a/README.md +++ b/README.md @@ -46,6 +46,8 @@ command can be viewed in its [README](deploy/README.md).) This script assumes yo Application lifecycle management as an addon in your Open Cluster Management installation. See [Application lifecycle management](https://open-cluster-management.io/getting-started/integration/app-lifecycle/) for details on installing the Application addon. +**Note**: If you are using ArgoCD for gitops, a similar script [argoDeploy.sh](deploy/argoDeploy.sh) is provided that does +not require the Application Lifecycle addon. The policies are applied to all managed clusters that are available, and have the `environment` set to `dev`. Specifically, an available managed cluster has the `status` parameter set to `true` by the diff --git a/deploy/README.md b/deploy/README.md index b4370a935..3f35fe82d 100644 --- a/deploy/README.md +++ b/deploy/README.md @@ -1,6 +1,6 @@ # Deploy policies to Open Cluster Management -Deploy policies to Open Cluster Management with the `deploy.sh` script. +Deploy policies to Open Cluster Management with the `deploy.sh` script. The `deploy.sh` script uses Application Lifecycle subscriptions for deployment. To use ArgoCD use the [argoDeploy.sh](argoDeploy.sh) script instead. ## Deploying policies with GitOps @@ -38,6 +38,8 @@ Usage: --dry-run Print the YAML to stdout without applying them to the cluster ``` +**Note**: The `argoDeploy.sh` uses similar options to `deploy.sh` but does not provide the sync rate or the deploy app options. + For more details on the `sync` parameter values, see the git subscription chapter [Resource reconciliation rate settings](https://github.com/open-cluster-management-io/multicloud-operators-subscription/blob/main/docs/gitrepo_subscription.md#resource-reconciliation-rate-settings). @@ -66,3 +68,6 @@ Usage: -n|--namespace Namespace on the cluster that resources are located -a|--name Prefix for the Channel and Subscription resources ``` + +**Note**: Use the ArgoCD console interface to remove the application deployed using the `argoDeploy.sh` script. + diff --git a/deploy/argoDeploy.sh b/deploy/argoDeploy.sh new file mode 100755 index 000000000..1817e9059 --- /dev/null +++ b/deploy/argoDeploy.sh @@ -0,0 +1,135 @@ +#!/bin/bash + +set -e +set -o pipefail + +# Display help information +help () { + echo "Deploy policies to Open Cluster Management via OpenShift GitOps" + echo "" + echo "Prerequisites:" + echo " - oc or kubectl CLI must be pointing to the cluster to which to deploy policies" + echo " - OpenShift Gitops must be installed and functional" + echo "" + echo "Usage:" + echo " ./deploy.sh [-u ] [-b ] [-p ] [-n ]" + echo " [-a|--name ] [--dry-run]" + echo "" + echo " -h|--help Display this menu" + echo " -u|--url URL to the Git repository" + echo ' (Default URL: "https://github.com/open-cluster-management-io/policy-collection.git")' + echo " -b|--branch Branch of the Git repository to point to" + echo ' (Default branch: "main")' + echo " -p|--path Path to the desired subdirectory of the Git repository" + echo " (Default path: stable)" + echo " -n|--namespace Namespace on the cluster to deploy policies to (must exist already)" + echo ' (Default namespace: "policies")' + echo " -a|--name The name of the OpenShift Gitops Application" + echo ' (Default name: "demo-stable-policies")' + echo " --dry-run Print the YAML to stdout without applying them to the cluster" + echo "" +} + +# Parse arguments +while [[ $# -gt 0 ]]; do + key="$1" + case $key in + -h|--help) + help + exit 0 + ;; + -u|--url) + shift + GH_URL=${1} + shift + ;; + -b|--branch) + shift + GH_BRANCH=${1} + shift + ;; + -p|--path) + shift + GH_PATH=${1} + shift + ;; + -n|--namespace) + shift + NAMESPACE=${1} + shift + ;; + -a|--name) + shift + NAME=${1} + shift + ;; + --dry-run) + shift + DRY_RUN="true" + ;; + *) # default + echo "Invalid input: ${1}" + exit 1 + shift + ;; + esac +done +set -- "${POSITIONAL[@]}" # restore positional parameters + +if ! kubectl get deployment openshift-gitops-server -n openshift-gitops &>/dev/null; then + echo "The OpenShift Gitops server is required, but is not installed." + exit 1 +fi + +# Display configuration and set default values if needed +echo "Deploying policies using the following configuration:" +echo "=====================================================" +echo "kubectl config: $(kubectl config get-contexts | awk '/^\052/ {print $4"/"$3}')" +echo "Cluster Namespace: ${NAMESPACE:=policies}" +echo "Application name: ${NAME:=demo-stable-policies}" +echo "Git URL: ${GH_URL:=https://github.com/open-cluster-management-io/policy-collection.git}" +echo "Git Branch: ${GH_BRANCH:=main}" +echo "Git Path: ${GH_PATH:=stable}" +echo "Dry run: ${DRY_RUN:=false}" +echo "=====================================================" + +while read -r -p "Would you like to proceed (y/n)? " response; do + case "$response" in + Y|y|Yes|yes ) break + ;; + N|n|No|no ) exit 1 + ;; + esac +done + +APPLICATION="apiVersion: argoproj.io/v1alpha1 +kind: Application +metadata: + name: $NAME + namespace: openshift-gitops +spec: + destination: + namespace: $NAMESPACE + server: https://kubernetes.default.svc + project: default + source: + path: $GH_PATH + repoURL: $GH_URL + targetRevision: $GH_BRANCH + syncPolicy: + automated: {} + syncOptions: + - CreateNamespace=true" + +# Deploy the resources to the cluster +echo "$APPLICATION" > manifests.yaml +echo "* Application manifests saved to 'manifests.yaml'" +if [ "$DRY_RUN" = "true" ]; then + echo "* Dry-run is enabled. Not creating resources on cluster." + echo "---" + echo "$APPLICATION" +else + printf "" + echo "$APPLICATION" | kubectl apply -f - +fi +