コード例 #1
0
        public override async Task <ConfigurationLoadResult> LoadConfiguration()
        {
            var loadResult = new ConfigurationLoadResult();

            if (!File.Exists(ConfigurationFileName))
            {
                var sampleConfig = this.GetSampleConfig();
                try
                {
                    File.WriteAllText(ConfigurationFileName,
                                      JsonConvert.SerializeObject(sampleConfig, Formatting.Indented));
                    loadResult.Errors.Add(languageProvider.GetString(LanguageSection.ConfigurationStrings, "LoadNoFileFound"));
                    return(loadResult);
                }
                catch (Exception e)
                {
                    LoggingProvider.GetLogger <JsonConfigurationProvider>().Error("Failed to save sample config", e);
                }
                loadResult.Errors.Add(languageProvider.GetString(LanguageSection.ConfigurationStrings, "LoadNoFileFoundCantCreate"));
                return(loadResult);
            }

            var stringContent = File.ReadAllText(ConfigurationFileName);

            try
            {
                var config = JsonConvert.DeserializeObject <Configuration>(stringContent);
                await ValidateConfiguration(config, loadResult);

                if (loadResult.Success)
                {
                    loadResult.Configuration = config;
                    return(loadResult);
                }
                return(loadResult);
            }
            catch (Exception e)
            {
                LoggingProvider.GetLogger <JsonConfigurationProvider>().Error("Failed to parse config", e);
                loadResult.Errors.Add(languageProvider.GetString(LanguageSection.ConfigurationStrings, "LoadCouldntParseFile"));
                return(loadResult);
            }
        }
コード例 #2
0
        private async Task ValidateConfiguration(IConfiguration config, ConfigurationLoadResult validationResult)
        {
            if (string.IsNullOrEmpty(config.OctopusUrl))
            {
                validationResult.Errors.Add(languageProvider.GetString(LanguageSection.ConfigurationStrings, "ValidationOctopusUrl"));
            }

            if (string.IsNullOrEmpty(config.OctopusUrl))
            {
                validationResult.Errors.Add(languageProvider.GetString(LanguageSection.ConfigurationStrings, "ValidationOctopusApiKey"));
            }

            if (config.ChannelSeedProjectNames == null || !config.ChannelSeedProjectNames.Any())
            {
                validationResult.Errors.Add(languageProvider.GetString(LanguageSection.ConfigurationStrings, "ValidationSeedProject"));
            }

            if (!validationResult.Errors.Any())
            {
                try
                {
                    var octoHelper = new OctopusHelper(config.OctopusUrl, config.ApiKey, null);
                    await octoHelper.GetEnvironments();

                    try
                    {
                        if (!config.ChannelSeedProjectNames.Select(async c => await octoHelper.ValidateProjectName(c)).Select(c => c.Result).All(c => c))
                        {
                            validationResult.Errors.Add(languageProvider.GetString(LanguageSection.ConfigurationStrings, "ValidationSeedProjectNotValid"));
                        }
                    }
                    catch (Exception e)
                    {
                        validationResult.Errors.Add(languageProvider.GetString(LanguageSection.ConfigurationStrings, "ValidationSeedProjectNotValid") + ": " + e.Message);
                    }
                }
                catch (Exception e)
                {
                    validationResult.Errors.Add(languageProvider.GetString(LanguageSection.ConfigurationStrings, "ValidationOctopusApiFailure") + ": " + e.Message);
                }
            }
        }