MySQL 9.2.0
Source Code Documentation
config_generator.h
Go to the documentation of this file.
1/*
2 Copyright (c) 2016, 2024, 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 std::ostream &out_stream = std::cout, std::ostream &err_stream = std::cerr
64#ifndef _WIN32
65 ,
67#endif
68 );
70
71 /** @brief first part of the bootstrap process
72 *
73 * This function does a lot of initialisation before bootstrap starts making
74 * changes.
75 *
76 * @param server_url server to bootstrap from
77 * @param bootstrap_options bootstrap options
78 *
79 * @throws std::runtime_error On error.
80 */
81 void init(const std::string &server_url,
82 const std::map<std::string, std::string> &bootstrap_options);
83
84 /** @brief logs warning and returns false if SSL mode is set to PREFERRED and
85 * SSL is not being used, true otherwise
86 *
87 * @param options map of commandline options
88 *
89 * @returns false if SSL mode is set to PREFERRED and SSL is not being used,
90 * true otherwise
91 *
92 * @throws std::runtime_error On error.
93 */
94 bool warn_on_no_ssl(const std::map<std::string, std::string> &options);
95
97 const std::string &program_name, const std::string &config_file_path,
98 const std::string &state_file_path,
99 const std::map<std::string, std::string> &options,
100 const std::map<std::string, std::vector<std::string>> &multivalue_options,
101 const std::map<std::string, std::string> &default_paths);
102
104 const std::string &program_name, const std::string &directory,
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> &default_paths);
108
109 void set_keyring_info(const KeyringInfo &keyring_info) {
110 keyring_info_ = keyring_info;
111 }
112
113 void set_plugin_folder(const std::string &val) { plugin_folder_ = val; }
114
115 struct Options {
116 struct Endpoint {
117 int port;
118 std::string socket;
119 Endpoint() : port(0) {}
120 Endpoint(const std::string &path) : port(0), socket(path) {}
121 Endpoint(int port_) : port(port_) {}
122
123 operator bool() const { return port > 0 || !socket.empty(); }
124 };
125 Options() = default;
126
133
134 std::string override_logdir;
136 std::string override_rundir;
137 std::string override_datadir;
138 std::string socketsdir;
139
140 std::string keyring_file_path;
143
144 std::string bind_address;
145
148
150
151 std::chrono::milliseconds ttl;
153
154 bool disable_rest{false};
155 std::string https_port_str;
156
157 std::string client_ssl_cert;
158 std::string client_ssl_cipher;
159 std::string client_ssl_curves;
160 std::string client_ssl_mode;
161 std::string client_ssl_key;
163
164 std::string server_ssl_cipher;
165 std::string server_ssl_curves;
166 std::string server_ssl_mode;
167 std::string server_ssl_ca;
168 std::string server_ssl_capath;
169 std::string server_ssl_crl;
171 std::string server_ssl_verify;
172
173 // only relevant for ClusterSet
174 std::string target_cluster;
176 std::string local_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:
184 /**
185 * init() calls this to read and validate several command-line options;
186 * results are stored in member fields.
187 *
188 * @param bootstrap_options options map to process
189 *
190 * @throws std::runtime_error on an invalid option
191 */
193 const std::map<std::string, std::string> &bootstrap_options);
194
195 /**
196 * init() calls this to validate and extract metadata server info from server
197 * URI, including user credentials. It will also:
198 * - set user name to "root" if not provided in the URI
199 * - prompt for user password if not provided in the URI
200 *
201 * @param server_uri server URI (--bootstrap|-B argument)
202 * @param bootstrap_socket bootstrap (unix) socket (--bootstrap-socket
203 * argumenent)
204 *
205 * @returns URI with required information
206 *
207 * @throws std::runtime_error on an invalid data
208 */
209 URI parse_server_uri(const std::string &server_uri,
210 const std::string &bootstrap_socket);
211
212 /**
213 * init() calls this to connect to metadata server; sets mysql_ (connection)
214 * object.
215 *
216 * @param u parsed server URL (--bootstrap|-B argument)
217 * @param bootstrap_socket bootstrap (unix) socket (--bootstrap-socket
218 * argumenent)
219 * @param bootstrap_options bootstrap command-line options
220 *
221 * @throws std::runtime_error On error.
222 * @throws std::logic_error On error.
223 */
225 const URI &u, const std::string &bootstrap_socket,
226 const std::map<std::string, std::string> &bootstrap_options);
227
228 /**
229 * init() calls this to set GR-related member fields.
230 *
231 * @param u parsed server URL (--bootstrap|-B argument)
232 * @param bootstrap_socket bootstrap (unix) socket (--bootstrap-socket
233 * argumenent)
234 *
235 * @throws exception TODO
236 */
237 void init_gr_data(const URI &u, const std::string &bootstrap_socket);
238
240 bool valid{false};
241 uint32_t router_id{0};
242 std::string username;
243 uint16_t rw_x_port{0};
244 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
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:65
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:59
Definition: config_generator.h:60
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:1495
void give_grants_to_users(const std::string &new_accounts)
Definition: config_generator.cc:3262
std::string fetch_password_from_keyring(const std::string &username, uint32_t router_id)
Definition: config_generator.cc:2040
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:389
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:448
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:3095
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:2574
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:3726
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:639
void set_keyring_info_real_paths(std::map< std::string, std::string > &options, const mysql_harness::Path &path)
Definition: config_generator.cc:2027
void set_file_owner(const std::map< std::string, std::string > &options, const std::string &owner) const
Definition: config_generator.cc:3830
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:3516
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:2091
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:3041
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:2942
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:656
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:2818
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:2795
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:436
std::string make_account_list(const std::string username, const std::set< std::string > &hostnames)
Definition: config_generator.cc:3293
void undo_create_user_for_new_accounts() noexcept
Deletes Router accounts just created.
Definition: config_generator.cc:3362
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:242
ConfigGenerator(std::ostream &out_stream=std::cout, std::ostream &err_stream=std::cerr, SysUserOperationsBase *sys_user_operations=SysUserOperations::instance())
Definition: config_generator.cc:191
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:1736
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:331
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:1321
void set_plugin_folder(const std::string &val)
Definition: config_generator.h:113
void init_keyring_file(uint32_t router_id, bool create_if_needed=true)
Definition: config_generator.cc:2119
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:3152
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:546
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:286
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:3631
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:886
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:1355
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:3613
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:1677
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:3313
void ensure_router_id_is_ours(uint32_t &router_id, const std::string &hostname_override)
Definition: config_generator.cc:1654
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:2068
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:1718
static void set_ssl_options(MySQLSession *sess, const std::map< std::string, std::string > &options)
Definition: config_generator.cc:213
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:1940
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:3799
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:2992
void set_keyring_info(const KeyringInfo &keyring_info)
Definition: config_generator.h:109
Definition: mysql_session.h:154
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
static char * path
Definition: mysqldump.cc:149
std::string dir
Double write files location.
Definition: buf0dblwr.cc:77
const std::string config_file_name
Definition: config.cc:60
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:40
Definition: config_generator.h:239
uint32_t router_id
Definition: config_generator.h:241
std::string local_cluster_name
Definition: config_generator.h:245
bool valid
Definition: config_generator.h:240
uint16_t ro_x_port
Definition: config_generator.h:244
std::string username
Definition: config_generator.h:242
uint16_t rw_x_port
Definition: config_generator.h:243
Definition: config_generator.h:116
std::string socket
Definition: config_generator.h:118
int port
Definition: config_generator.h:117
Endpoint(const std::string &path)
Definition: config_generator.h:120
Endpoint()
Definition: config_generator.h:119
Endpoint(int port_)
Definition: config_generator.h:121
Definition: config_generator.h:115
std::string target_cluster_by_name
Definition: config_generator.h:175
Endpoint ro_x_endpoint
Definition: config_generator.h:131
std::string server_ssl_curves
Definition: config_generator.h:165
std::string client_ssl_dh_params
Definition: config_generator.h:162
std::string server_ssl_verify
Definition: config_generator.h:171
std::string target_cluster
Definition: config_generator.h:174
std::string keyring_master_key_file_path
Definition: config_generator.h:142
std::string override_logfilename
Definition: config_generator.h:135
Endpoint rw_split_endpoint
Definition: config_generator.h:129
std::string local_cluster
Definition: config_generator.h:176
std::string client_ssl_mode
Definition: config_generator.h:160
std::string keyring_master_key
Definition: config_generator.h:141
Endpoint ro_endpoint
Definition: config_generator.h:128
std::string bind_address
Definition: config_generator.h:144
mysqlrouter::SSLOptions ssl_options
Definition: config_generator.h:149
int connect_timeout
Definition: config_generator.h:146
bool disable_rw_split_endpoint
Definition: config_generator.h:132
std::string client_ssl_curves
Definition: config_generator.h:159
bool disable_rest
Definition: config_generator.h:154
std::string client_ssl_key
Definition: config_generator.h:161
std::string override_datadir
Definition: config_generator.h:137
std::string override_logdir
Definition: config_generator.h:134
Endpoint rw_x_endpoint
Definition: config_generator.h:130
std::string server_ssl_mode
Definition: config_generator.h:166
Endpoint rw_endpoint
Definition: config_generator.h:127
std::string server_ssl_cipher
Definition: config_generator.h:164
std::string client_ssl_cert
Definition: config_generator.h:157
int read_timeout
Definition: config_generator.h:147
std::string server_ssl_capath
Definition: config_generator.h:168
std::string https_port_str
Definition: config_generator.h:155
std::string keyring_file_path
Definition: config_generator.h:140
std::chrono::milliseconds ttl
Definition: config_generator.h:151
std::string socketsdir
Definition: config_generator.h:138
bool use_gr_notifications
Definition: config_generator.h:152
std::string override_rundir
Definition: config_generator.h:136
std::string client_ssl_cipher
Definition: config_generator.h:158
std::string server_ssl_crlpath
Definition: config_generator.h:170
std::string server_ssl_crl
Definition: config_generator.h:169
std::string server_ssl_ca
Definition: config_generator.h:167
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:43
SSL connection related options.
Definition: datatypes.h:34