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