diff --git a/manifests/phases/phases.yaml b/manifests/phases/phases.yaml index 9483bd6f2..a97c6e329 100644 --- a/manifests/phases/phases.yaml +++ b/manifests/phases/phases.yaml @@ -91,3 +91,15 @@ config: apiVersion: airshipit.org/v1alpha1 kind: Clusterctl name: clusterctl_move +--- +apiVersion: airshipit.org/v1alpha1 +kind: Phase +metadata: + name: workload-target + clusterName: target-cluster +config: + executorRef: + apiVersion: airshipit.org/v1alpha1 + kind: KubernetesApply + name: kubernetes-apply + documentEntryPoint: manifests/site/test-site/target/workload diff --git a/manifests/phases/plan.yaml b/manifests/phases/plan.yaml index b934b7bce..d07d7d630 100644 --- a/manifests/phases/plan.yaml +++ b/manifests/phases/plan.yaml @@ -10,3 +10,4 @@ phaseGroups: - name: controlplane-ephemeral - name: initinfra-target - name: workers-target + - name: workload-target diff --git a/manifests/site/test-site/target/workload/kustomization.yaml b/manifests/site/test-site/target/workload/kustomization.yaml new file mode 100644 index 000000000..54b0ca97d --- /dev/null +++ b/manifests/site/test-site/target/workload/kustomization.yaml @@ -0,0 +1,2 @@ +resources: + - ../../../../type/gating/target/workload diff --git a/manifests/type/gating/target/workload/ingress/helmrelease.yaml b/manifests/type/gating/target/workload/ingress/helmrelease.yaml new file mode 100644 index 000000000..44b913f6e --- /dev/null +++ b/manifests/type/gating/target/workload/ingress/helmrelease.yaml @@ -0,0 +1,32 @@ +--- +apiVersion: "helm.fluxcd.io/v1" +kind: HelmRelease +metadata: + name: ingress +spec: + wait: true + timeout: 600 + # This chart doesn't have any helm tests, but this still runs a noop + # helm test flow, to ensure we can do this. + test: + enable: true + values: + defaultBackend: + enabled: true + controller: + service: + type: NodePort + nodePorts: + http: 30000 + https: 30001 + kind: DaemonSet + hostNetwork: "false" + nodeSelector: + node-role.kubernetes.io/master: "" + tolerations: + - key: node-role.kubernetes.io/master + effect: NoSchedule + chart: + repository: https://kubernetes-charts.storage.googleapis.com + name: nginx-ingress + version: 1.40.1 diff --git a/manifests/type/gating/target/workload/ingress/kustomization.yaml b/manifests/type/gating/target/workload/ingress/kustomization.yaml new file mode 100644 index 000000000..72552518f --- /dev/null +++ b/manifests/type/gating/target/workload/ingress/kustomization.yaml @@ -0,0 +1,4 @@ +resources: + - namespace.yaml + - helmrelease.yaml +namespace: ingress diff --git a/manifests/type/gating/target/workload/ingress/namespace.yaml b/manifests/type/gating/target/workload/ingress/namespace.yaml new file mode 100644 index 000000000..b40cd8b2f --- /dev/null +++ b/manifests/type/gating/target/workload/ingress/namespace.yaml @@ -0,0 +1,4 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: ingress diff --git a/manifests/type/gating/target/workload/kustomization.yaml b/manifests/type/gating/target/workload/kustomization.yaml new file mode 100644 index 000000000..d360c0e38 --- /dev/null +++ b/manifests/type/gating/target/workload/kustomization.yaml @@ -0,0 +1,2 @@ +resources: + - ingress diff --git a/playbooks/airshipctl-gate-runner.yaml b/playbooks/airshipctl-gate-runner.yaml index 90888b8a9..86f2984ec 100644 --- a/playbooks/airshipctl-gate-runner.yaml +++ b/playbooks/airshipctl-gate-runner.yaml @@ -28,6 +28,7 @@ - ./tools/deployment/32_cluster_init_target_node.sh - ./tools/deployment/33_cluster_move_target_node.sh - ./tools/deployment/34_deploy_worker_node.sh + - ./tools/deployment/35_deploy_workload.sh - name: "Run gate scripts" include_role: diff --git a/tools/deployment/35_deploy_workload.sh b/tools/deployment/35_deploy_workload.sh new file mode 100755 index 000000000..fd73a0929 --- /dev/null +++ b/tools/deployment/35_deploy_workload.sh @@ -0,0 +1,36 @@ +#!/usr/bin/env bash + +# Licensed 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. + +set -xe + +#Default wait timeout is 600 seconds +export TIMEOUT=${TIMEOUT:-600s} +export KUBECONFIG=${KUBECONFIG:-"$HOME/.airship/kubeconfig"} +export KUBECONFIG_TARGET_CONTEXT=${KUBECONFIG_TARGET_CONTEXT:-"target-cluster"} +export TARGET_IP=${TARGET_IP:-"10.23.25.102"} +export TARGET_PORT=${TARGET_PORT:-"30000"} + +echo "Deploy workload" +airshipctl phase run workload-target --debug + +# TODO: Remove this after migrating to HelmRelease v2 (helm-controller) which +# supports a Ready status condition, which `airshipctl phase run` above will consume. +echo "Waiting $TIMEOUT for HelmReleases to become ready." +kubectl --timeout $TIMEOUT --kubeconfig $KUBECONFIG --context $KUBECONFIG_TARGET_CONTEXT wait hr --for condition=released --all --all-namespaces + +echo "Ensure we can reach ingress controller default backend" +if "404" != "$(curl --head --write-out '%{http_code}' --silent --output /dev/null $TARGET_IP:$TARGET_PORT/should-404)"; then + echo -e "\nFailed to reach ingress controller default backend." + exit 1 +fi diff --git a/zuul.d/jobs.yaml b/zuul.d/jobs.yaml index 6bf7aed01..b7f8e92d2 100644 --- a/zuul.d/jobs.yaml +++ b/zuul.d/jobs.yaml @@ -99,6 +99,7 @@ - ./tools/deployment/32_cluster_init_target_node.sh - ./tools/deployment/33_cluster_move_target_node.sh - ./tools/deployment/34_deploy_worker_node.sh + - ./tools/deployment/35_deploy_workload.sh serve_dir: /srv/iso serve_port: 8099 log_roles: