-
Notifications
You must be signed in to change notification settings - Fork 0
Description
Steps to reproduce
-
Enable debug logging:
-
Bootstrap K8s controller running Juju 4.0-beta.
-
Create a new model (or use an existing one):
juju add-model pg-test
-
Deploy the local
postgresql-test-app
andpostgresql-k8s
charms, and integrate them:juju deploy postgresql-k8s --trust --channel 16/edge juju deploy postgresql-test-app juju integrate postgresql-k8s postgresql-test-app:database
-
Wait for the charm to install and check its logs:
juju debug-log --replay
Expected behavior
The PostgreSQL-test-app should be deployed successfully. After initial bootstrap, juju status
should show all units in the active
state and relations established.
Actual behavior
The charm fails during leader election and relation setup. In the debug log you see errors like:
| | Traceback (most recent call last):
| | File "/var/lib/juju/agents/unit-postgresql-test-app-0/charm/src/charm.py", line 560, in <module>
| | main(ApplicationCharm)
| | File "/var/lib/juju/agents/unit-postgresql-test-app-0/charm/venv/lib/python3.10/site-packages/ops/__init__.py", line 356, in __call__
| | return _main.main(charm_class=charm_class, use_juju_for_storage=use_juju_for_storage)
| | File "/var/lib/juju/agents/unit-postgresql-test-app-0/charm/venv/lib/python3.10/site-packages/ops/_main.py", line 475, in main
| | manager.run()
| | File "/var/lib/juju/agents/unit-postgresql-test-app-0/charm/venv/lib/python3.10/site-packages/ops/_main.py", line 459, in run
| | self._emit()
| | File "/var/lib/juju/agents/unit-postgresql-test-app-0/charm/venv/lib/python3.10/site-packages/ops/_main.py", line 403, in _emit
| | self._emit_charm_event(self.dispatcher.event_name)
| | File "/var/lib/juju/agents/unit-postgresql-test-app-0/charm/venv/lib/python3.10/site-packages/ops/_main.py", line 438, in _emit_charm_event
| | event_to_emit.emit(*args, **kwargs)
| | File "/var/lib/juju/agents/unit-postgresql-test-app-0/charm/venv/lib/python3.10/site-packages/ops/framework.py", line 351, in emit
| | framework._emit(event)
| | File "/var/lib/juju/agents/unit-postgresql-test-app-0/charm/venv/lib/python3.10/site-packages/ops/framework.py", line 924, in _emit
| | self._reemit(event_path)
| | File "/var/lib/juju/agents/unit-postgresql-test-app-0/charm/venv/lib/python3.10/site-packages/ops/framework.py", line 1030, in _reemit
| | custom_handler(event)
| | File "/var/lib/juju/agents/unit-postgresql-test-app-0/charm/venv/lib/python3.10/site-packages/pgsql/opslib/pgsql/client.py", line 529, in _on_leader_change
| | self._mirror_appdata() # PostgreSQL charm backwards compatibility
| | File "/var/lib/juju/agents/unit-postgresql-test-app-0/charm/venv/lib/python3.10/site-packages/pgsql/opslib/pgsql/client.py", line 550, in _mirror_appdata
| | cur_lead_data = _get_pgsql_leader_data()
| | File "/var/lib/juju/agents/unit-postgresql-test-app-0/charm/venv/lib/python3.10/site-packages/pgsql/opslib/pgsql/client.py", line 689, in _get_pgsql_leader_data
| | return yaml.safe_load(_leader_get(LEADER_KEY) or "{}")
| | File "/var/lib/juju/agents/unit-postgresql-test-app-0/charm/venv/lib/python3.10/site-packages/pgsql/opslib/pgsql/client.py", line 698, in _leader_get
| | return yaml.safe_load(subprocess.check_output(cmd).decode("UTF-8"))
| | File "/usr/lib/python3.10/subprocess.py", line 421, in check_output
| | return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
| | File "/usr/lib/python3.10/subprocess.py", line 503, in run
| | with Popen(*popenargs, **kwargs) as process:
| | File "/usr/lib/python3.10/subprocess.py", line 971, in __init__
| | self._execute_child(args, executable, preexec_fn, close_fds,
| | File "/usr/lib/python3.10/subprocess.py", line 1863, in _execute_child
| | raise child_exception_type(errno_num, err_msg, err_filename)
| | FileNotFoundError: [Errno 2] No such file or directory: 'leader-get'
Charm remains in an error
state.
Versions
Operating system:
Ubuntu 25.04
Juju CLI:
4.0-beta
Charm revision:
latest/stable
Additional context
The legacy charm written by Stub originally used the Juju 2.x CLI helper leader-get
in hooks. When converted to the Operator Framework (ops), those calls were retained via subprocess
, but the external leader-get
binary is no longer provisioned under Juju 4.x. To avoid breakage, the charm should use the built-in self.model.get_leader_data()
(or event.framework.model.get_relation(...).leader_data
) API in ops, or the charm metadata should explicitly limit its usage to Juju versions < 4.0
. Currently, no version constraint is declared, causing unexpected failures on Juju 4.0-beta.