зеркало из https://github.com/Azure/ARO-RP.git
185 строки
7.6 KiB
Bash
Executable File
185 строки
7.6 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -e
|
|
|
|
# Determine the base directory of the script
|
|
BASE_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)
|
|
|
|
# Construct the path to const.go using the base directory
|
|
CONST_GO_PATH="$BASE_DIR/pkg/util/version/const.go"
|
|
|
|
# Debugging: Print paths for verification
|
|
echo "Base directory: $BASE_DIR"
|
|
echo "Path to const.go: $CONST_GO_PATH"
|
|
|
|
# Check if const.go exists
|
|
if [ ! -f "$CONST_GO_PATH" ]; then
|
|
echo "Error: File $CONST_GO_PATH not found."
|
|
exit 1
|
|
fi
|
|
|
|
# Extract version and pullspec from const.go
|
|
OPENSHIFT_VERSION=$(awk -F'[(,)]' '/NewVersion/ {gsub(/ /, ""); print $2"."$3"."$4; exit}' "$CONST_GO_PATH")
|
|
OCP_PULLSPEC=$(awk -F'"' '/PullSpec:/ {print $2; exit}' "$CONST_GO_PATH")
|
|
|
|
# Set the INSTALLER_PULLSPEC
|
|
INSTALLER_PULLSPEC="arointsvc.azurecr.io/aro-installer:release-$(echo $OPENSHIFT_VERSION | sed 's/\.[^.]*$//')"
|
|
echo "Using OpenShift version: $OPENSHIFT_VERSION"
|
|
echo "Using OCP_PULLSPEC: $OCP_PULLSPEC"
|
|
echo "Using INSTALLER_PULLSPEC: $INSTALLER_PULLSPEC"
|
|
|
|
# Function to validate RP running
|
|
validate_rp_running() {
|
|
echo "########## Checking ARO RP Status ##########"
|
|
ELAPSED=0
|
|
while true; do
|
|
sleep 5
|
|
http_code=$(curl -k -s -o /dev/null -w '%{http_code}' https://localhost:8443/healthz/ready || true)
|
|
case $http_code in
|
|
"200")
|
|
echo "########## ✅ ARO RP Running ##########"
|
|
break
|
|
;;
|
|
*)
|
|
echo "Attempt $ELAPSED - local RP is NOT up. Code : $http_code, waiting"
|
|
sleep 2
|
|
# after 40 secs return exit 1 to not block ci
|
|
ELAPSED=$((ELAPSED + 1))
|
|
if [ $ELAPSED -eq 20 ]; then
|
|
exit 1
|
|
fi
|
|
;;
|
|
esac
|
|
done
|
|
}
|
|
|
|
# Ensure all env vars are set (LOCATION, CLUSTER_RESOURCEGROUP, CLUSTER_NAME)
|
|
ALL_SET="true"
|
|
if [ -z "${AZURE_SUBSCRIPTION_ID}" ]; then ALL_SET="false" && echo "AZURE_SUBSCRIPTION_ID is unset"; else echo "AZURE_SUBSCRIPTION_ID is set to '$AZURE_SUBSCRIPTION_ID'"; fi
|
|
if [ -z "${LOCATION}" ]; then ALL_SET="false" && echo "LOCATION is unset"; else echo "LOCATION is set to '$LOCATION'"; fi
|
|
if [ -z "${CLUSTER_RESOURCEGROUP}" ]; then ALL_SET="false" && echo "CLUSTER_RESOURCEGROUP is unset"; else echo "CLUSTER_RESOURCEGROUP is set to '$CLUSTER_RESOURCEGROUP'"; fi
|
|
if [ -z "${CLUSTER_NAME}" ]; then ALL_SET="false" && echo "CLUSTER_NAME is unset"; else echo "CLUSTER_NAME is set to '$CLUSTER_NAME'"; fi
|
|
if [ -z "${CLUSTER_VNET}" ]; then CLUSTER_VNET="aro-vnet2"; fi; echo "CLUSTER_VNET is ${CLUSTER_VNET}"
|
|
if [ -z "${CLUSTER_MASTER_SUBNET}" ]; then CLUSTER_MASTER_SUBNET="master-subnet"; fi; echo "CLUSTER_MASTER_SUBNET is ${CLUSTER_MASTER_SUBNET}"
|
|
if [ -z "${CLUSTER_WORKER_SUBNET}" ]; then CLUSTER_WORKER_SUBNET="worker-subnet"; fi; echo "CLUSTER_WORKER_SUBNET is ${CLUSTER_WORKER_SUBNET}"
|
|
|
|
if [[ "${ALL_SET}" != "true" ]]; then exit 1; fi
|
|
|
|
# Check Azure CLI version
|
|
echo "Checking Azure CLI version..."
|
|
az_version=$(az --version | grep 'azure-cli' | awk '{print $2}')
|
|
required_version="2.30.0"
|
|
if [ "$(printf '%s\n' "$required_version" "$az_version" | sort -V | head -n1)" = "$required_version" ]; then
|
|
echo "Azure CLI version is compatible"
|
|
else
|
|
echo "Azure CLI version must be $required_version or later. Please upgrade."
|
|
exit 1
|
|
fi
|
|
|
|
# Set the subscription
|
|
echo "Setting the subscription..."
|
|
az account set --subscription $AZURE_SUBSCRIPTION_ID
|
|
|
|
# Register the subscription directly
|
|
echo "Registering the subscription directly..."
|
|
curl -k -X PUT \
|
|
-H 'Content-Type: application/json' \
|
|
-d '{
|
|
"state": "Registered",
|
|
"properties": {
|
|
"tenantId": "'"$AZURE_TENANT_ID"'",
|
|
"registeredFeatures": [
|
|
{
|
|
"name": "Microsoft.RedHatOpenShift/RedHatEngineering",
|
|
"state": "Registered"
|
|
}
|
|
]
|
|
}
|
|
}' "https://localhost:8443/subscriptions/$AZURE_SUBSCRIPTION_ID?api-version=2.0"
|
|
|
|
# Validate RP running
|
|
validate_rp_running
|
|
|
|
# Function to add supported OpenShift version
|
|
add_openshift_version() {
|
|
local version=$1
|
|
local openshift_pullspec=$2
|
|
local installer_pullspec=$3
|
|
|
|
echo "Adding OpenShift version $version..."
|
|
curl -k -X PUT "https://localhost:8443/admin/versions" --header "Content-Type: application/json" -d '{
|
|
"properties": {
|
|
"version": "'"$version"'",
|
|
"enabled": true,
|
|
"openShiftPullspec": "'"$openshift_pullspec"'",
|
|
"installerPullspec": "'"$installer_pullspec"'"
|
|
}
|
|
}'
|
|
}
|
|
|
|
# Add the required OpenShift version
|
|
add_openshift_version "$OPENSHIFT_VERSION" "$OCP_PULLSPEC" "$INSTALLER_PULLSPEC"
|
|
|
|
# Delete the existing cluster if it exists
|
|
echo "Deleting the existing cluster if it exists..."
|
|
az aro delete --resource-group $CLUSTER_RESOURCEGROUP --name $CLUSTER_NAME --yes --no-wait || true
|
|
|
|
# Wait for the cluster deletion to complete
|
|
echo "Waiting for the cluster to be deleted..."
|
|
while az aro show --name $CLUSTER_NAME --resource-group $CLUSTER_RESOURCEGROUP &> /dev/null; do
|
|
echo "Cluster is still being deleted...waiting 30 seconds."
|
|
sleep 30
|
|
done
|
|
|
|
# Create resource group
|
|
echo "Creating resource group $CLUSTER_RESOURCEGROUP in $LOCATION..."
|
|
az group create --name $CLUSTER_RESOURCEGROUP --location $LOCATION
|
|
|
|
# Create virtual network
|
|
echo "Creating virtual network $CLUSTER_VNET in $CLUSTER_RESOURCEGROUP..."
|
|
az network vnet create --resource-group $CLUSTER_RESOURCEGROUP --name $CLUSTER_VNET --address-prefixes 10.0.0.0/22
|
|
|
|
# Delete any existing subnets and associated resources
|
|
echo "Deleting any existing master subnet resources..."
|
|
az network vnet subnet delete --resource-group $CLUSTER_RESOURCEGROUP --vnet-name $CLUSTER_VNET --name $CLUSTER_MASTER_SUBNET || true
|
|
|
|
echo "Deleting any existing worker subnet resources..."
|
|
az network vnet subnet delete --resource-group $CLUSTER_RESOURCEGROUP --vnet-name $CLUSTER_VNET --name $CLUSTER_WORKER_SUBNET || true
|
|
|
|
# Create master subnet
|
|
echo "Creating master subnet $CLUSTER_MASTER_SUBNET in $CLUSTER_VNET..."
|
|
az network vnet subnet create --resource-group $CLUSTER_RESOURCEGROUP --vnet-name $CLUSTER_VNET --name $CLUSTER_MASTER_SUBNET --address-prefixes 10.0.0.0/23 --service-endpoints Microsoft.ContainerRegistry
|
|
|
|
# Create worker subnet
|
|
echo "Creating worker subnet $CLUSTER_WORKER_SUBNET in $CLUSTER_VNET..."
|
|
az network vnet subnet create --resource-group $CLUSTER_RESOURCEGROUP --vnet-name $CLUSTER_VNET --name $CLUSTER_WORKER_SUBNET --address-prefixes 10.0.2.0/23 --service-endpoints Microsoft.ContainerRegistry
|
|
|
|
# Create cluster
|
|
echo "Creating cluster $CLUSTER_NAME in $CLUSTER_RESOURCEGROUP..."
|
|
az aro create --resource-group $CLUSTER_RESOURCEGROUP --name $CLUSTER_NAME --vnet $CLUSTER_VNET --master-subnet $CLUSTER_MASTER_SUBNET --worker-subnet $CLUSTER_WORKER_SUBNET --pull-secret "$PULL_SECRET" --location $LOCATION --version $OPENSHIFT_VERSION || {
|
|
echo "Cluster creation failed. Fetching deployment logs..."
|
|
|
|
# Fetch the deployment logs for further analysis
|
|
deployment_name=$(az deployment group list --resource-group $CLUSTER_RESOURCEGROUP --query '[0].name' -o tsv)
|
|
if [ -n "$deployment_name" ]; then
|
|
az deployment group show --name $deployment_name --resource-group $CLUSTER_RESOURCEGROUP
|
|
else
|
|
echo "No deployment found for resource group $CLUSTER_RESOURCEGROUP."
|
|
fi
|
|
|
|
exit 1
|
|
}
|
|
|
|
# Check for the existence of the cluster
|
|
if az aro show --name $CLUSTER_NAME --resource-group $CLUSTER_RESOURCEGROUP &> /dev/null; then
|
|
echo "Cluster creation successful."
|
|
else
|
|
echo "Cluster creation failed. Please check the logs for more details."
|
|
exit 1
|
|
fi
|
|
|
|
echo "To list cluster credentials, run:"
|
|
echo " az aro list-credentials --name $CLUSTER_NAME --resource-group $CLUSTER_RESOURCEGROUP"
|
|
|
|
echo "Note: Do not manually delete any resources. Let the script handle the deletions to avoid issues."
|