26#ifndef ROUTER_CONFIG_GENERATOR_INCLUDED
27#define ROUTER_CONFIG_GENERATOR_INCLUDED
48#include "unique_ptr.h"
57class SysUserOperationsBase;
58class SysUserOperations;
70 std::ostream &out_stream = std::cout, std::ostream &err_stream = std::cerr
85 void init(
const std::map<std::string, std::string> &bootstrap_options,
89 void check_target(
const std::map<std::string, std::string> &bootstrap_options,
90 bool allow_no_metadata =
false);
108 const std::string &program_name,
const std::string &config_file_path,
109 const std::string &state_file_path,
110 const std::map<std::string, std::string> &
options,
111 const std::map<std::string, std::vector<std::string>> &multivalue_options,
112 const std::map<std::string, std::string> &config_cmdline_options,
116 const std::string &program_name,
const std::string &directory,
117 const std::map<std::string, std::string> &
options,
118 const std::map<std::string, std::vector<std::string>> &multivalue_options,
119 const std::map<std::string, std::string> &config_cmdline_options,
138 operator bool()
const {
return port > 0 || !
socket.empty(); }
195 const std::map<std::string, std::string> &
options,
196 const std::string &owner)
const;
208 const std::map<std::string, std::string> &bootstrap_options);
225 const std::string &bootstrap_socket);
252 const std::string &directory,
253 bool interactive_master_key,
254 const std::map<std::string, std::string> &
options);
257 const std::map<std::string, std::string> &
options);
261 const std::string &script_path,
262 const std::map<std::string, std::string> &
options);
266 const std::string &program_name, std::ofstream &config_file,
269 const std::map<std::string, std::string> &
options,
270 const std::map<std::string, std::vector<std::string>> &multivalue_options,
271 const std::map<std::string, std::string> &config_cmdline_options,
273 bool directory_deployment);
276 uint32_t &router_id, std::string &username, std::string &
password,
277 const std::string &router_name,
const ClusterInfo &cluster_info,
278 const std::map<std::string, std::string> &user_options,
279 const std::map<std::string, std::vector<std::string>> &multivalue_options,
283 std::ostream &config_file, std::ostream &state_file, uint32_t router_id,
284 const std::string &router_name,
const std::string &system_username,
285 const ClusterInfo &cluster_info,
const std::string &username,
288 const std::map<std::string, std::string> &config_overwrites,
289 const std::string &state_file_name,
const bool full);
296 const std::string &router_name,
const std::string &metadata_cluster,
297 const std::string &cluster_type_name,
const std::string &hostname,
302 const std::map<std::string, std::string> &user_options,
314 const std::map<std::string, std::vector<std::string>>
315 &multivalue_options)
noexcept;
341 const std::map<std::string, std::string> &user_options,
342 const std::set<std::string> &hostnames,
const std::string &username,
343 const std::string &
password,
bool password_change_ok);
373 const std::map<std::string, std::string> &user_options,
374 const std::string &username,
const std::set<std::string> &hostnames,
375 const std::string &
password,
bool password_change_ok,
bool if_not_exists);
394 const std::set<std::string> &hostnames,
395 const std::string &
password,
bool if_not_exists =
false);
398 const std::set<std::string> &hostnames,
399 const std::string &
password,
bool if_not_exists);
402 const std::string &username);
405 const std::string &username,
const std::set<std::string> &hostnames,
411 const std::string &config_file_path,
418 const std::map<std::string, std::string> &
options,
bool clean);
424 const std::map<std::string, std::string> &user_options,
425 uint32_t router_id,
const std::string &username,
432 const std::map<std::string, std::string> &user_options,
438 const std::string &hostname_override);
441 const std::string &hostname_override,
bool force);
444 const std::string &
password,
bool strict);
461 const std::map<std::string, std::string> &user_options,
462 const std::map<std::string, std::string> &
default_paths)
const;
KeyringInfo class encapsulates loading and storing master key using master-key-reader and master-key-...
Definition: keyring_info.h:76
A helper class for handling file paths.
Definition: path.h:38
Automatic cleanup on scope exit utility class.
Definition: auto_cleaner.h:62
Class representing a directory in a file system.
Definition: filesystem.h:330
Class representing a path in a file system.
Definition: filesystem.h:63
Definition: config_generator.h:61
std::string bootstrap_socket_
Definition: config_generator.h:480
std::string plugin_folder_
Definition: config_generator.h:519
void give_grants_to_users(const std::string &new_accounts)
Definition: config_generator.cc:2941
std::optional< mysqlrouter::MetadataSchemaVersion > schema_version_
Definition: config_generator.h:517
std::string fetch_password_from_keyring(const std::string &username, uint32_t router_id)
Definition: config_generator.cc:1755
void store_credentials_in_keyring(const std::map< std::string, std::string > &user_options, uint32_t router_id, const std::string &username, const std::string &password, Options &options)
Definition: config_generator.cc:1783
std::string cluster_initial_password_
Definition: config_generator.h:493
SysUserOperationsBase * sys_user_operations_
Definition: config_generator.h:513
std::string cluster_initial_username_
Definition: config_generator.h:492
MySQLSession * mysql_
Definition: config_generator.h:482
std::string config_file_path_for_directory(const std::string &directory)
Definition: config_generator.cc:482
void create_users(const std::string &username, const std::set< std::string > &hostnames, const std::string &password, bool if_not_exists)
Definition: config_generator.cc:2774
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)
Definition: config_generator.cc:2214
std::string cluster_initial_socket_
Definition: config_generator.h:494
void create_stop_script(const std::string &directory, const std::map< std::string, std::string > &options)
Definition: config_generator.cc:3332
ConfigGenerator(AutoCleaner &auto_cleaner, AccountsCleaner &accounts_cleaner, std::ostream &out_stream=std::cout, std::ostream &err_stream=std::cerr, SysUserOperationsBase *sys_user_operations=SysUserOperations::instance())
Definition: config_generator.cc:194
void check_target(const std::map< std::string, std::string > &bootstrap_options, bool allow_no_metadata=false)
Definition: config_generator.cc:389
bool keyring_initialized_
Definition: config_generator.h:497
bool datadir_contains_allowed_files(const mysql_harness::Directory &dir) const
Check if datadir directory contains only files that are allowed before the bootstrap.
Definition: config_generator.cc:595
void set_keyring_info_real_paths(std::map< std::string, std::string > &options, const mysql_harness::Path &path)
Definition: config_generator.cc:1742
void set_file_owner(const std::map< std::string, std::string > &options, const std::string &owner) const
Definition: config_generator.cc:3435
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.
Definition: config_generator.cc:3116
AccountsCleaner & accounts_cleaner_
Definition: config_generator.h:510
std::ostream & out_stream_
Definition: config_generator.h:499
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 > &config_cmdline_options, const std::map< std::string, std::string > &default_paths, bool directory_deployment)
Definition: config_generator.cc:1202
void throw_account_exists(const MySQLSession::Error &e, const std::string &username)
Definition: config_generator.cc:2720
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.
Definition: config_generator.cc:2621
std::unique_ptr< ClusterMetadata > metadata_
Definition: config_generator.h:483
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)
Definition: config_generator.cc:2491
int connect_timeout_
Definition: config_generator.h:484
void print_bootstrap_start_msg(uint32_t router_id, bool directory_deployment, const mysql_harness::Path &config_file_path)
Definition: config_generator.cc:2468
void init_gr_data(const URI &u, const std::string &bootstrap_socket)
init() calls this to set GR-related member fields.
Definition: config_generator.cc:364
URI target_uri_
Definition: config_generator.h:479
std::string cluster_specific_id_
Definition: config_generator.h:489
void update_router_info(uint32_t router_id, const Options &options)
std::ostream & err_stream_
Definition: config_generator.h:500
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,...
Definition: config_generator.cc:218
void init(const std::map< std::string, std::string > &bootstrap_options, const mysqlrouter::URI &uri, mysqlrouter::MySQLSession *session, int connect_timeout, int read_timeout)
first part of the bootstrap process
Definition: config_generator.cc:376
int read_timeout_
Definition: config_generator.h:485
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 > &config_cmdline_options, const std::map< std::string, std::string > &default_paths)
Definition: config_generator.cc:507
void verify_router_account(const std::string &username, const std::string &password, bool strict)
Definition: config_generator.cc:1451
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 creden...
Definition: config_generator.cc:307
void prepare_ssl_certificate_files(const std::map< std::string, std::string > &user_options, const std::map< std::string, std::string > &default_paths) const
Prepare X.509 certificates for the Router.
Definition: config_generator.cc:1124
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)
Definition: config_generator.cc:1090
bool is_standalone_target() const
Definition: config_generator.h:128
void set_plugin_folder(const std::string &val)
Definition: config_generator.h:126
void init_keyring_file(uint32_t router_id, bool create_if_needed=true)
Definition: config_generator.cc:1832
std::set< std::string > get_hostnames_of_created_accounts(const std::string &username, const std::set< std::string > &hostnames, bool if_not_exists)
Definition: config_generator.cc:2831
AutoCleaner & auto_cleaner_
Definition: config_generator.h:509
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 fie...
Definition: config_generator.cc:262
const struct mysqlrouter::ConfigGenerator::TLS_filenames tls_filenames_
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, bool clean)
Definition: config_generator.cc:3405
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 > &config_cmdline_options, const std::map< std::string, std::string > &default_paths)
Create a self-contained deployment of the Router in a directory.
Definition: config_generator.cc:612
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)
Definition: config_generator.cc:3231
std::string cluster_initial_hostname_
Definition: config_generator.h:490
bool needs_bootstrap(const std::string &config_file_path)
Definition: config_generator.cc:489
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)
Definition: config_generator.cc:838
KeyringInfo keyring_info_
Definition: config_generator.h:496
virtual void set_script_permissions(const std::string &script_path, const std::map< std::string, std::string > &options)
Definition: config_generator.cc:3213
unsigned int cluster_initial_port_
Definition: config_generator.h:491
uint32_t register_router(const std::string &router_name, const std::string &hostname_override, bool force)
Definition: config_generator.cc:1392
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)
Definition: config_generator.cc:2980
void ensure_router_id_is_ours(uint32_t &router_id, const std::string &hostname_override)
Definition: config_generator.cc:1369
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.
Definition: config_generator.cc:1433
void init_keyring_and_master_key(const std::map< std::string, std::string > &user_options, uint32_t router_id)
Definition: config_generator.cc:1805
TargetType
Definition: config_generator.h:63
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)
Definition: config_generator.cc:1655
virtual ~ConfigGenerator()
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.
Definition: config_generator.cc:2671
void set_keyring_info(const KeyringInfo &keyring_info)
Definition: config_generator.h:122
Definition: accounts_cleaner.h:35
Definition: mysql_session.h:289
Definition: mysql_session.h:157
Base class to allow multiple SysUserOperations implementations.
Definition: sys_user_operations.h:45
static SysUserOperations * instance()
Definition: sys_user_operations.cc:49
Parse and create URIs according to RFC3986.
Definition: uri.h:66
static std::map< string, enum_variable_source > default_paths
Defines mapping between config files names and its corresponding enum values.
Definition: my_default.cc:127
static char * password
Definition: mysql_secure_installation.cc:58
ulong connect_timeout
Definition: mysqld.cc:1365
static char * path
Definition: mysqldump.cc:150
std::string dir
Double write files location.
Definition: buf0dblwr.cc:77
const std::string config_file_name
Definition: config.cc:60
std::chrono::milliseconds milliseconds
Definition: authorize_manager.cc:67
Definition: options.cc:57
std::map< Key, Value, Compare, ut::allocator< std::pair< const Key, Value > > > map
Specialization of map which uses ut_allocator.
Definition: ut0new.h:2898
Definition: cluster_metadata.h:238
Definition: config_generator.h:238
uint32_t router_id
Definition: config_generator.h:240
std::string local_cluster_name
Definition: config_generator.h:244
bool valid
Definition: config_generator.h:239
uint16_t ro_x_port
Definition: config_generator.h:243
std::string username
Definition: config_generator.h:241
uint16_t rw_x_port
Definition: config_generator.h:242
Definition: config_generator.h:131
std::string socket
Definition: config_generator.h:133
int port
Definition: config_generator.h:132
Endpoint(const std::string &path)
Definition: config_generator.h:135
Endpoint()
Definition: config_generator.h:134
Endpoint(int port_)
Definition: config_generator.h:136
Definition: config_generator.h:130
std::string target_cluster_by_name
Definition: config_generator.h:190
Endpoint ro_x_endpoint
Definition: config_generator.h:146
std::string server_ssl_curves
Definition: config_generator.h:180
std::string client_ssl_dh_params
Definition: config_generator.h:177
std::string server_ssl_verify
Definition: config_generator.h:186
std::string target_cluster
Definition: config_generator.h:189
std::string keyring_master_key_file_path
Definition: config_generator.h:157
std::string override_logfilename
Definition: config_generator.h:150
Endpoint rw_split_endpoint
Definition: config_generator.h:144
std::string local_cluster
Definition: config_generator.h:191
std::string client_ssl_mode
Definition: config_generator.h:175
std::string keyring_master_key
Definition: config_generator.h:156
Endpoint ro_endpoint
Definition: config_generator.h:143
std::string bind_address
Definition: config_generator.h:159
mysqlrouter::SSLOptions ssl_options
Definition: config_generator.h:164
int connect_timeout
Definition: config_generator.h:161
bool disable_rw_split_endpoint
Definition: config_generator.h:147
std::string client_ssl_curves
Definition: config_generator.h:174
bool disable_rest
Definition: config_generator.h:169
std::string client_ssl_key
Definition: config_generator.h:176
std::string override_datadir
Definition: config_generator.h:152
std::string override_logdir
Definition: config_generator.h:149
Endpoint rw_x_endpoint
Definition: config_generator.h:145
std::string server_ssl_mode
Definition: config_generator.h:181
Endpoint rw_endpoint
Definition: config_generator.h:142
std::string server_ssl_cipher
Definition: config_generator.h:179
std::string client_ssl_cert
Definition: config_generator.h:172
int read_timeout
Definition: config_generator.h:162
std::string server_ssl_capath
Definition: config_generator.h:183
std::string https_port_str
Definition: config_generator.h:170
std::string keyring_file_path
Definition: config_generator.h:155
std::chrono::milliseconds ttl
Definition: config_generator.h:166
std::string socketsdir
Definition: config_generator.h:153
bool use_gr_notifications
Definition: config_generator.h:167
std::string override_rundir
Definition: config_generator.h:151
std::string client_ssl_cipher
Definition: config_generator.h:173
std::string server_ssl_crlpath
Definition: config_generator.h:185
std::string server_ssl_crl
Definition: config_generator.h:184
std::string server_ssl_ca
Definition: config_generator.h:182
Definition: config_generator.h:502
std::string router_key
Definition: config_generator.h:505
std::string router_cert
Definition: config_generator.h:506
std::string ca_key
Definition: config_generator.h:503
std::string ca_cert
Definition: config_generator.h:504
SSL connection related options.
Definition: datatypes.h:34