zalando / patroni

A template for PostgreSQL High Availability with Etcd, Consul, ZooKeeper, or Kubernetes

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

patronictl failed to start when PATRONI_CONFIGURATION variable is set

victoriousya opened this issue · comments

What happened?

patronictl failed to start when PATRONI_CONFIGURATION variable is set. This cause by a bug in patroni.config.Config.init

self._local_configuration = config_env and yaml.safe_load(config_env) or self.__environment_configuration

expected to pass to yaml.safe_load file stream but passed just name of file

probable may be fixed by changing call to _load_config_path

How can we reproduce it (as minimally and precisely as possible)?

[vshibaev@mydbsrv ~]$ patronictl -c /etc/patroni/patroni.yml version
patronictl version 3.2.2
[vshibaev@mydbsrv ~]$ echo $PATRONI_CONFIGURATION

[vshibaev@mydbsrv ~]$ export PATRONI_CONFIGURATION=/etc/patroni/patroni.yml
[vshibaev@mydbsrv ~]$ patronictl -c /etc/patroni/patroni.yml version
patronictl version 3.2.2
[vshibaev@mydbsrv ~]$ patronictl version
Traceback (most recent call last):
File "/usr/bin/patronictl", line 33, in
sys.exit(load_entry_point('patroni==3.2.2', 'console_scripts', 'patronictl')())
File "/usr/lib/python3.9/site-packages/click/core.py", line 1128, in call
return self.main(*args, **kwargs)
File "/usr/lib/python3.9/site-packages/click/core.py", line 1053, in main
rv = self.invoke(ctx)
File "/usr/lib/python3.9/site-packages/click/core.py", line 1656, in invoke
super().invoke(ctx)
File "/usr/lib/python3.9/site-packages/click/core.py", line 1395, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/usr/lib/python3.9/site-packages/click/core.py", line 754, in invoke
return __callback(*args, **kwargs)
File "/usr/lib/python3.9/site-packages/click/decorators.py", line 26, in new_func
return f(get_current_context(), *args, **kwargs)
File "/usr/lib/python3.9/site-packages/patroni/ctl.py", line 304, in ctl
ctx.obj = load_config(config_file, dcs_url)
File "/usr/lib/python3.9/site-packages/patroni/ctl.py", line 248, in load_config
config = Config(path, validator=None).copy()
File "/usr/lib/python3.9/site-packages/patroni/config.py", line 290, in init
self.__effective_configuration = self._build_effective_configuration({}, self._local_configuration)
File "/usr/lib/python3.9/site-packages/patroni/config.py", line 848, in _build_effective_configuration
for name, value in local_configuration.items():
AttributeError: 'str' object has no attribute 'items'
[vshibaev@mydbsrv ~]$

What did you expect to happen?

PATRONI_CONFIGURATION variable works as expected

Patroni/PostgreSQL/DCS version

  • Patroni version: 3.2.2
  • PostgreSQL version: 16
  • DCS (and its version): etcd

Patroni configuration file

not related to an error

patronictl show-config

not related to an error

Patroni log files

[vshibaev@mydbsrv ~]$ patronictl -c /etc/patroni/patroni.yml version
patronictl version 3.2.2
[vshibaev@mydbsrv ~]$ echo $PATRONI_CONFIGURATION

[vshibaev@mydbsrv ~]$ export PATRONI_CONFIGURATION=/etc/patroni/patroni.yml
[vshibaev@mydbsrv ~]$ patronictl -c /etc/patroni/patroni.yml version
patronictl version 3.2.2
[vshibaev@mydbsrv ~]$ patronictl version
Traceback (most recent call last):
  File "/usr/bin/patronictl", line 33, in <module>
    sys.exit(load_entry_point('patroni==3.2.2', 'console_scripts', 'patronictl')())
  File "/usr/lib/python3.9/site-packages/click/core.py", line 1128, in __call__
    return self.main(*args, **kwargs)
  File "/usr/lib/python3.9/site-packages/click/core.py", line 1053, in main
    rv = self.invoke(ctx)
  File "/usr/lib/python3.9/site-packages/click/core.py", line 1656, in invoke
    super().invoke(ctx)
  File "/usr/lib/python3.9/site-packages/click/core.py", line 1395, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/usr/lib/python3.9/site-packages/click/core.py", line 754, in invoke
    return __callback(*args, **kwargs)
  File "/usr/lib/python3.9/site-packages/click/decorators.py", line 26, in new_func
    return f(get_current_context(), *args, **kwargs)
  File "/usr/lib/python3.9/site-packages/patroni/ctl.py", line 304, in ctl
    ctx.obj = load_config(config_file, dcs_url)
  File "/usr/lib/python3.9/site-packages/patroni/ctl.py", line 248, in load_config
    config = Config(path, validator=None).copy()
  File "/usr/lib/python3.9/site-packages/patroni/config.py", line 290, in __init__
    self.__effective_configuration = self._build_effective_configuration({}, self._local_configuration)
  File "/usr/lib/python3.9/site-packages/patroni/config.py", line 848, in _build_effective_configuration
    for name, value in local_configuration.items():
AttributeError: 'str' object has no attribute 'items'
[vshibaev@mydbsrv ~]$

PostgreSQL log files

not related to an error

Have you tried to use GitHub issue search?

  • Yes

Anything else we need to know?

No response

This is not a bug, PATRONI_CONFIGURATION env variable is supposed to have the actual configuration (in YAML format).

Well, thanks for explanation. It was my incorrecct expectations from env config functionality