private static CLIExitCode ProcessSpecialCommandLineOptions()

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);
    }