MySQL 9.1.0
Source Code Documentation
mysqlrouter::ConfigGenerator Class Reference

#include <config_generator.h>

Classes

struct  ExistingConfigOptions
 
struct  Options
 
struct  TLS_filenames
 
struct  UndoCreateAccountList
 

Public Member Functions

 ConfigGenerator (std::ostream &out_stream=std::cout, std::ostream &err_stream=std::cerr, SysUserOperationsBase *sys_user_operations=SysUserOperations::instance())
 
virtual ~ConfigGenerator ()
 
void init (const std::string &server_url, const std::map< std::string, std::string > &bootstrap_options)
 first part of the bootstrap process More...
 
bool warn_on_no_ssl (const std::map< std::string, std::string > &options)
 logs warning and returns false if SSL mode is set to PREFERRED and SSL is not being used, true otherwise More...
 
void bootstrap_system_deployment (const std::string &program_name, const std::string &config_file_path, const std::string &state_file_path, const std::map< std::string, std::string > &options, const std::map< std::string, std::vector< std::string > > &multivalue_options, const std::map< std::string, std::string > &default_paths)
 
void bootstrap_directory_deployment (const std::string &program_name, const std::string &directory, const std::map< std::string, std::string > &options, const std::map< std::string, std::vector< std::string > > &multivalue_options, const std::map< std::string, std::string > &default_paths)
 Create a self-contained deployment of the Router in a directory. More...
 
void set_keyring_info (const KeyringInfo &keyring_info)
 
void set_plugin_folder (const std::string &val)
 
void set_file_owner (const std::map< std::string, std::string > &options, const std::string &owner) const
 

Private Member Functions

void parse_bootstrap_options (const std::map< std::string, std::string > &bootstrap_options)
 init() calls this to read and validate several command-line options; results are stored in member fields. More...
 
URI parse_server_uri (const std::string &server_uri, const std::string &bootstrap_socket)
 init() calls this to validate and extract metadata server info from server URI, including user credentials. More...
 
void connect_to_metadata_server (const URI &u, const std::string &bootstrap_socket, const std::map< std::string, std::string > &bootstrap_options)
 init() calls this to connect to metadata server; sets mysql_ (connection) object. More...
 
void init_gr_data (const URI &u, const std::string &bootstrap_socket)
 init() calls this to set GR-related member fields. More...
 
Options fill_options (const std::map< std::string, std::string > &user_options, const std::map< std::string, std::string > &default_paths, const ExistingConfigOptions &existing_config_options)
 
void create_start_script (const std::string &program_name, const std::string &directory, bool interactive_master_key, const std::map< std::string, std::string > &options)
 
void create_stop_script (const std::string &directory, const std::map< std::string, std::string > &options)
 
virtual void set_script_permissions (const std::string &script_path, const std::map< std::string, std::string > &options)
 
std::string bootstrap_deployment (const std::string &program_name, std::ofstream &config_file, std::ofstream &state_file, const mysql_harness::Path &config_file_path, const mysql_harness::Path &state_file_path, const std::string &name, const std::map< std::string, std::string > &options, const std::map< std::string, std::vector< std::string > > &multivalue_options, const std::map< std::string, std::string > &default_paths, bool directory_deployment, AutoCleaner &auto_clean)
 
std::tuple< std::string > try_bootstrap_deployment (uint32_t &router_id, std::string &username, std::string &password, const std::string &router_name, const ClusterInfo &cluster_info, const std::map< std::string, std::string > &user_options, const std::map< std::string, std::vector< std::string > > &multivalue_options, const Options &options)
 
void create_config (std::ostream &config_file, std::ostream &state_file, uint32_t router_id, const std::string &router_name, const std::string &system_username, const ClusterInfo &cluster_info, const std::string &username, const Options &options, const std::map< std::string, std::string > &default_paths, const std::map< std::string, std::string > &config_overwrites, const std::string &state_file_name, const bool full)
 
void print_bootstrap_start_msg (uint32_t router_id, bool directory_deployment, const mysql_harness::Path &config_file_path)
 
std::string get_bootstrap_report_text (const std::string &program_name, const std::string &config_file_name, const std::string &router_name, const std::string &metadata_cluster, const std::string &cluster_type_name, const std::string &hostname, bool is_system_deployment, const Options &options)
 
void set_log_file_permissions (const std::map< std::string, std::string > &default_paths, const std::map< std::string, std::string > &user_options, const Options &options)
 
void undo_create_user_for_new_accounts () noexcept
 Deletes Router accounts just created. More...
 
std::string create_router_accounts (const std::map< std::string, std::string > &user_options, const std::set< std::string > &hostnames, const std::string &username, const std::string &password, bool password_change_ok)
 Creates Router accounts. More...
 
std::string create_accounts_with_compliant_password (const std::map< std::string, std::string > &user_options, const std::string &username, const std::set< std::string > &hostnames, const std::string &password, bool password_change_ok, bool if_not_exists)
 Creates Router account with compliant password. More...
 
void create_accounts (const std::string &username, const std::set< std::string > &hostnames, const std::string &password, bool if_not_exists=false)
 Creates Router account (low-level function) More...
 
void create_users (const std::string &username, const std::set< std::string > &hostnames, const std::string &password, bool if_not_exists)
 
void throw_account_exists (const MySQLSession::Error &e, const std::string &username)
 
std::set< std::string > get_hostnames_of_created_accounts (const std::string &username, const std::set< std::string > &hostnames, bool if_not_exists)
 
void give_grants_to_users (const std::string &new_accounts)
 
std::string make_account_list (const std::string username, const std::set< std::string > &hostnames)
 
ExistingConfigOptions get_options_from_config_if_it_exists (const std::string &config_file_path, const mysqlrouter::ClusterInfo &cluster_info, bool forcing_overwrite)
 Get selected configuration options from the existing Router configuration file. More...
 
void update_router_info (uint32_t router_id, const Options &options)
 
bool backup_config_file_if_different (const mysql_harness::Path &config_path, const std::string &new_file_path, const std::map< std::string, std::string > &options, AutoCleaner *auto_cleaner=nullptr)
 
void set_keyring_info_real_paths (std::map< std::string, std::string > &options, const mysql_harness::Path &path)
 
void store_credentials_in_keyring (AutoCleaner &auto_clean, const std::map< std::string, std::string > &user_options, uint32_t router_id, const std::string &username, const std::string &password, Options &options)
 
std::string fetch_password_from_keyring (const std::string &username, uint32_t router_id)
 
void init_keyring_and_master_key (AutoCleaner &auto_clean, const std::map< std::string, std::string > &user_options, uint32_t router_id)
 
void init_keyring_file (uint32_t router_id, bool create_if_needed=true)
 
void ensure_router_id_is_ours (uint32_t &router_id, const std::string &hostname_override)
 
uint32_t register_router (const std::string &router_name, const std::string &hostname_override, bool force)
 
void verify_router_account (const std::string &username, const std::string &password, bool strict)
 
void prepare_ssl_certificate_files (const std::map< std::string, std::string > &user_options, const std::map< std::string, std::string > &default_paths, AutoCleaner *auto_cleaner) const
 Prepare X.509 certificates for the Router. More...
 
bool datadir_contains_allowed_files (const mysql_harness::Directory &dir) const
 Check if datadir directory contains only files that are allowed before the bootstrap. More...
 

Static Private Member Functions

static std::set< std::string > get_account_host_args (const std::map< std::string, std::vector< std::string > > &multivalue_options) noexcept
 Finds all hostnames given on command-line. More...
 
static void set_ssl_options (MySQLSession *sess, const std::map< std::string, std::string > &options)
 

Private Attributes

std::unique_ptr< MySQLSessionmysql_
 
std::unique_ptr< ClusterMetadatametadata_
 
int connect_timeout_
 
int read_timeout_
 
std::string cluster_specific_id_
 
std::string cluster_initial_hostname_
 
unsigned int cluster_initial_port_
 
std::string cluster_initial_username_
 
std::string cluster_initial_password_
 
std::string cluster_initial_socket_
 
KeyringInfo keyring_info_
 
bool keyring_initialized_ = false
 
std::ostream & out_stream_
 
std::ostream & err_stream_
 
struct mysqlrouter::ConfigGenerator::UndoCreateAccountList undo_create_account_list_
 
const struct mysqlrouter::ConfigGenerator::TLS_filenames tls_filenames_
 
SysUserOperationsBasesys_user_operations_
 
mysqlrouter::MetadataSchemaVersion schema_version_
 
std::string plugin_folder_
 

Constructor & Destructor Documentation

◆ ConfigGenerator()

ConfigGenerator::ConfigGenerator ( std::ostream &  out_stream = std::cout,
std::ostream &  err_stream = std::cerr,
SysUserOperationsBase sys_user_operations = SysUserOperations::instance() 
)

◆ ~ConfigGenerator()

ConfigGenerator::~ConfigGenerator ( )
virtualdefault

Member Function Documentation

◆ backup_config_file_if_different()

bool ConfigGenerator::backup_config_file_if_different ( const mysql_harness::Path config_path,
const std::string &  new_file_path,
const std::map< std::string, std::string > &  options,
AutoCleaner auto_cleaner = nullptr 
)
private

◆ bootstrap_deployment()

std::string ConfigGenerator::bootstrap_deployment ( const std::string &  program_name,
std::ofstream &  config_file,
std::ofstream &  state_file,
const mysql_harness::Path config_file_path,
const mysql_harness::Path state_file_path,
const std::string &  name,
const std::map< std::string, std::string > &  options,
const std::map< std::string, std::vector< std::string > > &  multivalue_options,
const std::map< std::string, std::string > &  default_paths,
bool  directory_deployment,
AutoCleaner auto_clean 
)
private

◆ bootstrap_directory_deployment()

void ConfigGenerator::bootstrap_directory_deployment ( const std::string &  program_name,
const std::string &  directory,
const std::map< std::string, std::string > &  options,
const std::map< std::string, std::vector< std::string > > &  multivalue_options,
const std::map< std::string, std::string > &  default_paths 
)

Create a self-contained deployment of the Router in a directory.

◆ bootstrap_system_deployment()

void ConfigGenerator::bootstrap_system_deployment ( const std::string &  program_name,
const std::string &  config_file_path,
const std::string &  state_file_path,
const std::map< std::string, std::string > &  options,
const std::map< std::string, std::vector< std::string > > &  multivalue_options,
const std::map< std::string, std::string > &  default_paths 
)

◆ connect_to_metadata_server()

void ConfigGenerator::connect_to_metadata_server ( const URI u,
const std::string &  bootstrap_socket,
const std::map< std::string, std::string > &  bootstrap_options 
)
private

init() calls this to connect to metadata server; sets mysql_ (connection) object.

Parameters
uparsed server URL (–bootstrap|-B argument)
bootstrap_socketbootstrap (unix) socket (–bootstrap-socket argumenent)
bootstrap_optionsbootstrap command-line options
Exceptions
std::runtime_error
std::logic_error

◆ create_accounts()

void ConfigGenerator::create_accounts ( const std::string &  username,
const std::set< std::string > &  hostnames,
const std::string &  password,
bool  if_not_exists = false 
)
private

Creates Router account (low-level function)

Creates Router account using CREATE USER [IF NOT EXISTS] and gives it GRANTs.

Parameters
usernameRouter account to be created - the username part
hostnamesRouter accounts to be created - the hostnames part
passwordPassword for the account
if_not_existsif true, CREATE USER IF NOT EXISTS will be used instead of CREATE USER
Exceptions
std::logic_erroron not connected password_too_weak on Server not liking the password account_exists if running without IF NOT EXISTS and account exists already MySQLSession::Error on other (unexpected) SQL error

◆ create_accounts_with_compliant_password()

std::string ConfigGenerator::create_accounts_with_compliant_password ( const std::map< std::string, std::string > &  user_options,
const std::string &  username,
const std::set< std::string > &  hostnames,
const std::string &  password,
bool  password_change_ok,
bool  if_not_exists 
)
private

Creates Router account with compliant password.

Creates Router account with a (self-generated) password that will pass Server's password policy. It first tries creating a hashed password using mysql_native_password plugin. If that fails, it falls back to using plaintext password, which the Server may reject for not being strong enough. If that's the case, it will generate another password and try again 2 more times (for a total of 3 password-generation attempts), after which it will give up.

Note
This is a higher-level method, with smart logic that drives calls to lower-level create_accounts() method.
Parameters
user_optionskey/value map of bootstrap config options
usernameRouter account to be created - the username part
hostnamesRouter accounts to be created - the hostname part
passwordPassword for the account
password_change_okpassword is allowed to be changed if needed
if_not_existsif true, CREATE USER IF NOT EXISTS will be used instead of CREATE USER
Returns
password
Exceptions
std::logic_erroron not connected std::runtime_error on bad password MySQLSession::Error on other (unexpected) SQL error

◆ create_config()

void ConfigGenerator::create_config ( std::ostream &  config_file,
std::ostream &  state_file,
uint32_t  router_id,
const std::string &  router_name,
const std::string &  system_username,
const ClusterInfo cluster_info,
const std::string &  username,
const Options options,
const std::map< std::string, std::string > &  default_paths,
const std::map< std::string, std::string > &  config_overwrites,
const std::string &  state_file_name,
const bool  full 
)
private

◆ create_router_accounts()

std::string ConfigGenerator::create_router_accounts ( const std::map< std::string, std::string > &  user_options,
const std::set< std::string > &  hostnames,
const std::string &  username,
const std::string &  password,
bool  password_change_ok 
)
private

Creates Router accounts.

create account to be used by Router.

Creates Router accounts for all hostnames (ie. someuser@host1, someuser@host2, someuser@%, etc). It will create such accounts for all hosts that appear in hostnames_cmdline, but not in hostnames_db.

Note
This is the higher-level method, which drives calls to lower-level methods like create_account_with_compliant_password() and create_accounts().
Parameters
user_optionskey/value map of bootstrap config options
hostnameshostnames provided as –account-host arguments
usernameRouter account to be created (without the hostname part)
password_change_okpassword is allowed to be changed if needed
passwordRouter account password, will be overwritten if empty
Returns
auto-generated password
Exceptions
std::logic_erroron not connected std::runtime_error on bad password or Server's password policy changing during bootstrap MySQLSession::Error on other (unexpected) SQL error

<host> part of <user>@<host> will be %, unless user specified otherwise using –account-host switch. Multiple –account-host switches are allowed.

◆ create_start_script()

void ConfigGenerator::create_start_script ( const std::string &  program_name,
const std::string &  directory,
bool  interactive_master_key,
const std::map< std::string, std::string > &  options 
)
private

◆ create_stop_script()

void ConfigGenerator::create_stop_script ( const std::string &  directory,
const std::map< std::string, std::string > &  options 
)
private

◆ create_users()

void ConfigGenerator::create_users ( const std::string &  username,
const std::set< std::string > &  hostnames,
const std::string &  password,
bool  if_not_exists 
)
private

◆ datadir_contains_allowed_files()

bool ConfigGenerator::datadir_contains_allowed_files ( const mysql_harness::Directory dir) const
private

Check if datadir directory contains only files that are allowed before the bootstrap.

Parameters
[in]dirData directory representation.
Return values
false- datadir contains files that are not allowed before the bootstrap.
true- datadir does not contain files that are not allowed before the bootstrap.

◆ ensure_router_id_is_ours()

void ConfigGenerator::ensure_router_id_is_ours ( uint32_t &  router_id,
const std::string &  hostname_override 
)
private

◆ fetch_password_from_keyring()

std::string ConfigGenerator::fetch_password_from_keyring ( const std::string &  username,
uint32_t  router_id 
)
private

◆ fill_options()

ConfigGenerator::Options ConfigGenerator::fill_options ( const std::map< std::string, std::string > &  user_options,
const std::map< std::string, std::string > &  default_paths,
const ExistingConfigOptions existing_config_options 
)
private

◆ get_account_host_args()

std::set< std::string > ConfigGenerator::get_account_host_args ( const std::map< std::string, std::vector< std::string > > &  multivalue_options)
staticprivatenoexcept

Finds all hostnames given on command-line.

MySQL accounts are of form <username>@<hostname>. This function returns all <hostname> parts that were provided via –account-host switches

Parameters
multivalue_optionskey/list-of-values map of bootstrap config; carries –account-host inside

◆ get_bootstrap_report_text()

std::string ConfigGenerator::get_bootstrap_report_text ( const std::string &  program_name,
const std::string &  config_file_name,
const std::string &  router_name,
const std::string &  metadata_cluster,
const std::string &  cluster_type_name,
const std::string &  hostname,
bool  is_system_deployment,
const Options options 
)
private

◆ get_hostnames_of_created_accounts()

std::set< std::string > ConfigGenerator::get_hostnames_of_created_accounts ( const std::string &  username,
const std::set< std::string > &  hostnames,
bool  if_not_exists 
)
private

◆ get_options_from_config_if_it_exists()

ConfigGenerator::ExistingConfigOptions ConfigGenerator::get_options_from_config_if_it_exists ( const std::string &  config_file_path,
const mysqlrouter::ClusterInfo cluster_info,
bool  forcing_overwrite 
)
private

Get selected configuration options from the existing Router configuration file.


This function returns Router's id and SQL user for cluster cluster_name, if it finds them in config file and they seem valid. If they're missing or incomplete, function will return empty values for them (0 or ""), giving a green light to generate new ones. Finally, if it detects that the cluster name is off or missing, it will throw or return {0, ""}, depending on forcing_overwrite.

Parameters
config_file_path/path/to/config/file
cluster_infoInformation about the Cluster for which Router id and user should be returned
forcing_overwriteAction to take on unexpected cluster in config, see function description
Exceptions
std::runtime_erroron invalid router_id or metadata_cluster
Returns
Struct with options from the existing configuration file

◆ give_grants_to_users()

void ConfigGenerator::give_grants_to_users ( const std::string &  new_accounts)
private

◆ init()

void ConfigGenerator::init ( const std::string &  server_url,
const std::map< std::string, std::string > &  bootstrap_options 
)

first part of the bootstrap process

This function does a lot of initialisation before bootstrap starts making changes.

Parameters
server_urlserver to bootstrap from
bootstrap_optionsbootstrap options
Exceptions
std::runtime_error

◆ init_gr_data()

void ConfigGenerator::init_gr_data ( const URI u,
const std::string &  bootstrap_socket 
)
private

init() calls this to set GR-related member fields.

Parameters
uparsed server URL (–bootstrap|-B argument)
bootstrap_socketbootstrap (unix) socket (–bootstrap-socket argumenent)
Exceptions
TODO

◆ init_keyring_and_master_key()

void ConfigGenerator::init_keyring_and_master_key ( AutoCleaner auto_clean,
const std::map< std::string, std::string > &  user_options,
uint32_t  router_id 
)
private

◆ init_keyring_file()

void ConfigGenerator::init_keyring_file ( uint32_t  router_id,
bool  create_if_needed = true 
)
private

◆ make_account_list()

std::string ConfigGenerator::make_account_list ( const std::string  username,
const std::set< std::string > &  hostnames 
)
private

◆ parse_bootstrap_options()

void ConfigGenerator::parse_bootstrap_options ( const std::map< std::string, std::string > &  bootstrap_options)
private

init() calls this to read and validate several command-line options; results are stored in member fields.

Parameters
bootstrap_optionsoptions map to process
Exceptions
std::runtime_erroron an invalid option

◆ parse_server_uri()

URI ConfigGenerator::parse_server_uri ( const std::string &  server_uri,
const std::string &  bootstrap_socket 
)
private

init() calls this to validate and extract metadata server info from server URI, including user credentials.

It will also:

  • set user name to "root" if not provided in the URI
  • prompt for user password if not provided in the URI
Parameters
server_uriserver URI (–bootstrap|-B argument)
bootstrap_socketbootstrap (unix) socket (–bootstrap-socket argumenent)
Returns
URI with required information
Exceptions
std::runtime_erroron an invalid data

◆ prepare_ssl_certificate_files()

void ConfigGenerator::prepare_ssl_certificate_files ( const std::map< std::string, std::string > &  user_options,
const std::map< std::string, std::string > &  default_paths,
AutoCleaner auto_cleaner 
) const
private

Prepare X.509 certificates for the Router.

If user provides Router certificate and key files they are used in the first place so no action is taken in this method. If there are no existing certificate files then CA certificate and key along with Router certificate and key will be created.

Parameters
[in]user_optionsKey/value map of bootstrap config options.
[in]default_pathsMap of predefined default paths.
[in,out]auto_cleanerAutomatic file cleanup object that guarantees file cleanup if bootstrap fails at any point.
Exceptions
std::runtime_errorData directory contains some certificate files but Router certificate and/or key is missing.

◆ print_bootstrap_start_msg()

void ConfigGenerator::print_bootstrap_start_msg ( uint32_t  router_id,
bool  directory_deployment,
const mysql_harness::Path config_file_path 
)
private

◆ register_router()

uint32_t ConfigGenerator::register_router ( const std::string &  router_name,
const std::string &  hostname_override,
bool  force 
)
private

◆ set_file_owner()

void ConfigGenerator::set_file_owner ( const std::map< std::string, std::string > &  options,
const std::string &  owner 
) const

◆ set_keyring_info()

void mysqlrouter::ConfigGenerator::set_keyring_info ( const KeyringInfo keyring_info)
inline

◆ set_keyring_info_real_paths()

void ConfigGenerator::set_keyring_info_real_paths ( std::map< std::string, std::string > &  options,
const mysql_harness::Path path 
)
private

◆ set_log_file_permissions()

void ConfigGenerator::set_log_file_permissions ( const std::map< std::string, std::string > &  default_paths,
const std::map< std::string, std::string > &  user_options,
const Options options 
)
private

◆ set_plugin_folder()

void mysqlrouter::ConfigGenerator::set_plugin_folder ( const std::string &  val)
inline

◆ set_script_permissions()

void ConfigGenerator::set_script_permissions ( const std::string &  script_path,
const std::map< std::string, std::string > &  options 
)
privatevirtual

◆ set_ssl_options()

void ConfigGenerator::set_ssl_options ( MySQLSession sess,
const std::map< std::string, std::string > &  options 
)
staticprivate

◆ store_credentials_in_keyring()

void ConfigGenerator::store_credentials_in_keyring ( AutoCleaner auto_clean,
const std::map< std::string, std::string > &  user_options,
uint32_t  router_id,
const std::string &  username,
const std::string &  password,
Options options 
)
private

◆ throw_account_exists()

void ConfigGenerator::throw_account_exists ( const MySQLSession::Error e,
const std::string &  username 
)
private

◆ try_bootstrap_deployment()

std::tuple< std::string > ConfigGenerator::try_bootstrap_deployment ( uint32_t &  router_id,
std::string &  username,
std::string &  password,
const std::string &  router_name,
const ClusterInfo cluster_info,
const std::map< std::string, std::string > &  user_options,
const std::map< std::string, std::vector< std::string > > &  multivalue_options,
const Options options 
)
private

◆ undo_create_user_for_new_accounts()

void ConfigGenerator::undo_create_user_for_new_accounts ( )
privatenoexcept

Deletes Router accounts just created.

This method runs as a cleanup after something goes wrong. Its purpose is to undo CREATE USER [IF NOT EXISTS] for accounts that got created during bootstrap. Note that it will drop only those accounts which did not exist prior to bootstrap (it may be a subset of account names passed to CREATE USER [IF NOT EXISTS]). If it is not able to determine what this (sub)set is, it will not drop anything - instead it will advise user on how to clean those up manually.

◆ update_router_info()

void mysqlrouter::ConfigGenerator::update_router_info ( uint32_t  router_id,
const Options options 
)
private

◆ verify_router_account()

void ConfigGenerator::verify_router_account ( const std::string &  username,
const std::string &  password,
bool  strict 
)
private

◆ warn_on_no_ssl()

bool ConfigGenerator::warn_on_no_ssl ( const std::map< std::string, std::string > &  options)

logs warning and returns false if SSL mode is set to PREFERRED and SSL is not being used, true otherwise

Parameters
optionsmap of commandline options
Returns
false if SSL mode is set to PREFERRED and SSL is not being used, true otherwise
Exceptions
std::runtime_error

Member Data Documentation

◆ cluster_initial_hostname_

std::string mysqlrouter::ConfigGenerator::cluster_initial_hostname_
private

◆ cluster_initial_password_

std::string mysqlrouter::ConfigGenerator::cluster_initial_password_
private

◆ cluster_initial_port_

unsigned int mysqlrouter::ConfigGenerator::cluster_initial_port_
private

◆ cluster_initial_socket_

std::string mysqlrouter::ConfigGenerator::cluster_initial_socket_
private

◆ cluster_initial_username_

std::string mysqlrouter::ConfigGenerator::cluster_initial_username_
private

◆ cluster_specific_id_

std::string mysqlrouter::ConfigGenerator::cluster_specific_id_
private

◆ connect_timeout_

int mysqlrouter::ConfigGenerator::connect_timeout_
private

◆ err_stream_

std::ostream& mysqlrouter::ConfigGenerator::err_stream_
private

◆ keyring_info_

KeyringInfo mysqlrouter::ConfigGenerator::keyring_info_
private

◆ keyring_initialized_

bool mysqlrouter::ConfigGenerator::keyring_initialized_ = false
private

◆ metadata_

std::unique_ptr<ClusterMetadata> mysqlrouter::ConfigGenerator::metadata_
private

◆ mysql_

std::unique_ptr<MySQLSession> mysqlrouter::ConfigGenerator::mysql_
private

◆ out_stream_

std::ostream& mysqlrouter::ConfigGenerator::out_stream_
private

◆ plugin_folder_

std::string mysqlrouter::ConfigGenerator::plugin_folder_
private

◆ read_timeout_

int mysqlrouter::ConfigGenerator::read_timeout_
private

◆ schema_version_

mysqlrouter::MetadataSchemaVersion mysqlrouter::ConfigGenerator::schema_version_
private

◆ sys_user_operations_

SysUserOperationsBase* mysqlrouter::ConfigGenerator::sys_user_operations_
private

◆ tls_filenames_

const struct mysqlrouter::ConfigGenerator::TLS_filenames mysqlrouter::ConfigGenerator::tls_filenames_
private

◆ undo_create_account_list_

struct mysqlrouter::ConfigGenerator::UndoCreateAccountList mysqlrouter::ConfigGenerator::undo_create_account_list_
private

The documentation for this class was generated from the following files: