MySQL 9.5.0
Source Code Documentation
config_generator.h
Go to the documentation of this file.
1/*
2 Copyright (c) 2016, 2025, Oracle and/or its affiliates.
3
4 This program is free software; you can redistribute it and/or modify
5 it under the terms of the GNU General Public License, version 2.0,
6 as published by the Free Software Foundation.
7
8 This program is designed to work with certain software (including
9 but not limited to OpenSSL) that is licensed under separate terms,
10 as designated in a particular file or component or in included license
11 documentation. The authors of MySQL hereby grant you an additional
12 permission to link the program and your derivative works with the
13 separately licensed software that they have either included with
14 the program or referenced in the documentation.
15
16 This program is distributed in the hope that it will be useful,
17 but WITHOUT ANY WARRANTY; without even the implied warranty of
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 GNU General Public License for more details.
20
21 You should have received a copy of the GNU General Public License
22 along with this program; if not, write to the Free Software
23 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
24*/
25
26#ifndef ROUTER_CONFIG_GENERATOR_INCLUDED
27#define ROUTER_CONFIG_GENERATOR_INCLUDED
28
29#include <chrono>
30#include <functional>
31#include <iostream> // cerr
32#include <map>
33#include <set>
34#include <stdexcept>
35#include <string>
36#include <vector>
37
46#include "mysqlrouter/uri.h"
47#include "random_generator.h"
48#include "unique_ptr.h"
49
50namespace mysql_harness {
51class Path;
52}
53
54namespace mysqlrouter {
55class ClusterMetadata;
56class MySQLSession;
57class SysUserOperationsBase;
58class SysUserOperations;
59struct ClusterInfo;
60
62 public:
64
67
69 AutoCleaner &auto_cleaner, AccountsCleaner &accounts_cleaner,
70 std::ostream &out_stream = std::cout, std::ostream &err_stream = std::cerr
71#ifndef _WIN32
72 ,
74#endif
75 );
77
78 /** @brief first part of the bootstrap process
79 *
80 * This function does a lot of initialisation before bootstrap starts making
81 * changes.
82 *
83 * @throws std::runtime_error TODO
84 */
85 void init(const std::map<std::string, std::string> &bootstrap_options,
87 int connect_timeout, int read_timeout);
88
89 void check_target(const std::map<std::string, std::string> &bootstrap_options,
90 bool allow_no_metadata = false);
91
92 /** @brief logs warning and returns false if SSL mode is set to PREFERRED
93 * and SSL is not being used, true otherwise
94 *
95 * @param options map of commandline options
96 *
97 * @returns false if SSL mode is set to PREFERRED and SSL is not being
98 * used, true otherwise
99 *
100 * @throws std::runtime_error On error.
101 */
102 bool warn_on_no_ssl(const std::map<std::string, std::string> &options);
103
104 std::string config_file_path_for_directory(const std::string &directory);
105 bool needs_bootstrap(const std::string &config_file_path);
106
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,
113 const std::map<std::string, std::string> &default_paths);
114
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,
120 const std::map<std::string, std::string> &default_paths);
121
122 void set_keyring_info(const KeyringInfo &keyring_info) {
123 keyring_info_ = keyring_info;
124 }
125
126 void set_plugin_folder(const std::string &val) { plugin_folder_ = val; }
127
128 bool is_standalone_target() const { return !schema_version_; }
129
130 struct Options {
131 struct Endpoint {
132 int port;
133 std::string socket;
134 Endpoint() : port(0) {}
135 Endpoint(const std::string &path) : port(0), socket(path) {}
136 Endpoint(int port_) : port(port_) {}
137
138 operator bool() const { return port > 0 || !socket.empty(); }
139 };
140 Options() = default;
141
148
149 std::string override_logdir;
151 std::string override_rundir;
152 std::string override_datadir;
153 std::string socketsdir;
154
155 std::string keyring_file_path;
158
159 std::string bind_address;
160
163
165
168
169 bool disable_rest{false};
170 std::string https_port_str;
171
172 std::string client_ssl_cert;
173 std::string client_ssl_cipher;
174 std::string client_ssl_curves;
175 std::string client_ssl_mode;
176 std::string client_ssl_key;
178
179 std::string server_ssl_cipher;
180 std::string server_ssl_curves;
181 std::string server_ssl_mode;
182 std::string server_ssl_ca;
183 std::string server_ssl_capath;
184 std::string server_ssl_crl;
186 std::string server_ssl_verify;
187
188 // only relevant for ClusterSet
189 std::string target_cluster;
191 std::string local_cluster;
192 };
193
194 void set_file_owner(
195 const std::map<std::string, std::string> &options,
196 const std::string &owner) const; // throws std::runtime_error
197
198 private:
199 /**
200 * init() calls this to read and validate several command-line options;
201 * results are stored in member fields.
202 *
203 * @param bootstrap_options options map to process
204 *
205 * @throws std::runtime_error on an invalid option
206 */
208 const std::map<std::string, std::string> &bootstrap_options);
209
210 /**
211 * init() calls this to validate and extract metadata server info from server
212 * URI, including user credentials. It will also:
213 * - set user name to "root" if not provided in the URI
214 * - prompt for user password if not provided in the URI
215 *
216 * @param server_uri server URI (--bootstrap|-B argument)
217 * @param bootstrap_socket bootstrap (unix) socket (--bootstrap-socket
218 * argumenent)
219 *
220 * @returns URI with required information
221 *
222 * @throws std::runtime_error on an invalid data
223 */
224 URI parse_server_uri(const std::string &server_uri,
225 const std::string &bootstrap_socket);
226
227 /**
228 * init() calls this to set GR-related member fields.
229 *
230 * @param u parsed server URL (--bootstrap|-B argument)
231 * @param bootstrap_socket bootstrap (unix) socket (--bootstrap-socket
232 * argumenent)
233 *
234 * @throws exception TODO
235 */
236 void init_gr_data(const URI &u, const std::string &bootstrap_socket);
237
239 bool valid{false};
240 uint32_t router_id{0};
241 std::string username;
242 uint16_t rw_x_port{0};
243 uint16_t ro_x_port{0};
245 };
246
247 Options fill_options(const std::map<std::string, std::string> &user_options,
248 const std::map<std::string, std::string> &default_paths,
249 const ExistingConfigOptions &existing_config_options);
250
251 void create_start_script(const std::string &program_name,
252 const std::string &directory,
253 bool interactive_master_key,
254 const std::map<std::string, std::string> &options);
255
256 void create_stop_script(const std::string &directory,
257 const std::map<std::string, std::string> &options);
258
259 // virtual so we can disable it in unit tests
260 virtual void set_script_permissions(
261 const std::string &script_path,
262 const std::map<std::string, std::string> &options);
263
264 // returns bootstrap report (several lines of human-readable text) if desired
265 std::string bootstrap_deployment(
266 const std::string &program_name, std::ofstream &config_file,
267 std::ofstream &state_file, const mysql_harness::Path &config_file_path,
268 const mysql_harness::Path &state_file_path, const std::string &name,
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,
272 const std::map<std::string, std::string> &default_paths,
273 bool directory_deployment);
274
275 std::tuple<std::string> try_bootstrap_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,
280 const Options &options);
281
282 void create_config(
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,
286 const Options &options,
287 const std::map<std::string, std::string> &default_paths,
288 const std::map<std::string, std::string> &config_overwrites,
289 const std::string &state_file_name, const bool full);
290
291 void print_bootstrap_start_msg(uint32_t router_id, bool directory_deployment,
292 const mysql_harness::Path &config_file_path);
293
294 std::string get_bootstrap_report_text(
295 const std::string &program_name, const std::string &config_file_name,
296 const std::string &router_name, const std::string &metadata_cluster,
297 const std::string &cluster_type_name, const std::string &hostname,
298 bool is_system_deployment, const Options &options);
299
301 const std::map<std::string, std::string> &default_paths,
302 const std::map<std::string, std::string> &user_options,
303 const Options &options);
304
305 /** @brief Finds all hostnames given on command-line
306 *
307 * MySQL accounts are of form `<username>@<hostname>`. This function returns
308 * all `<hostname>` parts that were provided via --account-host switches
309 *
310 * @param multivalue_options key/list-of-values map of bootstrap config;
311 * carries --account-host inside
312 */
313 static std::set<std::string> get_account_host_args(
314 const std::map<std::string, std::vector<std::string>>
315 &multivalue_options) noexcept;
316
317 /** @brief Creates Router accounts
318 *
319 * Creates Router accounts for all hostnames (ie. `someuser@host1`,
320 * `someuser@host2`, `someuser@%`, etc). It will create such accounts for
321 * all hosts that appear in hostnames_cmdline, but not in hostnames_db.
322 *
323 * @note This is the higher-level method, which drives calls to lower-level
324 * methods like create_account_with_compliant_password() and
325 * create_accounts().
326 *
327 * @param user_options key/value map of bootstrap config options
328 * @param hostnames hostnames provided as --account-host arguments
329 * @param username Router account to be created (without the hostname part)
330 * @param password_change_ok password is allowed to be changed if needed
331 * @param password Router account password, will be overwritten if empty
332 *
333 * @returns auto-generated password
334 *
335 * @throws std::logic_error on not connected
336 * std::runtime_error on bad password or Server's password policy
337 * changing during bootstrap
338 * MySQLSession::Error on other (unexpected) SQL error
339 */
340 std::string create_router_accounts(
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);
344
345 /** @brief Creates Router account with compliant password
346 *
347 * Creates Router account with a (self-generated) password that will pass
348 * Server's password policy. It first tries creating a hashed password using
349 * mysql_native_password plugin. If that fails, it falls back to using
350 * plaintext password, which the Server may reject for not being strong
351 * enough. If that's the case, it will generate another password and try again
352 * 2 more times (for a total of 3 password-generation attempts), after which
353 * it will give up.
354 *
355 * @note This is a higher-level method, with smart logic that drives calls to
356 * lower-level create_accounts() method.
357 *
358 * @param user_options key/value map of bootstrap config options
359 * @param username Router account to be created - the username part
360 * @param hostnames Router accounts to be created - the hostname part
361 * @param password Password for the account
362 * @param password_change_ok password is allowed to be changed if needed
363 * @param if_not_exists if true, CREATE USER IF NOT EXISTS will be used
364 * instead of CREATE USER
365 *
366 * @returns password
367 *
368 * @throws std::logic_error on not connected
369 * std::runtime_error on bad password
370 * MySQLSession::Error on other (unexpected) SQL error
371 */
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);
376
377 /** @brief Creates Router account (low-level function)
378 *
379 * Creates Router account using CREATE USER [IF NOT EXISTS] and gives it
380 * GRANTs.
381 *
382 * @param username Router account to be created - the username part
383 * @param hostnames Router accounts to be created - the hostnames part
384 * @param password Password for the account
385 * @param if_not_exists if true, CREATE USER IF NOT EXISTS will be used
386 * instead of CREATE USER
387 *
388 * @throws std::logic_error on not connected
389 * password_too_weak on Server not liking the password
390 * account_exists if running without IF NOT EXISTS and account exists
391 * already MySQLSession::Error on other (unexpected) SQL error
392 */
393 void create_accounts(const std::string &username,
394 const std::set<std::string> &hostnames,
395 const std::string &password, bool if_not_exists = false);
396
397 void create_users(const std::string &username,
398 const std::set<std::string> &hostnames,
399 const std::string &password, bool if_not_exists);
400
402 const std::string &username);
403
404 std::set<std::string> get_hostnames_of_created_accounts(
405 const std::string &username, const std::set<std::string> &hostnames,
406 bool if_not_exists);
407
408 void give_grants_to_users(const std::string &new_accounts);
409
411 const std::string &config_file_path,
412 const mysqlrouter::ClusterInfo &cluster_info, bool forcing_overwrite);
413
414 void update_router_info(uint32_t router_id, const Options &options);
415
417 const mysql_harness::Path &config_path, const std::string &new_file_path,
418 const std::map<std::string, std::string> &options, bool clean);
419
420 void set_keyring_info_real_paths(std::map<std::string, std::string> &options,
422
424 const std::map<std::string, std::string> &user_options,
425 uint32_t router_id, const std::string &username,
426 const std::string &password, Options &options);
427
428 std::string fetch_password_from_keyring(const std::string &username,
429 uint32_t router_id);
430
432 const std::map<std::string, std::string> &user_options,
433 uint32_t router_id);
434
435 void init_keyring_file(uint32_t router_id, bool create_if_needed = true);
436
437 void ensure_router_id_is_ours(uint32_t &router_id,
438 const std::string &hostname_override);
439
440 uint32_t register_router(const std::string &router_name,
441 const std::string &hostname_override, bool force);
442
443 void verify_router_account(const std::string &username,
444 const std::string &password, bool strict);
445
446 /**
447 * @brief Prepare X.509 certificates for the Router.
448 *
449 * If user provides Router certificate and key files they are used in the
450 * first place so no action is taken in this method. If there are no existing
451 * certificate files then CA certificate and key along with Router certificate
452 * and key will be created.
453 *
454 * @param[in] user_options Key/value map of bootstrap config options.
455 * @param[in] default_paths Map of predefined default paths.
456 *
457 * @throws std::runtime_error Data directory contains some certificate files
458 * but Router certificate and/or key is missing.
459 */
461 const std::map<std::string, std::string> &user_options,
462 const std::map<std::string, std::string> &default_paths) const;
463
464 /**
465 * @brief Check if datadir directory contains only files that are allowed
466 * before the bootstrap.
467 *
468 * @param[in] dir Data directory representation.
469 *
470 * @retval false - datadir contains files that are not allowed before the
471 * bootstrap.
472 * @retval true - datadir does not contain files that are not allowed before
473 * the bootstrap.
474 */
476 const mysql_harness::Directory &dir) const;
477
478 private:
480 std::string bootstrap_socket_;
481
483 std::unique_ptr<ClusterMetadata> metadata_;
486
487 // For GR cluster Group Replication ID, for AR cluster cluster_id from the
488 // metadata, for ClusterSet clusterset_id
495
498
499 std::ostream &out_stream_;
500 std::ostream &err_stream_;
501
502 const struct TLS_filenames {
503 std::string ca_key{"ca-key.pem"};
504 std::string ca_cert{"ca.pem"};
505 std::string router_key{"router-key.pem"};
506 std::string router_cert{"router-cert.pem"};
508
511
512#ifndef _WIN32
514#endif
515
516 // metadata schema version if not standalone
517 std::optional<mysqlrouter::MetadataSchemaVersion> schema_version_;
518
519 std::string plugin_folder_;
520};
521} // namespace mysqlrouter
522#endif // ROUTER_CONFIG_GENERATOR_INCLUDED
The ClusterMetadata class encapsulates a connection to the Metadata server.
Definition: cluster_metadata.h:66
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
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: common.h:44
Definition: base64.h:43
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