O setup-instance comando falha quando as assinaturas do operador não estão vinculadas

O cpd-cli manage setup-instance comando instala e atualiza IBM Cloud Pak foundational services e IBM Software Hub. O comando falha se alguma das assinaturas do operador estiver desvinculada.

Sintomas

O cpd-cli manage setup-instance comando retorna o seguinte erro:

[✘] Error ...: Timeout after 10 minutes waiting for operator <operator-name> to be upgraded
[ERROR] ... cmd.Run() failed with exit status 1
[ERROR] ... Command exception: The setup-instance command failed (exit status 1). You may find output and logs in the /tmp/work/cpd-cli-workspace/olm-utils-workspace/work directory.
[ERROR] .. RunPluginCommand:Execution error:  exit status 1

Causas

O cpd-cli manage setup-instance comando falha porque uma ou mais das seguintes assinaturas de operador não estão vinculadas a uma versão do serviço de cluster ( CSV ):
  • cpd-platform-operator
  • ibm-iam-operator
  • Not applicable
  • ibm-commonui-operator
  • ibm-namespace-scope-operator
  • operand-deployment-lifecycle-manager

Diagnosticando o Problema

Para confirmar que o comando falhou porque a assinatura do operador está desvinculada:
  1. Confirme se a assinatura do operador existe.

    Use as informações retornadas pelo cpd-cli manage setup-instance comando para determinar qual operador é afetado.

    Assinatura do Not applicable
    oc get sub Not
    applicable \
    --namespace=${PROJECT_CPD_INST_OPERATORS}
    Assinatura do ibm-namespace-scope-operator
    oc get sub ibm-namespace-scope-operator \
    --namespace=${PROJECT_CPD_INST_OPERATORS}
    Assinatura do operand-deployment-lifecycle-manager
    oc get sub operand-deployment-lifecycle-manager \
    --namespace=${PROJECT_CPD_INST_OPERATORS}
  2. Confirme se você vê oconstraints not satisfiableerro na assinatura YAML.
    Assinatura do Not applicable
    oc get sub Not
    applicable \
    --namespace=${PROJECT_CPD_INST_OPERATORS} \
    -o yaml
    Assinatura do ibm-namespace-scope-operator
    oc get sub ibm-namespace-scope-operator \
    --namespace=${PROJECT_CPD_INST_OPERATORS} \
    -o yaml
    Assinatura do operand-deployment-lifecycle-manager
    oc get sub operand-deployment-lifecycle-manager \
    --namespace=${PROJECT_CPD_INST_OPERATORS} \
    -o yaml

    Procure a seguinte mensagem:

    message: 'constraints not satisfiable: subscription <subscription-name>
    requires opencloud-operators/operator-ns/v<N.N>/<subscription-name>.v<N.N.N>,
    subscription <subscription-name> exists, clusterserviceversion <subscription-name>.v<N.N.N>
    exists and is not referenced by a subscription, opencloud-operators/operator-ns/v<N.N>/<subscription-name>.v<N.N.N>
    and @existing/operator-ns//<subscription-name>.v<N.N.N> originate from
    package ibm-namespace-scope-operator'
    reason: ConstraintsNotSatisfiable
  3. Verifique o valor do campo status.installedCSV na assinatura:
    Assinatura do Not applicable
    oc get sub Not
    applicable \
    --namespace=${PROJECT_CPD_INST_OPERATORS} \
    -o jsonpath='{.metadata.creationTimestamp}{"\t"}{.status.installedCSV}{"\n"}'
    Assinatura do ibm-namespace-scope-operator
    oc get sub ibm-namespace-scope-operator \
    --namespace=${PROJECT_CPD_INST_OPERATORS} \
    -o jsonpath='{.metadata.creationTimestamp}{"\t"}{.status.installedCSV}{"\n"}'
    Assinatura do operand-deployment-lifecycle-manager
    oc get sub operand-deployment-lifecycle-manager \
    --namespace=${PROJECT_CPD_INST_OPERATORS} \
    -o jsonpath='{.metadata.creationTimestamp}{"\t"}{.status.installedCSV}{"\n"}'
    • Se a assinatura estiver vinculada a um CSV, a resposta terá o seguinte formato:
      <timestamp> <operator-name>.vN.N.N

      Se a assinatura estiver vinculada, o cpd-cli manage setup-instance comando está falhando por um motivo diferente. Analise os arquivos cpd-cli de log para determinar a causa raiz.

    • Se a assinatura não estiver vinculada, a resposta terá o seguinte formato:
      <timestamp>

      Se a assinatura não estiver vinculada, continue para Resolvendo o problema.

Resolvendo o problema

Para solucionar o problema:
  1. Se você tiver permissões suficientes para excluir pods no openshift-operator-lifecycle-manager projeto, reinicie o catalog-operator pod no openshift-operator-lifecycle-manager projeto:
    oc delete $(oc get pods -l app=catalog-operator -o NAME --namespace=openshift-operator-lifecycle-manager) \
    --namespace=openshift-operator-lifecycle-manager
    Observação: se você não tiver permissões suficientes para excluir pods no openshift-operator-lifecycle-manager projeto, vá para a etapa 3.
  2. Verifique o valor do campo status.installedCSV na assinatura:
    Assinatura do Not applicable
    oc get sub Not
    applicable \
    --namespace=${PROJECT_CPD_INST_OPERATORS} \
    -o jsonpath='{.metadata.creationTimestamp}{"\t"}{.status.installedCSV}{"\n"}'
    Assinatura do ibm-namespace-scope-operator
    oc get sub ibm-namespace-scope-operator \
    --namespace=${PROJECT_CPD_INST_OPERATORS} \
    -o jsonpath='{.metadata.creationTimestamp}{"\t"}{.status.installedCSV}{"\n"}'
    Assinatura do operand-deployment-lifecycle-manager
    oc get sub operand-deployment-lifecycle-manager \
    --namespace=${PROJECT_CPD_INST_OPERATORS} \
    -o jsonpath='{.metadata.creationTimestamp}{"\t"}{.status.installedCSV}{"\n"}'
    • Se a assinatura estiver vinculada a um CSV, a resposta terá o seguinte formato:
      <timestamp> <operator-name>.vN.N.N

      Se a assinatura estiver vinculada a um CSV, execute novamente o cpd-cli manage setup-instance comando.

    • Se a assinatura não estiver vinculada, a resposta terá o seguinte formato:
      <timestamp>

      Se a assinatura não estiver vinculada, prossiga para a próxima etapa.

  3. Obtenha o nome do CSV :
    Not applicable CSV
    oc get csv \
    --namespace=${PROJECT_CPD_INST_OPERATORS} \
    | grep Not
    applicable
    ibm-namespace-scope-operator CSV
    oc get csv \
    --namespace=${PROJECT_CPD_INST_OPERATORS} \
    | grep ibm-namespace-scope-operator
    operand-deployment-lifecycle-manager CSV
    oc get csv \
    --namespace=${PROJECT_CPD_INST_OPERATORS} \
    | grep operand-deployment-lifecycle-manager
  4. Exclua o CSV retornado na etapa anterior:
    oc delete csv <csv-name> \
    --namespace=${PROJECT_CPD_INST_OPERATORS} 

    Operator Lifecycle Manager (OLM) recria o CSV e vincula-o à assinatura.

  5. Execute novamente o cpd-cli manage setup-instance comando.