Criação de uma instância Data Gate de serviço que se conecta a um banco de dados Db2 remoto por meio de programação

Conclua as seguintes tarefas antes de executar a atualização propriamente dita.

Procedimento

  1. Você deve enviar uma POST solicitação para o /zen-data/v3/service_instances endpoint da Cloud Pak for Data API. Para isso, você precisa de um cabeçalho com um token bearer válido, que pode ser obtido conforme descrito aqui.
  2. Certifique-se de escolher o nome de licença correto, dependendo se você está criando uma instância de produção ou uma instância que não seja de produção. Escolha a arquitetura que a Data Gate instância deve usar. Isso não está relacionado à arquitetura do banco de Db2 dados de destino.
  3. Copie o script de shell abaixo para um arquivo e, nessa cópia, insira os valores corretos para as variáveis e certifique-se de estar conectado ao cluster OpenShift onde pretende executar esses comandos.
    
    # 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. Execute o script.

O quê fazer em seguida

Especifique as credenciais do banco de dados de destino: você precisa criar um segredo que contenha as credenciais do banco de dados de destino. O nome secreto deve conter o ID da instância Data Gate recém-criada, obtido na etapa anterior a partir do corpo da resposta da chamada à API. Crie o segredo com o seguinte comando (dependendo da versão):

Para a versão 5.3.1 e posteriores:


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

Se você estiver usando a versão 5.3.0, o formato do nome do segredo é diferente. Use o seguinte em vez disso:


 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}"