patroni.config_generator module
patroni --generate-config
machinery.
- class patroni.config_generator.AbstractConfigGenerator(output_file: str | None)View on GitHub
Bases:
ABC
Object representing the generated Patroni config.
- Variables:
output_file – full path to the output file to be used.
pg_major – integer representation of the major PostgreSQL version.
config – dictionary used for the generated configuration storage.
- _HOSTNAME = 'build-23994964-project-35122-patroni'
- _IP = '172.17.0.2'
- __init__(output_file: str | None) None View on GitHub
Set up the output file (if passed), helper vars and the minimal config structure.
- Parameters:
output_file – full path to the output file to be used.
- _abc_impl = <_abc._abc_data object>
- static _format_block(block: Any, line_prefix: str = '') str View on GitHub
Format a single YAML block.
Note
Optionally the formatted block could be indented with the line_prefix
- Parameters:
block – the object that should be formatted to YAML.
line_prefix – is used for indentation.
- Returns:
a formatted and indented block.
- _format_config() Iterator[str] View on GitHub
Format current
config
and enrich it with some comments.- Yields:
formatted lines or blocks that represent a text output of the YAML document.
- _format_config_section(section_name: str) Iterator[str] View on GitHub
Format and yield as single section of the current
config
.Note
If the section is a
dict
object we put an empty line before it.- Parameters:
section_name – a section name in the
config
.- Yields:
a formatted section in case if it exists in the
config
.
- _write_config_to_fd(fd: TextIO) None View on GitHub
Format and write current
config
to provided file descriptor.- Parameters:
fd – where to write the config file. Could be
sys.stdout
or the real file.
- abstract generate() None View on GitHub
Generate config and store in
config
.
- classmethod get_template_config() Dict[str, Any] View on GitHub
Generate a template config for further extension (e.g. in the inherited classes).
- Returns:
dictionary with the values gathered from Patroni env, hopefully defined hostname and ip address (otherwise set to
NO_VALUE_MSG
), and some sane defaults.
- write_config() None View on GitHub
Write current
config
to the output file if provided, to stdout otherwise.
- class patroni.config_generator.RunningClusterConfigGenerator(output_file: str | None = None, dsn: str | None = None)View on GitHub
Bases:
AbstractConfigGenerator
Object representing the Patroni config generated using information gathered from the running instance.
- Variables:
dsn – DSN string for the local instance to get GUC values from (if provided).
parsed_dsn – DSN string parsed into a dictionary (see
parse_dsn()
).
- __init__(output_file: str | None = None, dsn: str | None = None) None View on GitHub
Additionally store the passed dsn (if any) in both original and parsed version and run config generation.
- Parameters:
output_file – full path to the output file to be used.
dsn – DSN string for the local instance to get GUC values from.
- Raises:
PatroniException
: if DSN parsing failed.
- _abc_impl = <_abc._abc_data object>
- _enrich_config_from_running_instance() None View on GitHub
Extend
config
with the values gathered from the running instance.Retrieve the following information from the running PostgreSQL instance:
superuser auth parameters (see
_set_su_params()
);some GUC values (see
_set_pg_params()
);postgresql.connect_address
,postgresql.listen
;postgresql.pg_hba
andpostgresql.pg_ident
(see_set_conf_files()
)
And redefine
scope
with thecluster_name
GUC value if set.- Raises:
PatroniException
: if the provided user doesn’t have superuser privileges.
- _get_bin_dir_from_running_instance() str View on GitHub
Define the directory postgres binaries reside using postmaster’s pid executable.
- Returns:
path to the PostgreSQL binaries directory.
- Raises:
PatroniException
: if:pid could not be obtained from the
postmaster.pid
file; orOSError
occured duringpostmaster.pid
file handling; orthe obtained postmaster pid doesn’t exist.
- _get_connection_cursor() Iterator[cursor | Cursor[Any]] View on GitHub
Get cursor for the PG connection established based on the stored information.
- Raises:
PatroniException
: ifpsycopg.Error
occured.
- property _get_hba_conn_types: Tuple[str, ...]
Return the connection types allowed.
If
pg_major
is defined, adds additional parameters for PostgreSQL version >=16.- Returns:
tuple of the connection methods allowed.
- property _required_pg_params: List[str]
PG configuration prameters that have to be always present in the generated config.
- Returns:
list of the parameter names.
- _set_conf_files() None View on GitHub
Extend
config
withpg_hba.conf
andpg_ident.conf
content.Note
This function only defines
postgresql.pg_hba
andpostgresql.pg_ident
whenhba_file
andident_file
are set to the defaults. It may happen these files are located outside ofPGDATA
and Patroni doesn’t have write permissions for them.- Raises:
PatroniException
: ifOSError
occured during the conf files handling.
- _set_pg_params(cur: cursor | Cursor[Any]) None View on GitHub
Extend
config
with the actual PG GUCs values.THe following GUC values are set:
Non-internal having configuration file, postmaster command line or environment variable as a source.
List of the always required parameters (see
_required_pg_params()
).
- Parameters:
cur – connection cursor to use.
- _set_su_params() None View on GitHub
Extend
config
with the superuser auth information.Information set is based on the options used for connection.
- generate() None View on GitHub
Generate config using the info gathered from the specified running PG instance.
Result is written to
config
.
- class patroni.config_generator.SampleConfigGenerator(output_file: str | None)View on GitHub
Bases:
AbstractConfigGenerator
Object representing the generated sample Patroni config.
Sane defults are used based on the gathered PG version.
- _abc_impl = <_abc._abc_data object>
- _get_int_major_version() int View on GitHub
Get major PostgreSQL version from the binary as an integer.
- Returns:
an integer PostgreSQL major version representation gathered from the PostgreSQL binary. See
postgres_major_version_to_int()
andget_major_version()
.
- generate() None View on GitHub
Generate sample config using some sane defaults and update
config
.
- patroni.config_generator.generate_config(output_file: str, sample: bool, dsn: str | None) None View on GitHub
Generate Patroni configuration file.
- Parameters:
output_file – Full path to the configuration file to be used. If not provided, result is sent to
stdout
.sample – Optional flag. If set, no source instance will be used - generate config with some sane defaults.
dsn – Optional DSN string for the local instance to get GUC values from.
- patroni.config_generator.get_address() Tuple[str, str] View on GitHub
Try to get hostname and the ip address for it returned by
gethostname()
.Note
Can also return local ip.
- Returns:
tuple consisting of the hostname returned by
gethostname()
and the first element in the sorted list of the addresses returned bygetaddrinfo()
. Sorting guarantees it will prefer IPv4. If an exception occured, hostname and ip values are equal toNO_VALUE_MSG
.