MySQL 8.4.7
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
45#include "mysqlrouter/uri.h"
46#include "random_generator.h"
47#include "tcp_address.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 std::ostream &out_stream = std::cout, std::ostream &err_stream = std::cerr
65#ifndef _WIN32
66 ,
68#endif
69 );
71
72 /** @brief first part of the bootstrap process
73 *
74 * This function does a lot of initialisation before bootstrap starts making
75 * changes.
76 *
77 * @param server_url server to bootstrap from
78 * @param bootstrap_options bootstrap options
79 *
80 * @throws std::runtime_error
81 */
82 void init(const std::string &server_url,
83 const std::map<std::string, std::string> &bootstrap_options);
84
85 /** @brief logs warning and returns false if SSL mode is set to PREFERRED and
86 * SSL is not being used, true otherwise
87 *
88 * @param options map of commandline options
89 *
90 * @returns false if SSL mode is set to PREFERRED and SSL is not being used,
91 * true otherwise
92 *
93 * @throws std::runtime_error
94 */
95 bool warn_on_no_ssl(const std::map<std::string, std::string> &options);
96
98 const std::string &program_name, const std::string &config_file_path,
99 const std::string &state_file_path,
100 const std::map<std::string, std::string> &options,
101 const std::map<std::string, std::vector<std::string>> &multivalue_options,
102 const std::map<std::string, std::string> &default_paths);
103
105 const std::string &program_name, const std::string &directory,
106 const std::map<std::string, std::string> &options,
107 const std::map<std::string, std::vector<std::string>> &multivalue_options,
108 const std::map<std::string, std::string> &default_paths);
109
110 void set_keyring_info(const KeyringInfo &keyring_info) {
111 keyring_info_ = keyring_info;
112 }
113
114 void set_plugin_folder(const std::string &val) { plugin_folder_ = val; }
115
116 struct Options {
117 struct Endpoint {
118 int port;
119 std::string socket;
120 Endpoint() : port(0) {}
121 Endpoint(const std::string &path) : port(0), socket(path) {}
122 Endpoint(int port_) : port(port_) {}
123
124 operator bool() const { return port > 0 || !socket.empty(); }
125 };
126 Options() = default;
127
134
135 std::string override_logdir;
137 std::string override_rundir;
138 std::string override_datadir;
139 std::string socketsdir;
140
141 std::string keyring_file_path;
144
145 std::string bind_address;
146
149
151
152 std::chrono::milliseconds ttl;
154
155 bool disable_rest{false};
156 std::string https_port_str;
157
158 std::string client_ssl_cert;
159 std::string client_ssl_cipher;
160 std::string client_ssl_curves;
161 std::string client_ssl_mode;
162 std::string client_ssl_key;
164
165 std::string server_ssl_cipher;
166 std::string server_ssl_curves;
167 std::string server_ssl_mode;
168 std::string server_ssl_ca;
169 std::string server_ssl_capath;
170 std::string server_ssl_crl;
172 std::string server_ssl_verify;
173
174 // only relevant for ClusterSet
175 std::string target_cluster;
177 };
178
179 void set_file_owner(
180 const std::map<std::string, std::string> &options,
181 const std::string &owner) const; // throws std::runtime_error
182
183 private:
185 /**
186 * init() calls this to read and validate several command-line options;
187 * results are stored in member fields.
188 *
189 * @param bootstrap_options options map to process
190 *
191 * @throws std::runtime_error on an invalid option
192 */
194 const std::map<std::string, std::string> &bootstrap_options);
195
196 /**
197 * init() calls this to validate and extract metadata server info from server
198 * URI, including user credentials. It will also:
199 * - set user name to "root" if not provided in the URI
200 * - prompt for user password if not provided in the URI
201 *
202 * @param server_uri server URI (--bootstrap|-B argument)
203 * @param bootstrap_socket bootstrap (unix) socket (--bootstrap-socket
204 * argumenent)
205 *
206 * @returns URI with required information
207 *
208 * @throws std::runtime_error on an invalid data
209 */
210 URI parse_server_uri(const std::string &server_uri,
211 const std::string &bootstrap_socket);
212
213 /**
214 * init() calls this to connect to metadata server; sets mysql_ (connection)
215 * object.
216 *
217 * @param u parsed server URL (--bootstrap|-B argument)
218 * @param bootstrap_socket bootstrap (unix) socket (--bootstrap-socket
219 * argumenent)
220 * @param bootstrap_options bootstrap command-line options
221 *
222 * @throws std::runtime_error
223 * @throws std::logic_error
224 */
226 const URI &u, const std::string &bootstrap_socket,
227 const std::map<std::string, std::string> &bootstrap_options);
228
229 /**
230 * init() calls this to set GR-related member fields.
231 *
232 * @param u parsed server URL (--bootstrap|-B argument)
233 * @param bootstrap_socket bootstrap (unix) socket (--bootstrap-socket
234 * argumenent)
235 *
236 * @throws TODO
237 */
238 void init_gr_data(const URI &u, const std::string &bootstrap_socket);
239
241 bool valid{false};
242 uint32_t router_id{0};
243 std::string username;
244 uint16_t rw_x_port{0};
245 uint16_t ro_x_port{0};
246 };
247
248 Options fill_options(const std::map<std::string, std::string> &user_options,
249 const std::map<std::string, std::string> &default_paths,
250 const ExistingConfigOptions &existing_config_options);
251
252 void create_start_script(const std::string &program_name,
253 const std::string &directory,
254 bool interactive_master_key,
255 const std::map<std::string, std::string> &options);
256
257 void create_stop_script(const std::string &directory,
258 const std::map<std::string, std::string> &options);
259
260 // virtual so we can disable it in unit tests
261 virtual void set_script_permissions(
262 const std::string &script_path,
263 const std::map<std::string, std::string> &options);
264
265 // returns bootstrap report (several lines of human-readable text) if desired
266 std::string bootstrap_deployment(
267 const std::string &program_name, std::ofstream &config_file,
268 std::ofstream &state_file, const mysql_harness::Path &config_file_path,
269 const mysql_harness::Path &state_file_path, const std::string &name,
270 const std::map<std::string, std::string> &options,
271 const std::map<std::string, std::vector<std::string>> &multivalue_options,
272 const std::map<std::string, std::string> &default_paths,
273 bool directory_deployment, AutoCleaner &auto_clean);
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 Deletes Router accounts just created
306 *
307 * This method runs as a cleanup after something goes wrong. Its purpose is
308 * to undo CREATE USER [IF NOT EXISTS] for accounts that got created during
309 * bootstrap. Note that it will drop only those accounts which did not exist
310 * prior to bootstrap (it may be a subset of account names passed to
311 * CREATE USER [IF NOT EXISTS]). If it is not able to determine what this
312 * (sub)set is, it will not drop anything - instead it will advise user on
313 * how to clean those up manually.
314 */
315 void undo_create_user_for_new_accounts() noexcept;
316
317 /** @brief Finds all hostnames given on command-line
318 *
319 * MySQL accounts are of form `<username>@<hostname>`. This function returns
320 * all `<hostname>` parts that were provided via --account-host switches
321 *
322 * @param multivalue_options key/list-of-values map of bootstrap config;
323 * carries --account-host inside
324 */
325 static std::set<std::string> get_account_host_args(
326 const std::map<std::string, std::vector<std::string>>
327 &multivalue_options) noexcept;
328
329 /** @brief Creates Router accounts
330 *
331 * Creates Router accounts for all hostnames (ie. `someuser@host1`,
332 * `someuser@host2`, `someuser@%`, etc). It will create such accounts for
333 * all hosts that appear in hostnames_cmdline, but not in hostnames_db.
334 *
335 * @note This is the higher-level method, which drives calls to lower-level
336 * methods like create_account_with_compliant_password() and
337 * create_accounts().
338 *
339 * @param user_options key/value map of bootstrap config options
340 * @param hostnames hostnames provided as --account-host arguments
341 * @param username Router account to be created (without the hostname part)
342 * @param password_change_ok password is allowed to be changed if needed
343 * @param password Router account password, will be overwritten if empty
344 *
345 * @returns auto-generated password
346 *
347 * @throws std::logic_error on not connected
348 * std::runtime_error on bad password or Server's password policy
349 * changing during bootstrap
350 * MySQLSession::Error on other (unexpected) SQL error
351 */
353 const std::map<std::string, std::string> &user_options,
354 const std::set<std::string> &hostnames, const std::string &username,
355 const std::string &password, bool password_change_ok);
356
357 /** @brief Creates Router account with compliant password
358 *
359 * Creates Router account with a (self-generated) password that will pass
360 * Server's password policy. It first tries creating a hashed password using
361 * mysql_native_password plugin. If that fails, it falls back to using
362 * plaintext password, which the Server may reject for not being strong
363 * enough. If that's the case, it will generate another password and try again
364 * 2 more times (for a total of 3 password-generation attempts), after which
365 * it will give up.
366 *
367 * @note This is a higher-level method, with smart logic that drives calls to
368 * lower-level create_accounts() method.
369 *
370 * @param user_options key/value map of bootstrap config options
371 * @param username Router account to be created - the username part
372 * @param hostnames Router accounts to be created - the hostname part
373 * @param password Password for the account
374 * @param password_change_ok password is allowed to be changed if needed
375 * @param if_not_exists if true, CREATE USER IF NOT EXISTS will be used
376 * instead of CREATE USER
377 *
378 * @returns password
379 *
380 * @throws std::logic_error on not connected
381 * std::runtime_error on bad password
382 * MySQLSession::Error on other (unexpected) SQL error
383 */
385 const std::map<std::string, std::string> &user_options,
386 const std::string &username, const std::set<std::string> &hostnames,
387 const std::string &password, bool password_change_ok, bool if_not_exists);
388
389 /** @brief Creates Router account (low-level function)
390 *
391 * Creates Router account using CREATE USER [IF NOT EXISTS] and gives it
392 * GRANTs.
393 *
394 * @param username Router account to be created - the username part
395 * @param hostnames Router accounts to be created - the hostnames part
396 * @param password Password for the account
397 * @param if_not_exists if true, CREATE USER IF NOT EXISTS will be used
398 * instead of CREATE USER
399 *
400 * @throws std::logic_error on not connected
401 * password_too_weak on Server not liking the password
402 * account_exists if running without IF NOT EXISTS and account exists
403 * already MySQLSession::Error on other (unexpected) SQL error
404 */
405 void create_accounts(const std::string &username,
406 const std::set<std::string> &hostnames,
407 const std::string &password, bool if_not_exists = false);
408
409 void create_users(const std::string &username,
410 const std::set<std::string> &hostnames,
411 const std::string &password, bool if_not_exists);
412
414 const std::string &username);
415
417 const std::string &username, const std::set<std::string> &hostnames,
418 bool if_not_exists);
419
420 void give_grants_to_users(const std::string &new_accounts);
421
422 std::string make_account_list(const std::string username,
423 const std::set<std::string> &hostnames);
424
425 ExistingConfigOptions get_options_from_config_if_it_exists(
426 const std::string &config_file_path,
427 const mysqlrouter::ClusterInfo &cluster_info, bool forcing_overwrite);
428
429 void update_router_info(uint32_t router_id, const Options &options);
430
432 const mysql_harness::Path &config_path, const std::string &new_file_path,
433 const std::map<std::string, std::string> &options,
434 AutoCleaner *auto_cleaner = nullptr);
435
436 void set_keyring_info_real_paths(std::map<std::string, std::string> &options,
437 const mysql_harness::Path &path);
438
440 AutoCleaner &auto_clean,
441 const std::map<std::string, std::string> &user_options,
442 uint32_t router_id, const std::string &username,
443 const std::string &password, Options &options);
444
445 std::string fetch_password_from_keyring(const std::string &username,
446 uint32_t router_id);
447
449 AutoCleaner &auto_clean,
450 const std::map<std::string, std::string> &user_options,
451 uint32_t router_id);
452
453 void init_keyring_file(uint32_t router_id, bool create_if_needed = true);
454
455 static void set_ssl_options(
456 MySQLSession *sess, const std::map<std::string, std::string> &options);
457
458 void ensure_router_id_is_ours(uint32_t &router_id,
459 const std::string &hostname_override);
460
461 uint32_t register_router(const std::string &router_name,
462 const std::string &hostname_override, bool force);
463
464 void verify_router_account(const std::string &username,
465 const std::string &password, bool strict);
466
467 /**
468 * @brief Prepare X.509 certificates for the Router.
469 *
470 * If user provides Router certificate and key files they are used in the
471 * first place so no action is taken in this method. If there are no existing
472 * certificate files then CA certificate and key along with Router certificate
473 * and key will be created.
474 *
475 * @param[in] user_options Key/value map of bootstrap config options.
476 * @param[in] default_paths Map of predefined default paths.
477 * @param[in,out] auto_cleaner Automatic file cleanup object that guarantees
478 * file cleanup if bootstrap fails at any point.
479 *
480 * @throws std::runtime_error Data directory contains some certificate files
481 * but Router certificate and/or key is missing.
482 */
484 const std::map<std::string, std::string> &user_options,
485 const std::map<std::string, std::string> &default_paths,
486 AutoCleaner *auto_cleaner) const;
487
488 /**
489 * @brief Check if datadir directory contains only files that are allowed
490 * before the bootstrap.
491 *
492 * @param[in] dir Data directory representation.
493 *
494 * @retval false - datadir contains files that are not allowed before the
495 * bootstrap.
496 * @retval true - datadir does not contain files that are not allowed before
497 * the bootstrap.
498 */
500 const mysql_harness::Directory &dir) const;
501
502 private:
507
508 // For GR cluster Group Replication ID, for AR cluster cluster_id from the
509 // metadata, for ClusterSet clusterset_id
516
519
520 std::ostream &out_stream_;
521 std::ostream &err_stream_;
522
524 enum {
525 kNotSet = 1, // =1 is not a requirement, just defensive programming
527 kNewAccounts
528 } type = kNotSet;
529 std::string accounts;
531
532 const struct TLS_filenames {
533 std::string ca_key{"ca-key.pem"};
534 std::string ca_cert{"ca.pem"};
535 std::string router_key{"router-key.pem"};
536 std::string router_cert{"router-cert.pem"};
538
539#ifndef _WIN32
541#endif
542
544
545 std::string plugin_folder_;
546};
547} // namespace mysqlrouter
548#endif // ROUTER_CONFIG_GENERATOR_INCLUDED
The ClusterMetadata class encapsulates a connection to the Metadata server.
Definition: cluster_metadata.h:63
Class representing an error.
Definition: error.h:48
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 path in a file system.
Definition: filesystem.h:63
Definition: cluster_metadata.h:59
Definition: config_generator.h:61
std::string plugin_folder_
Definition: config_generator.h:545
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)
Definition: config_generator.cc:1465
void give_grants_to_users(const std::string &new_accounts)
Definition: config_generator.cc:3226
std::string fetch_password_from_keyring(const std::string &username, uint32_t router_id)
Definition: config_generator.cc:2004
std::string cluster_initial_password_
Definition: config_generator.h:514
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.
Definition: config_generator.cc:388
SysUserOperationsBase * sys_user_operations_
Definition: config_generator.h:540
void init(const std::string &server_url, const std::map< std::string, std::string > &bootstrap_options)
first part of the bootstrap process
Definition: config_generator.cc:423
std::string cluster_initial_username_
Definition: config_generator.h:513
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:3059
std::unique_ptr< MySQLSession > mysql_
Definition: config_generator.h:503
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:2538
std::string cluster_initial_socket_
Definition: config_generator.h:515
void create_stop_script(const std::string &directory, const std::map< std::string, std::string > &options)
Definition: config_generator.cc:3690
bool keyring_initialized_
Definition: config_generator.h:518
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:614
void set_keyring_info_real_paths(std::map< std::string, std::string > &options, const mysql_harness::Path &path)
Definition: config_generator.cc:1991
void set_file_owner(const std::map< std::string, std::string > &options, const std::string &owner) const
Definition: config_generator.cc:3794
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:3480
void init_keyring_and_master_key(AutoCleaner &auto_clean, const std::map< std::string, std::string > &user_options, uint32_t router_id)
Definition: config_generator.cc:2055
std::ostream & out_stream_
Definition: config_generator.h:520
mysqlrouter::MetadataSchemaVersion schema_version_
Definition: config_generator.h:543
void throw_account_exists(const MySQLSession::Error &e, const std::string &username)
Definition: config_generator.cc:3005
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:2906
std::unique_ptr< ClusterMetadata > metadata_
Definition: config_generator.h:504
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.
Definition: config_generator.cc:631
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:2782
int connect_timeout_
Definition: config_generator.h:505
void print_bootstrap_start_msg(uint32_t router_id, bool directory_deployment, const mysql_harness::Path &config_file_path)
Definition: config_generator.cc:2759
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:411
std::string make_account_list(const std::string username, const std::set< std::string > &hostnames)
Definition: config_generator.cc:3257
void undo_create_user_for_new_accounts() noexcept
Deletes Router accounts just created.
Definition: config_generator.cc:3326
std::string cluster_specific_id_
Definition: config_generator.h:510
void update_router_info(uint32_t router_id, const Options &options)
std::ostream & err_stream_
Definition: config_generator.h:521
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:241
ConfigGenerator(std::ostream &out_stream=std::cout, std::ostream &err_stream=std::cerr, SysUserOperationsBase *sys_user_operations=SysUserOperations::instance())
Definition: config_generator.cc:190
int read_timeout_
Definition: config_generator.h:506
void verify_router_account(const std::string &username, const std::string &password, bool strict)
Definition: config_generator.cc:1706
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:330
struct mysqlrouter::ConfigGenerator::UndoCreateAccountList undo_create_account_list_
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:1291
void set_plugin_folder(const std::string &val)
Definition: config_generator.h:114
void init_keyring_file(uint32_t router_id, bool create_if_needed=true)
Definition: config_generator.cc:2083
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:3116
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)
Definition: config_generator.cc:521
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:285
const struct mysqlrouter::ConfigGenerator::TLS_filenames tls_filenames_
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:3595
std::string cluster_initial_hostname_
Definition: config_generator.h:511
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:861
mysql_harness::AutoCleaner AutoCleaner
Definition: config_generator.h:184
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.
Definition: config_generator.cc:1325
KeyringInfo keyring_info_
Definition: config_generator.h:517
virtual void set_script_permissions(const std::string &script_path, const std::map< std::string, std::string > &options)
Definition: config_generator.cc:3577
unsigned int cluster_initial_port_
Definition: config_generator.h:512
uint32_t register_router(const std::string &router_name, const std::string &hostname_override, bool force)
Definition: config_generator.cc:1647
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:3277
void ensure_router_id_is_ours(uint32_t &router_id, const std::string &hostname_override)
Definition: config_generator.cc:1624
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)
Definition: config_generator.cc:2032
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:1688
static void set_ssl_options(MySQLSession *sess, const std::map< std::string, std::string > &options)
Definition: config_generator.cc:212
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:1910
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)
Definition: config_generator.cc:3763
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:2956
void set_keyring_info(const KeyringInfo &keyring_info)
Definition: config_generator.h:110
Definition: mysql_session.h:153
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:70
static std::map< string, enum_variable_source > default_paths
Defines mapping between config files names and its corresponding enum values.
Definition: my_default.cc:120
static char * password
Definition: mysql_secure_installation.cc:58
static char * path
Definition: mysqldump.cc:149
std::string dir
Double write files location.
Definition: buf0dblwr.cc:77
constexpr pos_type Options
Definition: method.h:48
const std::string config_file_name
Definition: config.cc:62
Definition: common.h:42
Definition: base64.h:43
Definition: options.cc:57
Definition: gcs_xcom_synode.h:64
std::vector< T, ut::allocator< T > > vector
Specialization of vector which uses allocator.
Definition: ut0new.h:2879
std::set< Key, Compare, ut::allocator< Key > > set
Specialization of set which uses ut_allocator.
Definition: ut0new.h:2887
std::map< Key, Value, Compare, ut::allocator< std::pair< const Key, Value > > > map
Specialization of map which uses ut_allocator.
Definition: ut0new.h:2897
std::conditional_t< !std::is_array< T >::value, std::unique_ptr< T, detail::Deleter< T > >, std::conditional_t< detail::is_unbounded_array_v< T >, std::unique_ptr< T, detail::Array_deleter< std::remove_extent_t< T > > >, void > > unique_ptr
The following is a common type that is returned by all the ut::make_unique (non-aligned) specializati...
Definition: ut0new.h:2443
required string type
Definition: replication_group_member_actions.proto:34
case opt name
Definition: sslopt-case.h:29
Definition: cluster_metadata.h:40
Definition: config_generator.h:240
uint32_t router_id
Definition: config_generator.h:242
bool valid
Definition: config_generator.h:241
uint16_t ro_x_port
Definition: config_generator.h:245
std::string username
Definition: config_generator.h:243
uint16_t rw_x_port
Definition: config_generator.h:244
Definition: config_generator.h:117
std::string socket
Definition: config_generator.h:119
int port
Definition: config_generator.h:118
Endpoint(const std::string &path)
Definition: config_generator.h:121
Endpoint()
Definition: config_generator.h:120
Endpoint(int port_)
Definition: config_generator.h:122
Definition: config_generator.h:116
std::string target_cluster_by_name
Definition: config_generator.h:176
Endpoint ro_x_endpoint
Definition: config_generator.h:132
std::string server_ssl_curves
Definition: config_generator.h:166
std::string client_ssl_dh_params
Definition: config_generator.h:163
std::string server_ssl_verify
Definition: config_generator.h:172
std::string target_cluster
Definition: config_generator.h:175
std::string keyring_master_key_file_path
Definition: config_generator.h:143
std::string override_logfilename
Definition: config_generator.h:136
Endpoint rw_split_endpoint
Definition: config_generator.h:130
std::string client_ssl_mode
Definition: config_generator.h:161
std::string keyring_master_key
Definition: config_generator.h:142
Endpoint ro_endpoint
Definition: config_generator.h:129
std::string bind_address
Definition: config_generator.h:145
mysqlrouter::SSLOptions ssl_options
Definition: config_generator.h:150
int connect_timeout
Definition: config_generator.h:147
bool disable_rw_split_endpoint
Definition: config_generator.h:133
std::string client_ssl_curves
Definition: config_generator.h:160
bool disable_rest
Definition: config_generator.h:155
std::string client_ssl_key
Definition: config_generator.h:162
std::string override_datadir
Definition: config_generator.h:138
std::string override_logdir
Definition: config_generator.h:135
Endpoint rw_x_endpoint
Definition: config_generator.h:131
std::string server_ssl_mode
Definition: config_generator.h:167
Endpoint rw_endpoint
Definition: config_generator.h:128
std::string server_ssl_cipher
Definition: config_generator.h:165
std::string client_ssl_cert
Definition: config_generator.h:158
int read_timeout
Definition: config_generator.h:148
std::string server_ssl_capath
Definition: config_generator.h:169
std::string https_port_str
Definition: config_generator.h:156
std::string keyring_file_path
Definition: config_generator.h:141
std::chrono::milliseconds ttl
Definition: config_generator.h:152
std::string socketsdir
Definition: config_generator.h:139
bool use_gr_notifications
Definition: config_generator.h:153
std::string override_rundir
Definition: config_generator.h:137
std::string client_ssl_cipher
Definition: config_generator.h:159
std::string server_ssl_crlpath
Definition: config_generator.h:171
std::string server_ssl_crl
Definition: config_generator.h:170
std::string server_ssl_ca
Definition: config_generator.h:168
Definition: config_generator.h:532
std::string router_key
Definition: config_generator.h:535
std::string router_cert
Definition: config_generator.h:536
std::string ca_key
Definition: config_generator.h:533
std::string ca_cert
Definition: config_generator.h:534
Definition: config_generator.h:523
@ kAllAccounts
Definition: config_generator.h:526
std::string accounts
Definition: config_generator.h:529
Definition: cluster_metadata.h:42
SSL connection related options.
Definition: datatypes.h:34