Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
#!/bin/bash
# Exit on error
set -e
# Function to log messages
log() {
echo "[INFO] $1"
}
# Temporarily remove needrestart
if dpkg -l | grep needrestart; then
log "Temporarily removing needrestart..."
sudo apt-get remove -y needrestart > /dev/null
fi
# Update OS
log "Updating OS..."
sudo apt-get update -y > /dev/null
sudo DEBIAN_FRONTEND=noninteractive apt-get upgrade -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" > /dev/null
log "OS updated successfully."
# Install Docker if it's not already installed
if ! command -v docker &> /dev/null; then
log "Installing Docker..."
sudo apt-get install -y docker.io > /dev/null
sudo systemctl enable docker > /dev/null
sudo systemctl start docker > /dev/null
log "Docker installed successfully."
fi
# Install kubectl if it's not already installed
if ! command -v kubectl &> /dev/null; then
log "Installing kubectl..."
sudo apt-get update && sudo apt-get install -y apt-transport-https > /dev/null
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - > /dev/null
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list > /dev/null
sudo apt-get update > /dev/null
sudo apt-get install -y kubectl > /dev/null
log "kubectl installed successfully."
fi
# Install kind if it's not already installed
if ! command -v kind &> /dev/null; then
log "Installing kind..."
curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.12.0/kind-linux-amd64 > /dev/null
chmod +x ./kind
sudo mv ./kind /usr/local/bin/ > /dev/null
log "kind installed successfully."
fi
# Check if a kind cluster already exists and create if it doesn't
if ! kind get clusters | grep -q 'kind'; then
log "Creating kind cluster..."
kind create cluster > /dev/null
log "Kind cluster created successfully."
else
log "Kind cluster already exists. Skipping creation."
fi
# Install helm if it's not already installed
if ! command -v helm &> /dev/null; then
log "Installing helm..."
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 > /dev/null
chmod 700 get_helm.sh
./get_helm.sh > /dev/null
rm get_helm.sh
log "Helm installed successfully."
fi
# Install ingress-nginx with helm
log "Installing ingress-nginx..."
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx > /dev/null
helm repo update > /dev/null
helm upgrade --install ingress-nginx ingress-nginx/ingress-nginx -n ingress-nginx --create-namespace --set controller.hostNetwork=true,controller.service.type="" > /dev/null
# Wait for ingress-nginx to be ready
log "Waiting for ingress-nginx to be ready..."
kubectl wait --namespace ingress-nginx \
--for=condition=ready pod \
--selector=app.kubernetes.io/component=controller \
--timeout=120s > /dev/null
log "ingress-nginx is ready."
###################################################################################################
# # Fetch the ClusterIP and Port of the ingress controller service
# CLUSTER_IP=$(kubectl get svc -n ingress-nginx ingress-nginx-controller -o=jsonpath='{.spec.clusterIP}')
# PORT=$(kubectl get svc -n ingress-nginx ingress-nginx-controller -o=jsonpath='{.spec.ports[?(@.name=="http")].port}')
# # Set up iptables rules
# sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination $CLUSTER_IP:$PORT
# sudo iptables -t nat -A POSTROUTING -j MASQUERADE
###################################################################################################
# Clone the repository
if [ ! -d "org.etsi.osl.main" ]; then
log "Cloning repository..."
git clone -b kubernetes https://github.com/openslice/org.etsi.osl.main.git > /dev/null
log "Repository cloned successfully."
else
log "Repository already exists. Switching to kubernetes branch and pulling latest changes..."
cd org.etsi.osl.main
git fetch origin > /dev/null
git checkout -B kubernetes origin/kubernetes > /dev/null
git pull origin kubernetes > /dev/null
cd ..
log "Latest changes pulled successfully."
fi
# Find the host's IP address automatically
DEFAULT_IFACE=$(ip route show default | awk '/default/ {print $5}')
HOST_IP=$(ip -4 addr show $DEFAULT_IFACE | grep -oP '(?<=inet\s)\d+(\.\d+){3}')
# Define the release name
RELEASE_NAME="my-openslice"
# Define a specific port for Keycloak
KEYCLOAK_PORT=31000
# Change directory and run helm install
cd org.etsi.osl.main/kubernetes/helm/openslice
log "Installing my-openslice..."
# change this
# helm upgrade --install $RELEASE_NAME . -n openslice --create-namespace --set rooturl=http://$HOST_IP:$KEYCLOAK_PORT,mysql.storage="500Mi" > /dev/null
helm upgrade --install $RELEASE_NAME . -n openslice --create-namespace --set rooturl=http://$HOST_IP,mysql.storage="500Mi" > /dev/null
# Update services to NodePort
# full_svc_name="${RELEASE_NAME}-${svc_suffix}"
# log "Updating $full_svc_name service to use NodePort..."
# kubectl patch svc ${RELEASE_NAME}-keycloak -n openslice --type='json' -p="[{'op': 'replace', 'path': '/spec/type', 'value': 'NodePort'}, {'op': 'replace', 'path': '/spec/ports/0/nodePort', 'value': $KEYCLOAK_PORT}]"
# for svc_suffix in "keycloak" "portalweb" "tmfweb"; do
# full_svc_name="${RELEASE_NAME}-${svc_suffix}"
# log "Updating $full_svc_name service to use NodePort..."
# kubectl patch svc $full_svc_name -n openslice --type='json' -p="[{'op': 'replace', 'path': '/spec/type', 'value': 'NodePort'}]"
# done
cd - > /dev/null
log "my-openslice installed successfully."
# # Display the summary
# log "=== Access Information ==="
# # Fetch and display NodePorts for each service
# for svc_suffix in "keycloak" "portalweb" "tmfweb"; do
# full_svc_name="${RELEASE_NAME}-${svc_suffix}"
# NODE_PORT=$(kubectl get -o jsonpath="{.spec.ports[0].nodePort}" services $full_svc_name -n openslice)
# log "You can access $svc_suffix on ${HOST_IP}:${NODE_PORT}"
# done