Example #1
0
        protected async Task CheckConfigurationBlob(ConfigStorageAccess configStorage)
        {
            var container = new BlobContainerClient(configStorage.ConnectionString, configStorage.ContainerName);
            await container.CreateIfNotExistsAsync(PublicAccessType.None);

            var blobClient = container.GetBlobClient(ConfigFileName);

            if (await blobClient.ExistsAsync())
            {
                return;
            }

            string content = JsonConvert.SerializeObject(GetDefaultSettings(), new JsonSerializerSettings()
            {
                Formatting       = Formatting.Indented,
                ContractResolver = new CamelCasePropertyNamesContractResolver()
            });

            using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(content)))
            {
                await blobClient.UploadAsync(stream, new BlobHttpHeaders()
                {
                    ContentType = "application/json"
                });
            }
        }
Example #2
0
        /// <summary>
        /// Конфигурация загружается из переменных окружения
        /// И из Azure Storage если заданы переменные окружения
        ///   ConfigStorageUri
        ///   ConfigStorageSas
        ///   ConfigStorageContainer
        ///
        /// или из файла appsettings.local.json если переменные не заданы
        /// </summary>
        /// <param name="builder"></param>
        public override void ConfigureAppConfiguration(IFunctionsConfigurationBuilder builder)
        {
            FunctionsHostBuilderContext context = builder.GetContext();

            //Get enviroment variables for config file access
            var configStorage = new ConfigStorageAccess();

            if (!configStorage.Configured)
            {
                builder.ConfigurationBuilder
                .AddJsonFile(Path.Combine(context.ApplicationRootPath, ConfigFileNameLocal), false, false)
                .AddEnvironmentVariables();
            }
            else
            {
                CheckConfigurationBlob(configStorage).Wait();

                var azureBlobFileProvider = new AzureBlobFileProvider(new AzureBlobOptions()
                {
                    ConnectionString  = configStorage.ConnectionString,
                    DocumentContainer = configStorage.ContainerName
                });

                builder.ConfigurationBuilder
                .AddJsonFile(azureBlobFileProvider, ConfigFileName, false, false)
                .AddEnvironmentVariables();
            }
        }