@@ -16,11 +16,9 @@ MAVEN_VERSION="3.9.11"
1616# Kubernetes tools
1717KUBECTL_VERSION=" 1.34.2"
1818HELM_VERSION=" 3.19.3"
19- # EKSCTL_VERSION="0.220.0"
2019EKS_NODE_VIEWER_VERSION=" 0.7.4"
2120
2221# Container tools
23- # DOCKER_COMPOSE_VERSION="2.40.2"
2422SOCI_VERSION=" 0.12.0"
2523
2624# Utilities
@@ -57,6 +55,32 @@ retry_optional() {
5755 fi
5856}
5957
58+ # Helper function to install and get version
59+ install_with_version () {
60+ local tool_name=" $1 "
61+ local install_cmd=" $2 "
62+ local version_cmd=" $3 "
63+ local fail_mode=" ${4:- FAIL} "
64+
65+ if eval " $install_cmd " ; then
66+ if [ -n " $version_cmd " ]; then
67+ local version=$( eval " $version_cmd " 2> /dev/null | head -1 || echo " unknown" )
68+ echo " ✅ Success: $tool_name $version "
69+ else
70+ echo " ✅ Success: $tool_name "
71+ fi
72+ return 0
73+ else
74+ if [ " $fail_mode " = " FAIL" ]; then
75+ echo " 💥 FATAL: $tool_name failed"
76+ exit 1
77+ else
78+ echo " ⚠️ WARNING: $tool_name failed (continuing)"
79+ return 1
80+ fi
81+ fi
82+ }
83+
6084# Helper function for consistent logging
6185log_info () {
6286 echo " $( date ' +%Y-%m-%d %H:%M:%S' ) - $1 "
@@ -75,7 +99,7 @@ download_and_verify() {
7599 local description=" $3 "
76100
77101 log_info " Downloading $description ..."
78- retry_critical " $description download " " wget -q '$url ' -O '$output '"
102+ retry_critical " $description " " wget -q '$url ' -O '$output '"
79103}
80104
81105cd /tmp
@@ -117,14 +141,13 @@ install_nodejs() {
117141
118142 # Install Node.js and tools
119143 retry_critical " Node.js ${NODE_VERSION} " " nvm install ${NODE_VERSION} "
120- retry_critical " npm (latest)" " nvm install-latest-npm"
121- retry_critical " CDK and Artillery" " npm install -g aws-cdk artillery"
122-
123- # Verify installations
124- log_info " Node.js version: $( node -v) "
125- log_info " npm version: $( npm -v) "
126- log_info " CDK version: $( cdk version) "
127- log_info " Artillery version: $( artillery -v) "
144+
145+ # Install npm and get version
146+ install_with_version " npm" " nvm install-latest-npm" " npm --version"
147+
148+ # Install CDK and Artillery separately to get individual versions
149+ install_with_version " CDK" " npm install -g aws-cdk" " cdk version"
150+ install_with_version " Artillery" " npm install -g artillery" " artillery -v"
128151}
129152
130153install_nodejs
@@ -143,8 +166,6 @@ install_maven() {
143166 echo " export M2_HOME=/usr/lib/maven" | sudo tee -a /etc/profile.d/workshop.sh > /dev/null
144167 echo " export PATH=\$ {PATH}:\$ {M2_HOME}/bin" | sudo tee -a /etc/profile.d/workshop.sh > /dev/null
145168 sudo ln -s /usr/lib/maven/bin/mvn /usr/local/bin
146-
147- log_info " Maven version: $( mvn --version | head -1) "
148169}
149170
150171install_maven
@@ -155,11 +176,9 @@ install_aws_tools() {
155176 download_and_verify " https://github.com/aws/aws-sam-cli/releases/latest/download/aws-sam-cli-linux-x86_64.zip" " aws-sam-cli-linux-x86_64.zip" " AWS SAM CLI"
156177
157178 unzip -q aws-sam-cli-linux-x86_64.zip -d sam-installation
158- retry_critical " SAM CLI installation " " sudo ./sam-installation/install --update"
179+ install_with_version " AWS SAM CLI" " sudo ./sam-installation/install --update" " /usr/local/bin/sam --version | awk '{print \$ 4}' "
159180 rm -rf ./sam-installation/ aws-sam-cli-linux-x86_64.zip
160181
161- log_info " SAM CLI version: $( /usr/local/bin/sam --version) "
162-
163182 log_info " Installing Session Manager Plugin..."
164183 download_and_verify " https://s3.amazonaws.com/session-manager-downloads/plugin/latest/linux_64bit/session-manager-plugin.rpm" " session-manager-plugin.rpm" " Session Manager Plugin"
165184 retry_critical " Session Manager Plugin" " sudo dnf -q install -y session-manager-plugin.rpm"
@@ -170,7 +189,7 @@ install_aws_tools
170189
171190install_kubernetes_tools () {
172191 log_info " Installing kubectl ${KUBECTL_VERSION} ..."
173- download_and_verify " https://s3.us-west-2.amazonaws.com/amazon-eks/${KUBECTL_VERSION} /2025-11-13/bin/linux/amd64/kubectl" " kubectl" " kubectl"
192+ download_and_verify " https://s3.us-west-2.amazonaws.com/amazon-eks/${KUBECTL_VERSION} /2025-11-13/bin/linux/amd64/kubectl" " kubectl" " kubectl ${KUBECTL_VERSION} "
174193
175194 chmod +x ./kubectl
176195 mkdir -p $HOME /bin && cp ./kubectl $HOME /bin/kubectl && export PATH=$PATH :$HOME /bin
@@ -179,31 +198,21 @@ install_kubernetes_tools() {
179198 echo " alias k=kubectl" | sudo tee -a /etc/profile.d/workshop.sh > /dev/null
180199 echo " complete -F __start_kubectl k" >> ~ /.bashrc
181200
182- log_info " kubectl version: $( kubectl version --client --short 2> /dev/null || echo ' installed' ) "
183-
184- # log_info "Installing eksctl ${EKSCTL_VERSION}..."
185- # download_and_verify "https://github.com/weaveworks/eksctl/releases/download/v${EKSCTL_VERSION}/eksctl_Linux_amd64.tar.gz" "eksctl_Linux_amd64.tar.gz" "eksctl"
186- # tar -xzf eksctl_Linux_amd64.tar.gz -C /tmp && rm eksctl_Linux_amd64.tar.gz
187- # sudo mv /tmp/eksctl /usr/local/bin
188- # log_info "eksctl version: $(eksctl version)"
189-
190201 log_info " Installing Helm ${HELM_VERSION} ..."
191- retry_critical " Helm ${HELM_VERSION} " " curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3"
192- chmod 700 get_helm.sh
193- ./get_helm.sh --version v${HELM_VERSION}
202+ retry_critical " Helm ${HELM_VERSION} " " curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 && chmod 700 get_helm.sh && ./get_helm.sh --version v${HELM_VERSION} "
194203 helm completion bash >> ~ /.bash_completion
195- log_info " Helm version: $( helm version --short) "
196204
197205 log_info " Installing eks-node-viewer ${EKS_NODE_VIEWER_VERSION} ..."
198- download_and_verify " https://github.com/awslabs/eks-node-viewer/releases/download/v${EKS_NODE_VIEWER_VERSION} /eks-node-viewer_Linux_x86_64" " eks-node-viewer" " eks-node-viewer"
206+ download_and_verify " https://github.com/awslabs/eks-node-viewer/releases/download/v${EKS_NODE_VIEWER_VERSION} /eks-node-viewer_Linux_x86_64" " eks-node-viewer" " eks-node-viewer ${EKS_NODE_VIEWER_VERSION} "
199207 chmod +x eks-node-viewer
200208 sudo mv eks-node-viewer /usr/local/bin
201209
202210 log_info " Installing k9s..."
203- retry_optional " k9s" " curl -sS https://webinstall.dev/k9s | bash"
211+ export PATH=" $HOME /.local/bin:$PATH " # k9s installs to ~/.local/bin
212+ install_with_version " k9s" " curl -sS https://webinstall.dev/k9s | bash" " k9s version --short 2>/dev/null | grep Version | awk '{print \$ 2}'" " LOG"
204213
205214 log_info " Installing e1s..."
206- retry_optional " e1s" " curl -sL https://raw.githubusercontent.com/keidarcy/e1s-install/master/cloudshell-install.sh | bash"
215+ install_with_version " e1s" " curl -sL https://raw.githubusercontent.com/keidarcy/e1s-install/master/cloudshell-install.sh | bash" " e1s --version 2>/dev/null | awk '{print \$ 3}' " " LOG "
207216}
208217
209218install_kubernetes_tools
@@ -215,15 +224,8 @@ install_container_tools() {
215224 sudo service docker start
216225 sudo usermod -aG docker ec2-user
217226
218- # log_info "Installing Docker Compose ${DOCKER_COMPOSE_VERSION}..."
219- # DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker}
220- # mkdir -p $DOCKER_CONFIG/cli-plugins
221- # download_and_verify "https://github.com/docker/compose/releases/download/v${DOCKER_COMPOSE_VERSION}/docker-compose-linux-x86_64" "$DOCKER_CONFIG/cli-plugins/docker-compose" "Docker Compose"
222- # chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose
223- # log_info "Docker Compose version: $(docker compose version)"
224-
225227 log_info " Installing SOCI snapshotter ${SOCI_VERSION} ..."
226- download_and_verify " https://github.com/awslabs/soci-snapshotter/releases/download/v$SOCI_VERSION /soci-snapshotter-$SOCI_VERSION -linux-amd64.tar.gz" " soci-snapshotter-$SOCI_VERSION -linux-amd64.tar.gz" " SOCI snapshotter"
228+ download_and_verify " https://github.com/awslabs/soci-snapshotter/releases/download/v$SOCI_VERSION /soci-snapshotter-$SOCI_VERSION -linux-amd64.tar.gz" " soci-snapshotter-$SOCI_VERSION -linux-amd64.tar.gz" " SOCI snapshotter ${SOCI_VERSION} "
227229 sudo tar -C /usr/local/bin -xf soci-snapshotter-$SOCI_VERSION -linux-amd64.tar.gz soci soci-snapshotter-grpc
228230 rm soci-snapshotter-$SOCI_VERSION -linux-amd64.tar.gz
229231
@@ -246,13 +248,11 @@ install_container_tools
246248install_utilities () {
247249 log_info " Installing jq..."
248250 sudo dnf install -y -q jq > /dev/null
249- log_info " jq version: $( jq --version) "
250251
251252 log_info " Installing yq ${YQ_VERSION} ..."
252- download_and_verify " https://github.com/mikefarah/yq/releases/download/v${YQ_VERSION} /yq_linux_amd64.tar.gz" " yq_linux_amd64.tar.gz" " yq"
253+ download_and_verify " https://github.com/mikefarah/yq/releases/download/v${YQ_VERSION} /yq_linux_amd64.tar.gz" " yq_linux_amd64.tar.gz" " yq ${YQ_VERSION} "
253254 tar xzf yq_linux_amd64.tar.gz && sudo mv yq_linux_amd64 /usr/bin/yq
254255 rm yq_linux_amd64.tar.gz
255- log_info " yq version: $( yq --version) "
256256}
257257
258258install_utilities
0 commit comments