Skip to content

charm is not working on Juju 4.0-beta #367

@anvial

Description

@anvial

Steps to reproduce

  1. Enable debug logging:

  2. Bootstrap K8s controller running Juju 4.0-beta.

  3. Create a new model (or use an existing one):

    juju add-model pg-test
  4. Deploy the local postgresql-test-app and postgresql-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
  5. 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature, UI change, or workload upgrade

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions