Skip to content

Commit

Permalink
kso-issue-376: Add kinds.groovy for kind cluster setup
Browse files Browse the repository at this point in the history
  • Loading branch information
domhanak committed Feb 5, 2024
1 parent 132d123 commit 56b139d
Showing 1 changed file with 125 additions and 0 deletions.
125 changes: 125 additions & 0 deletions .ci/jenkins/scripts/kind.groovy
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
kindVersion = env.KIND_VERSION ?: 'v0.20.0'
kindRegistryName = "kind-registry"
kindRegistryPort = "5001"

void start(boolean debug = false) {
println "Create kind cluster with containerd registry config dir enabled."
sh """
cat <<EOF | kind create cluster -n kind --config=-
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
containerdConfigPatches:
- |-
[plugins."io.containerd.grpc.v1.cri".registry]
config_path = "/etc/containerd/certs.d"
EOF
"""

if (debug) {
sh 'kubectl get events -n kube-system'
}
}

void waitUntilKubeSystemPodsAreStarted() {
println 'Wait for kube system pods to be in Running state'
def kindStatus = sh(returnStatus: true, script: '''
if ! kubectl wait -n kube-system --for=condition=ready pods --all --timeout=120s ; then
echo "some pods in the system are not running"
kubectl get pods -A -o wide || true
exit 1
fi
''')

if (kindStatus != 0) {
error 'Error starting Kind ...'
}
}

void createRegistryContainer() {
println 'Create container registry container'
def containerRegistryStatus = sh(returnStatus: true, script: '''
docker run \
-d --restart=always -p "127.0.0.1:${kindRegistryPort}:5000" --network bridge --name "${kindRegistryName}" \
-v /tmp/certs:/certs \
registry:2
''')

if (containerRegistryStatus != 0) {
error 'Error while creating registry container ...'
}
}

void connectRegistryContainerToClusterNetwork() {
println 'Connect registry container to cluster network'
def containerRegistryConnectionStatus = sh(returnStatus: true, script: '''
if [ "$(docker inspect -f='{{json .NetworkSettings.Networks.kind}}' "${kindRegistryName}")" = 'null' ]; then
docker network connect "kind" "${kindRegistryName}"
fi
''')

if (containerRegistryConnectionStatus != 0) {
error 'Error while connecting registry container to the cluster ...'
}
}

void addRegistryConfigToTheClusterNodes() {
println 'Add registry config to cluster nodes'
def addRegistryConfigStatus = sh(returnStatus: true, script: '''
export REGISTRY_DIR="/etc/containerd/certs.d/172.18.0.3:5000"
export IP_ADDRESS=$(docker inspect --format='{{(index (index .NetworkSettings.Networks "kind") ).IPAddress}}' ${kindRegistryName})
for node in $(kind get nodes); do
docker exec "${node}" mkdir -p "${REGISTRY_DIR}"
cat <<EOF | docker exec -i "${node}" cp /dev/stdin "${REGISTRY_DIR}/hosts.toml"
[host."http://${IP_ADDRESS}:5000"]
capabilities = ["pull", "resolve", "push"]
skip_verify = true
EOF
done
''')

if (addRegistryConfigStatus != 0) {
error 'Error while adding registry config to the cluster nodes ...'
}
}

void documentLocalRegistry() {
println 'Document created local registry'
def documentLocalRegistryStatus = sh(returnStatus: true, script: '''
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: ConfigMap
metadata:
name: local-registry-hosting
namespace: kube-public
data:
localRegistryHosting.v1: |
hostFromClusterNetwork: "${IP_ADDRESS}:5000"
help: "https://kind.sigs.k8s.io/docs/user/local-registry/"
EOF
''')

if (documentLocalRegistryStatus != 0) {
error 'Error while adding registry config to the cluster nodes ...'
}
}

return this

0 comments on commit 56b139d

Please sign in to comment.