private static CLIExitCode SetConfigurationTypeAndExecutionMode()

in Configurator/Program.cs [355:409]


    private static CLIExitCode SetConfigurationTypeAndExecutionMode(ServerInstallation serverInstallation)
    {
      var action = CommandLineParser.GetMatchingProvidedOption("action");
      var serverIsConfigured = serverInstallation.Controller.Settings.GeneralSettingsFileExists;
      if (action == null)
      {
        serverInstallation.Controller.ConfigurationType = serverIsConfigured
          ? ConfigurationType.Reconfigure
          : ConfigurationType.Configure;
      }
      else
      {
        var noShow = false;
        if (action.Value.Equals("removenoshow", StringComparison.InvariantCultureIgnoreCase))
        {
          noShow = true;
          action.Value = "remove";
        }

        if (!Enum.TryParse(action.Value, true, out ConfigurationType configurationType)
            || configurationType == ConfigurationType.None
            || configurationType == ConfigurationType.Incomplete
            || configurationType == ConfigurationType.All)
        {
          return new CLIExitCode(ExitCode.InvalidAction, action.Value, action.Name);
        }

        // Set reconfigure if server is already configured.
        if (configurationType == ConfigurationType.Configure
            && serverIsConfigured)
        {
          configurationType = ConfigurationType.Reconfigure;
        }

        switch (configurationType)
        {
          case ConfigurationType.Reconfigure:
          case ConfigurationType.Configure:
            AppConfiguration.ExecutionMode = ExecutionMode.Configure;
            break;
          case ConfigurationType.Upgrade:
            AppConfiguration.ExecutionMode = ExecutionMode.Upgrade;
            break;
          case ConfigurationType.Remove:
            AppConfiguration.ExecutionMode = noShow
              ? ExecutionMode.RemoveNoShow
              : ExecutionMode.Remove;
            break;
        }

        serverInstallation.Controller.ConfigurationType = configurationType;
      }

      return new CLIExitCode(ExitCode.Success);
    }