in src/WebJobs.Script.WebHost/Management/AtlasInstanceManager.cs [244:335]
protected override async Task ApplyContextAsync(HostAssignmentContext assignmentContext)
{
// We need to get the non-PlaceholderMode script Path so we can unzip to the correct location.
// This asks the factory to skip the PlaceholderMode check when configuring options.
var options = _optionsFactory.Create(ScriptApplicationHostOptionsSetup.SkipPlaceholder);
RunFromPackageContext pkgContext = assignmentContext.GetRunFromPkgContext();
if (_environment.SupportsAzureFileShareMount() || pkgContext.IsRunFromLocalPackage())
{
var azureFilesMounted = false;
if (assignmentContext.IsAzureFilesContentShareConfigured(_logger))
{
azureFilesMounted = await _runFromPackageHandler.MountAzureFileShare(assignmentContext);
}
else
{
_logger.LogError(
$"No {nameof(EnvironmentSettingNames.AzureFilesConnectionString)} or {nameof(EnvironmentSettingNames.AzureFilesContentShare)} configured. Azure FileShare will not be mounted. For PowerShell Functions, Managed Dependencies will not persisted across functions host instances.");
}
if (pkgContext.IsRunFromPackage(options, _logger))
{
if (azureFilesMounted)
{
_logger.LogWarning("App is configured to use both Run-From-Package and AzureFiles. Run-From-Package will take precedence");
}
var blobContextApplied =
await _runFromPackageHandler.ApplyRunFromPackageContext(pkgContext, options.ScriptPath,
azureFilesMounted, false);
if (!blobContextApplied && azureFilesMounted)
{
_logger.LogWarning($"Failed to {nameof(_runFromPackageHandler.ApplyRunFromPackageContext)}. Attempting to use local disk instead");
await _runFromPackageHandler.ApplyRunFromPackageContext(pkgContext, options.ScriptPath, false);
}
}
else if (pkgContext.IsRunFromLocalPackage())
{
if (!azureFilesMounted)
{
const string mountErrorMessage = "App Run-From-Package is set as '1'. AzureFiles is needed but is not configured.";
_logger.LogWarning(mountErrorMessage);
throw new Exception(mountErrorMessage);
}
var blobContextApplied =
await _runFromPackageHandler.ApplyRunFromPackageContext(pkgContext, options.ScriptPath, azureFilesMounted);
if (!blobContextApplied)
{
_logger.LogWarning($"Failed to {nameof(_runFromPackageHandler.ApplyRunFromPackageContext)}.");
}
}
else
{
_logger.LogInformation($"No {nameof(EnvironmentSettingNames.AzureWebsiteRunFromPackage)} configured");
}
}
else
{
if (pkgContext.IsRunFromPackage(options, _logger))
{
await _runFromPackageHandler.ApplyRunFromPackageContext(pkgContext, options.ScriptPath, false);
}
else if (assignmentContext.IsAzureFilesContentShareConfigured(_logger))
{
await _runFromPackageHandler.MountAzureFileShare(assignmentContext);
}
}
// BYOS
var storageVolumes = assignmentContext.GetBYOSEnvironmentVariables()
.Select(AzureStorageInfoValue.FromEnvironmentVariable).ToList();
var mountedVolumes =
(await Task.WhenAll(storageVolumes.Where(v => v != null).Select(MountStorageAccount))).Where(
result => result).ToList();
if (storageVolumes.Any())
{
if (mountedVolumes.Count != storageVolumes.Count)
{
_logger.LogWarning(
$"Successfully mounted {mountedVolumes.Count} / {storageVolumes.Count} BYOS storage accounts");
}
else
{
_logger.LogInformation(
$"Successfully mounted {storageVolumes.Count} BYOS storage accounts");
}
}
}