Fix sync wave ordering - dbinit wave 0, deployment wave 1

- Removed hook: Sync annotation from dbinit (was causing it to run before MySQL)
- dbinit Job: wave 0 (same as MySQL, wait-for-db handles timing)
- Deployment: wave 1 (starts after dbinit completes)
- Fixes: db init job starting before mysql pod
This commit is contained in:
Vaibhav Pathak 2026-01-05 17:48:21 +05:30
commit 911f8d28a1
5 changed files with 458 additions and 0 deletions

42
.gitignore vendored Normal file
View File

@ -0,0 +1,42 @@
# Build outputs
build/
target/
*.class
*.jar
*.war
*.ear
# IDE
.idea/
*.iml
.vscode/
.settings/
.project
.classpath
# OS
.DS_Store
Thumbs.db
# Logs
*.log
# Temporary files
*.tmp
*.bak
*.swp
*~
# Helm
*.tgz
charts/*.tgz
# Environment
.env
.env.local
# Secrets (never commit)
secrets/
*.pem
*.key
*-credentials.json

288
README.md Normal file
View File

@ -0,0 +1,288 @@
# Hades V2 - Authentication & Authorization Service
Hades is a Java-based authentication and authorization service providing:
- User authentication (username/password, OAuth, SAML)
- Token-based authorization with ACL
- User and entity management
- Multi-tenant context management
- Integration with external identity providers
## Quick Start
### Deploy with Backstage
1. **Create Test Environment:**
- Navigate to Backstage → Environments (`/environment`)
- Click "Create Environment"
- Select `hades-service`
- Choose resource size and TTL
- Click "Create Environment"
2. **Access the Service:**
```bash
# Get the service URL
kubectl get service -n <your-namespace>
# Health check
curl http://<service-url>/schedulerService/jobTrigger?jsonQuery=%7B%22application%22%3A%22nagios%22%2C%22jobName%22%3A%22monitoring_scheduler_svc%22%7D
```
### Deploy with Helm
```bash
# Add Helm repository (if using a chart repository)
helm repo add hades https://charts.company.com
# Install Hades
helm install hades ./helm/hades \
--namespace hades \
--create-namespace \
--set image.tag=1764243003606
# Upgrade
helm upgrade hades ./helm/hades \
--namespace hades \
--set image.tag=latest
# Uninstall
helm uninstall hades --namespace hades
```
### Deploy with ArgoCD
```bash
# Create ArgoCD Application
kubectl apply -f - <<EOF
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: hades
namespace: argocd
spec:
project: default
source:
repoURL: https://cnoe.localtest.me:8443/gitea/giteaAdmin/hades-service
path: helm/hades
targetRevision: HEAD
destination:
server: https://kubernetes.default.svc
namespace: hades
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
EOF
```
## Configuration
### Helm Values
Key configuration options in `helm/hades/values.yaml`:
```yaml
# Docker image
image:
repository: localhost:5001/europe-west1-docker.pkg.dev/os-docker-images/onlinesales/prod/services/java/hadesv2
tag: "1764243003606"
# Resources
resources:
limits:
cpu: 2000m
memory: 2Gi
requests:
cpu: 500m
memory: 512Mi
# Database connection
database:
host: "mysql.default.svc.cluster.local"
port: "3306"
name: "hades"
username: "hades_user"
password: "changeme"
# Custom configuration files
config:
enabled: true
files:
hades.cfg: |
# Your Hades configuration
hibernate.cfg.xml: |
<!-- Hibernate configuration -->
```
### Environment Variables
The service supports the following environment variables:
- `JAVA_OPTS`: JVM options (default: `-Xms512m -Xmx2048m`)
- `CATALINA_OPTS`: Tomcat options (default: `-Dconfig.path=/app/config`)
- `DB_HOST`: Database host
- `DB_PORT`: Database port
- `DB_NAME`: Database name
- `DB_USERNAME`: Database username
- `DB_PASSWORD`: Database password
## API Endpoints
### Authentication
```bash
# Authenticate user
POST /authenticate
Content-Type: application/json
{
"username": "user@example.com",
"password": "password123"
}
```
### Authorization
```bash
# Authorize token
POST /authorize
Content-Type: application/json
{
"token": "your-auth-token"
}
```
### Health Check
```bash
# Health check
GET /schedulerService/jobTrigger?jsonQuery=%7B%22application%22%3A%22nagios%22%2C%22jobName%22%3A%22monitoring_scheduler_svc%22%7D
```
## Development
### Local Development
```bash
# Build the application
cd /path/to/hades/source
ant setup
# Build Docker image
docker build -t hades:local .
# Run locally
docker run -p 8080:8080 hades:local
```
### Testing
```bash
# Run unit tests
ant unittest
# Test deployment
helm lint helm/hades
# Dry run
helm install hades ./helm/hades --dry-run --debug
```
## Monitoring
### Metrics
The service exposes metrics at:
- Health: `/schedulerService/jobTrigger`
- Application logs: Container stdout/stderr
### Grafana Dashboards
View metrics in Grafana:
- [Hades Service Dashboard](https://grafana.company.com/d/hades)
### Alerts
Key alerts configured:
- Service unavailable (5xx errors)
- High response time (> 2s)
- Database connection failures
- Memory usage > 80%
## Troubleshooting
### Pod not starting
```bash
# Check pod status
kubectl get pods -n <namespace>
# Check logs
kubectl logs -f <pod-name> -n <namespace>
# Describe pod
kubectl describe pod <pod-name> -n <namespace>
```
### Database connection issues
```bash
# Check database connectivity
kubectl exec -it <pod-name> -n <namespace> -- curl mysql:3306
# Check database credentials
kubectl get secret <secret-name> -n <namespace> -o yaml
```
### Health check failing
```bash
# Test health endpoint
kubectl exec -it <pod-name> -n <namespace> -- curl localhost:8080/schedulerService/jobTrigger?jsonQuery=%7B%22application%22%3A%22nagios%22%2C%22jobName%22%3A%22monitoring_scheduler_svc%22%7D
```
## Architecture
```
┌─────────────────┐
│ Load Balancer │
└────────┬────────┘
┌─────────────────┐
│ Ingress/Service│
└────────┬────────┘
┌─────────────────┐
│ Hades Pods │
│ (Tomcat 9) │
└────────┬────────┘
┌─────────────────┐
│ MySQL Database │
└─────────────────┘
```
## Security
- Passwords hashed with BCrypt
- Token-based authentication
- ACL-based authorization
- CAPTCHA support for brute-force protection
- IP-based access control
- SAML/OAuth integration
## Support
- **Documentation**: https://wiki.company.com/hades
- **Issues**: https://github.com/yourorg/hades-service/issues
- **Slack**: #hades-support
- **Email**: platform-team@company.com
## License
Proprietary - © Your Company

123
catalog-info.yaml Normal file
View File

@ -0,0 +1,123 @@
apiVersion: backstage.io/v1alpha1
kind: Component
metadata:
name: hades-service
title: Hades V2 Authentication Service
description: Authentication and Authorization Service providing user management, OAuth/SAML integration, ACL-based access control, and multi-tenant context management
annotations:
backstage.io/techdocs-ref: dir:.
github.com/project-slug: yourorg/hades-service
# Argo Workflows annotation for environment provisioning
argo-workflows.cnoe.io/label-selector: "service=hades-service"
# ArgoCD annotations
argocd/app-name: hades-service
# Kubernetes annotations - Using kubernetes-id with commonLabels
backstage.io/kubernetes-id: hades-service
# Helm chart annotations for environment provisioning
helm.cnoe.io/git-repo: https://gitea.cnoe.localtest.me:8443/giteaAdmin/hades-chart.git
helm.cnoe.io/chart-path: hades
helm.cnoe.io/values-file: values-dev.yaml
helm.cnoe.io/available-values-files: '["values.yaml", "values-dev.yaml", "values-local.yaml"]'
helm.cnoe.io/dependencies: '{"mysql": {"name": "MySQL Database", "required": false, "default": true}}'
tags:
- java
- authentication
- authorization
- servlet
- tomcat
- oauth
- saml
- acl
links:
- url: https://wiki.company.com/hades
title: Documentation
icon: docs
- url: https://grafana.company.com/d/hades
title: Grafana Dashboard
icon: dashboard
- url: https://sentry.io/hades
title: Error Tracking
icon: alert
spec:
type: service
lifecycle: experimental
owner: user1
dependsOn:
- resource:default/hades-database
providesApis:
- hades-api
consumesApis: []
---
apiVersion: backstage.io/v1alpha1
kind: API
metadata:
name: hades-api
title: Hades Authentication API
description: REST API for authentication and authorization operations
tags:
- rest
- authentication
links:
- url: https://api-docs.company.com/hades
title: API Documentation
spec:
type: openapi
lifecycle: experimental
owner: user1
definition: |
openapi: 3.0.0
info:
title: Hades V2 API
version: 3.0.0
description: Authentication and Authorization Service
paths:
/authenticate:
post:
summary: Authenticate user
description: Authenticate a user with username/password
operationId: authenticate
tags:
- Authentication
/authorize:
post:
summary: Authorize token
description: Validate and authorize an authentication token
operationId: authorize
tags:
- Authorization
/users:
get:
summary: List users
description: Get list of users
operationId: listUsers
tags:
- Users
post:
summary: Create user
description: Create a new user
operationId: createUser
tags:
- Users
/schedulerService/jobTrigger:
get:
summary: Health check
description: Service health check endpoint
operationId: healthCheck
tags:
- Monitoring
---
apiVersion: backstage.io/v1alpha1
kind: Resource
metadata:
name: hades-database
title: Hades Database
description: MySQL database for Hades service
tags:
- database
- mysql
spec:
type: database
owner: user1
dependsOn: []

1
helm Submodule

@ -0,0 +1 @@
Subproject commit f52bd12a9af6b44277d1277b505691511e92eca6

4
mkdocs.yml Normal file
View File

@ -0,0 +1,4 @@
site_name: Hades V2 Authentication Service
docs_dir: docs
plugins:
- techdocs-core