Shared Mysql fix
This commit is contained in:
parent
e0c81132d4
commit
c5c5224206
@ -36,6 +36,8 @@ spec:
|
||||
value: '{}'
|
||||
- name: helmExternalParams
|
||||
value: '{}'
|
||||
- name: sharedMysqlConfig
|
||||
value: '[]'
|
||||
entrypoint: provision-environment
|
||||
templates:
|
||||
- inputs:
|
||||
@ -50,6 +52,7 @@ spec:
|
||||
- name: manualDependencyUrls
|
||||
- name: valuesContentEdits
|
||||
- name: helmExternalParams
|
||||
- name: sharedMysqlConfig
|
||||
name: provision-environment
|
||||
steps:
|
||||
- - arguments:
|
||||
@ -74,6 +77,8 @@ spec:
|
||||
value: '{{inputs.parameters.valuesContentEdits}}'
|
||||
- name: helmExternalParams
|
||||
value: '{{inputs.parameters.helmExternalParams}}'
|
||||
- name: sharedMysqlConfig
|
||||
value: '{{inputs.parameters.sharedMysqlConfig}}'
|
||||
name: create-git-repo
|
||||
template: create-repo
|
||||
- - arguments:
|
||||
@ -104,6 +109,7 @@ spec:
|
||||
- name: manualDependencyUrls
|
||||
- name: valuesContentEdits
|
||||
- name: helmExternalParams
|
||||
- name: sharedMysqlConfig
|
||||
name: create-repo
|
||||
script:
|
||||
command:
|
||||
@ -158,6 +164,10 @@ spec:
|
||||
{{inputs.parameters.helmExternalParams}}
|
||||
EOFPARAM
|
||||
)
|
||||
SHARED_MYSQL_CONFIG=$(cat <<'EOFPARAM'
|
||||
{{inputs.parameters.sharedMysqlConfig}}
|
||||
EOFPARAM
|
||||
)
|
||||
|
||||
# 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/-$//')
|
||||
@ -252,6 +262,91 @@ spec:
|
||||
kubernetes.io/metadata.name: argo-workflows
|
||||
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
|
||||
# Convert comma-separated services to space-separated for iteration
|
||||
SERVICES_LIST=$(echo "$SERVICES" | tr ',' ' ')
|
||||
@ -291,9 +386,50 @@ spec:
|
||||
# Component has Helm chart - create ArgoCD Application manifest
|
||||
echo "Creating ArgoCD Application for Helm chart: $service"
|
||||
|
||||
# Check dependency preferences for MySQL
|
||||
MYSQL_ENABLED=$(echo "$DEPENDENCY_PREFS" | jq -r '.mysql // "true"')
|
||||
echo " MySQL enabled: $MYSQL_ENABLED"
|
||||
# Check if this service uses a shared MySQL instance
|
||||
SERVICE_MYSQL_INSTANCE=""
|
||||
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
|
||||
DEPENDENCY_URL_PARAMS=""
|
||||
@ -422,7 +558,7 @@ spec:
|
||||
- name: httpRoute.parentRefs[0].sectionName
|
||||
value: "https"
|
||||
- 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:
|
||||
server: https://kubernetes.default.svc
|
||||
namespace: $NAMESPACE
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user