Skip to content

Commit 16ee578

Browse files
authored
[Rpc]Expand environment variables in worker.config.json after hydrating worker path (#6352)
1 parent c5e9479 commit 16ee578

File tree

3 files changed

+27
-11
lines changed

3 files changed

+27
-11
lines changed

src/WebJobs.Script/Workers/Rpc/Configuration/RpcWorkerConfigFactory.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,7 @@ internal void AddProvider(string workerDir)
152152
workerDescription.FormatWorkerPathIfNeeded(_systemRuntimeInformation, _environment, _logger);
153153
workerDescription.ThrowIfFileNotExists(workerDescription.DefaultWorkerPath, nameof(workerDescription.DefaultWorkerPath));
154154
_workerDescripionDictionary[workerDescription.Language] = workerDescription;
155+
workerDescription.ExpandEnvironmentVariables();
155156
_logger.LogDebug($"Added WorkerConfig for language: {workerDescription.Language}");
156157
}
157158
}

src/WebJobs.Script/Workers/Rpc/RpcWorkerDescription.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,6 @@ public override void ApplyDefaultsAndValidate(string workerDirectory, ILogger lo
8787
{
8888
DefaultWorkerPath = Path.Combine(WorkerDirectory, DefaultWorkerPath);
8989
}
90-
ExpandEnvironmentVariables();
9190
if (string.IsNullOrEmpty(Language))
9291
{
9392
throw new ValidationException($"WorkerDescription {nameof(Language)} cannot be empty");

test/WebJobs.Script.Tests/Workers/Rpc/RpcWorkerConfigFactoryTests.cs

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,10 @@
55
using System.Collections.Generic;
66
using System.IO;
77
using System.Linq;
8-
using System.Runtime.InteropServices;
98
using Microsoft.Azure.WebJobs.Script.Config;
109
using Microsoft.Azure.WebJobs.Script.Workers;
1110
using Microsoft.Azure.WebJobs.Script.Workers.Rpc;
1211
using Microsoft.Extensions.Configuration;
13-
using Moq;
1412
using Xunit;
1513

1614
namespace Microsoft.Azure.WebJobs.Script.Tests.Workers.Rpc
@@ -106,29 +104,47 @@ public void JavaPath_FromEnvVars()
106104
[Fact]
107105
public void DefaultWorkerConfigs_Overrides_DefaultWorkerRuntimeVersion_AppSetting()
108106
{
109-
var configBuilder = ScriptSettingsManager.CreateDefaultConfigurationBuilder()
110-
.AddInMemoryCollection(new Dictionary<string, string>
111-
{
112-
["languageWorkers:python:defaultRuntimeVersion"] = "3.8"
113-
});
114-
var config = configBuilder.Build();
115-
var scriptSettingsManager = new ScriptSettingsManager(config);
116-
var testLogger = new TestLogger("test");
117107
var testEnvVariables = new Dictionary<string, string>
118108
{
119109
{ "languageWorkers:python:defaultRuntimeVersion", "3.8" }
120110
};
111+
var configBuilder = ScriptSettingsManager.CreateDefaultConfigurationBuilder()
112+
.AddInMemoryCollection(testEnvVariables);
113+
var config = configBuilder.Build();
114+
var scriptSettingsManager = new ScriptSettingsManager(config);
115+
var testLogger = new TestLogger("test");
121116
using (var variables = new TestScopedSettings(scriptSettingsManager, testEnvVariables))
122117
{
123118
var configFactory = new RpcWorkerConfigFactory(config, testLogger, _testSysRuntimeInfo, _testEnvironment, new TestMetricsLogger());
124119
var workerConfigs = configFactory.GetConfigs();
125120
var pythonWorkerConfig = workerConfigs.Where(w => w.Description.Language.Equals("python", StringComparison.OrdinalIgnoreCase)).FirstOrDefault();
121+
var powershellWorkerConfig = workerConfigs.Where(w => w.Description.Language.Equals("powershell", StringComparison.OrdinalIgnoreCase)).FirstOrDefault();
126122
Assert.Equal(4, workerConfigs.Count);
127123
Assert.NotNull(pythonWorkerConfig);
124+
Assert.NotNull(powershellWorkerConfig);
128125
Assert.Equal("3.8", pythonWorkerConfig.Description.DefaultRuntimeVersion);
126+
Assert.Equal("6", powershellWorkerConfig.Description.DefaultRuntimeVersion);
129127
}
130128
}
131129

130+
[Fact]
131+
public void DefaultWorkerConfigs_Overrides_VersionAppSetting()
132+
{
133+
var testEnvironment = new TestEnvironment();
134+
testEnvironment.SetEnvironmentVariable("FUNCTIONS_WORKER_RUNTIME_VERSION", "7.0");
135+
testEnvironment.SetEnvironmentVariable("FUNCTIONS_WORKER_RUNTIME", "powerShell");
136+
var configBuilder = ScriptSettingsManager.CreateDefaultConfigurationBuilder();
137+
var config = configBuilder.Build();
138+
var scriptSettingsManager = new ScriptSettingsManager(config);
139+
var testLogger = new TestLogger("test");
140+
var configFactory = new RpcWorkerConfigFactory(config, testLogger, _testSysRuntimeInfo, testEnvironment, new TestMetricsLogger());
141+
var workerConfigs = configFactory.GetConfigs();
142+
var powershellWorkerConfig = workerConfigs.Where(w => w.Description.Language.Equals("powershell", StringComparison.OrdinalIgnoreCase)).FirstOrDefault();
143+
Assert.Equal(1, workerConfigs.Count);
144+
Assert.NotNull(powershellWorkerConfig);
145+
Assert.Equal("7", powershellWorkerConfig.Description.DefaultRuntimeVersion);
146+
}
147+
132148
[Theory]
133149
[InlineData("python", "Python", false, true)]
134150
[InlineData("python", "NOde", false, false)]

0 commit comments

Comments
 (0)