Shared Mysql fix
This commit is contained in:
parent
e0c81132d4
commit
c5c5224206
@ -36,6 +36,8 @@ spec:
|
|||||||
value: '{}'
|
value: '{}'
|
||||||
- name: helmExternalParams
|
- name: helmExternalParams
|
||||||
value: '{}'
|
value: '{}'
|
||||||
|
- name: sharedMysqlConfig
|
||||||
|
value: '[]'
|
||||||
entrypoint: provision-environment
|
entrypoint: provision-environment
|
||||||
templates:
|
templates:
|
||||||
- inputs:
|
- inputs:
|
||||||
@ -50,6 +52,7 @@ spec:
|
|||||||
- name: manualDependencyUrls
|
- name: manualDependencyUrls
|
||||||
- name: valuesContentEdits
|
- name: valuesContentEdits
|
||||||
- name: helmExternalParams
|
- name: helmExternalParams
|
||||||
|
- name: sharedMysqlConfig
|
||||||
name: provision-environment
|
name: provision-environment
|
||||||
steps:
|
steps:
|
||||||
- - arguments:
|
- - arguments:
|
||||||
@ -74,6 +77,8 @@ spec:
|
|||||||
value: '{{inputs.parameters.valuesContentEdits}}'
|
value: '{{inputs.parameters.valuesContentEdits}}'
|
||||||
- name: helmExternalParams
|
- name: helmExternalParams
|
||||||
value: '{{inputs.parameters.helmExternalParams}}'
|
value: '{{inputs.parameters.helmExternalParams}}'
|
||||||
|
- name: sharedMysqlConfig
|
||||||
|
value: '{{inputs.parameters.sharedMysqlConfig}}'
|
||||||
name: create-git-repo
|
name: create-git-repo
|
||||||
template: create-repo
|
template: create-repo
|
||||||
- - arguments:
|
- - arguments:
|
||||||
@ -104,6 +109,7 @@ spec:
|
|||||||
- name: manualDependencyUrls
|
- name: manualDependencyUrls
|
||||||
- name: valuesContentEdits
|
- name: valuesContentEdits
|
||||||
- name: helmExternalParams
|
- name: helmExternalParams
|
||||||
|
- name: sharedMysqlConfig
|
||||||
name: create-repo
|
name: create-repo
|
||||||
script:
|
script:
|
||||||
command:
|
command:
|
||||||
@ -158,6 +164,10 @@ spec:
|
|||||||
{{inputs.parameters.helmExternalParams}}
|
{{inputs.parameters.helmExternalParams}}
|
||||||
EOFPARAM
|
EOFPARAM
|
||||||
)
|
)
|
||||||
|
SHARED_MYSQL_CONFIG=$(cat <<'EOFPARAM'
|
||||||
|
{{inputs.parameters.sharedMysqlConfig}}
|
||||||
|
EOFPARAM
|
||||||
|
)
|
||||||
|
|
||||||
# Sanitize namespace name (replace spaces and special chars with hyphens)
|
# Sanitize namespace name (replace spaces and special chars with hyphens)
|
||||||
NAMESPACE=$(echo "$NAMESPACE" | tr '[:upper:]' '[:lower:]' | tr ' _' '-' | sed 's/[^a-z0-9-]//g' | sed 's/--*/-/g' | sed 's/^-//;s/-$//')
|
NAMESPACE=$(echo "$NAMESPACE" | tr '[:upper:]' '[:lower:]' | tr ' _' '-' | sed 's/[^a-z0-9-]//g' | sed 's/--*/-/g' | sed 's/^-//;s/-$//')
|
||||||
@ -252,6 +262,91 @@ spec:
|
|||||||
kubernetes.io/metadata.name: argo-workflows
|
kubernetes.io/metadata.name: argo-workflows
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
|
# Create shared MySQL instances
|
||||||
|
echo "Processing shared MySQL instances..."
|
||||||
|
echo "$SHARED_MYSQL_CONFIG" | jq -c '.[]' 2>/dev/null | while read -r instance; do
|
||||||
|
INSTANCE_NAME=$(echo "$instance" | jq -r '.instanceName')
|
||||||
|
VERSION=$(echo "$instance" | jq -r '.version')
|
||||||
|
|
||||||
|
if [ -z "$INSTANCE_NAME" ] || [ "$INSTANCE_NAME" = "null" ]; then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Creating shared MySQL instance: $INSTANCE_NAME (MySQL $VERSION)"
|
||||||
|
|
||||||
|
# Build SQL to create all databases and grant permissions
|
||||||
|
DB_INIT_SQL="-- Auto-generated database initialization"
|
||||||
|
for db in $(echo "$instance" | jq -c '.databases[]'); do
|
||||||
|
DB_NAME=$(echo "$db" | jq -r '.databaseName')
|
||||||
|
SERVICE_NAME=$(echo "$db" | jq -r '.serviceName')
|
||||||
|
DB_INIT_SQL="${DB_INIT_SQL}
|
||||||
|
-- Database for ${SERVICE_NAME}
|
||||||
|
CREATE DATABASE IF NOT EXISTS \`${DB_NAME}\` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||||
|
GRANT ALL PRIVILEGES ON \`${DB_NAME}\`.* TO 'mysql_user'@'%';"
|
||||||
|
done
|
||||||
|
DB_INIT_SQL="${DB_INIT_SQL}
|
||||||
|
FLUSH PRIVILEGES;"
|
||||||
|
|
||||||
|
# Create ArgoCD Application for shared MySQL
|
||||||
|
cat > "manifests/${INSTANCE_NAME}-application.yaml" <<EOF
|
||||||
|
apiVersion: argoproj.io/v1alpha1
|
||||||
|
kind: Application
|
||||||
|
metadata:
|
||||||
|
name: $NAMESPACE-$INSTANCE_NAME
|
||||||
|
namespace: argocd
|
||||||
|
labels:
|
||||||
|
environment: $NAMESPACE
|
||||||
|
provisioned-by: backstage
|
||||||
|
shared-mysql: "true"
|
||||||
|
finalizers:
|
||||||
|
- resources-finalizer.argocd.argoproj.io
|
||||||
|
spec:
|
||||||
|
project: default
|
||||||
|
source:
|
||||||
|
repoURL: https://charts.bitnami.com/bitnami
|
||||||
|
chart: mysql
|
||||||
|
targetRevision: "9.14.4"
|
||||||
|
helm:
|
||||||
|
values: |
|
||||||
|
image:
|
||||||
|
tag: "$VERSION"
|
||||||
|
auth:
|
||||||
|
rootPassword: "local-root-pass"
|
||||||
|
username: "mysql_user"
|
||||||
|
password: "local-mysql-pass"
|
||||||
|
fullnameOverride: "$INSTANCE_NAME"
|
||||||
|
primary:
|
||||||
|
persistence:
|
||||||
|
enabled: true
|
||||||
|
size: 8Gi
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
cpu: 250m
|
||||||
|
memory: 512Mi
|
||||||
|
configuration: |
|
||||||
|
[mysqld]
|
||||||
|
max_connections = 200
|
||||||
|
character-set-server=utf8mb4
|
||||||
|
collation-server=utf8mb4_unicode_ci
|
||||||
|
default_authentication_plugin=mysql_native_password
|
||||||
|
initdbScripts:
|
||||||
|
create-databases.sql: |
|
||||||
|
$(echo "$DB_INIT_SQL" | sed 's/^/ /')
|
||||||
|
destination:
|
||||||
|
server: https://kubernetes.default.svc
|
||||||
|
namespace: $NAMESPACE
|
||||||
|
syncPolicy:
|
||||||
|
automated:
|
||||||
|
prune: true
|
||||||
|
selfHeal: true
|
||||||
|
syncOptions:
|
||||||
|
- CreateNamespace=false
|
||||||
|
- ServerSideApply=true
|
||||||
|
EOF
|
||||||
|
|
||||||
|
echo "Created ArgoCD Application for $INSTANCE_NAME"
|
||||||
|
done
|
||||||
|
|
||||||
# Create service manifests
|
# Create service manifests
|
||||||
# Convert comma-separated services to space-separated for iteration
|
# Convert comma-separated services to space-separated for iteration
|
||||||
SERVICES_LIST=$(echo "$SERVICES" | tr ',' ' ')
|
SERVICES_LIST=$(echo "$SERVICES" | tr ',' ' ')
|
||||||
@ -291,9 +386,50 @@ spec:
|
|||||||
# Component has Helm chart - create ArgoCD Application manifest
|
# Component has Helm chart - create ArgoCD Application manifest
|
||||||
echo "Creating ArgoCD Application for Helm chart: $service"
|
echo "Creating ArgoCD Application for Helm chart: $service"
|
||||||
|
|
||||||
# Check dependency preferences for MySQL
|
# Check if this service uses a shared MySQL instance
|
||||||
MYSQL_ENABLED=$(echo "$DEPENDENCY_PREFS" | jq -r '.mysql // "true"')
|
SERVICE_MYSQL_INSTANCE=""
|
||||||
echo " MySQL enabled: $MYSQL_ENABLED"
|
SERVICE_DB_NAME=""
|
||||||
|
SHARED_MYSQL_PARAMS=""
|
||||||
|
if [ -n "$SHARED_MYSQL_CONFIG" ] && [ "$SHARED_MYSQL_CONFIG" != "[]" ]; then
|
||||||
|
SERVICE_MYSQL_INSTANCE=$(echo "$SHARED_MYSQL_CONFIG" | jq -r ".[] | select(.databases[].serviceName == \"$service\") | .instanceName // empty" | head -1)
|
||||||
|
if [ -n "$SERVICE_MYSQL_INSTANCE" ]; then
|
||||||
|
SERVICE_DB_NAME=$(echo "$SHARED_MYSQL_CONFIG" | jq -r ".[] | .databases[] | select(.serviceName == \"$service\") | .databaseName")
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$SERVICE_MYSQL_INSTANCE" ]; then
|
||||||
|
# Service uses shared MySQL - disable bundled MySQL
|
||||||
|
echo " Service $service will use shared MySQL: $SERVICE_MYSQL_INSTANCE (database: $SERVICE_DB_NAME)"
|
||||||
|
MYSQL_ENABLED="false"
|
||||||
|
|
||||||
|
# Add external database configuration to Helm parameters
|
||||||
|
# Note: mysql.enabled is already set to "false" via MYSQL_ENABLED variable
|
||||||
|
SHARED_MYSQL_PARAMS="
|
||||||
|
- name: externalDatabase.host
|
||||||
|
value: \"$SERVICE_MYSQL_INSTANCE\"
|
||||||
|
- name: externalDatabase.port
|
||||||
|
value: \"3306\"
|
||||||
|
- name: externalDatabase.database
|
||||||
|
value: \"$SERVICE_DB_NAME\"
|
||||||
|
- name: externalDatabase.username
|
||||||
|
value: \"mysql_user\"
|
||||||
|
- name: externalDatabase.password
|
||||||
|
value: \"local-mysql-pass\"
|
||||||
|
- name: database.host
|
||||||
|
value: \"$SERVICE_MYSQL_INSTANCE\"
|
||||||
|
- name: database.port
|
||||||
|
value: \"3306\"
|
||||||
|
- name: database.name
|
||||||
|
value: \"$SERVICE_DB_NAME\"
|
||||||
|
- name: database.username
|
||||||
|
value: \"mysql_user\"
|
||||||
|
- name: database.password
|
||||||
|
value: \"local-mysql-pass\""
|
||||||
|
else
|
||||||
|
# Original behavior - check dependency preferences for MySQL
|
||||||
|
MYSQL_ENABLED=$(echo "$DEPENDENCY_PREFS" | jq -r '.mysql // "true"')
|
||||||
|
echo " MySQL enabled: $MYSQL_ENABLED"
|
||||||
|
fi
|
||||||
|
|
||||||
# Process dependency URL mappings
|
# Process dependency URL mappings
|
||||||
DEPENDENCY_URL_PARAMS=""
|
DEPENDENCY_URL_PARAMS=""
|
||||||
@ -422,7 +558,7 @@ spec:
|
|||||||
- name: httpRoute.parentRefs[0].sectionName
|
- name: httpRoute.parentRefs[0].sectionName
|
||||||
value: "https"
|
value: "https"
|
||||||
- name: httpRoute.hostnames[0]
|
- name: httpRoute.hostnames[0]
|
||||||
value: "$HTTPROUTE_HOST"$DEPENDENCY_URL_PARAMS$CUSTOM_HELM_PARAMS
|
value: "$HTTPROUTE_HOST"$DEPENDENCY_URL_PARAMS$CUSTOM_HELM_PARAMS$SHARED_MYSQL_PARAMS
|
||||||
destination:
|
destination:
|
||||||
server: https://kubernetes.default.svc
|
server: https://kubernetes.default.svc
|
||||||
namespace: $NAMESPACE
|
namespace: $NAMESPACE
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user