Skip to content

Commit 567d6f9

Browse files
Enabling the warning when agent runs in PowerShell core using CheckPsModulesLocations knob (#5286)
* changes in agent.cs * adding runtimeknob for checkPsModules * changes in agentL0.cs
1 parent 6324efb commit 567d6f9

File tree

4 files changed

+19
-4
lines changed

4 files changed

+19
-4
lines changed

src/Agent.Listener/Agent.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
using Microsoft.VisualStudio.Services.Agent.Listener.Telemetry;
2020
using System.Collections.Generic;
2121
using Newtonsoft.Json;
22-
using Agent.Sdk.Knob;
22+
using Agent.Listener.Configuration;
2323

2424
namespace Microsoft.VisualStudio.Services.Agent.Listener
2525
{
@@ -357,7 +357,10 @@ private async Task<int> RunAsync(AgentSettings settings, bool runOnce = false)
357357
{
358358
Trace.Info(nameof(RunAsync));
359359

360-
if (PlatformUtil.RunningOnWindows && AgentKnobs.CheckPsModulesLocations.GetValue(HostContext).AsBoolean())
360+
var featureFlagProvider = HostContext.GetService<IFeatureFlagProvider>();
361+
var checkPsModulesFeatureFlag = await featureFlagProvider.GetFeatureFlagAsync(HostContext, "DistributedTask.Agent.CheckPsModulesLocations", Trace);
362+
363+
if (PlatformUtil.RunningOnWindows && checkPsModulesFeatureFlag?.EffectiveState == "On")
361364
{
362365
string psModulePath = Environment.GetEnvironmentVariable("PSModulePath");
363366
bool containsPwshLocations = PsModulePathUtil.ContainsPowershellCoreLocations(psModulePath);

src/Agent.Sdk/Knob/AgentKnobs.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -770,6 +770,7 @@ public class AgentKnobs
770770
public static readonly Knob CheckPsModulesLocations = new Knob(
771771
nameof(CheckPsModulesLocations),
772772
"Checks if the PSModulePath environment variable contains locations specific to PowerShell Core.",
773+
new RuntimeKnobSource("DistributedTask.Agent.CheckPsModulesLocations"),
773774
new EnvironmentKnobSource("AZP_AGENT_CHECK_PSMODULES_LOCATIONS"),
774775
new BuiltInDefaultKnobSource("false"));
775776

src/Agent.Worker/Handlers/Handler.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -303,7 +303,7 @@ protected void AddPrependPathToEnvironment()
303303
[SupportedOSPlatform("windows")]
304304
protected bool PsModulePathContainsPowershellCoreLocations()
305305
{
306-
bool checkLocationsKnob = AgentKnobs.CheckPsModulesLocations.GetValue(HostContext).AsBoolean();
306+
bool checkLocationsKnob = AgentKnobs.CheckPsModulesLocations.GetValue(ExecutionContext).AsBoolean();
307307

308308
bool isPwshCore = Inputs.TryGetValue("pwsh", out string pwsh) && StringUtil.ConvertToBoolean(pwsh);
309309

src/Test/L0/Listener/AgentL0.cs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
using Pipelines = Microsoft.TeamFoundation.DistributedTask.Pipelines;
1515
using Microsoft.VisualStudio.Services.Agent.Util;
1616
using Microsoft.VisualStudio.Services.Agent.Listener.Telemetry;
17+
using Agent.Listener.Configuration;
1718

1819
namespace Microsoft.VisualStudio.Services.Agent.Tests.Listener
1920
{
@@ -31,6 +32,7 @@ public sealed class AgentL0
3132
private Mock<IAgentCertificateManager> _cert;
3233
private Mock<ISelfUpdater> _updater;
3334
private Mock<IAgenetListenerTelemetryPublisher> _listenerTelemetryPublisher;
35+
private Mock<IFeatureFlagProvider> _featureFlagProvider;
3436

3537
public AgentL0()
3638
{
@@ -46,6 +48,7 @@ public AgentL0()
4648
_cert = new Mock<IAgentCertificateManager>();
4749
_updater = new Mock<ISelfUpdater>();
4850
_listenerTelemetryPublisher = new Mock<IAgenetListenerTelemetryPublisher>();
51+
_featureFlagProvider = new Mock<IFeatureFlagProvider>();
4952
}
5053

5154
private AgentJobRequestMessage CreateJobRequestMessage(string jobName)
@@ -85,6 +88,7 @@ public async void TestRunAsync()
8588
hc.SetSingleton<IAgentCertificateManager>(_cert.Object);
8689
hc.SetSingleton<IConfigurationStore>(_configStore.Object);
8790
hc.SetSingleton<IAgenetListenerTelemetryPublisher>(_listenerTelemetryPublisher.Object);
91+
hc.SetSingleton<IFeatureFlagProvider>(_featureFlagProvider.Object);
8892

8993
agent.Initialize(hc);
9094
var settings = new AgentSettings
@@ -199,6 +203,7 @@ public async void TestExecuteCommandForRunAsService(string[] args, bool configur
199203
hc.SetSingleton<IAgentCertificateManager>(_cert.Object);
200204
hc.SetSingleton<IConfigurationStore>(_configStore.Object);
201205
hc.SetSingleton<IAgenetListenerTelemetryPublisher>(_listenerTelemetryPublisher.Object);
206+
hc.SetSingleton<IFeatureFlagProvider>(_featureFlagProvider.Object);
202207
var command = new CommandSettings(hc, args);
203208

204209
_configurationManager.Setup(x => x.IsConfigured()).Returns(true);
@@ -233,6 +238,7 @@ public async void TestMachineProvisionerCLI()
233238
hc.SetSingleton<IAgentCertificateManager>(_cert.Object);
234239
hc.SetSingleton<IConfigurationStore>(_configStore.Object);
235240
hc.SetSingleton<IAgenetListenerTelemetryPublisher>(_listenerTelemetryPublisher.Object);
241+
hc.SetSingleton<IFeatureFlagProvider>(_featureFlagProvider.Object);
236242

237243
var command = new CommandSettings(hc, new[] { "run" });
238244

@@ -270,6 +276,7 @@ public async void TestMachineProvisionerCLICompat()
270276
hc.SetSingleton<IAgentCertificateManager>(_cert.Object);
271277
hc.SetSingleton<IConfigurationStore>(_configStore.Object);
272278
hc.SetSingleton<IAgenetListenerTelemetryPublisher>(_listenerTelemetryPublisher.Object);
279+
hc.SetSingleton<IFeatureFlagProvider>(_featureFlagProvider.Object);
273280

274281
var command = new CommandSettings(hc, new string[] { });
275282

@@ -309,6 +316,7 @@ public async void TestRunOnce()
309316
hc.SetSingleton<IAgentCertificateManager>(_cert.Object);
310317
hc.SetSingleton<IConfigurationStore>(_configStore.Object);
311318
hc.SetSingleton<IAgenetListenerTelemetryPublisher>(_listenerTelemetryPublisher.Object);
319+
hc.SetSingleton<IFeatureFlagProvider>(_featureFlagProvider.Object);
312320

313321
agent.Initialize(hc);
314322
var settings = new AgentSettings
@@ -407,6 +415,7 @@ public async void TestRunOnceOnlyTakeOneJobMessage()
407415
hc.SetSingleton<IAgentCertificateManager>(_cert.Object);
408416
hc.SetSingleton<IConfigurationStore>(_configStore.Object);
409417
hc.SetSingleton<IAgenetListenerTelemetryPublisher>(_listenerTelemetryPublisher.Object);
418+
hc.SetSingleton<IFeatureFlagProvider>(_featureFlagProvider.Object);
410419

411420
agent.Initialize(hc);
412421
var settings = new AgentSettings
@@ -513,6 +522,7 @@ public async void TestRunOnceHandleUpdateMessage()
513522
hc.SetSingleton<IConfigurationStore>(_configStore.Object);
514523
hc.SetSingleton<ISelfUpdater>(_updater.Object);
515524
hc.SetSingleton<IAgenetListenerTelemetryPublisher>(_listenerTelemetryPublisher.Object);
525+
hc.SetSingleton<IFeatureFlagProvider>(_featureFlagProvider.Object);
516526

517527
agent.Initialize(hc);
518528
var settings = new AgentSettings
@@ -605,7 +615,7 @@ public async void TestInfoArgumentsCLI(string arg, int expected = Constants.Agen
605615
hc.SetSingleton<IAgentCertificateManager>(_cert.Object);
606616
hc.SetSingleton<IConfigurationStore>(_configStore.Object);
607617
hc.SetSingleton<IAgenetListenerTelemetryPublisher>(_listenerTelemetryPublisher.Object);
608-
618+
hc.SetSingleton<IFeatureFlagProvider>(_featureFlagProvider.Object);
609619
var command = new CommandSettings(hc, new[] { arg });
610620

611621
_configurationManager.Setup(x => x.IsConfigured()).
@@ -733,6 +743,7 @@ public async void TestMetadataUpdate()
733743
hc.SetSingleton<IAgentCertificateManager>(_cert.Object);
734744
hc.SetSingleton<IConfigurationStore>(_configStore.Object);
735745
hc.SetSingleton<IAgenetListenerTelemetryPublisher>(_listenerTelemetryPublisher.Object);
746+
hc.SetSingleton<IFeatureFlagProvider>(_featureFlagProvider.Object);
736747

737748
agent.Initialize(hc);
738749
var settings = new AgentSettings

0 commit comments

Comments
 (0)