patroni.config_generator module¶
patroni --generate-config
machinery.
-
class
patroni.config_generator.
AbstractConfigGenerator
(output_file: Optional[str])¶ Bases:
abc.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.
-
__init__
(output_file: Optional[str]) → None¶ 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_data object>¶
-
static
_format_block
(block: Any, line_prefix: str = '') → str¶ 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]¶ 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]¶ 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¶ 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.
-
generate
() → None¶ Generate config and store in
config
.
-
classmethod
get_template_config
() → Dict[str, Any]¶ 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¶ Write current
config
to the output file if provided, to stdout otherwise.
-
class
patroni.config_generator.
RunningClusterConfigGenerator
(output_file: Optional[str] = None, dsn: Optional[str] = None)¶ Bases:
patroni.config_generator.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: Optional[str] = None, dsn: Optional[str] = None) → None¶ 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_data object>¶
-
_enrich_config_from_running_instance
() → None¶ 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.- superuser auth parameters (see
-
_get_bin_dir_from_running_instance
() → str¶ 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; or OSError
occurred duringpostmaster.pid
file handling; or- the obtained postmaster pid doesn’t exist.
- pid could not be obtained from the
-
_get_connection_cursor
() → Iterator[Union[cursor, Cursor[Any]]]¶ Get cursor for the PG connection established based on the stored information.
Raises: PatroniException
: ifpsycopg.Error
occurred.
-
_get_hba_conn_types
¶ Return the connection types allowed.
If
pg_major
is defined, adds additional parameters for PostgreSQL version >=16.Returns: tuple of the connection methods allowed.
-
_required_pg_params
¶ PG configuration parameters that have to be always present in the generated config.
Returns: list of the parameter names.
-
_set_conf_files
() → None¶ 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
occurred during the conf files handling.
-
_set_pg_params
(cur: Union[cursor, Cursor[Any]]) → None¶ 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¶ Extend
config
with the superuser auth information.Information set is based on the options used for connection.
-
generate
() → None¶ Generate config using the info gathered from the specified running PG instance.
Result is written to
config
.
-
class
patroni.config_generator.
SampleConfigGenerator
(output_file: Optional[str])¶ Bases:
patroni.config_generator.AbstractConfigGenerator
Object representing the generated sample Patroni config.
Sane defaults are used based on the gathered PG version.
-
_abc_impl
= <_abc_data object>¶
-
_get_int_major_version
() → int¶ 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¶ Generate sample config using some sane defaults and update
config
.
-
-
patroni.config_generator.
generate_config
(output_file: str, sample: bool, dsn: Optional[str]) → None¶ 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.
- output_file – Full path to the configuration file to be used. If not provided, result is sent to
-
patroni.config_generator.
get_address
() → Tuple[str, str]¶ 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 occurred, hostname and ip values are equal toNO_VALUE_MSG
.