in Configurator/Core/CLI/CommandLine.cs [802:982]
private static CLIExitCode ProcessSpecialCommandLineOptions(ServerInstallation serverInstallation)
{
// Upgrade configuration type special options.
if (serverInstallation.Controller.ConfigurationType == ConfigurationType.Upgrade)
{
// Old Instance Password and defaults extra file.
var passwordOptionProcessingResult = ProcessPasswordOption("old-instance-password", "defaults-extra-file", "MYSQL_PWD", serverInstallation);
if (passwordOptionProcessingResult.ExitCode != ExitCode.Success)
{
return passwordOptionProcessingResult;
}
// Existing instance related options.
var oldInstanceProtocol = CommandLineParser.GetMatchingProvidedOption("old-instance-protocol");
MySqlConnectionProtocol connectionProtocol;
if (oldInstanceProtocol != null)
{
if (!Enum.TryParse(oldInstanceProtocol.Value, out connectionProtocol))
{
return new CLIExitCode(ExitCode.InvalidOptionValue, oldInstanceProtocol.Value, oldInstanceProtocol.Name);
}
TryToSetValue(serverInstallation.Controller, oldInstanceProtocol.Name, oldInstanceProtocol.Value);
CommandLineParser.ProvidedOptions.Remove(oldInstanceProtocol);
CommandLineOption requiredProtocolOption = null;
switch (connectionProtocol)
{
case MySqlConnectionProtocol.Tcp:
requiredProtocolOption = CommandLineParser.GetMatchingProvidedOption("old-instance-port");
if (requiredProtocolOption == null)
{
requiredProtocolOption = CommandLineParser.GetMatchingSupportedOption("old-instance-port");
requiredProtocolOption.Value = MySqlServerSettings.DEFAULT_PORT.ToString();
}
break;
case MySqlConnectionProtocol.Pipe:
requiredProtocolOption = CommandLineParser.GetMatchingProvidedOption("old-instance-pipe-name");
if (requiredProtocolOption == null)
{
requiredProtocolOption = CommandLineParser.GetMatchingSupportedOption("old-instance-pipe-name");
requiredProtocolOption.Value = MySqlServerSettings.DEFAULT_PIPE_OR_SHARED_MEMORY_NAME.ToString();
}
break;
case MySqlConnectionProtocol.SharedMemory:
requiredProtocolOption = CommandLineParser.GetMatchingProvidedOption("old-instance-memory-name");
if (requiredProtocolOption == null)
{
requiredProtocolOption = CommandLineParser.GetMatchingSupportedOption("old-instance-memory-name");
requiredProtocolOption.Value = MySqlServerSettings.DEFAULT_PIPE_OR_SHARED_MEMORY_NAME.ToString();
}
break;
}
if (requiredProtocolOption == null)
{
return new CLIExitCode(ExitCode.MissingRequiredOption, requiredProtocolOption.Name);
}
if (!TryToSetValue(serverInstallation.Controller, requiredProtocolOption.Name, requiredProtocolOption.Value))
{
return new CLIExitCode(ExitCode.InvalidOptionValue, requiredProtocolOption.Value, requiredProtocolOption.Name);
}
CommandLineParser.ProvidedOptions.Remove(requiredProtocolOption);
}
else
{
oldInstanceProtocol = CommandLineParser.GetMatchingSupportedOption("old-instance-protocol");
oldInstanceProtocol.Value = MySqlConnectionProtocol.Socket.ToString();
TryToSetValue(serverInstallation.Controller, oldInstanceProtocol.Name, oldInstanceProtocol.Value);
var portOption = CommandLineParser.GetMatchingProvidedOption("old-instance-port");
portOption = CommandLineParser.GetMatchingSupportedOption("old-instance-port");
portOption.Value = MySqlServerSettings.DEFAULT_PORT.ToString();
TryToSetValue(serverInstallation.Controller, portOption.Name, portOption.Value);
}
}
// Configure and reconfigure configuration types special options.
if (serverInstallation.Controller.ConfigurationType == ConfigurationType.Configure
|| serverInstallation.Controller.ConfigurationType == ConfigurationType.Reconfigure)
{
// Root password.
var passwordOptionProcessingResult = ProcessPasswordOption("password", "defaults-extra-file", "MYSQL_PWD", serverInstallation);
if (passwordOptionProcessingResult.ExitCode != ExitCode.Success)
{
return passwordOptionProcessingResult;
}
// Windows service account password
var winAccountUserOption = CommandLineParser.GetMatchingProvidedOption("windows-service-user");
if (winAccountUserOption != null)
{
var winPasswordOptionProcessingResult = ProcessPasswordOption("windows-service-password", "windows-service-account-password-file", "WIN_SERVICE_ACCOUNT_PWD", serverInstallation);
if (winPasswordOptionProcessingResult.ExitCode != ExitCode.Success)
{
return winPasswordOptionProcessingResult;
}
}
// Install and uninstall sample databases.
serverInstallation.Controller.ExampleDatabasesStatus = new Dictionary<string, string>();
var installSampleDbOption = CommandLineParser.GetMatchingProvidedOption("install-sample-database");
if (installSampleDbOption != null)
{
if (!Enum.TryParse(installSampleDbOption.Value, out ExampleDatabase installStatus))
{
return new CLIExitCode(ExitCode.InvalidOptionValue, installSampleDbOption.Value, installSampleDbOption.Name);
}
serverInstallation.Controller.IsCreateRemoveExamplesDatabasesStepNeeded = true;
switch (installStatus)
{
case ExampleDatabase.All:
serverInstallation.Controller.ExampleDatabasesStatus.Add("sakila", "create");
serverInstallation.Controller.ExampleDatabasesStatus.Add("world", "create");
break;
case ExampleDatabase.Sakila:
serverInstallation.Controller.ExampleDatabasesStatus.Add("sakila", "create");
break;
case ExampleDatabase.World:
serverInstallation.Controller.ExampleDatabasesStatus.Add("world", "create");
break;
}
CommandLineParser.ProvidedOptions.Remove(installSampleDbOption);
}
var uninstallSampleDbOption = CommandLineParser.GetMatchingProvidedOption("uninstall-sample-database");
if (uninstallSampleDbOption != null)
{
if (!Enum.TryParse(uninstallSampleDbOption.Value, out ExampleDatabase uninstallStatus))
{
return new CLIExitCode(ExitCode.InvalidOptionValue, uninstallSampleDbOption.Value, uninstallSampleDbOption.Name);
}
switch (uninstallStatus)
{
case ExampleDatabase.All:
serverInstallation.Controller.ExampleDatabasesStatus.Add("sakila", "remove");
serverInstallation.Controller.ExampleDatabasesStatus.Add("world", "remove");
break;
case ExampleDatabase.Sakila:
serverInstallation.Controller.ExampleDatabasesStatus.Add("sakila", "remove");
break;
case ExampleDatabase.World:
serverInstallation.Controller.ExampleDatabasesStatus.Add("world", "remove");
break;
}
CommandLineParser.ProvidedOptions.Remove(uninstallSampleDbOption);
}
// Configure configuration type special options.
if (serverInstallation.Controller.ConfigurationType == ConfigurationType.Configure)
{
serverInstallation.Controller.Settings.NewServerUsers.Clear();
while (CommandLineParser.ProvidedOptions.Any(option => option.Name.Equals("add-user", StringComparison.InvariantCultureIgnoreCase)))
{
var addUserOption = CommandLineParser.GetMatchingProvidedOption("add-user");
var result = ProcessAddUserOption(addUserOption, serverInstallation);
if (result.ExitCode != ExitCode.Success)
{
return result;
}
CommandLineParser.ProvidedOptions.Remove(addUserOption);
}
// Enable windows authentication plugin if needed.
if (serverInstallation.Controller.Settings.NewServerUsers.Any(user => user.AuthenticationPlugin == MySqlAuthenticationPluginType.Windows))
{
serverInstallation.Controller.Settings.Plugins.Enable("authentication_windows", true);
}
}
}
return new CLIExitCode(ExitCode.Success);
}