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