Loading app.py +2 −1 Original line number Diff line number Diff line Loading @@ -34,7 +34,8 @@ from src.database.alert_db import init_db as init_alert # /nsc → Swagger UI # /swaggerui → Swagger UI static assets (flask-restx) # /swagger → swagger.json spec file (flask-restx) UNAUTHENTICATED_PREFIXES = ("/nsc", "/swaggerui", "/swagger") # /webui → WebUI login page UNAUTHENTICATED_PREFIXES = ("/nsc", "/swaggerui", "/swagger", "/webui") def _unauthorized_response(): Loading deploy.sh +118 −8 Original line number Diff line number Diff line Loading @@ -19,6 +19,46 @@ # Container name CONTAINER_NAME=nsc # Default deployment mode is Docker container DEPLOY_MODE="docker" # Help message show_help() { echo "Usage: ./deploy.sh [OPTIONS]" echo "Options:" echo " --helm, -k, --kubernetes Deploy using Helm on Kubernetes" echo " -h, --help Show this help message" } # Helper to read values from .env with fallback to .env.example get_env_val() { local key=$1 local default=$2 local val="" # 1. Try to read from root .env if [ -f .env ]; then val=$(grep "^${key}=" .env | cut -d '=' -f2- | tr -d '\r') fi # 2. If not found, try to read from src/config/.env.example if [ -z "$val" ] && [ -f src/config/.env.example ]; then val=$(grep "^${key}=" src/config/.env.example | cut -d '=' -f2- | tr -d '\r') fi # 3. Return the value or the hardcoded default echo "${val:-$default}" } # Parse arguments while [[ "$#" -gt 0 ]]; do case $1 in --helm|-k|--kubernetes) DEPLOY_MODE="helm"; shift ;; -h|--help) show_help; exit 0 ;; *) echo "Unknown parameter: $1"; show_help; exit 1 ;; esac done # Verify if docker is active if ! docker info > /dev/null 2>&1; then echo "Error: Docker not running. Please, restart Docker service and try again." Loading Loading @@ -52,14 +92,84 @@ else cp src/config/.env.example .env fi # Read NSC_PORT from .env NSC_PORT=$(grep '^NSC_PORT=' .env | cut -d '=' -f2) # Read all variables from .env NSC_PORT=$(get_env_val "NSC_PORT" "8085") LOGGING_LEVEL=$(get_env_val "LOGGING_LEVEL" "INFO") DUMP_TEMPLATES=$(get_env_val "DUMP_TEMPLATES" "false") NRP_ENABLED=$(get_env_val "NRP_ENABLED" "false") PLANNER_ENABLED=$(get_env_val "PLANNER_ENABLED" "false") PLANNER_TYPE=$(get_env_val "PLANNER_TYPE" "ENERGY") PCE_EXTERNAL=$(get_env_val "PCE_EXTERNAL" "false") HRAT_IP=$(get_env_val "HRAT_IP" "10.0.0.1") E2E_OPTICAL_IP=$(get_env_val "E2E_OPTICAL_IP" "127.0.0.1") SUBSCRIBE_ALERTS=$(get_env_val "SUBSCRIBE_ALERTS" "false") SUBSCRIBE_ALERTS_URL=$(get_env_val "SUBSCRIBE_ALERTS_URL" "") DUMMY_MODE=$(get_env_val "DUMMY_MODE" "true") TFS_IP=$(get_env_val "TFS_IP" "127.0.0.1") UPLOAD_TYPE=$(get_env_val "UPLOAD_TYPE" "WEBUI") TFS_L2VPN_SUPPORT=$(get_env_val "TFS_L2VPN_SUPPORT" "false") IXIA_IP=$(get_env_val "IXIA_IP" "127.0.0.1") TFS_E2E_IP=$(get_env_val "TFS_E2E_IP" "127.0.0.1") WEBUI_DEPLOY=$(get_env_val "WEBUI_DEPLOY" "false") RESTCONF_IP=$(get_env_val "RESTCONF_IP" "127.0.0.1") SDN_CONTROLLER_TYPE=$(get_env_val "SDN_CONTROLLER_TYPE" "TFS") DATAPLANE_SUPPORT=$(get_env_val "DATAPLANE_SUPPORT" "FRR") SDN_SUBSCRIPTION_PERIOD=$(get_env_val "SDN_SUBSCRIPTION_PERIOD" "10") API_USERNAME=$(get_env_val "API_USERNAME" "admin") API_PASSWORD=$(get_env_val "API_PASSWORD" "admin") # Generate a unique tag for local Kubernetes deployment to avoid containerd cache issues TAG="latest" if [ "$DEPLOY_MODE" = "helm" ]; then TAG="dev-$(date +%s)" fi # Docker build echo "Building docker image..." docker build -t nsc . echo "Building docker image with tag nsc:$TAG..." docker build -t nsc:$TAG -t nsc:latest . if [ "$DEPLOY_MODE" = "helm" ]; then # Verify if helm is installed if ! command -v helm &> /dev/null; then echo "Error: helm command not found. Please install Helm and try again." exit 1 fi echo "Deploying to Kubernetes using Helm..." helm upgrade --install nsc ./helm/nsc \ --set image.repository=nsc \ --set image.tag=$TAG \ --set image.pullPolicy=IfNotPresent \ --set service.type=LoadBalancer \ --set service.port=$NSC_PORT \ --set config.loggingLevel=$LOGGING_LEVEL \ --set config.dumpTemplates=$DUMP_TEMPLATES \ --set config.nrpEnabled=$NRP_ENABLED \ --set config.plannerEnabled=$PLANNER_ENABLED \ --set config.plannerType=$PLANNER_TYPE \ --set config.pceExternal=$PCE_EXTERNAL \ --set config.hratIp=$HRAT_IP \ --set config.e2eOpticalIp=$E2E_OPTICAL_IP \ --set config.subscribeAlerts=$SUBSCRIBE_ALERTS \ --set config.subscribeAlertsUrl=$SUBSCRIBE_ALERTS_URL \ --set config.dummyMode=$DUMMY_MODE \ --set config.tfsIp=$TFS_IP \ --set config.uploadType=$UPLOAD_TYPE \ --set config.tfsL2vpnSupport=$TFS_L2VPN_SUPPORT \ --set config.ixiaIp=$IXIA_IP \ --set config.tfsE2eIp=$TFS_E2E_IP \ --set config.webuiDeploy=$WEBUI_DEPLOY \ --set config.restconfIp=$RESTCONF_IP \ --set config.sdnControllerType=$SDN_CONTROLLER_TYPE \ --set config.dataplaneSupport=$DATAPLANE_SUPPORT \ --set config.sdnSubscriptionPeriod=$SDN_SUBSCRIPTION_PERIOD \ --set secretConfig.apiUsername=$API_USERNAME \ --set secretConfig.apiPassword=$API_PASSWORD echo "---READY (Kubernetes/Helm)---" else # Executing nsc echo "Running nsc on port $NSC_PORT..." docker run -d --env-file .env -p $NSC_PORT:$NSC_PORT --name $CONTAINER_NAME $CONTAINER_NAME echo "---READY---" echo "---READY (Docker)---" fi Loading
app.py +2 −1 Original line number Diff line number Diff line Loading @@ -34,7 +34,8 @@ from src.database.alert_db import init_db as init_alert # /nsc → Swagger UI # /swaggerui → Swagger UI static assets (flask-restx) # /swagger → swagger.json spec file (flask-restx) UNAUTHENTICATED_PREFIXES = ("/nsc", "/swaggerui", "/swagger") # /webui → WebUI login page UNAUTHENTICATED_PREFIXES = ("/nsc", "/swaggerui", "/swagger", "/webui") def _unauthorized_response(): Loading
deploy.sh +118 −8 Original line number Diff line number Diff line Loading @@ -19,6 +19,46 @@ # Container name CONTAINER_NAME=nsc # Default deployment mode is Docker container DEPLOY_MODE="docker" # Help message show_help() { echo "Usage: ./deploy.sh [OPTIONS]" echo "Options:" echo " --helm, -k, --kubernetes Deploy using Helm on Kubernetes" echo " -h, --help Show this help message" } # Helper to read values from .env with fallback to .env.example get_env_val() { local key=$1 local default=$2 local val="" # 1. Try to read from root .env if [ -f .env ]; then val=$(grep "^${key}=" .env | cut -d '=' -f2- | tr -d '\r') fi # 2. If not found, try to read from src/config/.env.example if [ -z "$val" ] && [ -f src/config/.env.example ]; then val=$(grep "^${key}=" src/config/.env.example | cut -d '=' -f2- | tr -d '\r') fi # 3. Return the value or the hardcoded default echo "${val:-$default}" } # Parse arguments while [[ "$#" -gt 0 ]]; do case $1 in --helm|-k|--kubernetes) DEPLOY_MODE="helm"; shift ;; -h|--help) show_help; exit 0 ;; *) echo "Unknown parameter: $1"; show_help; exit 1 ;; esac done # Verify if docker is active if ! docker info > /dev/null 2>&1; then echo "Error: Docker not running. Please, restart Docker service and try again." Loading Loading @@ -52,14 +92,84 @@ else cp src/config/.env.example .env fi # Read NSC_PORT from .env NSC_PORT=$(grep '^NSC_PORT=' .env | cut -d '=' -f2) # Read all variables from .env NSC_PORT=$(get_env_val "NSC_PORT" "8085") LOGGING_LEVEL=$(get_env_val "LOGGING_LEVEL" "INFO") DUMP_TEMPLATES=$(get_env_val "DUMP_TEMPLATES" "false") NRP_ENABLED=$(get_env_val "NRP_ENABLED" "false") PLANNER_ENABLED=$(get_env_val "PLANNER_ENABLED" "false") PLANNER_TYPE=$(get_env_val "PLANNER_TYPE" "ENERGY") PCE_EXTERNAL=$(get_env_val "PCE_EXTERNAL" "false") HRAT_IP=$(get_env_val "HRAT_IP" "10.0.0.1") E2E_OPTICAL_IP=$(get_env_val "E2E_OPTICAL_IP" "127.0.0.1") SUBSCRIBE_ALERTS=$(get_env_val "SUBSCRIBE_ALERTS" "false") SUBSCRIBE_ALERTS_URL=$(get_env_val "SUBSCRIBE_ALERTS_URL" "") DUMMY_MODE=$(get_env_val "DUMMY_MODE" "true") TFS_IP=$(get_env_val "TFS_IP" "127.0.0.1") UPLOAD_TYPE=$(get_env_val "UPLOAD_TYPE" "WEBUI") TFS_L2VPN_SUPPORT=$(get_env_val "TFS_L2VPN_SUPPORT" "false") IXIA_IP=$(get_env_val "IXIA_IP" "127.0.0.1") TFS_E2E_IP=$(get_env_val "TFS_E2E_IP" "127.0.0.1") WEBUI_DEPLOY=$(get_env_val "WEBUI_DEPLOY" "false") RESTCONF_IP=$(get_env_val "RESTCONF_IP" "127.0.0.1") SDN_CONTROLLER_TYPE=$(get_env_val "SDN_CONTROLLER_TYPE" "TFS") DATAPLANE_SUPPORT=$(get_env_val "DATAPLANE_SUPPORT" "FRR") SDN_SUBSCRIPTION_PERIOD=$(get_env_val "SDN_SUBSCRIPTION_PERIOD" "10") API_USERNAME=$(get_env_val "API_USERNAME" "admin") API_PASSWORD=$(get_env_val "API_PASSWORD" "admin") # Generate a unique tag for local Kubernetes deployment to avoid containerd cache issues TAG="latest" if [ "$DEPLOY_MODE" = "helm" ]; then TAG="dev-$(date +%s)" fi # Docker build echo "Building docker image..." docker build -t nsc . echo "Building docker image with tag nsc:$TAG..." docker build -t nsc:$TAG -t nsc:latest . if [ "$DEPLOY_MODE" = "helm" ]; then # Verify if helm is installed if ! command -v helm &> /dev/null; then echo "Error: helm command not found. Please install Helm and try again." exit 1 fi echo "Deploying to Kubernetes using Helm..." helm upgrade --install nsc ./helm/nsc \ --set image.repository=nsc \ --set image.tag=$TAG \ --set image.pullPolicy=IfNotPresent \ --set service.type=LoadBalancer \ --set service.port=$NSC_PORT \ --set config.loggingLevel=$LOGGING_LEVEL \ --set config.dumpTemplates=$DUMP_TEMPLATES \ --set config.nrpEnabled=$NRP_ENABLED \ --set config.plannerEnabled=$PLANNER_ENABLED \ --set config.plannerType=$PLANNER_TYPE \ --set config.pceExternal=$PCE_EXTERNAL \ --set config.hratIp=$HRAT_IP \ --set config.e2eOpticalIp=$E2E_OPTICAL_IP \ --set config.subscribeAlerts=$SUBSCRIBE_ALERTS \ --set config.subscribeAlertsUrl=$SUBSCRIBE_ALERTS_URL \ --set config.dummyMode=$DUMMY_MODE \ --set config.tfsIp=$TFS_IP \ --set config.uploadType=$UPLOAD_TYPE \ --set config.tfsL2vpnSupport=$TFS_L2VPN_SUPPORT \ --set config.ixiaIp=$IXIA_IP \ --set config.tfsE2eIp=$TFS_E2E_IP \ --set config.webuiDeploy=$WEBUI_DEPLOY \ --set config.restconfIp=$RESTCONF_IP \ --set config.sdnControllerType=$SDN_CONTROLLER_TYPE \ --set config.dataplaneSupport=$DATAPLANE_SUPPORT \ --set config.sdnSubscriptionPeriod=$SDN_SUBSCRIPTION_PERIOD \ --set secretConfig.apiUsername=$API_USERNAME \ --set secretConfig.apiPassword=$API_PASSWORD echo "---READY (Kubernetes/Helm)---" else # Executing nsc echo "Running nsc on port $NSC_PORT..." docker run -d --env-file .env -p $NSC_PORT:$NSC_PORT --name $CONTAINER_NAME $CONTAINER_NAME echo "---READY---" echo "---READY (Docker)---" fi