initial commit
This commit is contained in:
153
.devcontainer/post-install.sh
Normal file
153
.devcontainer/post-install.sh
Normal file
@@ -0,0 +1,153 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
echo "===================================="
|
||||
echo "Kubebuilder DevContainer Setup"
|
||||
echo "===================================="
|
||||
|
||||
# Verify running as root (required for installing to /usr/local/bin and /etc)
|
||||
if [ "$(id -u)" -ne 0 ]; then
|
||||
echo "ERROR: This script must be run as root"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "Detecting system architecture..."
|
||||
# Detect architecture using uname
|
||||
MACHINE=$(uname -m)
|
||||
case "${MACHINE}" in
|
||||
x86_64)
|
||||
ARCH="amd64"
|
||||
;;
|
||||
aarch64|arm64)
|
||||
ARCH="arm64"
|
||||
;;
|
||||
*)
|
||||
echo "WARNING: Unsupported architecture ${MACHINE}, defaulting to amd64"
|
||||
ARCH="amd64"
|
||||
;;
|
||||
esac
|
||||
echo "Architecture: ${ARCH}"
|
||||
|
||||
echo ""
|
||||
echo "------------------------------------"
|
||||
echo "Setting up bash completion..."
|
||||
echo "------------------------------------"
|
||||
|
||||
BASH_COMPLETIONS_DIR="/usr/share/bash-completion/completions"
|
||||
|
||||
# Enable bash-completion in root's .bashrc (devcontainer runs as root)
|
||||
if ! grep -q "source /usr/share/bash-completion/bash_completion" ~/.bashrc 2>/dev/null; then
|
||||
echo 'source /usr/share/bash-completion/bash_completion' >> ~/.bashrc
|
||||
echo "Added bash-completion to .bashrc"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "------------------------------------"
|
||||
echo "Installing development tools..."
|
||||
echo "------------------------------------"
|
||||
|
||||
# Install kind
|
||||
if ! command -v kind &> /dev/null; then
|
||||
echo "Installing kind..."
|
||||
curl -Lo /usr/local/bin/kind "https://kind.sigs.k8s.io/dl/latest/kind-linux-${ARCH}"
|
||||
chmod +x /usr/local/bin/kind
|
||||
echo "kind installed successfully"
|
||||
fi
|
||||
|
||||
# Generate kind bash completion
|
||||
if command -v kind &> /dev/null; then
|
||||
if kind completion bash > "${BASH_COMPLETIONS_DIR}/kind" 2>/dev/null; then
|
||||
echo "kind completion installed"
|
||||
else
|
||||
echo "WARNING: Failed to generate kind completion"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Install kubebuilder
|
||||
if ! command -v kubebuilder &> /dev/null; then
|
||||
echo "Installing kubebuilder..."
|
||||
curl -Lo /usr/local/bin/kubebuilder "https://go.kubebuilder.io/dl/latest/linux/${ARCH}"
|
||||
chmod +x /usr/local/bin/kubebuilder
|
||||
echo "kubebuilder installed successfully"
|
||||
fi
|
||||
|
||||
# Generate kubebuilder bash completion
|
||||
if command -v kubebuilder &> /dev/null; then
|
||||
if kubebuilder completion bash > "${BASH_COMPLETIONS_DIR}/kubebuilder" 2>/dev/null; then
|
||||
echo "kubebuilder completion installed"
|
||||
else
|
||||
echo "WARNING: Failed to generate kubebuilder completion"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Install kubectl
|
||||
if ! command -v kubectl &> /dev/null; then
|
||||
echo "Installing kubectl..."
|
||||
KUBECTL_VERSION=$(curl -Ls https://dl.k8s.io/release/stable.txt)
|
||||
curl -Lo /usr/local/bin/kubectl "https://dl.k8s.io/release/${KUBECTL_VERSION}/bin/linux/${ARCH}/kubectl"
|
||||
chmod +x /usr/local/bin/kubectl
|
||||
echo "kubectl installed successfully"
|
||||
fi
|
||||
|
||||
# Generate kubectl bash completion
|
||||
if command -v kubectl &> /dev/null; then
|
||||
if kubectl completion bash > "${BASH_COMPLETIONS_DIR}/kubectl" 2>/dev/null; then
|
||||
echo "kubectl completion installed"
|
||||
else
|
||||
echo "WARNING: Failed to generate kubectl completion"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Generate Docker bash completion
|
||||
if command -v docker &> /dev/null; then
|
||||
if docker completion bash > "${BASH_COMPLETIONS_DIR}/docker" 2>/dev/null; then
|
||||
echo "docker completion installed"
|
||||
else
|
||||
echo "WARNING: Failed to generate docker completion"
|
||||
fi
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "------------------------------------"
|
||||
echo "Configuring Docker environment..."
|
||||
echo "------------------------------------"
|
||||
|
||||
# Wait for Docker to be ready
|
||||
echo "Waiting for Docker to be ready..."
|
||||
for i in {1..30}; do
|
||||
if docker info >/dev/null 2>&1; then
|
||||
echo "Docker is ready"
|
||||
break
|
||||
fi
|
||||
if [ "$i" -eq 30 ]; then
|
||||
echo "WARNING: Docker not ready after 30s"
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
|
||||
# Create kind network (ignore if already exists)
|
||||
if ! docker network inspect kind >/dev/null 2>&1; then
|
||||
if docker network create kind >/dev/null 2>&1; then
|
||||
echo "Created kind network"
|
||||
else
|
||||
echo "WARNING: Failed to create kind network (may already exist)"
|
||||
fi
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "------------------------------------"
|
||||
echo "Verifying installations..."
|
||||
echo "------------------------------------"
|
||||
kind version
|
||||
kubebuilder version
|
||||
kubectl version --client
|
||||
docker --version
|
||||
go version
|
||||
|
||||
echo ""
|
||||
echo "===================================="
|
||||
echo "DevContainer ready!"
|
||||
echo "===================================="
|
||||
echo "All development tools installed successfully."
|
||||
echo "You can now start building Kubernetes operators."
|
||||
Reference in New Issue
Block a user