Migration to podman. Dev is OK, certificate problem with test
This commit is contained in:
250
docker/podman_env_switch.sh
Normal file
250
docker/podman_env_switch.sh
Normal file
@@ -0,0 +1,250 @@
|
||||
#!/usr/bin/env zsh
|
||||
|
||||
# Function to display usage information
|
||||
usage() {
|
||||
echo "Usage: source $0 <environment> [version]"
|
||||
echo " environment: The environment to use (dev, prod, test, integration, bugfix)"
|
||||
echo " version : (Optional) Specific release version to deploy"
|
||||
echo " If not specified, uses 'latest' (except for dev environment)"
|
||||
}
|
||||
|
||||
# Check if the script is sourced - improved for both bash and zsh
|
||||
is_sourced() {
|
||||
if [[ -n "$ZSH_VERSION" ]]; then
|
||||
# In zsh, check if we're in a sourced context
|
||||
[[ "$ZSH_EVAL_CONTEXT" =~ "(:file|:cmdsubst)" ]] || [[ "$0" != "$ZSH_ARGZERO" ]]
|
||||
else
|
||||
# In bash, compare BASH_SOURCE with $0
|
||||
[[ "${BASH_SOURCE[0]}" != "${0}" ]]
|
||||
fi
|
||||
}
|
||||
|
||||
if ! is_sourced; then
|
||||
echo "Error: This script must be sourced, not executed directly."
|
||||
echo "Please run: source $0 <environment> [version]"
|
||||
if [[ -n "$ZSH_VERSION" ]]; then
|
||||
return 1 2>/dev/null || exit 1
|
||||
else
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# Check if an environment is provided
|
||||
if [ $# -eq 0 ]; then
|
||||
usage
|
||||
return 1
|
||||
fi
|
||||
|
||||
ENVIRONMENT=$1
|
||||
VERSION=${2:-latest} # Default to latest if not specified
|
||||
|
||||
# Check if podman and podman-compose are available
|
||||
if ! command -v podman &> /dev/null; then
|
||||
echo "Error: podman is not installed or not in PATH"
|
||||
echo "Please install podman first"
|
||||
return 1
|
||||
fi
|
||||
|
||||
if ! command -v podman-compose &> /dev/null; then
|
||||
echo "Error: podman-compose is not installed or not in PATH"
|
||||
echo "Please install podman-compose first"
|
||||
return 1
|
||||
fi
|
||||
|
||||
CONTAINER_CMD="podman"
|
||||
# Store the actual path to podman-compose to avoid recursion
|
||||
COMPOSE_CMD_PATH=$(command -v podman-compose)
|
||||
|
||||
echo "Using container runtime: $CONTAINER_CMD"
|
||||
echo "Using compose command: $COMPOSE_CMD_PATH"
|
||||
|
||||
# Set default platform to AMD64 for consistency
|
||||
export BUILDAH_PLATFORM=linux/amd64
|
||||
export PODMAN_PLATFORM=linux/amd64
|
||||
|
||||
# Set variables based on the environment
|
||||
case $ENVIRONMENT in
|
||||
dev)
|
||||
PODMAN_CONNECTION="default"
|
||||
COMPOSE_FILE="compose_dev.yaml"
|
||||
VERSION="latest" # Always use latest for dev
|
||||
;;
|
||||
prod)
|
||||
PODMAN_CONNECTION="mxz536.stackhero-network.com"
|
||||
COMPOSE_FILE="compose_stackhero.yaml"
|
||||
;;
|
||||
test)
|
||||
PODMAN_CONNECTION="test-environment"
|
||||
COMPOSE_FILE="compose_test.yaml"
|
||||
;;
|
||||
integration)
|
||||
PODMAN_CONNECTION="integration-environment"
|
||||
COMPOSE_FILE="compose_integration.yaml"
|
||||
;;
|
||||
bugfix)
|
||||
PODMAN_CONNECTION="bugfix-environment"
|
||||
COMPOSE_FILE="compose_bugfix.yaml"
|
||||
;;
|
||||
*)
|
||||
echo "Invalid environment: $ENVIRONMENT"
|
||||
usage
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
|
||||
# Set container registry account
|
||||
CONTAINER_ACCOUNT="josakola"
|
||||
|
||||
# Handle remote connections for podman
|
||||
if [[ "$PODMAN_CONNECTION" != "default" ]]; then
|
||||
echo "Setting up remote podman connection: $PODMAN_CONNECTION"
|
||||
|
||||
# Check if podman connection exists
|
||||
if ! podman system connection list --format '{{.Name}}' 2>/dev/null | grep -q "^$PODMAN_CONNECTION$"; then
|
||||
echo "Warning: Podman connection '$PODMAN_CONNECTION' does not exist."
|
||||
echo -n "Do you want to set up this connection now? (y/n): "
|
||||
read -r CREATE_CONNECTION
|
||||
if [[ "$CREATE_CONNECTION" == "y" || "$CREATE_CONNECTION" == "Y" ]]; then
|
||||
echo -n "Please specify the SSH connection string (e.g., user@remote_host): "
|
||||
read -r SSH_CONNECTION
|
||||
|
||||
if [[ -n "$SSH_CONNECTION" ]]; then
|
||||
podman system connection add "$PODMAN_CONNECTION" --identity ~/.ssh/id_rsa "ssh://$SSH_CONNECTION/run/user/1000/podman/podman.sock"
|
||||
if [[ $? -ne 0 ]]; then
|
||||
echo "Failed to create podman connection. Please create it manually."
|
||||
return 1
|
||||
fi
|
||||
else
|
||||
echo "No SSH connection string provided."
|
||||
return 1
|
||||
fi
|
||||
else
|
||||
echo "Using local podman setup instead."
|
||||
PODMAN_CONNECTION="default"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Set the connection
|
||||
if [[ "$PODMAN_CONNECTION" != "default" ]]; then
|
||||
# Use podman context instead of manually setting CONTAINER_HOST
|
||||
podman system connection default "$PODMAN_CONNECTION" 2>/dev/null
|
||||
if [[ $? -eq 0 ]]; then
|
||||
echo "Switched to remote podman connection: $PODMAN_CONNECTION"
|
||||
else
|
||||
echo "Warning: Failed to switch to connection $PODMAN_CONNECTION, using local setup"
|
||||
PODMAN_CONNECTION="default"
|
||||
fi
|
||||
fi
|
||||
else
|
||||
echo "Using local podman setup with AMD64 platform"
|
||||
# Ensure we're using the default local connection
|
||||
podman system connection default "" 2>/dev/null || true
|
||||
fi
|
||||
|
||||
# Check if compose file exists
|
||||
if [[ ! -f "$COMPOSE_FILE" ]]; then
|
||||
echo "Warning: Compose file '$COMPOSE_FILE' does not exist."
|
||||
if [[ -f "compose_dev.yaml" ]]; then
|
||||
echo -n "Do you want to create it based on compose_dev.yaml? (y/n): "
|
||||
read -r CREATE_FILE
|
||||
if [[ "$CREATE_FILE" == "y" || "$CREATE_FILE" == "Y" ]]; then
|
||||
# Create new compose file based on compose_dev.yaml with version variables
|
||||
if sed 's/\(image: josakola\/[^:]*\):latest/\1:${EVEAI_VERSION:-latest}/g' compose_dev.yaml > "$COMPOSE_FILE" 2>/dev/null; then
|
||||
echo "Created $COMPOSE_FILE with version placeholders."
|
||||
else
|
||||
echo "Failed to create $COMPOSE_FILE"
|
||||
return 1
|
||||
fi
|
||||
else
|
||||
echo "Cannot proceed without a valid compose file."
|
||||
return 1
|
||||
fi
|
||||
else
|
||||
echo "Cannot create $COMPOSE_FILE: compose_dev.yaml not found."
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# Set environment variables
|
||||
export COMPOSE_FILE=$COMPOSE_FILE
|
||||
export EVEAI_VERSION=$VERSION
|
||||
export CONTAINER_ACCOUNT=$CONTAINER_ACCOUNT
|
||||
export CONTAINER_CMD=$CONTAINER_CMD
|
||||
export COMPOSE_CMD_PATH=$COMPOSE_CMD_PATH
|
||||
|
||||
echo "Set COMPOSE_FILE to $COMPOSE_FILE"
|
||||
echo "Set EVEAI_VERSION to $VERSION"
|
||||
echo "Set CONTAINER_ACCOUNT to $CONTAINER_ACCOUNT"
|
||||
echo "Set platform to AMD64 (linux/amd64)"
|
||||
|
||||
# Define compose wrapper functions using the full path to avoid recursion
|
||||
pc() {
|
||||
$COMPOSE_CMD_PATH -f $COMPOSE_FILE "$@"
|
||||
}
|
||||
|
||||
pcup() {
|
||||
$COMPOSE_CMD_PATH -f $COMPOSE_FILE up -d --remove-orphans "$@"
|
||||
}
|
||||
|
||||
pcdown() {
|
||||
$COMPOSE_CMD_PATH -f $COMPOSE_FILE down "$@"
|
||||
}
|
||||
|
||||
pcps() {
|
||||
$COMPOSE_CMD_PATH -f $COMPOSE_FILE ps "$@"
|
||||
}
|
||||
|
||||
pclogs() {
|
||||
$COMPOSE_CMD_PATH -f $COMPOSE_FILE logs "$@"
|
||||
}
|
||||
|
||||
# Simplified pull - no platform tricks needed
|
||||
pcpull() {
|
||||
echo "Pulling AMD64 images..."
|
||||
$COMPOSE_CMD_PATH -f $COMPOSE_FILE pull "$@"
|
||||
}
|
||||
|
||||
pcrefresh() {
|
||||
$COMPOSE_CMD_PATH -f $COMPOSE_FILE pull && $COMPOSE_CMD_PATH -f $COMPOSE_FILE up -d --remove-orphans "$@"
|
||||
}
|
||||
|
||||
pcbuild() {
|
||||
$COMPOSE_CMD_PATH -f $COMPOSE_FILE build "$@"
|
||||
}
|
||||
|
||||
pcrestart() {
|
||||
$COMPOSE_CMD_PATH -f $COMPOSE_FILE restart "$@"
|
||||
}
|
||||
|
||||
pcstop() {
|
||||
$COMPOSE_CMD_PATH -f $COMPOSE_FILE stop "$@"
|
||||
}
|
||||
|
||||
pcstart() {
|
||||
$COMPOSE_CMD_PATH -f $COMPOSE_FILE start "$@"
|
||||
}
|
||||
|
||||
# Export functions - handle both bash and zsh
|
||||
if [[ -n "$ZSH_VERSION" ]]; then
|
||||
# In zsh, functions are automatically available in subshells
|
||||
# But we can make them available globally with typeset
|
||||
typeset -f pc pcup pcdown pcps pclogs pcpull pcrefresh pcbuild pcrestart pcstop pcstart > /dev/null
|
||||
else
|
||||
# Bash style export
|
||||
export -f pc pcup pcdown pcps pclogs pcpull pcrefresh pcbuild pcrestart pcstop pcstart
|
||||
fi
|
||||
|
||||
echo "✅ Podman environment switched to $ENVIRONMENT with version $VERSION"
|
||||
echo "🖥️ Platform: AMD64 (compatible with both Intel and Apple Silicon)"
|
||||
echo "Available commands:"
|
||||
echo " pc - podman-compose shorthand"
|
||||
echo " pcup - start services in background"
|
||||
echo " pcdown - stop and remove services"
|
||||
echo " pcps - list running services"
|
||||
echo " pclogs - view service logs"
|
||||
echo " pcpull - pull latest images"
|
||||
echo " pcrefresh - pull and restart services"
|
||||
echo " pcbuild - build services"
|
||||
echo " pcrestart - restart services"
|
||||
echo " pcstop - stop services"
|
||||
echo " pcstart - start stopped services"
|
||||
Reference in New Issue
Block a user