Erstellen einer Data Gate Dienstinstanz, die programmgesteuert eine Verbindung zu einer entfernten Db2 Zieldatenbank herstellt

Führen Sie die folgenden Schritte durch, bevor Sie das eigentliche Upgrade starten.

Vorgehensweise

  1. Sie müssen eine POST Anfrage an den /zen-data/v3/service_instances Endpunkt der Cloud Pak for Data API senden. Dazu benötigen Sie einen Header mit einem gültigen Bearer-Token, den Sie wie hier beschrieben erhalten können.
  2. Achten Sie darauf, den richtigen Lizenznamen auszuwählen, je nachdem, ob Sie eine Produktions- oder eine Nicht-Produktionsinstanz erstellen. Wählen Sie die Architektur aus, die die Data Gate Instanz verwenden soll. Dies hängt nicht mit der Architektur der Db2 Zieldatenbank zusammen.
  3. Kopieren Sie das folgende Shell-Skript in eine Datei, geben Sie in dieser Kopie die richtigen Werte für die Variablen ein und stellen Sie sicher, dass Sie beim Cluster „ OpenShift “ angemeldet sind, auf dem Sie diese Befehle ausführen möchten.
    
    # choose one of the following two:
    export LICENSE_NAME='IBM Data Gate for z/OS with Cloud Pak for Data (production)'
    export LICENSE_NAME='IBM Data Gate for z/OS with Cloud Pak for Data (non-production)'
    # choose one of the following two:
    export ARCHITECTURE='s390x'
    export ARCHITECTURE='amd64'
    # required
    export DG_DISPLAY_NAME=''
    export INSTANCE_NAMESPACE=''
    export TARGET_DB2_CERT_SECRET_NAME=''
    export DB2_SERVICE_HOST=''
    export DB2_SERVICE_PORT=''
    export CPD_CLUSTER_HOST=''
    export UNIQUE_ROUTE_PREFIX=''
    export UNIQUE_ROUTE_PORT=''
    export DG_STORAGE_CLASS=''
    export CPD_TOKEN=''
    
    export CREATE_DG_REQUEST_BODY='{
      "addon_type": "dg",
      "addon_version": "'"${DG_VERSION:-9.0.0}"'",
      "display_name": "'"${DG_DISPLAY_NAME}"'",
      "namespace": "'"${INSTANCE_NAMESPACE}"'",
      "pre_existing_owner": false,
      "create_arguments": {
        "resources": {
          "cpu": "'"${TOTAL_CPU:-6}"'",
          "memory": "'"${TOTAL_MEMORY:-16}"'"
        },
        "description": "'"${LICENSE_NAME}"'",
        "metadata": {
          "arch": "'"${ARCHITECTURE}"'",
          "baseNamespace": "'"${INSTANCE_NAMESPACE}"'",
          "target_database_tls_secret_name": "'"${TARGET_DB2_CERT_SECRET_NAME}"'",
          "databaseEngineService": "'"${DB2_SERVICE_HOST}"'",
          "databaseSecureJdbcPort": "'"${DB2_SERVICE_PORT}"'",
          "dataGateInstanceName": "'"${LICENSE_NAME}"'",
          "data_gate_database_name": "'"remote-target-${DB2_SERVICE_HOST}-${DB2_SERVICE_PORT}"'",
          "targetDbEncoding": "UNICODE",
          "cpu": "'"${TOTAL_CPU:-6}"'",
          "mem": "'"${TOTAL_MEMORY:-16}"'",
          "type": "dg",
          "version": "'"${DG_VERSION:-9.0.0}"'",
          "name": "'"${LICENSE_NAME}"'",
          "defaultRouteSubdomain": "'"apps.${CPD_CLUSTER_HOST}"'",
          "route_data_gate_route_host_name": "'"${UNIQUE_ROUTE_PREFIX}.apps.${CPD_CLUSTER_HOST}"'",
          "route_data_gate_route_port": "'"${UNIQUE_ROUTE_PORT}"'",
          "isTargetDb2Remote": true,
          "targetDbInstance": "'"remote-target-${DB2_SERVICE_HOST}-${DB2_SERVICE_PORT}"'",
          "pod_affinity": false,
          "storage_type": "storageClass",
          "storage_storageclass_name": "'"${DG_STORAGE_CLASS}"'",
          "storage_storageclass_size": "'"${DG_STORAGE_SIZE:-50Gi}"'"
        }
      }
    }'
    
    required_vars=(
    DG_DISPLAY_NAME
    INSTANCE_NAMESPACE
    TARGET_DB2_CERT_SECRET_NAME
    DB2_SERVICE_HOST
    DB2_SERVICE_PORT
    CPD_CLUSTER_HOST
    UNIQUE_ROUTE_PREFIX
    UNIQUE_ROUTE_PORT
    DG_STORAGE_CLASS
    CPD_TOKEN
    )
    
    for v in "${required_vars[@]}"; do
      if [ -z "${!v}" ]; then
        echo "ERROR: Required variable $v is not set"
        exit 1
      fi
    done
    
    if ! oc get namespace "$INSTANCE_NAMESPACE" >/dev/null 2>&1; then
      echo "ERROR: Namespace $INSTANCE_NAMESPACE does not exist"
      exit 1
    fi
    
    
    export DG_INSTANCE_ID=$(curl -k -X 'POST' "https://cpd-${INSTANCE_NAMESPACE}.apps.${CPD_CLUSTER_HOST}/zen-data/v3/service_instances" \
      -H 'Content-Type: application/json' \
      -H "Authorization: Bearer ${CPD_TOKEN}" \
      -d "${CREATE_DG_REQUEST_BODY}" | jq -r '.id')
    
  4. Führen Sie das Script aus.

Nächste Schritte

Geben Sie die Anmeldedaten für die Zieldatenbank an: Sie müssen ein Geheimnis erstellen, das die Anmeldedaten für die Zieldatenbank enthält. Der geheime Name muss die neu erstellte Data Gate Instanz-ID enthalten, die Sie im vorherigen Schritt aus dem Antworttext des API-Aufrufs erhalten haben. Erstellen Sie das Geheimnis mit dem folgenden Befehl (je nach Version):

Für Version 5.3.1 und höher:


oc create secret generic "dg-${INSTANCE_ID}-configuration-secret" \
  -n "${INSTANCE_NAMESPACE}" \
  --from-literal=username="${TARGET_DB2_USERNAME}" \
  --from-literal=password="${TARGET_DB2_PASSWORD}"

Wenn Sie die Version 5.3.0 verwenden, unterscheidet sich das Format für den geheimen Namen. Verwenden Sie stattdessen Folgendes:


 oc create secret generic "dg-${INSTANCE_ID}-target-db2-username-password" \
   -n "${INSTANCE_NAMESPACE}" \
   --from-literal=username="${TARGET_DB2_USERNAME}" \
   --from-literal=password="${TARGET_DB2_PASSWORD}"