canonical / mongodb-k8s-operator

Operator charm for MongoDB
Apache License 2.0
13 stars 15 forks source link

MongoServerError: not primary when executing db.createUser #219

Closed gruyaume closed 1 month ago

gruyaume commented 10 months ago

Pebble error when trying to create a user. This error occured after integrating the mongodb-k8s charm with a database requirer through the dabase relation.

Steps to reproduce (taken from the Charmed 5G Getting Started Guide)

Add the community repository MicroK8s addon:

sudo microk8s addons repo add community https://github.com/canonical/microk8s-community-addons --reference feat/strict-fix-multus

Enable the following MicroK8s addons. We must give MetalLB an address range that has at least 3 IP addresses for Charmed 5G.

sudo microk8s enable hostpath-storage
sudo microk8s enable multus
sudo microk8s enable metallb:10.0.0.2-10.0.0.4

Bootstrap a Juju controller

juju bootstrap microk8s

Create a Juju model:

juju add-model core

Deploy the sdcore-router-k8s operator:

juju deploy sdcore-router-k8s router --trust --channel=beta

Deploy the sdcore-k8s charm bundle:

juju deploy sdcore-k8s --trust --channel=beta

Expected behavior

DB users get created without error

Actual behavior

DB user does not get created and requirer charm stays in waiting state.

Versions

Operating system: Ubuntu 23.10 Juju CLI: 3.1.6 Juju agent: 3.1.6 Charm revision: 6/edge (rev. 38) microk8s: v1.27.7

Log output

Partial output of juju debug-log

unit-mongodb-k8s-0: 14:31:17 ERROR unit.mongodb-k8s/0.juju-log database:7: Failed to create the operator user: non-zero exit code 1 executing ['/usr/bin/mongosh', 'mongodb://localhost/admin', '--quiet', '--eval', "db.createUser({  user: 'operator',  pwd: passwordPrompt(),  roles:[    {'role': 'userAdminAnyDatabase', 'db': 'admin'},     {'role': 'readWriteAnyDatabase', 'db': 'admin'},     {'role': 'clusterAdmin', 'db': 'admin'},   ],  mechanisms: ['SCRAM-SHA-256'],  passwordDigestor: 'server',})"], stdout='Enter password\n********************************', stderr='MongoServerError: not primary\n'
Traceback (most recent call last):
  File "/var/lib/juju/agents/unit-mongodb-k8s-0/charm/./src/charm.py", line 625, in _init_operator_user
    process.wait_output()
  File "/var/lib/juju/agents/unit-mongodb-k8s-0/charm/venv/ops/pebble.py", line 1374, in wait_output
    raise ExecError[AnyStr](self._command, exit_code, out_value, err_value)
ops.pebble.ExecError: non-zero exit code 1 executing ['/usr/bin/mongosh', 'mongodb://localhost/admin', '--quiet', '--eval', "db.createUser({  user: 'operator',  pwd: passwordPrompt(),  roles:[    {'role': 'userAdminAnyDatabase', 'db': 'admin'},     {'role': 'readWriteAnyDatabase', 'db': 'admin'},     {'role': 'clusterAdmin', 'db': 'admin'},   ],  mechanisms: ['SCRAM-SHA-256'],  passwordDigestor: 'server',})"], stdout='Enter password\n********************************', stderr='MongoServerError: not primary\n'

Juju status:

guillaume@potiron:~$ juju status
Model  Controller      Cloud/Region        Version  SLA          Timestamp
core   microk8s-local  microk8s/localhost  3.1.6    unsupported  14:41:37-05:00

App                       Version  Status   Scale  Charm                     Channel        Rev  Address         Exposed  Message
amf                                active       1  sdcore-amf                edge            48  10.152.183.194  no       
ausf                               active       1  sdcore-ausf               edge            36  10.152.183.28   no       
grafana-agent-k8s         0.32.1   waiting      1  grafana-agent-k8s         latest/stable   42  10.152.183.51   no       installing agent
mongodb-k8s                        active       1  mongodb-k8s               6/edge          38  10.152.183.200  no       Primary
nrf                                active       1  sdcore-nrf                edge            54  10.152.183.85   no       
nssf                               active       1  sdcore-nssf               edge            33  10.152.183.79   no       
pcf                                waiting      1  sdcore-pcf                edge            27  10.152.183.98   no       installing agent
router                             active       1  sdcore-router             edge            28  10.152.183.181  no       
self-signed-certificates           active       1  self-signed-certificates  beta            33  10.152.183.87   no       
smf                                active       1  sdcore-smf                edge            31  10.152.183.55   no       
udm                                active       1  sdcore-udm                edge            31  10.152.183.94   no       
udr                                active       1  sdcore-udr                edge            26  10.152.183.40   no       
webui                              active       1  sdcore-webui              edge            18  10.152.183.196  no       

Unit                         Workload  Agent  Address      Ports  Message
amf/0*                       active    idle   10.1.182.25         
ausf/0*                      active    idle   10.1.182.1          
grafana-agent-k8s/0*         blocked   idle   10.1.182.6          grafana-cloud-config: off, logging-consumer: off
mongodb-k8s/0*               active    idle   10.1.182.7          Primary
nrf/0*                       active    idle   10.1.182.35         
nssf/0*                      active    idle   10.1.182.32         
pcf/0*                       waiting   idle   10.1.182.43         Waiting for `database` relation to be available
router/0*                    active    idle   10.1.182.34         
self-signed-certificates/0*  active    idle   10.1.182.42         
smf/0*                       active    idle   10.1.182.45         
udm/0*                       active    idle   10.1.182.38         
udr/0*                       active    idle   10.1.182.48         
webui/0*                     active    idle   10.1.182.46

Integration provider                   Requirer                            Interface          Type     Message
amf:metrics-endpoint                   grafana-agent-k8s:metrics-endpoint  prometheus_scrape  regular  
grafana-agent-k8s:logging-provider     mongodb-k8s:logging                 loki_push_api      regular  
mongodb-k8s:database                   amf:database                        mongodb_client     regular  
mongodb-k8s:database                   nrf:database                        mongodb_client     regular  
mongodb-k8s:database                   pcf:database                        mongodb_client     regular  
mongodb-k8s:database                   smf:database                        mongodb_client     regular  
mongodb-k8s:database                   udr:database                        mongodb_client     regular  
mongodb-k8s:database                   webui:database                      mongodb_client     regular  
mongodb-k8s:database-peers             mongodb-k8s:database-peers          mongodb-peers      peer     
mongodb-k8s:metrics-endpoint           grafana-agent-k8s:metrics-endpoint  prometheus_scrape  regular  
nrf:fiveg-nrf                          amf:fiveg-nrf                       fiveg_nrf          regular  
nrf:fiveg-nrf                          ausf:fiveg_nrf                      fiveg_nrf          regular  
nrf:fiveg-nrf                          nssf:fiveg_nrf                      fiveg_nrf          regular  
nrf:fiveg-nrf                          pcf:fiveg_nrf                       fiveg_nrf          regular  
nrf:fiveg-nrf                          smf:fiveg_nrf                       fiveg_nrf          regular  
nrf:fiveg-nrf                          udm:fiveg_nrf                       fiveg_nrf          regular  
nrf:fiveg-nrf                          udr:fiveg_nrf                       fiveg_nrf          regular  
self-signed-certificates:certificates  amf:certificates                    tls-certificates   regular  
self-signed-certificates:certificates  ausf:certificates                   tls-certificates   regular  
self-signed-certificates:certificates  nrf:certificates                    tls-certificates   regular  
self-signed-certificates:certificates  nssf:certificates                   tls-certificates   regular  
self-signed-certificates:certificates  pcf:certificates                    tls-certificates   regular  
self-signed-certificates:certificates  smf:certificates                    tls-certificates   regular  
self-signed-certificates:certificates  udm:certificates                    tls-certificates   regular  
self-signed-certificates:certificates  udr:certificates                    tls-certificates   regular  
smf:metrics-endpoint                   grafana-agent-k8s:metrics-endpoint  prometheus_scrape  regular

Here's the bundle that was used to generate this error:

bundle: kubernetes
name: sdcore-control-plane
description: The SD-Core Control Plane bundle contains the control plane part of the 5G core network.
applications:
  amf:
    charm: sdcore-amf
    channel: edge
    scale: 1
    trust: true
  ausf:
    charm: sdcore-ausf
    channel: edge
    scale: 1
    trust: true
  nrf:
    charm: sdcore-nrf
    channel: edge
    scale: 1
    trust: true
  nssf:
    charm: sdcore-nssf
    channel: edge
    scale: 1
    trust: true
  pcf:
    charm: sdcore-pcf
    channel: edge
    scale: 1
    trust: true
  smf:
    charm: sdcore-smf
    channel: edge
    scale: 1
    trust: true
  udm:
    charm: sdcore-udm
    channel: edge
    scale: 1
    trust: true
  udr:
    charm: sdcore-udr
    channel: edge
    scale: 1
    trust: true
  webui:
    charm: sdcore-webui
    scale: 1
    channel: edge
    trust: true
  mongodb-k8s:
    charm: mongodb-k8s
    channel: 6/edge
    scale: 1
    trust: true
  grafana-agent-k8s:
    charm: grafana-agent-k8s
    channel: latest/stable
    scale: 1
  self-signed-certificates:
    charm: self-signed-certificates
    channel: beta
    scale: 1
relations:
  - - amf:fiveg-nrf
    - nrf:fiveg-nrf
  - - amf:database
    - mongodb-k8s:database
  - - amf:metrics-endpoint
    - grafana-agent-k8s:metrics-endpoint
  - - amf:certificates
    - self-signed-certificates:certificates
  - - ausf:fiveg_nrf
    - nrf:fiveg-nrf
  - - ausf:certificates
    - self-signed-certificates:certificates
  - - nrf:database
    - mongodb-k8s:database
  - - nrf:certificates
    - self-signed-certificates:certificates
  - - nssf:fiveg_nrf
    - nrf:fiveg-nrf
  - - nssf:certificates
    - self-signed-certificates:certificates
  - - pcf:fiveg_nrf
    - nrf:fiveg-nrf
  - - pcf:database
    - mongodb-k8s:database
  - - pcf:certificates
    - self-signed-certificates:certificates
  - - smf:fiveg_nrf
    - nrf:fiveg-nrf
  - - smf:metrics-endpoint
    - grafana-agent-k8s:metrics-endpoint
  - - smf:database
    - mongodb-k8s:database
  - - smf:certificates
    - self-signed-certificates:certificates
  - - udm:fiveg_nrf
    - nrf:fiveg-nrf
  - - udm:certificates
    - self-signed-certificates:certificates
  - - udr:fiveg_nrf
    - nrf:fiveg-nrf
  - - udr:database
    - mongodb-k8s:database
  - - udr:certificates
    - self-signed-certificates:certificates
  - - webui:database
    - mongodb-k8s:database
  - - mongodb-k8s:metrics-endpoint
    - grafana-agent-k8s:metrics-endpoint
  - - mongodb-k8s:logging
    - grafana-agent-k8s:logging-provider
github-actions[bot] commented 10 months ago

https://warthogs.atlassian.net/browse/DPE-3018

MiaAltieri commented 1 month ago

Fixed in #272