diff --git a/Makefile b/Makefile index 0e6cd2fa..01e8de41 100644 --- a/Makefile +++ b/Makefile @@ -28,6 +28,9 @@ kind-test: ## Run functional tests for SERVICE kind-helm-test: ## Run the Helm tests for SERVICE @AWS_SERVICE=$(AWS_SERVICE) ./scripts/run-helm-tests.sh +kind-dev: ## Run a dev cluster for SERVICE + @AWS_SERVICE=$(AWS_SERVICE) ./scripts/create-dev-cluster.sh + test-recommended-policy: @AWS_SERVICE=$(AWS_SERVICE) source ./scripts/iam-policy-test-runner.sh && assert_iam_policies diff --git a/scripts/controller-setup.sh b/scripts/controller-setup.sh index 74d50673..e6be9b86 100755 --- a/scripts/controller-setup.sh +++ b/scripts/controller-setup.sh @@ -35,30 +35,14 @@ build_and_install_controller() { _load_controller_image "$__cluster_name" "$__img_name" info_msg "Installing controller deployment ... " - _install_deployment "$__controller_namespace" "$__img_name" + _install_deployment "$__cluster_name" "$__controller_namespace" "$__img_name" } -_build_controller_image() { - local __img_name=$1 - - local local_build="$(get_is_local_build)" - LOCAL_MODULES="$local_build" AWS_SERVICE_DOCKER_IMG="$__img_name" ${CODE_GENERATOR_SCRIPTS_DIR}/build-controller-image.sh ${AWS_SERVICE} 1>/dev/null -} - -_load_controller_image() { - local __cluster_name=$1 - local __img_name=$2 - - kind load docker-image --name "$__cluster_name" --nodes="$__cluster_name"-worker,"$__cluster_name"-control-plane "$__img_name" -} - -_install_deployment() { +install_crd_and_rbac(){ local __controller_namespace=$1 - local __img_name=$2 local service_controller_source_dir="$ROOT_DIR/../$AWS_SERVICE-controller" local service_config_dir="$service_controller_source_dir/config" - local test_config_dir="$ROOT_DIR/build/clusters/$cluster_name/config/test" # Register the ACK service controller's CRDs in the target k8s cluster debug_msg "Loading CRD manifests for $AWS_SERVICE into the cluster ... " @@ -76,6 +60,30 @@ _install_deployment() { debug_msg "Loading RBAC manifests for $AWS_SERVICE into the cluster ... " kustomize build "$service_config_dir"/rbac | kubectl apply -f - 1>/dev/null +} + +_build_controller_image() { + local __img_name=$1 + + local local_build="$(get_is_local_build)" + LOCAL_MODULES="$local_build" AWS_SERVICE_DOCKER_IMG="$__img_name" ${CODE_GENERATOR_SCRIPTS_DIR}/build-controller-image.sh ${AWS_SERVICE} 1>/dev/null +} + +_load_controller_image() { + local __cluster_name=$1 + local __img_name=$2 + + kind load docker-image --name "$__cluster_name" --nodes="$__cluster_name"-worker,"$__cluster_name"-control-plane "$__img_name" +} + +_install_deployment() { + local __cluster_name=$1 + local __controller_namespace=$2 + local __img_name=$3 + + local service_controller_source_dir="$ROOT_DIR/../$AWS_SERVICE-controller" + local service_config_dir="$service_controller_source_dir/config" + local test_config_dir="$ROOT_DIR/build/clusters/$__cluster_name/config/test" # Create the ACK service controller Deployment in the target k8s cluster mkdir -p "$test_config_dir" diff --git a/scripts/create-dev-cluster.sh b/scripts/create-dev-cluster.sh new file mode 100755 index 00000000..13d92767 --- /dev/null +++ b/scripts/create-dev-cluster.sh @@ -0,0 +1,53 @@ +#!/usr/bin/env bash + +# ./scripts/create-dev-cluster.sh quickly setup cluster for ACK development. It +# ensures that a K8s cluster is accessible, then configures the ACK CRD, RBAC +# but not install the controller + +set -Eeo pipefail + +SCRIPTS_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" +ROOT_DIR="$SCRIPTS_DIR/.." + +AWS_SERVICE=$(echo "${AWS_SERVICE:-""}" | tr '[:upper:]' '[:lower:]') + +CONTROLLER_NAMESPACE=${CONTROLLER_NAMESPACE:-"ack-system"} + +CLUSTER_NAME="ack-dev-cluster-$AWS_SERVICE" + +source "$SCRIPTS_DIR/lib/aws.sh" +source "$SCRIPTS_DIR/lib/common.sh" +source "$SCRIPTS_DIR/lib/config.sh" +source "$SCRIPTS_DIR/lib/logging.sh" + +source "$SCRIPTS_DIR/controller-setup.sh" +source "$SCRIPTS_DIR/kind.sh" +source "$SCRIPTS_DIR/run-e2e-tests.sh" + +run() { + ensure_aws_credentials + ensure_cluster "$CLUSTER_NAME" false + local kubeconfig_path="$ROOT_DIR/build/clusters/$CLUSTER_NAME/kubeconfig" + info_msg "After executing the above source command to set the kubeconfig to environment, " + info_msg "run the following command to start the controller from the controller repo:" + echo "" + echo "go run ./cmd/controller/main.go --aws-region $(get_aws_region) --log-level debug --enable-development-logging" + echo "" + exit $? +} + +ensure_inputs() { + [[ -z "$AWS_SERVICE" ]] && { error_msg "Expected \`AWS_SERVICE\` to be defined"; exit 1; } || : +} + +ensure_binaries() { + check_is_installed "kubectl" +} + +ensure_inputs +ensure_binaries + +# The purpose of the `return` subshell command in this script is to determine +# whether the script was sourced, or whether it is being executed directly. +# https://stackoverflow.com/a/28776166 +(return 0 2>/dev/null) || run diff --git a/scripts/run-e2e-tests.sh b/scripts/run-e2e-tests.sh index 0f5ad26c..97acd40a 100755 --- a/scripts/run-e2e-tests.sh +++ b/scripts/run-e2e-tests.sh @@ -29,17 +29,31 @@ source "$SCRIPTS_DIR/kind.sh" source "$SCRIPTS_DIR/pytest-image-runner.sh" ensure_cluster() { + local cluster_name_via_arg=${1:-""} + local controller_install=${2:-true} local cluster_create="$(get_cluster_create)" - if [[ "$cluster_create" == true ]]; then - local cluster_name=$(_get_kind_cluster_name) + local cluster_name=$(get_cluster_name) + + if [[ "$cluster_create" != true ]]; then + info_msg "Testing connection to existing cluster ..." + _ensure_existing_context + else + # naming cluster in the following order: + # 1. cluster_name is set in config file + # 2. cluster_name is passed as function argument. using this for dev cluster + # 3. generate cluster_name with random prefix + [ -z "$cluster_name" ] && cluster_name=$cluster_name_via_arg + [ -z "$cluster_name" ] && cluster_name=$(_get_kind_cluster_name) info_msg "Creating KIND cluster ..." setup_kind_cluster "$cluster_name" "$CONTROLLER_NAMESPACE" - build_and_install_controller "$cluster_name" "$CONTROLLER_NAMESPACE" "$CONTROLLER_IMAGE_TAG" - else - info_msg "Testing connection to existing cluster ..." - _ensure_existing_context + info_msg "Installing CRD and RBAC manifests..." + install_crd_and_rbac "$CONTROLLER_NAMESPACE" + + if [[ "$controller_install" == true ]]; then + build_and_install_controller "$cluster_name" "$CONTROLLER_NAMESPACE" "$CONTROLLER_IMAGE_TAG" + fi fi }