helm chart added
This commit is contained in:
commit
36648be466
414
CLAUDE.md
Normal file
414
CLAUDE.md
Normal file
@ -0,0 +1,414 @@
|
||||
# CLAUDE.md
|
||||
|
||||
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
||||
|
||||
## Project Overview
|
||||
|
||||
This repository contains a Helm chart for deploying the Property Settings Service V2 on Kubernetes. The chart name is `property-settings-svc-v2-chart` and follows standard Helm chart structure and conventions.
|
||||
|
||||
**Application Details:**
|
||||
- Java/Tomcat-based service
|
||||
- Docker Image: `localhost:5001/prj-onlinesales-prod-01/os-docker-images/onlinesales/prod/services/java/propertysettingssvcv2:1752740345878`
|
||||
- Service Port: 8080
|
||||
- Context Path: `/propertySettingsSvcV2`
|
||||
- Database: MySQL 5.7 (bundled or external)
|
||||
- Source Code: `/Volumes/Os/onlinesales/infrastructure/apps/propertySettingsSvcV2/release_kubernetes_2.0`
|
||||
|
||||
## Helm Chart Commands
|
||||
|
||||
### Update dependencies (required before first install)
|
||||
```bash
|
||||
cd ./property-settings-svc-v2-chart
|
||||
helm dependency update
|
||||
cd ..
|
||||
```
|
||||
|
||||
### Install the chart
|
||||
```bash
|
||||
helm install <release-name> ./property-settings-svc-v2-chart
|
||||
```
|
||||
|
||||
### Install with custom values
|
||||
```bash
|
||||
helm install <release-name> ./property-settings-svc-v2-chart -f custom-values.yaml
|
||||
```
|
||||
|
||||
### Upgrade an existing release
|
||||
```bash
|
||||
helm upgrade <release-name> ./property-settings-svc-v2-chart
|
||||
```
|
||||
|
||||
### Dry run to preview rendered templates
|
||||
```bash
|
||||
helm install <release-name> ./property-settings-svc-v2-chart --dry-run --debug
|
||||
```
|
||||
|
||||
### Lint the chart
|
||||
```bash
|
||||
helm lint ./property-settings-svc-v2-chart
|
||||
```
|
||||
|
||||
### Package the chart
|
||||
```bash
|
||||
helm package ./property-settings-svc-v2-chart
|
||||
```
|
||||
|
||||
### Uninstall a release
|
||||
```bash
|
||||
helm uninstall <release-name>
|
||||
```
|
||||
|
||||
### Template rendering (output YAML without deploying)
|
||||
```bash
|
||||
helm template <release-name> ./property-settings-svc-v2-chart
|
||||
```
|
||||
|
||||
## Architecture
|
||||
|
||||
### Chart Structure
|
||||
```
|
||||
property-settings-svc-v2-chart/
|
||||
├── Chart.yaml # Chart metadata with MySQL dependency
|
||||
├── values.yaml # Default configuration values
|
||||
├── sql/ # SQL migration scripts (5 files)
|
||||
│ ├── 000_create_property_settings_db.sql # Creates database
|
||||
│ ├── 001_properties_table.sql # Creates tables & triggers
|
||||
│ ├── 002_populate_properties_table.sql # V1→V2 migration (unused)
|
||||
│ ├── 003_alter_column_property_value.sql # Alters column type
|
||||
│ └── 004_property_settings_db_v2.sql # Complete dump with data (79KB)
|
||||
├── charts/ # Dependent charts (MySQL)
|
||||
│ └── mysql-*.tgz # WSO2 MySQL chart
|
||||
└── templates/
|
||||
├── _helpers.tpl # Template helpers and named templates
|
||||
├── _db-helpers.tpl # Database connection helpers
|
||||
├── deployment.yaml # Main application deployment
|
||||
├── service.yaml # Kubernetes service (ClusterIP on port 8080)
|
||||
├── serviceaccount.yaml # Service account configuration
|
||||
├── configmap.yaml # Application configuration files
|
||||
├── configmap-sql-migrations.yaml # ConfigMap with SQL files (auto-loaded)
|
||||
├── job-dbinit.yaml # Database initialization Job (Helm hook)
|
||||
├── secret.yaml # Database configuration (Hibernate with dynamic DB config)
|
||||
├── ingress.yaml # Optional Ingress resource
|
||||
├── httproute.yaml # Optional Gateway API HTTPRoute
|
||||
├── hpa.yaml # Horizontal Pod Autoscaler (enabled by default)
|
||||
└── tests/
|
||||
└── test-connection.yaml
|
||||
```
|
||||
|
||||
### Key Template Helpers
|
||||
The `_helpers.tpl` file defines reusable template functions:
|
||||
- `property-settings-svc-v2-chart.name` - Chart name with override support
|
||||
- `property-settings-svc-v2-chart.fullname` - Fully qualified app name (max 63 chars)
|
||||
- `property-settings-svc-v2-chart.chart` - Chart name and version label
|
||||
- `property-settings-svc-v2-chart.labels` - Common labels for all resources
|
||||
- `property-settings-svc-v2-chart.selectorLabels` - Labels for selecting pods
|
||||
- `property-settings-svc-v2-chart.serviceAccountName` - Service account name resolution
|
||||
|
||||
### Routing Options
|
||||
The chart supports two routing mechanisms (both disabled by default):
|
||||
1. **Traditional Ingress** (`ingress.enabled: false`) - Standard Kubernetes Ingress using networking.k8s.io/v1
|
||||
2. **Gateway API HTTPRoute** (`httpRoute.enabled: false`) - Modern Gateway API routing with advanced traffic management
|
||||
|
||||
### Default Configuration
|
||||
- **Image**: `localhost:5001/prj-onlinesales-prod-01/os-docker-images/onlinesales/prod/services/java/propertysettingssvcv2:1752740345878`
|
||||
- **Service Type**: ClusterIP on port 8080
|
||||
- **Replicas**: 3 (minimum when autoscaling is enabled)
|
||||
- **Probes**: HTTP health checks on `/propertySettingsSvcV2/properties` endpoint with specific query parameters
|
||||
- **Autoscaling**: Enabled by default (3-10 replicas, CPU target 200%, Memory target 80%)
|
||||
- **Resources**: CPU request 500m, Memory request 512Mi
|
||||
- **Configuration Volumes**:
|
||||
- ConfigMap mounted at `/etc/onlinesales/config/propertySettingsSvcV2`
|
||||
- Secret mounted at `/etc/onlinesales/db`
|
||||
|
||||
## Working with Templates
|
||||
|
||||
When modifying templates, remember:
|
||||
- All resource names use the `property-settings-svc-v2-chart.fullname` helper
|
||||
- Labels should use the `property-settings-svc-v2-chart.labels` helper for consistency
|
||||
- Container port in deployment.yaml references `service.port` from values
|
||||
- The deployment uses conditional logic for autoscaling (`.Values.autoscaling.enabled`)
|
||||
- HTTPRoute template includes advanced features like filters and header manipulation
|
||||
|
||||
## MySQL Database Configuration
|
||||
|
||||
The chart includes MySQL as an optional dependency using the WSO2 MySQL Helm chart (version 1.6.9).
|
||||
|
||||
### Bundled MySQL (Default)
|
||||
By default, the chart deploys MySQL alongside the application:
|
||||
- **Version**: MySQL 5.7.30
|
||||
- **Database Name**: `property_settings_db_v2`
|
||||
- **Username**: `propertysettings`
|
||||
- **Password**: `changeme` (should be changed for production)
|
||||
- **Persistence**: 8Gi storage (configurable)
|
||||
- **Initialization**: Automatically creates database schema and tables
|
||||
|
||||
To deploy with bundled MySQL:
|
||||
```bash
|
||||
helm install property-settings-v2 ./property-settings-svc-v2-chart
|
||||
```
|
||||
|
||||
### External MySQL
|
||||
To use an external MySQL database, disable the bundled MySQL and configure connection details:
|
||||
|
||||
```yaml
|
||||
# values.yaml or custom-values.yaml
|
||||
mysql:
|
||||
enabled: false
|
||||
|
||||
externalDatabase:
|
||||
host: "your-mysql-host.example.com"
|
||||
port: 3306
|
||||
database: "property_settings_db_v2"
|
||||
username: "propertysettings"
|
||||
password: "your-secure-password"
|
||||
```
|
||||
|
||||
Deploy with external MySQL:
|
||||
```bash
|
||||
helm install property-settings-v2 ./property-settings-svc-v2-chart \
|
||||
--set mysql.enabled=false \
|
||||
--set externalDatabase.host=your-mysql-host.example.com \
|
||||
--set externalDatabase.password=your-secure-password
|
||||
```
|
||||
|
||||
**Important**: When using external MySQL, ensure the database schema is initialized manually using the SQL scripts from `sql/` directory.
|
||||
|
||||
### Database Schema and Initialization
|
||||
|
||||
The chart uses a **Helm Job with ConfigMap approach** for database initialization (same pattern as hades-service):
|
||||
|
||||
#### How It Works
|
||||
|
||||
1. **SQL Files in `sql/` Directory**: All SQL migration scripts are stored as separate files
|
||||
2. **Auto-Loading via ConfigMap**: The `configmap-sql-migrations.yaml` template uses `.Files.Glob "sql/**.sql"` to automatically load all SQL files
|
||||
3. **Execution via Helm Job**: The `job-dbinit.yaml` runs as a post-install/post-upgrade hook that:
|
||||
- Waits for MySQL to be ready
|
||||
- Executes SQL files in alphabetical order (000, 001, 002, etc.)
|
||||
- Provides detailed logging and error handling
|
||||
- Fails if any migration fails
|
||||
|
||||
**Advantages of this approach:**
|
||||
- ✅ No need to embed SQL in values.yaml
|
||||
- ✅ SQL files remain separate and version-controlled
|
||||
- ✅ Automatic file discovery - just add/remove files in `sql/` directory
|
||||
- ✅ Clean execution logs with success/failure reporting
|
||||
- ✅ Runs automatically on install and upgrade
|
||||
|
||||
#### Available SQL Files
|
||||
|
||||
The `sql/` directory contains 5 files:
|
||||
|
||||
1. **000_create_property_settings_db.sql** - Creates the database
|
||||
2. **001_properties_table.sql** - Creates properties table with triggers
|
||||
3. **002_populate_properties_table.sql** - V1→V2 migration (commented out, not used)
|
||||
4. **003_alter_column_property_value.sql** - Alters property_value column to TEXT
|
||||
5. **004_property_settings_db_v2.sql** (79KB) - Complete database dump with staging data
|
||||
|
||||
#### OPTION 1: Clean Installation (Default)
|
||||
|
||||
For production deployments with an empty database:
|
||||
|
||||
**Files to keep active:**
|
||||
- 000, 001, 003 (002 is commented out)
|
||||
|
||||
**To configure:**
|
||||
```bash
|
||||
# Rename or remove the complete dump file
|
||||
mv sql/004_property_settings_db_v2.sql sql/004_property_settings_db_v2.sql.bak
|
||||
```
|
||||
|
||||
**Result:**
|
||||
- Empty `properties` table with proper schema
|
||||
- Triggers for automatic timestamp tracking
|
||||
- TEXT column type for property_value
|
||||
- Ready for production use
|
||||
|
||||
#### OPTION 2: Complete Database Dump (With Seed Data)
|
||||
|
||||
For development/testing with sample data from staging:
|
||||
|
||||
**File to keep active:**
|
||||
- 004 only
|
||||
|
||||
**To configure:**
|
||||
```bash
|
||||
# Rename the incremental files and keep only the dump
|
||||
cd sql/
|
||||
mv 000_create_property_settings_db.sql 000_create_property_settings_db.sql.bak
|
||||
mv 001_properties_table.sql 001_properties_table.sql.bak
|
||||
mv 002_populate_properties_table.sql 002_populate_properties_table.sql.bak
|
||||
mv 003_alter_column_property_value.sql 003_alter_column_property_value.sql.bak
|
||||
# Keep 004_property_settings_db_v2.sql active
|
||||
```
|
||||
|
||||
**Result:**
|
||||
- Complete database with real staging data
|
||||
- 4 Agency records (TVING staging, TVING QA, etc.)
|
||||
- 24+ Client records with configurations
|
||||
- Moloco account details, payment modes
|
||||
- Schema_info table with migration tracking
|
||||
|
||||
**⚠️ WARNING**: Do NOT use both options together. The dump file (004) drops and recreates tables, conflicting with incremental files (000-003).
|
||||
|
||||
#### Schema Details
|
||||
|
||||
**Table**: `properties`
|
||||
- **Primary Key**: (entity_type, entity_value, property_type)
|
||||
- **Columns**: entity_type (VARCHAR 200), entity_value (VARCHAR 200), property_type (VARCHAR 200), property_value (TEXT), is_active (BOOLEAN), creation_date (DATETIME), last_update (DATETIME), last_updated_by (VARCHAR 150)
|
||||
- **Triggers**: Automatic timestamp and user tracking on INSERT/UPDATE
|
||||
- **Character Set**: UTF-8
|
||||
- **Engine**: InnoDB
|
||||
|
||||
#### Controlling Database Initialization
|
||||
|
||||
To disable automatic database initialization:
|
||||
|
||||
```yaml
|
||||
# values.yaml
|
||||
dbInit:
|
||||
enabled: false
|
||||
```
|
||||
|
||||
This is useful when:
|
||||
- Using an external database with existing schema
|
||||
- Managing schema separately
|
||||
- Running in environments where Jobs/Hooks are restricted
|
||||
|
||||
### Hibernate Configuration
|
||||
The Hibernate configuration in `secret.yaml` is dynamically generated based on MySQL settings:
|
||||
- Uses `_db-helpers.tpl` to determine connection details
|
||||
- Automatically configures JDBC URL, username, and password
|
||||
- Supports both internal and external MySQL seamlessly
|
||||
|
||||
### Database Service Name Convention
|
||||
When using bundled MySQL, the service is named `<release-name>-mysql`:
|
||||
- Example: With release name `prop`, MySQL service is `prop-mysql`
|
||||
- The database initialization Job and Hibernate config automatically use the correct service name
|
||||
- Connection string format: `jdbc:mysql://<release-name>-mysql:3306/property_settings_db_v2`
|
||||
|
||||
## Configuration Management
|
||||
|
||||
### ConfigMap (configmap.yaml)
|
||||
The chart creates a ConfigMap containing application configuration files:
|
||||
- `propertySettingsService.cfg` - Main service configuration (prod/test environments)
|
||||
- `log.cfg` - Logging configuration
|
||||
- `prodRestAccessor.cfg` - Production REST accessor settings
|
||||
- `testRestAccessor.cfg` - Test REST accessor settings
|
||||
- `authConfig.cfg` - Authentication configuration
|
||||
- `statsLogging.cfg` - Statistics logging configuration
|
||||
|
||||
**Important**: These files contain placeholder content and must be updated with actual configuration before deployment.
|
||||
|
||||
### Secret (secret.yaml)
|
||||
The chart creates a Secret for sensitive database configuration:
|
||||
- `propertySettingsV2.hbm.xml` - Hibernate mapping file for database access
|
||||
|
||||
**Important**: This file contains placeholder XML and must be updated with actual database mapping before deployment.
|
||||
|
||||
### Health Check Configuration
|
||||
The service uses a comprehensive health check endpoint:
|
||||
```
|
||||
/propertySettingsSvcV2/properties?jsonQuery={encoded-json}
|
||||
```
|
||||
This endpoint validates:
|
||||
- Service availability
|
||||
- Database connectivity
|
||||
- Property retrieval functionality
|
||||
|
||||
The query is URL-encoded and checks for BUSINESS_SEGMENT_SET properties for AGENCY entity type.
|
||||
|
||||
## Values Configuration
|
||||
|
||||
Key values.yaml sections (already configured):
|
||||
- `image.repository` and `image.tag` - Set to Property Settings V2 image
|
||||
- `service.port` - Set to 8080 (Tomcat default)
|
||||
- `replicaCount` - Set to 3 replicas
|
||||
- `resources` - CPU: 500m, Memory: 512Mi
|
||||
- `autoscaling` - Enabled (3-10 replicas, CPU: 200%, Memory: 80%)
|
||||
- `livenessProbe` and `readinessProbe` - Configured for Property Settings endpoint
|
||||
|
||||
Optional values to configure:
|
||||
- `ingress` or `httpRoute` - Enable one for external access
|
||||
- `nodeSelector`, `tolerations`, `affinity` - For pod scheduling preferences
|
||||
|
||||
## Deployment Workflow
|
||||
|
||||
1. **Update Chart Dependencies** (Required before first deployment):
|
||||
```bash
|
||||
cd ./property-settings-svc-v2-chart
|
||||
helm dependency update
|
||||
cd ..
|
||||
```
|
||||
|
||||
2. **Update Configuration Files** (Required before first deployment):
|
||||
```bash
|
||||
# Edit the ConfigMap template with actual configuration
|
||||
vim ./property-settings-svc-v2-chart/templates/configmap.yaml
|
||||
|
||||
# Update MySQL credentials (if needed)
|
||||
vim ./property-settings-svc-v2-chart/values.yaml
|
||||
# Change mysql.mysqlRootPassword and mysql.mysqlPassword
|
||||
```
|
||||
|
||||
3. **Validate the Chart**:
|
||||
```bash
|
||||
helm lint ./property-settings-svc-v2-chart
|
||||
helm template test ./property-settings-svc-v2-chart --debug
|
||||
```
|
||||
|
||||
4. **Deploy to Kubernetes** (with bundled MySQL):
|
||||
```bash
|
||||
helm install property-settings-v2 ./property-settings-svc-v2-chart \
|
||||
--set mysql.mysqlRootPassword=your-root-password \
|
||||
--set mysql.mysqlPassword=your-user-password
|
||||
```
|
||||
|
||||
5. **Deploy to Kubernetes** (with external MySQL):
|
||||
```bash
|
||||
helm install property-settings-v2 ./property-settings-svc-v2-chart \
|
||||
--set mysql.enabled=false \
|
||||
--set externalDatabase.host=your-mysql-host \
|
||||
--set externalDatabase.password=your-password
|
||||
```
|
||||
|
||||
6. **Verify Deployment**:
|
||||
```bash
|
||||
# Check all pods (application + MySQL if enabled)
|
||||
kubectl get pods -l app.kubernetes.io/instance=property-settings-v2
|
||||
|
||||
# Check application logs
|
||||
kubectl logs -l app.kubernetes.io/name=property-settings-svc-v2-chart
|
||||
|
||||
# Check MySQL logs (if bundled)
|
||||
kubectl logs -l app.kubernetes.io/name=mysql
|
||||
|
||||
# Verify database connection
|
||||
kubectl exec -it <property-settings-pod> -- sh
|
||||
# Test connection to MySQL
|
||||
```
|
||||
|
||||
## Important Notes
|
||||
|
||||
- The chart uses modern Kubernetes API versions (apps/v1, networking.k8s.io/v1)
|
||||
- Service account is created by default with API credentials auto-mounted
|
||||
- **MySQL dependency must be updated** - Run `helm dependency update` before first deployment
|
||||
- **Database passwords should be changed** - Default passwords are insecure and meant for development only
|
||||
- **Configuration files must be updated before deployment** - The ConfigMap contains placeholder content
|
||||
- The deployment automatically mounts configuration volumes - no need to modify deployment.yaml for config changes
|
||||
- The Hibernate configuration is dynamically generated based on MySQL settings (internal or external)
|
||||
- **Database initialization uses Helm Job** - SQL files are auto-loaded from `sql/` directory and executed via a post-install/post-upgrade hook
|
||||
- When enabling HTTPRoute, ensure Gateway API CRDs are installed in the cluster
|
||||
- The image registry (localhost:5001) suggests a local registry - ensure it's accessible from your cluster
|
||||
- For external MySQL, the database schema must be initialized manually using scripts in `sql/` directory
|
||||
|
||||
## MySQL Dependency Details
|
||||
|
||||
**Chart**: WSO2 MySQL (version 1.6.9)
|
||||
**Repository**: https://helm.wso2.com
|
||||
**Condition**: `mysql.enabled`
|
||||
|
||||
The MySQL chart is conditionally deployed based on the `mysql.enabled` value. When enabled, it creates:
|
||||
- MySQL StatefulSet
|
||||
- PersistentVolumeClaim for data storage
|
||||
- Service for database access
|
||||
- ConfigMap for initialization scripts
|
||||
105
catalog-info.yaml
Normal file
105
catalog-info.yaml
Normal file
@ -0,0 +1,105 @@
|
||||
apiVersion: backstage.io/v1alpha1
|
||||
kind: Component
|
||||
metadata:
|
||||
name: propertysettings-v2-service
|
||||
title: PropertySettings V2 Service
|
||||
description: Property Settings and Configuration Management Service providing centralized application configuration, environment-specific properties, and dynamic settings management
|
||||
annotations:
|
||||
backstage.io/techdocs-ref: dir:.
|
||||
github.com/project-slug: yourorg/propertysettings-v2-service
|
||||
# Argo Workflows annotation for environment provisioning
|
||||
argo-workflows.cnoe.io/label-selector: "service=propertysettings-v2-service"
|
||||
# ArgoCD annotations
|
||||
argocd/app-name: propertysettings-v2-service
|
||||
# Kubernetes annotations - Using kubernetes-id with commonLabels
|
||||
backstage.io/kubernetes-id: propertysettings-v2-service
|
||||
# Helm chart annotations for environment provisioning
|
||||
helm.cnoe.io/git-repo: https://gitea.cnoe.localtest.me:8443/giteaAdmin/propertysettings-v2-chart.git
|
||||
helm.cnoe.io/chart-path: propertySettings-V2
|
||||
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: '{}'
|
||||
tags:
|
||||
- configuration
|
||||
- settings
|
||||
- properties
|
||||
- java
|
||||
links:
|
||||
- url: https://wiki.company.com/propertysettings-v2
|
||||
title: Documentation
|
||||
icon: docs
|
||||
- url: https://grafana.company.com/d/propertysettings-v2
|
||||
title: Grafana Dashboard
|
||||
icon: dashboard
|
||||
spec:
|
||||
type: service
|
||||
lifecycle: experimental
|
||||
owner: user1
|
||||
dependsOn: []
|
||||
providesApis:
|
||||
- propertysettings-v2-api
|
||||
consumesApis: []
|
||||
|
||||
---
|
||||
apiVersion: backstage.io/v1alpha1
|
||||
kind: API
|
||||
metadata:
|
||||
name: propertysettings-v2-api
|
||||
title: PropertySettings V2 API
|
||||
description: REST API for property and configuration management operations
|
||||
tags:
|
||||
- rest
|
||||
- configuration
|
||||
links:
|
||||
- url: https://api-docs.company.com/propertysettings-v2
|
||||
title: API Documentation
|
||||
spec:
|
||||
type: openapi
|
||||
lifecycle: experimental
|
||||
owner: user1
|
||||
definition: |
|
||||
openapi: 3.0.0
|
||||
info:
|
||||
title: PropertySettings V2 API
|
||||
version: 2.0.0
|
||||
description: Property Settings and Configuration Management Service
|
||||
paths:
|
||||
/properties:
|
||||
get:
|
||||
summary: List properties
|
||||
description: Get list of all properties
|
||||
operationId: listProperties
|
||||
tags:
|
||||
- Properties
|
||||
post:
|
||||
summary: Create property
|
||||
description: Create a new property
|
||||
operationId: createProperty
|
||||
tags:
|
||||
- Properties
|
||||
/properties/{id}:
|
||||
get:
|
||||
summary: Get property
|
||||
description: Get a specific property by ID
|
||||
operationId: getProperty
|
||||
tags:
|
||||
- Properties
|
||||
put:
|
||||
summary: Update property
|
||||
description: Update an existing property
|
||||
operationId: updateProperty
|
||||
tags:
|
||||
- Properties
|
||||
delete:
|
||||
summary: Delete property
|
||||
description: Delete a property
|
||||
operationId: deleteProperty
|
||||
tags:
|
||||
- Properties
|
||||
/health:
|
||||
get:
|
||||
summary: Health check
|
||||
description: Service health check endpoint
|
||||
operationId: healthCheck
|
||||
tags:
|
||||
- Monitoring
|
||||
4
mkdocs.yml
Normal file
4
mkdocs.yml
Normal file
@ -0,0 +1,4 @@
|
||||
site_name: PropertySettings V2 Service
|
||||
docs_dir: docs
|
||||
plugins:
|
||||
- techdocs-core
|
||||
23
property-settings-svc-v2-chart/.helmignore
Normal file
23
property-settings-svc-v2-chart/.helmignore
Normal file
@ -0,0 +1,23 @@
|
||||
# Patterns to ignore when building packages.
|
||||
# This supports shell glob matching, relative path matching, and
|
||||
# negation (prefixed with !). Only one pattern per line.
|
||||
.DS_Store
|
||||
# Common VCS dirs
|
||||
.git/
|
||||
.gitignore
|
||||
.bzr/
|
||||
.bzrignore
|
||||
.hg/
|
||||
.hgignore
|
||||
.svn/
|
||||
# Common backup files
|
||||
*.swp
|
||||
*.bak
|
||||
*.tmp
|
||||
*.orig
|
||||
*~
|
||||
# Various IDEs
|
||||
.project
|
||||
.idea/
|
||||
*.tmproj
|
||||
.vscode/
|
||||
6
property-settings-svc-v2-chart/Chart.lock
Normal file
6
property-settings-svc-v2-chart/Chart.lock
Normal file
@ -0,0 +1,6 @@
|
||||
dependencies:
|
||||
- name: mysql
|
||||
repository: https://helm.wso2.com
|
||||
version: 1.6.9
|
||||
digest: sha256:bdbd774f845f1f0f4b7346e75b80f6c2e244cf92cf9feacf3d4807f8e50f9bce
|
||||
generated: "2025-12-09T14:10:52.064234+05:30"
|
||||
30
property-settings-svc-v2-chart/Chart.yaml
Normal file
30
property-settings-svc-v2-chart/Chart.yaml
Normal file
@ -0,0 +1,30 @@
|
||||
apiVersion: v2
|
||||
name: property-settings-svc-v2-chart
|
||||
description: A Helm chart for Property Settings Service V2 on Kubernetes
|
||||
|
||||
# A chart can be either an 'application' or a 'library' chart.
|
||||
#
|
||||
# Application charts are a collection of templates that can be packaged into versioned archives
|
||||
# to be deployed.
|
||||
#
|
||||
# Library charts provide useful utilities or functions for the chart developer. They're included as
|
||||
# a dependency of application charts to inject those utilities and functions into the rendering
|
||||
# pipeline. Library charts do not define any templates and therefore cannot be deployed.
|
||||
type: application
|
||||
|
||||
# This is the chart version. This version number should be incremented each time you make changes
|
||||
# to the chart and its templates, including the app version.
|
||||
# Versions are expected to follow Semantic Versioning (https://semver.org/)
|
||||
version: 0.1.0
|
||||
|
||||
# This is the version number of the application being deployed. This version number should be
|
||||
# incremented each time you make changes to the application. Versions are not expected to
|
||||
# follow Semantic Versioning. They should reflect the version the application is using.
|
||||
# It is recommended to use it with quotes.
|
||||
appVersion: "1.16.0"
|
||||
|
||||
dependencies:
|
||||
- name: mysql
|
||||
version: "1.6.9"
|
||||
repository: "https://helm.wso2.com"
|
||||
condition: mysql.enabled
|
||||
BIN
property-settings-svc-v2-chart/charts/mysql-1.6.9.tgz
Normal file
BIN
property-settings-svc-v2-chart/charts/mysql-1.6.9.tgz
Normal file
Binary file not shown.
2802
property-settings-svc-v2-chart/hades.sql
Normal file
2802
property-settings-svc-v2-chart/hades.sql
Normal file
File diff suppressed because one or more lines are too long
17092
property-settings-svc-v2-chart/logs
Normal file
17092
property-settings-svc-v2-chart/logs
Normal file
File diff suppressed because it is too large
Load Diff
@ -0,0 +1 @@
|
||||
create database if not exists property_settings_db_v2;
|
||||
30
property-settings-svc-v2-chart/sql/001_properties_table.sql
Normal file
30
property-settings-svc-v2-chart/sql/001_properties_table.sql
Normal file
@ -0,0 +1,30 @@
|
||||
use property_settings_db_v2;
|
||||
|
||||
create table properties
|
||||
(
|
||||
entity_type VARCHAR(200) NOT NULL,
|
||||
entity_value VARCHAR(200) NOT NULL,
|
||||
property_type VARCHAR(200) NOT NULL,
|
||||
property_value BLOB NOT NULL,
|
||||
is_active BOOLEAN NOT NULL DEFAULT 1,
|
||||
|
||||
PRIMARY KEY (entity_type, entity_value, property_type)
|
||||
) ENGINE=INNODB DEFAULT CHARSET=utf8;
|
||||
|
||||
ALTER TABLE properties ADD COLUMN creation_date DATETIME;
|
||||
ALTER TABLE properties ADD COLUMN last_update DATETIME;
|
||||
ALTER TABLE properties ADD COLUMN last_updated_by VARCHAR(150);
|
||||
delimiter //
|
||||
CREATE TRIGGER properties_insert_trigger BEFORE INSERT ON properties
|
||||
FOR EACH ROW BEGIN
|
||||
SET NEW.creation_date=NOW();
|
||||
SET NEW.last_updated_by=USER();
|
||||
SET NEW.last_update=NOW();
|
||||
END;//
|
||||
CREATE TRIGGER properties_update_trigger BEFORE UPDATE ON properties
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
SET NEW.last_updated_by=USER();
|
||||
SET NEW.last_update = NOW();
|
||||
END;//
|
||||
delimiter ;
|
||||
@ -0,0 +1,19 @@
|
||||
#use property_settings_db_v2;
|
||||
#INSERT INTO properties
|
||||
#(
|
||||
# entity_type,
|
||||
# entity_value,
|
||||
# property_type,
|
||||
# property_value,
|
||||
# is_active
|
||||
#)
|
||||
#SELECT
|
||||
# e.name as entity_type,
|
||||
# CONCAT(prop.client_id, "_", prop.entity_id) AS entity_value,
|
||||
# p.name AS property_type,
|
||||
# prop.property_value,
|
||||
# prop.is_active
|
||||
#FROM propertiesV1 prop,
|
||||
# property_types p, entity_types e
|
||||
#WHERE
|
||||
# prop.property_type_id = p.id AND prop.entity_type_id = e.id;
|
||||
@ -0,0 +1,3 @@
|
||||
use property_settings_db_v2;
|
||||
|
||||
ALTER TABLE `properties` CHANGE COLUMN `property_value` `property_value` text NOT NULL;
|
||||
File diff suppressed because one or more lines are too long
35
property-settings-svc-v2-chart/templates/NOTES.txt
Normal file
35
property-settings-svc-v2-chart/templates/NOTES.txt
Normal file
@ -0,0 +1,35 @@
|
||||
1. Get the application URL by running these commands:
|
||||
{{- if .Values.httpRoute.enabled }}
|
||||
{{- if .Values.httpRoute.hostnames }}
|
||||
export APP_HOSTNAME={{ .Values.httpRoute.hostnames | first }}
|
||||
{{- else }}
|
||||
export APP_HOSTNAME=$(kubectl get --namespace {{(first .Values.httpRoute.parentRefs).namespace | default .Release.Namespace }} gateway/{{ (first .Values.httpRoute.parentRefs).name }} -o jsonpath="{.spec.listeners[0].hostname}")
|
||||
{{- end }}
|
||||
{{- if and .Values.httpRoute.rules (first .Values.httpRoute.rules).matches (first (first .Values.httpRoute.rules).matches).path.value }}
|
||||
echo "Visit http://$APP_HOSTNAME{{ (first (first .Values.httpRoute.rules).matches).path.value }} to use your application"
|
||||
|
||||
NOTE: Your HTTPRoute depends on the listener configuration of your gateway and your HTTPRoute rules.
|
||||
The rules can be set for path, method, header and query parameters.
|
||||
You can check the gateway configuration with 'kubectl get --namespace {{(first .Values.httpRoute.parentRefs).namespace | default .Release.Namespace }} gateway/{{ (first .Values.httpRoute.parentRefs).name }} -o yaml'
|
||||
{{- end }}
|
||||
{{- else if .Values.ingress.enabled }}
|
||||
{{- range $host := .Values.ingress.hosts }}
|
||||
{{- range .paths }}
|
||||
http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ .path }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- else if contains "NodePort" .Values.service.type }}
|
||||
export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "property-settings-svc-v2-chart.fullname" . }})
|
||||
export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}")
|
||||
echo http://$NODE_IP:$NODE_PORT
|
||||
{{- else if contains "LoadBalancer" .Values.service.type }}
|
||||
NOTE: It may take a few minutes for the LoadBalancer IP to be available.
|
||||
You can watch its status by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "property-settings-svc-v2-chart.fullname" . }}'
|
||||
export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "property-settings-svc-v2-chart.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}")
|
||||
echo http://$SERVICE_IP:{{ .Values.service.port }}
|
||||
{{- else if contains "ClusterIP" .Values.service.type }}
|
||||
export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "property-settings-svc-v2-chart.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}")
|
||||
export CONTAINER_PORT=$(kubectl get pod --namespace {{ .Release.Namespace }} $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}")
|
||||
echo "Visit http://127.0.0.1:8080 to use your application"
|
||||
kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:$CONTAINER_PORT
|
||||
{{- end }}
|
||||
61
property-settings-svc-v2-chart/templates/_db-helpers.tpl
Normal file
61
property-settings-svc-v2-chart/templates/_db-helpers.tpl
Normal file
@ -0,0 +1,61 @@
|
||||
{{/*
|
||||
Database host
|
||||
*/}}
|
||||
{{- define "property-settings-svc-v2-chart.databaseHost" -}}
|
||||
{{- if .Values.mysql.enabled -}}
|
||||
{{- printf "%s-mysql" .Release.Name -}}
|
||||
{{- else -}}
|
||||
{{- .Values.externalDatabase.host -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Database port
|
||||
*/}}
|
||||
{{- define "property-settings-svc-v2-chart.databasePort" -}}
|
||||
{{- if .Values.mysql.enabled -}}
|
||||
3306
|
||||
{{- else -}}
|
||||
{{- .Values.externalDatabase.port -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Database name
|
||||
*/}}
|
||||
{{- define "property-settings-svc-v2-chart.databaseName" -}}
|
||||
{{- if .Values.mysql.enabled -}}
|
||||
{{- .Values.mysql.mysqlDatabase -}}
|
||||
{{- else -}}
|
||||
{{- .Values.externalDatabase.database -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Database username
|
||||
*/}}
|
||||
{{- define "property-settings-svc-v2-chart.databaseUsername" -}}
|
||||
{{- if .Values.mysql.enabled -}}
|
||||
{{- .Values.mysql.mysqlUser -}}
|
||||
{{- else -}}
|
||||
{{- .Values.externalDatabase.username -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Database password
|
||||
*/}}
|
||||
{{- define "property-settings-svc-v2-chart.databasePassword" -}}
|
||||
{{- if .Values.mysql.enabled -}}
|
||||
{{- .Values.mysql.mysqlPassword -}}
|
||||
{{- else -}}
|
||||
{{- .Values.externalDatabase.password -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Database JDBC URL
|
||||
*/}}
|
||||
{{- define "property-settings-svc-v2-chart.databaseJdbcUrl" -}}
|
||||
{{- printf "jdbc:mysql://%s:%s/%s?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&" (include "property-settings-svc-v2-chart.databaseHost" .) (include "property-settings-svc-v2-chart.databasePort" .) (include "property-settings-svc-v2-chart.databaseName" .) -}}
|
||||
{{- end -}}
|
||||
62
property-settings-svc-v2-chart/templates/_helpers.tpl
Normal file
62
property-settings-svc-v2-chart/templates/_helpers.tpl
Normal file
@ -0,0 +1,62 @@
|
||||
{{/*
|
||||
Expand the name of the chart.
|
||||
*/}}
|
||||
{{- define "property-settings-svc-v2-chart.name" -}}
|
||||
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
|
||||
{{- end }}
|
||||
|
||||
{{/*
|
||||
Create a default fully qualified app name.
|
||||
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
|
||||
If release name contains chart name it will be used as a full name.
|
||||
*/}}
|
||||
{{- define "property-settings-svc-v2-chart.fullname" -}}
|
||||
{{- if .Values.fullnameOverride }}
|
||||
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
|
||||
{{- else }}
|
||||
{{- $name := default .Chart.Name .Values.nameOverride }}
|
||||
{{- if contains $name .Release.Name }}
|
||||
{{- .Release.Name | trunc 63 | trimSuffix "-" }}
|
||||
{{- else }}
|
||||
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
|
||||
{{/*
|
||||
Create chart name and version as used by the chart label.
|
||||
*/}}
|
||||
{{- define "property-settings-svc-v2-chart.chart" -}}
|
||||
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
|
||||
{{- end }}
|
||||
|
||||
{{/*
|
||||
Common labels
|
||||
*/}}
|
||||
{{- define "property-settings-svc-v2-chart.labels" -}}
|
||||
helm.sh/chart: {{ include "property-settings-svc-v2-chart.chart" . }}
|
||||
{{ include "property-settings-svc-v2-chart.selectorLabels" . }}
|
||||
{{- if .Chart.AppVersion }}
|
||||
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
|
||||
{{- end }}
|
||||
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||
{{- end }}
|
||||
|
||||
{{/*
|
||||
Selector labels
|
||||
*/}}
|
||||
{{- define "property-settings-svc-v2-chart.selectorLabels" -}}
|
||||
app.kubernetes.io/name: {{ include "property-settings-svc-v2-chart.name" . }}
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
{{- end }}
|
||||
|
||||
{{/*
|
||||
Create the name of the service account to use
|
||||
*/}}
|
||||
{{- define "property-settings-svc-v2-chart.serviceAccountName" -}}
|
||||
{{- if .Values.serviceAccount.create }}
|
||||
{{- default (include "property-settings-svc-v2-chart.fullname" .) .Values.serviceAccount.name }}
|
||||
{{- else }}
|
||||
{{- default "default" .Values.serviceAccount.name }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
@ -0,0 +1,13 @@
|
||||
{{- if .Values.dbInit.enabled }}
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: {{ include "property-settings-svc-v2-chart.fullname" . }}-sql-migrations
|
||||
labels:
|
||||
{{- include "property-settings-svc-v2-chart.labels" . | nindent 4 }}
|
||||
app.kubernetes.io/component: dbinit
|
||||
binaryData:
|
||||
{{- range $path, $_ := .Files.Glob "sql/004_property_settings_db*.sql" }}
|
||||
{{ base $path }}: {{ $.Files.Get $path | b64enc | quote }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
88
property-settings-svc-v2-chart/templates/configmap.yaml
Normal file
88
property-settings-svc-v2-chart/templates/configmap.yaml
Normal file
@ -0,0 +1,88 @@
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: {{ include "property-settings-svc-v2-chart.fullname" . }}-config
|
||||
labels:
|
||||
{{- include "property-settings-svc-v2-chart.labels" . | nindent 4 }}
|
||||
data:
|
||||
propertySettingsService.cfg: |
|
||||
{
|
||||
prod: {
|
||||
log_config: "{{ .Values.config.propertySettingsService.prod.logConfig }}",
|
||||
property_settings_db_hibernate_config: "{{ .Values.config.propertySettingsService.prod.hibernateConfig }}",
|
||||
rest_accessor_config_file: "{{ .Values.config.propertySettingsService.prod.restAccessorConfig }}",
|
||||
},
|
||||
test: {
|
||||
log_config: "{{ .Values.config.propertySettingsService.test.logConfig }}",
|
||||
property_settings_db_hibernate_config: "{{ .Values.config.propertySettingsService.test.hibernateConfig }}",
|
||||
rest_accessor_config_file: "{{ .Values.config.propertySettingsService.test.restAccessorConfig }}",
|
||||
}
|
||||
}
|
||||
log.cfg: |
|
||||
{{ .Values.config.log | indent 4 }}
|
||||
prodRestAccessor.cfg: |
|
||||
{
|
||||
"post_properties":
|
||||
{
|
||||
"url": "http://prop-property-settings:8080/propertySettingsSvcV2/properties",
|
||||
"type": "post",
|
||||
"response": "com.sokrati.propertySettingsSvcObjectsV2.PostPropertiesResponse"
|
||||
},
|
||||
"get_all_properties":
|
||||
{
|
||||
"url": "http://prop-property-settings:8080/propertySettingsSvcV2/properties",
|
||||
"type": "get",
|
||||
"response": "com.sokrati.propertySettingsSvcObjectsV2.GetPropertiesResponse"
|
||||
},
|
||||
"get_best_properties":
|
||||
{
|
||||
"url": "http://prop-property-settings:8080/propertySettingsSvcV2/properties",
|
||||
"type": "get",
|
||||
"response": "com.sokrati.propertySettingsSvcObjectsV2.GetPropertiesResponse"
|
||||
},
|
||||
"fetch_context":
|
||||
{
|
||||
{{- if .Values.traefik.enabled }}
|
||||
"url": "{{ .Values.traefik.hadesUrl }}/hadesV2/context",
|
||||
{{- else }}
|
||||
"url": "http://hades.hades.svc.cluster.local:8080/hadesV2/context",
|
||||
{{- end }}
|
||||
"type": "get",
|
||||
"response": "com.sokrati.hadesObjects.ContextResponse"
|
||||
}
|
||||
}
|
||||
testRestAccessor.cfg: |
|
||||
{
|
||||
"post_properties":
|
||||
{
|
||||
"url": "http://prop-property-settings:8080/propertySettingsSvcV2/properties",
|
||||
"type": "post",
|
||||
"response": "com.sokrati.propertySettingsSvcObjectsV2.PostPropertiesResponse"
|
||||
},
|
||||
"get_all_properties":
|
||||
{
|
||||
"url": "http://prop-property-settings:8080/propertySettingsSvcV2/properties",
|
||||
"type": "get",
|
||||
"response": "com.sokrati.propertySettingsSvcObjectsV2.GetPropertiesResponse"
|
||||
},
|
||||
"get_best_properties":
|
||||
{
|
||||
"url": "http://prop-property-settings:8080/propertySettingsSvcV2/properties",
|
||||
"type": "get",
|
||||
"response": "com.sokrati.propertySettingsSvcObjectsV2.GetPropertiesResponse"
|
||||
},
|
||||
"fetch_context":
|
||||
{
|
||||
{{- if .Values.traefik.enabled }}
|
||||
"url": "{{ .Values.traefik.hadesUrl }}/hadesV2/context",
|
||||
{{- else }}
|
||||
"url": "http://hades.hades.svc.cluster.local:8080/hadesV2/context",
|
||||
{{- end }}
|
||||
"type": "get",
|
||||
"response": "com.sokrati.hadesObjects.ContextResponse"
|
||||
}
|
||||
}
|
||||
authConfig.cfg: |
|
||||
{{ .Values.config.auth | indent 4 }}
|
||||
statsLogging.cfg: |
|
||||
{{ .Values.config.statsLogging | indent 4 }}
|
||||
93
property-settings-svc-v2-chart/templates/deployment.yaml
Normal file
93
property-settings-svc-v2-chart/templates/deployment.yaml
Normal file
@ -0,0 +1,93 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: {{ include "property-settings-svc-v2-chart.fullname" . }}
|
||||
labels:
|
||||
{{- include "property-settings-svc-v2-chart.labels" . | nindent 4 }}
|
||||
spec:
|
||||
{{- if not .Values.autoscaling.enabled }}
|
||||
replicas: {{ .Values.replicaCount }}
|
||||
{{- end }}
|
||||
selector:
|
||||
matchLabels:
|
||||
{{- include "property-settings-svc-v2-chart.selectorLabels" . | nindent 6 }}
|
||||
template:
|
||||
metadata:
|
||||
{{- with .Values.podAnnotations }}
|
||||
annotations:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
labels:
|
||||
{{- include "property-settings-svc-v2-chart.labels" . | nindent 8 }}
|
||||
{{- with .Values.podLabels }}
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
spec:
|
||||
{{- with .Values.imagePullSecrets }}
|
||||
imagePullSecrets:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
serviceAccountName: {{ include "property-settings-svc-v2-chart.serviceAccountName" . }}
|
||||
{{- with .Values.podSecurityContext }}
|
||||
securityContext:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
containers:
|
||||
- name: {{ .Chart.Name }}
|
||||
{{- with .Values.securityContext }}
|
||||
securityContext:
|
||||
{{- toYaml . | nindent 12 }}
|
||||
{{- end }}
|
||||
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
|
||||
imagePullPolicy: {{ .Values.image.pullPolicy }}
|
||||
env:
|
||||
- name: APP_ENV
|
||||
value: {{ .Values.appEnv | default "test" }}
|
||||
ports:
|
||||
- name: http
|
||||
containerPort: {{ .Values.service.port }}
|
||||
protocol: TCP
|
||||
{{- with .Values.livenessProbe }}
|
||||
livenessProbe:
|
||||
{{- toYaml . | nindent 12 }}
|
||||
{{- end }}
|
||||
{{- with .Values.readinessProbe }}
|
||||
readinessProbe:
|
||||
{{- toYaml . | nindent 12 }}
|
||||
{{- end }}
|
||||
{{- with .Values.resources }}
|
||||
resources:
|
||||
{{- toYaml . | nindent 12 }}
|
||||
{{- end }}
|
||||
volumeMounts:
|
||||
- name: config
|
||||
mountPath: /etc/onlinesales/config/propertySettingsSvcV2
|
||||
readOnly: true
|
||||
- name: db-config
|
||||
mountPath: /etc/onlinesales/db
|
||||
readOnly: true
|
||||
{{- with .Values.volumeMounts }}
|
||||
{{- toYaml . | nindent 12 }}
|
||||
{{- end }}
|
||||
volumes:
|
||||
- name: config
|
||||
configMap:
|
||||
name: {{ include "property-settings-svc-v2-chart.fullname" . }}-config
|
||||
- name: db-config
|
||||
secret:
|
||||
secretName: {{ include "property-settings-svc-v2-chart.fullname" . }}-db-config
|
||||
{{- with .Values.volumes }}
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.nodeSelector }}
|
||||
nodeSelector:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.affinity }}
|
||||
affinity:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.tolerations }}
|
||||
tolerations:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
32
property-settings-svc-v2-chart/templates/hpa.yaml
Normal file
32
property-settings-svc-v2-chart/templates/hpa.yaml
Normal file
@ -0,0 +1,32 @@
|
||||
{{- if .Values.autoscaling.enabled }}
|
||||
apiVersion: autoscaling/v2
|
||||
kind: HorizontalPodAutoscaler
|
||||
metadata:
|
||||
name: {{ include "property-settings-svc-v2-chart.fullname" . }}
|
||||
labels:
|
||||
{{- include "property-settings-svc-v2-chart.labels" . | nindent 4 }}
|
||||
spec:
|
||||
scaleTargetRef:
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
name: {{ include "property-settings-svc-v2-chart.fullname" . }}
|
||||
minReplicas: {{ .Values.autoscaling.minReplicas }}
|
||||
maxReplicas: {{ .Values.autoscaling.maxReplicas }}
|
||||
metrics:
|
||||
{{- if .Values.autoscaling.targetCPUUtilizationPercentage }}
|
||||
- type: Resource
|
||||
resource:
|
||||
name: cpu
|
||||
target:
|
||||
type: Utilization
|
||||
averageUtilization: {{ .Values.autoscaling.targetCPUUtilizationPercentage }}
|
||||
{{- end }}
|
||||
{{- if .Values.autoscaling.targetMemoryUtilizationPercentage }}
|
||||
- type: Resource
|
||||
resource:
|
||||
name: memory
|
||||
target:
|
||||
type: Utilization
|
||||
averageUtilization: {{ .Values.autoscaling.targetMemoryUtilizationPercentage }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
38
property-settings-svc-v2-chart/templates/httproute.yaml
Normal file
38
property-settings-svc-v2-chart/templates/httproute.yaml
Normal file
@ -0,0 +1,38 @@
|
||||
{{- if .Values.httpRoute.enabled -}}
|
||||
{{- $fullName := include "property-settings-svc-v2-chart.fullname" . -}}
|
||||
{{- $svcPort := .Values.service.port -}}
|
||||
apiVersion: gateway.networking.k8s.io/v1
|
||||
kind: HTTPRoute
|
||||
metadata:
|
||||
name: {{ $fullName }}
|
||||
labels:
|
||||
{{- include "property-settings-svc-v2-chart.labels" . | nindent 4 }}
|
||||
{{- with .Values.httpRoute.annotations }}
|
||||
annotations:
|
||||
{{- toYaml . | nindent 4 }}
|
||||
{{- end }}
|
||||
spec:
|
||||
parentRefs:
|
||||
{{- with .Values.httpRoute.parentRefs }}
|
||||
{{- toYaml . | nindent 4 }}
|
||||
{{- end }}
|
||||
{{- with .Values.httpRoute.hostnames }}
|
||||
hostnames:
|
||||
{{- toYaml . | nindent 4 }}
|
||||
{{- end }}
|
||||
rules:
|
||||
{{- range .Values.httpRoute.rules }}
|
||||
{{- with .matches }}
|
||||
- matches:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- with .filters }}
|
||||
filters:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
backendRefs:
|
||||
- name: {{ $fullName }}
|
||||
port: {{ $svcPort }}
|
||||
weight: 1
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
43
property-settings-svc-v2-chart/templates/ingress.yaml
Normal file
43
property-settings-svc-v2-chart/templates/ingress.yaml
Normal file
@ -0,0 +1,43 @@
|
||||
{{- if .Values.ingress.enabled -}}
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: {{ include "property-settings-svc-v2-chart.fullname" . }}
|
||||
labels:
|
||||
{{- include "property-settings-svc-v2-chart.labels" . | nindent 4 }}
|
||||
{{- with .Values.ingress.annotations }}
|
||||
annotations:
|
||||
{{- toYaml . | nindent 4 }}
|
||||
{{- end }}
|
||||
spec:
|
||||
{{- with .Values.ingress.className }}
|
||||
ingressClassName: {{ . }}
|
||||
{{- end }}
|
||||
{{- if .Values.ingress.tls }}
|
||||
tls:
|
||||
{{- range .Values.ingress.tls }}
|
||||
- hosts:
|
||||
{{- range .hosts }}
|
||||
- {{ . | quote }}
|
||||
{{- end }}
|
||||
secretName: {{ .secretName }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
rules:
|
||||
{{- range .Values.ingress.hosts }}
|
||||
- host: {{ .host | quote }}
|
||||
http:
|
||||
paths:
|
||||
{{- range .paths }}
|
||||
- path: {{ .path }}
|
||||
{{- with .pathType }}
|
||||
pathType: {{ . }}
|
||||
{{- end }}
|
||||
backend:
|
||||
service:
|
||||
name: {{ include "property-settings-svc-v2-chart.fullname" $ }}
|
||||
port:
|
||||
number: {{ $.Values.service.port }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
130
property-settings-svc-v2-chart/templates/job-dbinit.yaml
Normal file
130
property-settings-svc-v2-chart/templates/job-dbinit.yaml
Normal file
@ -0,0 +1,130 @@
|
||||
{{- if .Values.dbInit.enabled }}
|
||||
apiVersion: batch/v1
|
||||
kind: Job
|
||||
metadata:
|
||||
name: {{ include "property-settings-svc-v2-chart.fullname" . }}-dbinit
|
||||
labels:
|
||||
{{- include "property-settings-svc-v2-chart.labels" . | nindent 4 }}
|
||||
app.kubernetes.io/component: dbinit
|
||||
annotations:
|
||||
"helm.sh/hook": post-install,post-upgrade
|
||||
"helm.sh/hook-weight": "-5"
|
||||
"helm.sh/hook-delete-policy": before-hook-creation
|
||||
spec:
|
||||
backoffLimit: 5
|
||||
ttlSecondsAfterFinished: 300
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app.kubernetes.io/component: dbinit
|
||||
{{- include "property-settings-svc-v2-chart.selectorLabels" . | nindent 8 }}
|
||||
spec:
|
||||
restartPolicy: OnFailure
|
||||
initContainers:
|
||||
# Wait for MySQL to be ready
|
||||
- name: wait-for-db
|
||||
image: busybox:1.36
|
||||
command:
|
||||
- sh
|
||||
- -c
|
||||
- |
|
||||
echo "Waiting for database to be ready..."
|
||||
until nc -z {{ include "property-settings-svc-v2-chart.databaseHost" . }} {{ include "property-settings-svc-v2-chart.databasePort" . }}; do
|
||||
echo "Database is unavailable - sleeping"
|
||||
sleep 2
|
||||
done
|
||||
echo "Database is up!"
|
||||
sleep 10
|
||||
containers:
|
||||
- name: dbinit
|
||||
image: mysql:8.0
|
||||
env:
|
||||
- name: MYSQL_HOST
|
||||
value: {{ include "property-settings-svc-v2-chart.databaseHost" . | quote }}
|
||||
- name: MYSQL_PORT
|
||||
value: {{ include "property-settings-svc-v2-chart.databasePort" . | quote }}
|
||||
- name: MYSQL_DATABASE
|
||||
value: {{ include "property-settings-svc-v2-chart.databaseName" . | quote }}
|
||||
- name: MYSQL_USER
|
||||
value: {{ include "property-settings-svc-v2-chart.databaseUsername" . | quote }}
|
||||
- name: MYSQL_PWD
|
||||
value: {{ include "property-settings-svc-v2-chart.databasePassword" . | quote }}
|
||||
command:
|
||||
- /bin/bash
|
||||
- -c
|
||||
- |
|
||||
set -ex
|
||||
|
||||
echo "========================================="
|
||||
echo "Property Settings Database Migration"
|
||||
echo "========================================="
|
||||
echo "Host: ${MYSQL_HOST}:${MYSQL_PORT}"
|
||||
echo "Database: ${MYSQL_DATABASE}"
|
||||
echo "User: ${MYSQL_USER}"
|
||||
echo "========================================="
|
||||
|
||||
# Test connection
|
||||
echo "Testing database connection..."
|
||||
if ! mysql -h"${MYSQL_HOST}" -P"${MYSQL_PORT}" -u"${MYSQL_USER}" -e "SELECT 1" 2>/dev/null; then
|
||||
echo "ERROR: Cannot connect to database"
|
||||
exit 1
|
||||
fi
|
||||
echo "✓ Database connection successful"
|
||||
echo ""
|
||||
|
||||
# Apply migrations in order
|
||||
TOTAL=0
|
||||
SUCCESS=0
|
||||
FAILED=0
|
||||
|
||||
for sql_file in /migrations/*.sql; do
|
||||
if [ ! -f "$sql_file" ]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
filename=$(basename "$sql_file")
|
||||
TOTAL=$((TOTAL + 1))
|
||||
|
||||
echo -n "Applying $filename... "
|
||||
|
||||
if mysql -h"${MYSQL_HOST}" -P"${MYSQL_PORT}" -u"root" < "$sql_file" 2>/tmp/migration_error.log; then
|
||||
echo "✓ SUCCESS"
|
||||
SUCCESS=$((SUCCESS + 1))
|
||||
else
|
||||
echo "✗ FAILED"
|
||||
echo "Error details:"
|
||||
cat /tmp/migration_error.log
|
||||
FAILED=$((FAILED + 1))
|
||||
|
||||
# Stop on first error
|
||||
echo ""
|
||||
echo "========================================="
|
||||
echo "Migration failed at: $filename"
|
||||
echo "========================================="
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
echo ""
|
||||
echo "========================================="
|
||||
echo "Migration Summary:"
|
||||
echo " Total: $TOTAL"
|
||||
echo " Success: $SUCCESS"
|
||||
echo " Failed: $FAILED"
|
||||
echo "========================================="
|
||||
|
||||
if [ $FAILED -eq 0 ]; then
|
||||
echo "✓ All migrations completed successfully!"
|
||||
exit 0
|
||||
else
|
||||
echo "✗ Some migrations failed"
|
||||
exit 1
|
||||
fi
|
||||
volumeMounts:
|
||||
- name: sql-migrations
|
||||
mountPath: /migrations
|
||||
volumes:
|
||||
- name: sql-migrations
|
||||
configMap:
|
||||
name: {{ include "property-settings-svc-v2-chart.fullname" . }}-sql-migrations
|
||||
{{- end }}
|
||||
44
property-settings-svc-v2-chart/templates/secret.yaml
Normal file
44
property-settings-svc-v2-chart/templates/secret.yaml
Normal file
@ -0,0 +1,44 @@
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: {{ include "property-settings-svc-v2-chart.fullname" . }}-db-config
|
||||
labels:
|
||||
{{- include "property-settings-svc-v2-chart.labels" . | nindent 4 }}
|
||||
type: Opaque
|
||||
stringData:
|
||||
propertySettingsV2.hbm.xml: |
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!DOCTYPE hibernate-configuration PUBLIC
|
||||
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
|
||||
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
|
||||
<hibernate-configuration>
|
||||
<session-factory>
|
||||
<property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property>
|
||||
<property name="connection.url">{{ include "property-settings-svc-v2-chart.databaseJdbcUrl" . }}</property>
|
||||
<property name="connection.username">{{ include "property-settings-svc-v2-chart.databaseUsername" . }}</property>
|
||||
<property name="connection.password">{{ include "property-settings-svc-v2-chart.databasePassword" . }}</property>
|
||||
<property name="connection.pool_size">1</property>
|
||||
<property name="dialect">dblib.CustomMySQL8DialectUtf8mb4</property>
|
||||
<property name="current_session_context_class">thread</property>
|
||||
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
|
||||
<property name="hibernate.cache.use_second_level_cache">false</property>
|
||||
<property name="show_sql">false</property>
|
||||
<property name="use_keying_service">false</property>
|
||||
<property name="use_credential_store">false</property>
|
||||
<!-- Transaction isolation 2 = READ_COMMITTED -->
|
||||
<property name="connection.isolation">2</property>
|
||||
<property name="connection.autocommit">true</property>
|
||||
<property name="connection.useUnicode">true</property>
|
||||
<property name="connection.characterEncoding">UTF-8</property>
|
||||
<!-- configuration pool via c3p0-->
|
||||
<property name="c3p0.acquire_increment">10</property>
|
||||
<property name="c3p0.max_size">30</property>
|
||||
<property name="c3p0.max_statements">0</property>
|
||||
<property name="c3p0.min_size">10</property>
|
||||
<property name="c3p0.timeout">3605</property> <!-- seconds -->
|
||||
<property name="c3p0.testConnectionOnCheckin">true</property>
|
||||
<property name="hibernate.c3p0.idle_test_period">30</property>
|
||||
<property name="hibernate.c3p0.preferredTestQuery">select 1;</property>
|
||||
<property name="hibernate.globally_quoted_identifiers">true</property>
|
||||
</session-factory>
|
||||
</hibernate-configuration>
|
||||
15
property-settings-svc-v2-chart/templates/service.yaml
Normal file
15
property-settings-svc-v2-chart/templates/service.yaml
Normal file
@ -0,0 +1,15 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: {{ include "property-settings-svc-v2-chart.fullname" . }}
|
||||
labels:
|
||||
{{- include "property-settings-svc-v2-chart.labels" . | nindent 4 }}
|
||||
spec:
|
||||
type: {{ .Values.service.type }}
|
||||
ports:
|
||||
- port: {{ .Values.service.port }}
|
||||
targetPort: http
|
||||
protocol: TCP
|
||||
name: http
|
||||
selector:
|
||||
{{- include "property-settings-svc-v2-chart.selectorLabels" . | nindent 4 }}
|
||||
13
property-settings-svc-v2-chart/templates/serviceaccount.yaml
Normal file
13
property-settings-svc-v2-chart/templates/serviceaccount.yaml
Normal file
@ -0,0 +1,13 @@
|
||||
{{- if .Values.serviceAccount.create -}}
|
||||
apiVersion: v1
|
||||
kind: ServiceAccount
|
||||
metadata:
|
||||
name: {{ include "property-settings-svc-v2-chart.serviceAccountName" . }}
|
||||
labels:
|
||||
{{- include "property-settings-svc-v2-chart.labels" . | nindent 4 }}
|
||||
{{- with .Values.serviceAccount.annotations }}
|
||||
annotations:
|
||||
{{- toYaml . | nindent 4 }}
|
||||
{{- end }}
|
||||
automountServiceAccountToken: {{ .Values.serviceAccount.automount }}
|
||||
{{- end }}
|
||||
@ -0,0 +1,15 @@
|
||||
apiVersion: v1
|
||||
kind: Pod
|
||||
metadata:
|
||||
name: "{{ include "property-settings-svc-v2-chart.fullname" . }}-test-connection"
|
||||
labels:
|
||||
{{- include "property-settings-svc-v2-chart.labels" . | nindent 4 }}
|
||||
annotations:
|
||||
"helm.sh/hook": test
|
||||
spec:
|
||||
containers:
|
||||
- name: wget
|
||||
image: busybox
|
||||
command: ['wget']
|
||||
args: ['{{ include "property-settings-svc-v2-chart.fullname" . }}:{{ .Values.service.port }}']
|
||||
restartPolicy: Never
|
||||
347
property-settings-svc-v2-chart/values.yaml
Normal file
347
property-settings-svc-v2-chart/values.yaml
Normal file
@ -0,0 +1,347 @@
|
||||
# Default values for property-settings-svc-v2-chart.
|
||||
# This is a YAML-formatted file.
|
||||
# Declare variables to be passed into your templates.
|
||||
|
||||
# This will set the replicaset count more information can be found here: https://kubernetes.io/docs/concepts/workloads/controllers/replicaset/
|
||||
replicaCount: 1
|
||||
|
||||
# This sets the container image more information can be found here: https://kubernetes.io/docs/concepts/containers/images/
|
||||
image:
|
||||
repository: localhost:5001/prj-onlinesales-prod-01/os-docker-images/onlinesales/prod/services/java/propertysettingssvcv2
|
||||
# This sets the pull policy for images.
|
||||
pullPolicy: IfNotPresent
|
||||
# Overrides the image tag whose default is the chart appVersion.
|
||||
tag: "1752740345878"
|
||||
|
||||
# This is for the secrets for pulling an image from a private repository more information can be found here: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/
|
||||
imagePullSecrets: []
|
||||
# This is to override the chart name.
|
||||
nameOverride: "property-settings"
|
||||
fullnameOverride: ""
|
||||
|
||||
# This section builds out the service account more information can be found here: https://kubernetes.io/docs/concepts/security/service-accounts/
|
||||
serviceAccount:
|
||||
# Specifies whether a service account should be created.
|
||||
create: true
|
||||
# Automatically mount a ServiceAccount's API credentials?
|
||||
automount: true
|
||||
# Annotations to add to the service account.
|
||||
annotations: {}
|
||||
# The name of the service account to use.
|
||||
# If not set and create is true, a name is generated using the fullname template.
|
||||
name: ""
|
||||
|
||||
# This is for setting Kubernetes Annotations to a Pod.
|
||||
# For more information checkout: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/
|
||||
podAnnotations: {}
|
||||
# This is for setting Kubernetes Labels to a Pod.
|
||||
# For more information checkout: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/
|
||||
podLabels: {}
|
||||
|
||||
podSecurityContext: {}
|
||||
# fsGroup: 2000
|
||||
|
||||
securityContext: {}
|
||||
# capabilities:
|
||||
# drop:
|
||||
# - ALL
|
||||
# readOnlyRootFilesystem: true
|
||||
# runAsNonRoot: true
|
||||
# runAsUser: 1000
|
||||
|
||||
# This is for setting up a service more information can be found here: https://kubernetes.io/docs/concepts/services-networking/service/
|
||||
service:
|
||||
# This sets the service type more information can be found here: https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types
|
||||
type: ClusterIP
|
||||
# This sets the ports more information can be found here: https://kubernetes.io/docs/concepts/services-networking/service/#field-spec-ports
|
||||
port: 8080
|
||||
|
||||
# This block is for setting up the ingress for more information can be found here: https://kubernetes.io/docs/concepts/services-networking/ingress/
|
||||
ingress:
|
||||
enabled: false
|
||||
className: ""
|
||||
annotations: {}
|
||||
# kubernetes.io/ingress.class: nginx
|
||||
# kubernetes.io/tls-acme: "true"
|
||||
hosts:
|
||||
- host: chart-example.local
|
||||
paths:
|
||||
- path: /
|
||||
pathType: ImplementationSpecific
|
||||
tls: []
|
||||
# - secretName: chart-example-tls
|
||||
# hosts:
|
||||
# - chart-example.local
|
||||
|
||||
# -- Expose the service via gateway-api HTTPRoute
|
||||
# Requires Gateway API resources and suitable controller installed within the cluster
|
||||
# (see: https://gateway-api.sigs.k8s.io/guides/)
|
||||
httpRoute:
|
||||
# HTTPRoute enabled.
|
||||
enabled: false
|
||||
# HTTPRoute annotations.
|
||||
annotations: {}
|
||||
# Which Gateways this Route is attached to.
|
||||
parentRefs:
|
||||
- name: gateway
|
||||
sectionName: http
|
||||
# namespace: default
|
||||
# Hostnames matching HTTP header.
|
||||
hostnames:
|
||||
- chart-example.local
|
||||
# List of rules and filters applied.
|
||||
rules:
|
||||
- matches:
|
||||
- path:
|
||||
type: PathPrefix
|
||||
value: /headers
|
||||
# filters:
|
||||
# - type: RequestHeaderModifier
|
||||
# requestHeaderModifier:
|
||||
# set:
|
||||
# - name: My-Overwrite-Header
|
||||
# value: this-is-the-only-value
|
||||
# remove:
|
||||
# - User-Agent
|
||||
# - matches:
|
||||
# - path:
|
||||
# type: PathPrefix
|
||||
# value: /echo
|
||||
# headers:
|
||||
# - name: version
|
||||
# value: v2
|
||||
|
||||
resources:
|
||||
requests:
|
||||
cpu: 500m
|
||||
memory: 512Mi
|
||||
|
||||
# This is to setup the liveness and readiness probes more information can be found here: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/
|
||||
livenessProbe:
|
||||
httpGet:
|
||||
path: /propertySettingsSvcV2/properties?jsonQuery=%7B%22requestType%22%3A%22GetAllProperties%22%2C%22isActive%22%3A%22true%22%2C%22propertyTypeFilter%22%3A%5B%22BUSINESS_SEGMENT_SET%22%5D%2C%22isBestProperty%22%3Afalse%2C%22entityDetails%22%3A%5B%7B%22entityType%22%3A%22AGENCY%22%2C%22entityValue%22%3A%22424_1%22%7D%5D%2C%22application%22%3A%22nagios%22%7D
|
||||
port: http
|
||||
initialDelaySeconds: 30
|
||||
periodSeconds: 30
|
||||
timeoutSeconds: 10
|
||||
failureThreshold: 3
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
path: /propertySettingsSvcV2/properties?jsonQuery=%7B%22requestType%22%3A%22GetAllProperties%22%2C%22isActive%22%3A%22true%22%2C%22propertyTypeFilter%22%3A%5B%22BUSINESS_SEGMENT_SET%22%5D%2C%22isBestProperty%22%3Afalse%2C%22entityDetails%22%3A%5B%7B%22entityType%22%3A%22AGENCY%22%2C%22entityValue%22%3A%22424_1%22%7D%5D%2C%22application%22%3A%22nagios%22%7D
|
||||
port: http
|
||||
initialDelaySeconds: 30
|
||||
periodSeconds: 30
|
||||
timeoutSeconds: 10
|
||||
failureThreshold: 3
|
||||
|
||||
# This section is for setting up autoscaling more information can be found here: https://kubernetes.io/docs/concepts/workloads/autoscaling/
|
||||
autoscaling:
|
||||
enabled: false
|
||||
minReplicas: 1
|
||||
maxReplicas: 10
|
||||
targetCPUUtilizationPercentage: 200
|
||||
targetMemoryUtilizationPercentage: 80
|
||||
|
||||
# Traefik Ingress Configuration (for test setup with IP header injection)
|
||||
# Enable this to route traffic through Traefik with custom IP header injection
|
||||
traefik:
|
||||
# Enable Traefik routing for Hades calls
|
||||
enabled: false
|
||||
# Service-specific IP address for X-Client-IP header
|
||||
clientIP: "10.0.0.1"
|
||||
# Base URL for routing to Hades via Traefik (path-based routing - no DNS config needed)
|
||||
hadesUrl: "http://traefik.traefik.svc.cluster.local/property-hades"
|
||||
# Middleware reference (must exist in cluster)
|
||||
middleware:
|
||||
name: "property-settings-caller-headers"
|
||||
namespace: "traefik"
|
||||
|
||||
# Additional volumes on the output Deployment definition.
|
||||
volumes: []
|
||||
# The deployment will automatically add config and db-config volumes
|
||||
# - config volume mounts ConfigMap with application configuration files
|
||||
# - db-config volume mounts Secret with Hibernate mapping
|
||||
|
||||
# Additional volumeMounts on the output Deployment definition.
|
||||
volumeMounts: []
|
||||
# The deployment automatically mounts:
|
||||
# - /etc/onlinesales/config/propertySettingsSvcV2 (from config ConfigMap)
|
||||
# - /etc/onlinesales/db (from db-config Secret)
|
||||
|
||||
nodeSelector: {}
|
||||
|
||||
tolerations: []
|
||||
|
||||
affinity: {}
|
||||
|
||||
# MySQL Database Configuration
|
||||
# Set mysql.enabled to true to deploy MySQL as part of this chart
|
||||
# Set mysql.enabled to false to use an external MySQL database
|
||||
mysql:
|
||||
enabled: true
|
||||
image: "mysql"
|
||||
imageTag: "8.0.33"
|
||||
imagePullPolicy: IfNotPresent
|
||||
mysqlRootPassword: "changeme"
|
||||
mysqlUser: "propertysettings"
|
||||
mysqlPassword: "changeme"
|
||||
mysqlDatabase: "property_settings_db_v2"
|
||||
persistence:
|
||||
enabled: true
|
||||
size: 8Gi
|
||||
storageClass: ""
|
||||
resources:
|
||||
requests:
|
||||
cpu: 250m
|
||||
memory: 256Mi
|
||||
configurationFiles:
|
||||
mysql.cnf: |-
|
||||
[mysqld]
|
||||
default_authentication_plugin=mysql_native_password
|
||||
character-set-server=utf8
|
||||
collation-server=utf8_general_ci
|
||||
sql_mode=NO_ENGINE_SUBSTITUTION
|
||||
max_allowed_packet=16M
|
||||
|
||||
# Database initialization
|
||||
# Automatically runs all SQL migration files from sql/ directory in alphabetical order
|
||||
# SQL files are loaded via ConfigMap and executed by a Helm Job (post-install/post-upgrade hook)
|
||||
# To use a specific set of files, manage them in the sql/ directory:
|
||||
# - For clean installation: Use 000-003 files (004 can be removed or renamed)
|
||||
# - For complete dump with data: Use only 004 file (rename others to .bak or remove)
|
||||
dbInit:
|
||||
enabled: true
|
||||
|
||||
# External MySQL Configuration (used when mysql.enabled=false)
|
||||
externalDatabase:
|
||||
host: "mysql.example.com"
|
||||
port: 3306
|
||||
database: "property_settings_db_v2"
|
||||
username: "propertysettings"
|
||||
password: "changeme"
|
||||
|
||||
# Application Configuration Files
|
||||
# These values are used to generate the ConfigMap mounted at /etc/onlinesales/config/propertySettingsSvcV2
|
||||
|
||||
appEnv:
|
||||
test
|
||||
|
||||
config:
|
||||
# Main service configuration
|
||||
propertySettingsService:
|
||||
prod:
|
||||
logConfig: "/etc/onlinesales/config/propertySettingsSvcV2/log.cfg"
|
||||
hibernateConfig: "/etc/onlinesales/db/propertySettingsV2.hbm.xml"
|
||||
restAccessorConfig: "/etc/onlinesales/config/propertySettingsSvcV2/prodRestAccessor.cfg"
|
||||
test:
|
||||
logConfig: "/etc/onlinesales/config/propertySettingsSvcV2/log.cfg"
|
||||
hibernateConfig: "/etc/onlinesales/db/propertySettingsV2.hbm.xml"
|
||||
restAccessorConfig: "/etc/onlinesales/config/propertySettingsSvcV2/testRestAccessor.cfg"
|
||||
|
||||
# Logging configuration
|
||||
log: |
|
||||
log4j.rootLogger=DEBUG, root
|
||||
log4j.logger.OS=DEBUG, root
|
||||
log4j.logger.org.hibernate=DEBUG, root
|
||||
log4j.appender.root=org.apache.log4j.ConsoleAppender
|
||||
log4j.appender.root.layout=org.apache.log4j.PatternLayout
|
||||
log4j.appender.root.layout.ConversionPattern=<%d> %5p [%t](%c) [%X{request_id}] - %m%n
|
||||
log4j.additivity.OS=false
|
||||
|
||||
log4j.logger.SOKRATI_METRICS=OFF, A3
|
||||
log4j.appender.A3=org.apache.log4j.ConsoleAppender
|
||||
log4j.appender.A3.layout=org.apache.log4j.PatternLayout
|
||||
log4j.appender.A3.layout.ConversionPattern=<%d> %5p [%t](%c) - %m%n
|
||||
log4j.additivity.SOKRATI_METRICS=false
|
||||
|
||||
# Production REST accessor configuration
|
||||
prodRestAccessor: |
|
||||
{
|
||||
"post_properties":
|
||||
{
|
||||
"url": "http://prop-property-settings:8080/propertySettingsSvcV2/properties",
|
||||
"type": "post",
|
||||
"response": "com.sokrati.propertySettingsSvcObjectsV2.PostPropertiesResponse"
|
||||
},
|
||||
"get_all_properties":
|
||||
{
|
||||
"url": "http://prop-property-settings:8080/propertySettingsSvcV2/properties",
|
||||
"type": "get",
|
||||
"response": "com.sokrati.propertySettingsSvcObjectsV2.GetPropertiesResponse"
|
||||
},
|
||||
"get_best_properties":
|
||||
{
|
||||
"url": "http://prop-property-settings:8080/propertySettingsSvcV2/properties",
|
||||
"type": "get",
|
||||
"response": "com.sokrati.propertySettingsSvcObjectsV2.GetPropertiesResponse"
|
||||
},
|
||||
"fetch_context":
|
||||
{
|
||||
"url": "http://hades.hades.svc.cluster.local:8080/hadesV2/context",
|
||||
"type": "get",
|
||||
"response": "com.sokrati.hadesObjects.ContextResponse"
|
||||
}
|
||||
}
|
||||
|
||||
# Test REST accessor configuration
|
||||
testRestAccessor: |
|
||||
{
|
||||
"post_properties":
|
||||
{
|
||||
"url": "http://prop-property-settings:8080/propertySettingsSvcV2/properties",
|
||||
"type": "post",
|
||||
"response": "com.sokrati.propertySettingsSvcObjectsV2.PostPropertiesResponse"
|
||||
},
|
||||
"get_all_properties":
|
||||
{
|
||||
"url": "http://prop-property-settings:8080/propertySettingsSvcV2/properties",
|
||||
"type": "get",
|
||||
"response": "com.sokrati.propertySettingsSvcObjectsV2.GetPropertiesResponse"
|
||||
},
|
||||
"get_best_properties":
|
||||
{
|
||||
"url": "http://prop-property-settings:8080/propertySettingsSvcV2/properties",
|
||||
"type": "get",
|
||||
"response": "com.sokrati.propertySettingsSvcObjectsV2.GetPropertiesResponse"
|
||||
},
|
||||
"fetch_context":
|
||||
{
|
||||
"url": "http://hades.hades.svc.cluster.local:8080/hadesV2/context",
|
||||
"type": "get",
|
||||
"response": "com.sokrati.hadesObjects.ContextResponse"
|
||||
}
|
||||
}
|
||||
|
||||
# Authentication configuration
|
||||
auth: |
|
||||
{
|
||||
prod: {
|
||||
hades_auth_url : "http://hades.hades.svc.cluster.local:8080/hadesV2/authorize",
|
||||
auth_enable : true
|
||||
},
|
||||
test: {
|
||||
hades_auth_url : "http://hades.hades.svc.cluster.local:8080/hadesV2/authorize",
|
||||
auth_enable : true
|
||||
}
|
||||
}
|
||||
|
||||
# Statistics logging configuration
|
||||
statsLogging: |
|
||||
{
|
||||
test: {
|
||||
metric_name_prefix: "",
|
||||
statsd_host: "localhost",
|
||||
statsd_port: "8125",
|
||||
logging_enabled: "true",
|
||||
},
|
||||
prod: {
|
||||
metric_name_prefix: "",
|
||||
statsd_host: "localhost",
|
||||
statsd_port: "8125",
|
||||
logging_enabled: "true",
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
23
traefik-config/ingressroute-property-to-hades.yaml
Normal file
23
traefik-config/ingressroute-property-to-hades.yaml
Normal file
@ -0,0 +1,23 @@
|
||||
apiVersion: traefik.io/v1alpha1
|
||||
kind: IngressRoute
|
||||
metadata:
|
||||
name: property-to-hades
|
||||
namespace: hades
|
||||
labels:
|
||||
target: "hades"
|
||||
caller: "property-settings"
|
||||
spec:
|
||||
entryPoints:
|
||||
- web
|
||||
routes:
|
||||
- match: PathPrefix(`/property-hades`)
|
||||
kind: Rule
|
||||
services:
|
||||
- name: hades
|
||||
namespace: hades
|
||||
port: 8080
|
||||
middlewares:
|
||||
- name: property-settings-caller-headers
|
||||
namespace: hades
|
||||
- name: strip-property-prefix
|
||||
namespace: hades
|
||||
21
traefik-config/ingressroute-serviceb-to-hades.yaml
Normal file
21
traefik-config/ingressroute-serviceb-to-hades.yaml
Normal file
@ -0,0 +1,21 @@
|
||||
apiVersion: traefik.io/v1alpha1
|
||||
kind: IngressRoute
|
||||
metadata:
|
||||
name: serviceb-to-hades
|
||||
namespace: traefik
|
||||
labels:
|
||||
target: "hades"
|
||||
caller: "serviceb"
|
||||
spec:
|
||||
entryPoints:
|
||||
- web
|
||||
routes:
|
||||
- match: Host(`serviceb-hades.local`)
|
||||
kind: Rule
|
||||
services:
|
||||
- name: hades
|
||||
namespace: hades
|
||||
port: 8080
|
||||
middlewares:
|
||||
- name: serviceb-caller-headers
|
||||
namespace: traefik
|
||||
14
traefik-config/middleware-property-settings-caller.yaml
Normal file
14
traefik-config/middleware-property-settings-caller.yaml
Normal file
@ -0,0 +1,14 @@
|
||||
apiVersion: traefik.io/v1alpha1
|
||||
kind: Middleware
|
||||
metadata:
|
||||
name: property-settings-caller-headers
|
||||
namespace: traefik
|
||||
labels:
|
||||
purpose: "hades-ip-injection"
|
||||
caller: "property-settings"
|
||||
spec:
|
||||
headers:
|
||||
customRequestHeaders:
|
||||
X-Client-IP: "10.0.0.1"
|
||||
X-Original-IP: "10.0.0.1"
|
||||
X-Forwarded-For: "10.0.0.1"
|
||||
14
traefik-config/middleware-serviceb-caller.yaml
Normal file
14
traefik-config/middleware-serviceb-caller.yaml
Normal file
@ -0,0 +1,14 @@
|
||||
apiVersion: traefik.io/v1alpha1
|
||||
kind: Middleware
|
||||
metadata:
|
||||
name: serviceb-caller-headers
|
||||
namespace: traefik
|
||||
labels:
|
||||
purpose: "hades-ip-injection"
|
||||
caller: "serviceb"
|
||||
spec:
|
||||
headers:
|
||||
customRequestHeaders:
|
||||
X-Client-IP: "10.0.0.2"
|
||||
X-Original-IP: "10.0.0.2"
|
||||
X-Forwarded-For: "10.0.0.2"
|
||||
9
traefik-config/middleware-strip-property-prefix.yaml
Normal file
9
traefik-config/middleware-strip-property-prefix.yaml
Normal file
@ -0,0 +1,9 @@
|
||||
apiVersion: traefik.io/v1alpha1
|
||||
kind: Middleware
|
||||
metadata:
|
||||
name: strip-property-prefix
|
||||
namespace: traefik
|
||||
spec:
|
||||
stripPrefix:
|
||||
prefixes:
|
||||
- /property-hades
|
||||
14
traefik-config/service-ip-registry.yaml
Normal file
14
traefik-config/service-ip-registry.yaml
Normal file
@ -0,0 +1,14 @@
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: traefik-service-ips
|
||||
namespace: traefik
|
||||
labels:
|
||||
app: traefik
|
||||
component: config
|
||||
data:
|
||||
# Service name to IP address mappings (for documentation)
|
||||
property-settings-svc: "10.0.0.1"
|
||||
serviceb-svc: "10.0.0.2"
|
||||
# Add new services here:
|
||||
# servicec-svc: "10.0.0.3"
|
||||
Loading…
x
Reference in New Issue
Block a user