Loading charts/platform-core/meep-platform-ctrl/templates/deployment.yaml +3 −0 Original line number Diff line number Diff line Loading @@ -76,6 +76,9 @@ spec: {{ toYaml .Values.affinity | indent 8 }} {{- end }} initContainers: - name: wait-for-couchdb image: busybox command: ['sh', '-c', 'until nc -z meep-couchdb-svc-couchdb 5984; do echo waiting for db; sleep 2; done;'] {{- range $value := .Values.deployment.dependencies.system }} - name: init-system-{{ $value }} image: busybox:1.28 Loading go-apps/meep-auth-svc/server/auth-svc.go +8 −0 Original line number Diff line number Diff line Loading @@ -1312,6 +1312,10 @@ func startSession(provider string, username string, w http.ResponseWriter, r *ht sandbox, _, err := authSvc.pfmCtrlClient.SandboxControlApi.CreateSandbox(ctx, sandboxConfig) cancel() if err != nil { if strings.Contains(err.Error(), "connect: operation not permitted") || strings.Contains(err.Error(), "connection refused") { err = errors.New("Service temporarily unavailable, please try again in 30 seconds") return "", false, "", err, http.StatusServiceUnavailable } return "", false, "", err, http.StatusInternalServerError } sandboxName = sandbox.Name Loading @@ -1320,6 +1324,10 @@ func startSession(provider string, username string, w http.ResponseWriter, r *ht _, err := authSvc.pfmCtrlClient.SandboxControlApi.CreateSandboxWithName(ctx, sandboxName, sandboxConfig) cancel() if err != nil && !strings.Contains(err.Error(), "409") && !strings.Contains(err.Error(), "Conflict") { if strings.Contains(err.Error(), "connect: operation not permitted") || strings.Contains(err.Error(), "connection refused") { err = errors.New("Service temporarily unavailable, please try again in 30 seconds") return "", false, "", err, http.StatusServiceUnavailable } return "", false, "", err, http.StatusInternalServerError } } Loading go-apps/meepctl/install.sh +38 −13 Original line number Diff line number Diff line #!/bin/bash set -e # Exit immediately on errors # Colors CYAN='\033[0;36m' GREEN='\033[0;32m' YELLOW='\033[0;33m' BLUE='\033[0;34m' BOLD='\033[1m' NC='\033[0m' # No Color # Get full path to script directory SCRIPT=$(readlink -f "$0") BASEDIR=$(dirname "$SCRIPT") # Configure environment GOOS=linux IMAGE_NAME=meepctl BINDIR=../../bin/meepctl echo "$IMAGE_NAME" export GOOS=linux IMAGE_NAME="meepctl" BINDIR="../../bin/meepctl" cd $BASEDIR echo "" printf "%b\n" "${CYAN}${BOLD}==================================================${NC}" printf "%b\n" "${CYAN}${BOLD}🚀 Installing Go Application: ${IMAGE_NAME}${NC}" printf "%b\n" "${CYAN}${BOLD}==================================================${NC}" echo "" cd "$BASEDIR" || exit 1 # Clean build echo "...clean" printf "%b\n" "${BLUE}${BOLD}➤ Cleaning build artifacts${NC}" go clean echo "" # Create vendor folder echo "...vendor" printf "%b\n" "${BLUE}${BOLD}➤ Vendoring dependencies${NC}" go mod vendor echo "" # Lint code echo "...lint" printf "%b\n" "${BLUE}${BOLD}➤ Linting codebase${NC}" golangci-lint run echo "" # Build echo "...build" go build -o ./$IMAGE_NAME . printf "%b\n" "${BLUE}${BOLD}➤ Compiling binary${NC}" go build -o "./$IMAGE_NAME" . echo "" # Copy to bin folder mkdir -p $BINDIR cp ./$IMAGE_NAME $BINDIR printf "%b\n" "${BLUE}${BOLD}➤ Copying binary to ${BINDIR}${NC}" mkdir -p "$BINDIR" cp "./$IMAGE_NAME" "$BINDIR" echo "" # Install echo "...install" printf "%b\n" "${BLUE}${BOLD}➤ Running go install${NC}" go install echo "" printf "%b\n" "${GREEN}${BOLD}✨ ${IMAGE_NAME} installation completed successfully!${NC}" echo "" js-apps/meep-admin-console/src/js/containers/cfg/cfg-network-element-container.js +66 −22 Original line number Diff line number Diff line Loading @@ -464,6 +464,7 @@ const DependenciesGroup = ({ onUpdate, element, tableData }) => { const isMepParent = parent && parent.startsWith('mep'); let edgeApps = []; let cloudApps = []; if (tableData) { edgeApps = Object.values(tableData).filter(e => { const type = getElemFieldVal(e, FIELD_TYPE); Loading @@ -478,6 +479,16 @@ const DependenciesGroup = ({ onUpdate, element, tableData }) => { } return false; }); cloudApps = Object.values(tableData).filter(e => { const type = getElemFieldVal(e, FIELD_TYPE); const name = getElemFieldVal(e, FIELD_NAME); if (type === ELEMENT_TYPE_CLOUD_APP && name !== getElemFieldVal(element, FIELD_NAME)) { return true; } return false; }); } const handleCheckboxChange = (appName, checked) => { Loading @@ -494,7 +505,12 @@ const DependenciesGroup = ({ onUpdate, element, tableData }) => { return ( <div style={{ marginTop: 20, marginBottom: 20, padding: 10, border: '1px solid #e0e0e0', borderRadius: 4, backgroundColor: '#fafafa' }}> <Typography use="subtitle2">Dependencies (Edge Applications)</Typography> <Typography use="subtitle2" style={{ marginBottom: 10, display: 'block' }}>Dependencies</Typography> <div style={{ display: 'flex', marginTop: 10 }}> {/* Edge Applications Column */} <div style={{ flex: 1, paddingRight: 10, borderRight: '1px solid #e0e0e0' }}> <Typography use="body2" style={{ fontWeight: 'bold', marginBottom: 5, display: 'block' }}>Edge Applications</Typography> {edgeApps.length === 0 ? ( <div style={{ marginTop: 10, color: 'gray', fontSize: '0.9rem' }}>No valid edge applications found.</div> ) : ( Loading @@ -503,7 +519,33 @@ const DependenciesGroup = ({ onUpdate, element, tableData }) => { {edgeApps.map(app => { const appName = getElemFieldVal(app, FIELD_NAME); return ( <GridCell span={6} key={appName}> <GridCell span={12} key={appName}> <Checkbox checked={deps.includes(appName)} onChange={e => handleCheckboxChange(appName, e.target.checked)} > {appName} </Checkbox> </GridCell> ); })} </Grid> </div> )} </div> {/* Cloud Applications Column */} <div style={{ flex: 1, paddingLeft: 10 }}> <Typography use="body2" style={{ fontWeight: 'bold', marginBottom: 5, display: 'block' }}>Cloud Applications</Typography> {cloudApps.length === 0 ? ( <div style={{ marginTop: 10, color: 'gray', fontSize: '0.9rem' }}>No valid cloud applications found.</div> ) : ( <div style={{ maxHeight: 180, overflowY: 'auto', marginTop: 10, paddingRight: 10 }}> <Grid> {cloudApps.map(app => { const appName = getElemFieldVal(app, FIELD_NAME); return ( <GridCell span={12} key={appName}> <Checkbox checked={deps.includes(appName)} onChange={e => handleCheckboxChange(appName, e.target.checked)} Loading @@ -517,6 +559,8 @@ const DependenciesGroup = ({ onUpdate, element, tableData }) => { </div> )} </div> </div> </div> ); }; Loading go-apps/meepctl/cmd/build.go +2 −2 File changed.Contains only whitespace changes. Show changes Loading
charts/platform-core/meep-platform-ctrl/templates/deployment.yaml +3 −0 Original line number Diff line number Diff line Loading @@ -76,6 +76,9 @@ spec: {{ toYaml .Values.affinity | indent 8 }} {{- end }} initContainers: - name: wait-for-couchdb image: busybox command: ['sh', '-c', 'until nc -z meep-couchdb-svc-couchdb 5984; do echo waiting for db; sleep 2; done;'] {{- range $value := .Values.deployment.dependencies.system }} - name: init-system-{{ $value }} image: busybox:1.28 Loading
go-apps/meep-auth-svc/server/auth-svc.go +8 −0 Original line number Diff line number Diff line Loading @@ -1312,6 +1312,10 @@ func startSession(provider string, username string, w http.ResponseWriter, r *ht sandbox, _, err := authSvc.pfmCtrlClient.SandboxControlApi.CreateSandbox(ctx, sandboxConfig) cancel() if err != nil { if strings.Contains(err.Error(), "connect: operation not permitted") || strings.Contains(err.Error(), "connection refused") { err = errors.New("Service temporarily unavailable, please try again in 30 seconds") return "", false, "", err, http.StatusServiceUnavailable } return "", false, "", err, http.StatusInternalServerError } sandboxName = sandbox.Name Loading @@ -1320,6 +1324,10 @@ func startSession(provider string, username string, w http.ResponseWriter, r *ht _, err := authSvc.pfmCtrlClient.SandboxControlApi.CreateSandboxWithName(ctx, sandboxName, sandboxConfig) cancel() if err != nil && !strings.Contains(err.Error(), "409") && !strings.Contains(err.Error(), "Conflict") { if strings.Contains(err.Error(), "connect: operation not permitted") || strings.Contains(err.Error(), "connection refused") { err = errors.New("Service temporarily unavailable, please try again in 30 seconds") return "", false, "", err, http.StatusServiceUnavailable } return "", false, "", err, http.StatusInternalServerError } } Loading
go-apps/meepctl/install.sh +38 −13 Original line number Diff line number Diff line #!/bin/bash set -e # Exit immediately on errors # Colors CYAN='\033[0;36m' GREEN='\033[0;32m' YELLOW='\033[0;33m' BLUE='\033[0;34m' BOLD='\033[1m' NC='\033[0m' # No Color # Get full path to script directory SCRIPT=$(readlink -f "$0") BASEDIR=$(dirname "$SCRIPT") # Configure environment GOOS=linux IMAGE_NAME=meepctl BINDIR=../../bin/meepctl echo "$IMAGE_NAME" export GOOS=linux IMAGE_NAME="meepctl" BINDIR="../../bin/meepctl" cd $BASEDIR echo "" printf "%b\n" "${CYAN}${BOLD}==================================================${NC}" printf "%b\n" "${CYAN}${BOLD}🚀 Installing Go Application: ${IMAGE_NAME}${NC}" printf "%b\n" "${CYAN}${BOLD}==================================================${NC}" echo "" cd "$BASEDIR" || exit 1 # Clean build echo "...clean" printf "%b\n" "${BLUE}${BOLD}➤ Cleaning build artifacts${NC}" go clean echo "" # Create vendor folder echo "...vendor" printf "%b\n" "${BLUE}${BOLD}➤ Vendoring dependencies${NC}" go mod vendor echo "" # Lint code echo "...lint" printf "%b\n" "${BLUE}${BOLD}➤ Linting codebase${NC}" golangci-lint run echo "" # Build echo "...build" go build -o ./$IMAGE_NAME . printf "%b\n" "${BLUE}${BOLD}➤ Compiling binary${NC}" go build -o "./$IMAGE_NAME" . echo "" # Copy to bin folder mkdir -p $BINDIR cp ./$IMAGE_NAME $BINDIR printf "%b\n" "${BLUE}${BOLD}➤ Copying binary to ${BINDIR}${NC}" mkdir -p "$BINDIR" cp "./$IMAGE_NAME" "$BINDIR" echo "" # Install echo "...install" printf "%b\n" "${BLUE}${BOLD}➤ Running go install${NC}" go install echo "" printf "%b\n" "${GREEN}${BOLD}✨ ${IMAGE_NAME} installation completed successfully!${NC}" echo ""
js-apps/meep-admin-console/src/js/containers/cfg/cfg-network-element-container.js +66 −22 Original line number Diff line number Diff line Loading @@ -464,6 +464,7 @@ const DependenciesGroup = ({ onUpdate, element, tableData }) => { const isMepParent = parent && parent.startsWith('mep'); let edgeApps = []; let cloudApps = []; if (tableData) { edgeApps = Object.values(tableData).filter(e => { const type = getElemFieldVal(e, FIELD_TYPE); Loading @@ -478,6 +479,16 @@ const DependenciesGroup = ({ onUpdate, element, tableData }) => { } return false; }); cloudApps = Object.values(tableData).filter(e => { const type = getElemFieldVal(e, FIELD_TYPE); const name = getElemFieldVal(e, FIELD_NAME); if (type === ELEMENT_TYPE_CLOUD_APP && name !== getElemFieldVal(element, FIELD_NAME)) { return true; } return false; }); } const handleCheckboxChange = (appName, checked) => { Loading @@ -494,7 +505,12 @@ const DependenciesGroup = ({ onUpdate, element, tableData }) => { return ( <div style={{ marginTop: 20, marginBottom: 20, padding: 10, border: '1px solid #e0e0e0', borderRadius: 4, backgroundColor: '#fafafa' }}> <Typography use="subtitle2">Dependencies (Edge Applications)</Typography> <Typography use="subtitle2" style={{ marginBottom: 10, display: 'block' }}>Dependencies</Typography> <div style={{ display: 'flex', marginTop: 10 }}> {/* Edge Applications Column */} <div style={{ flex: 1, paddingRight: 10, borderRight: '1px solid #e0e0e0' }}> <Typography use="body2" style={{ fontWeight: 'bold', marginBottom: 5, display: 'block' }}>Edge Applications</Typography> {edgeApps.length === 0 ? ( <div style={{ marginTop: 10, color: 'gray', fontSize: '0.9rem' }}>No valid edge applications found.</div> ) : ( Loading @@ -503,7 +519,33 @@ const DependenciesGroup = ({ onUpdate, element, tableData }) => { {edgeApps.map(app => { const appName = getElemFieldVal(app, FIELD_NAME); return ( <GridCell span={6} key={appName}> <GridCell span={12} key={appName}> <Checkbox checked={deps.includes(appName)} onChange={e => handleCheckboxChange(appName, e.target.checked)} > {appName} </Checkbox> </GridCell> ); })} </Grid> </div> )} </div> {/* Cloud Applications Column */} <div style={{ flex: 1, paddingLeft: 10 }}> <Typography use="body2" style={{ fontWeight: 'bold', marginBottom: 5, display: 'block' }}>Cloud Applications</Typography> {cloudApps.length === 0 ? ( <div style={{ marginTop: 10, color: 'gray', fontSize: '0.9rem' }}>No valid cloud applications found.</div> ) : ( <div style={{ maxHeight: 180, overflowY: 'auto', marginTop: 10, paddingRight: 10 }}> <Grid> {cloudApps.map(app => { const appName = getElemFieldVal(app, FIELD_NAME); return ( <GridCell span={12} key={appName}> <Checkbox checked={deps.includes(appName)} onChange={e => handleCheckboxChange(appName, e.target.checked)} Loading @@ -517,6 +559,8 @@ const DependenciesGroup = ({ onUpdate, element, tableData }) => { </div> )} </div> </div> </div> ); }; Loading