Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add kind-dev command to start a kind dev cluster #338

Open
wants to merge 9 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 7 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
44 changes: 26 additions & 18 deletions scripts/controller-setup.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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 ... "
Expand All @@ -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"
Expand Down
53 changes: 53 additions & 0 deletions scripts/create-dev-cluster.sh
Original file line number Diff line number Diff line change
@@ -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
27 changes: 20 additions & 7 deletions scripts/run-e2e-tests.sh
Original file line number Diff line number Diff line change
Expand Up @@ -30,16 +30,29 @@ source "$SCRIPTS_DIR/pytest-image-runner.sh"

ensure_cluster() {
local cluster_create="$(get_cluster_create)"
if [[ "$cluster_create" == true ]]; then
local cluster_name=$(_get_kind_cluster_name)

if [[ "$cluster_create" != true ]]; then
info_msg "Testing connection to existing cluster ..."
_ensure_existing_context
else
local cluster_name=$(get_cluster_name)
local controller_install=${2:-true}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you please move all of the positional arguments into local variables at the top of this method, so that it's clear what the inputs are. Then you can copy them into their respective variables further down in the method as needed.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

moved 4c321c2

# 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=$1
[ -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 CRDs , common and RBAC manifest..."
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
info_msg "Installing CRDs , common and RBAC manifest..."
info_msg "Installing CRD and RBAC manifests..."

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed 4ed9f07

install_crd_and_rbac "$CONTROLLER_NAMESPACE"

if [[ "$controller_install" == true ]]; then
build_and_install_controller "$cluster_name" "$CONTROLLER_NAMESPACE" "$CONTROLLER_IMAGE_TAG"
fi
fi
}

Expand Down Expand Up @@ -92,7 +105,7 @@ _ensure_existing_context() {

run() {
ensure_aws_credentials
ensure_cluster
ensure_cluster ""

build_and_run_tests
exit $?
Expand Down