Ejemplo n.º 1
0
        public async Task <IActionResult> Assign([FromBody] EncryptedHostAssignmentContext encryptedAssignmentContext)
        {
            _logger.LogDebug($"Starting container assignment for host : {Request?.Host}. ContextLength is: {encryptedAssignmentContext.EncryptedContext?.Length}");
            var containerKey      = _environment.GetEnvironmentVariable(EnvironmentSettingNames.ContainerEncryptionKey);
            var assignmentContext = encryptedAssignmentContext.IsWarmup
                ? null
                : encryptedAssignmentContext.Decrypt(containerKey);

            // before starting the assignment we want to perform as much
            // up front validation on the context as possible
            string error = await _instanceManager.ValidateContext(assignmentContext, encryptedAssignmentContext.IsWarmup);

            if (error != null)
            {
                return(StatusCode(StatusCodes.Status400BadRequest, error));
            }

            // Wait for Sidecar specialization to complete before returning ok.
            // This shouldn't take too long so ok to do this sequentially.
            error = await _instanceManager.SpecializeMSISidecar(assignmentContext, encryptedAssignmentContext.IsWarmup);

            if (error != null)
            {
                return(StatusCode(StatusCodes.Status500InternalServerError, error));
            }

            var result = _instanceManager.StartAssignment(assignmentContext, encryptedAssignmentContext.IsWarmup);

            return(result || encryptedAssignmentContext.IsWarmup
                ? Accepted()
                : StatusCode(StatusCodes.Status409Conflict, "Instance already assigned"));
        }
Ejemplo n.º 2
0
        public IActionResult Assign([FromBody] EncryptedHostAssignmentContext encryptedAssignmentContext)
        {
            var containerKey      = _settingsManager.GetSetting(EnvironmentSettingNames.ContainerEncryptionKey);
            var assignmentContext = encryptedAssignmentContext.Decrypt(containerKey);

            return(_instanceManager.StartAssignment(assignmentContext)
                ? Accepted()
                : StatusCode(StatusCodes.Status409Conflict, "Instance already assigned"));
        }
        public async Task <IActionResult> AssignAsync([FromBody] EncryptedHostAssignmentContext encryptedAssignmentContext)
        {
            var containerKey      = System.Environment.GetEnvironmentVariable(SettingsKeys.ContainerEncryptionKey);
            var assignmentContext = encryptedAssignmentContext.Decrypt(containerKey);

            // before starting the assignment we want to perform as much
            // up front validation on the context as possible
            string error = await _instanceManager.ValidateContext(assignmentContext);

            if (error != null)
            {
                return(StatusCode(StatusCodes.Status400BadRequest, error));
            }

            var assignmentResult = _instanceManager.StartAssignment(assignmentContext);

            // modify app settings from environment variables (for all start with "APPSETTING_")
            // setting APPSETTING_FUNCTIONS_EXTENSION_VERSION will both set the appsetting and environment variable
            if (assignmentResult)
            {
                foreach (KeyValuePair <string, string> env in assignmentContext.Environment)
                {
                    string key   = env.Key;
                    string value = env.Value;

                    if (key.StartsWith(_appsettingPrefix))
                    {
                        key = key.Substring(_appsettingPrefix.Length);
                        _settingsManager.SetValue(key, value);
                    }

                    // configure function app specialization properly for Linux Consumption plan
                    Dictionary <string, string> newSettings = FunctionAppSpecializationHelper.HandleLinuxConsumption(key, value);
                    foreach (KeyValuePair <string, string> newSetting in newSettings)
                    {
                        if (System.Environment.GetEnvironmentVariable(newSetting.Key) == null)
                        {
                            System.Environment.SetEnvironmentVariable(newSetting.Key, newSetting.Value);
                        }

                        if (_settingsManager.GetValue(newSetting.Key) == null)
                        {
                            _settingsManager.SetValue(newSetting.Key, newSetting.Value);
                        }
                    }
                }
            }

            return(assignmentResult
               ? Accepted()
               : StatusCode(StatusCodes.Status409Conflict, "Instance already assigned"));
        }
        public async Task <IActionResult> Assign([FromBody] EncryptedHostAssignmentContext encryptedAssignmentContext)
        {
            var containerKey      = _environment.GetEnvironmentVariable(EnvironmentSettingNames.ContainerEncryptionKey);
            var assignmentContext = encryptedAssignmentContext.Decrypt(containerKey);

            // before starting the assignment we want to perform as much
            // up front validation on the context as possible
            string error = await _instanceManager.ValidateContext(assignmentContext);

            if (error != null)
            {
                return(StatusCode(StatusCodes.Status400BadRequest, error));
            }

            var result = _instanceManager.StartAssignment(assignmentContext);

            return(result
                ? Accepted()
                : StatusCode(StatusCodes.Status409Conflict, "Instance already assigned"));
        }