Skip to content

Commit

Permalink
Fix the LegacyClientAndTentacleBuilder not using a custom Machine con…
Browse files Browse the repository at this point in the history
…figuration home directory
  • Loading branch information
nathanwoctopusdeploy committed Dec 20, 2023
1 parent bf69ed8 commit a4bb3e9
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 17 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
Expand All @@ -15,7 +14,6 @@
using Octopus.Tentacle.Tests.Integration.Support.TentacleFetchers;
using Octopus.Tentacle.Tests.Integration.Util;
using Octopus.Tentacle.Tests.Integration.Util.TcpTentacleHelpers;
using Octopus.Tentacle.Variables;
using Octopus.TestPortForwarder;
using Serilog;

Expand Down Expand Up @@ -209,15 +207,18 @@ public async Task<ClientAndTentacle> Build(CancellationToken cancellationToken)
var pollingTentacleBuilder = new PollingTentacleBuilder(portForwarder?.ListeningPort ?? serverListeningPort, Certificates.ServerPublicThumbprint)
.WithTentacleExe(tentacleExe);

if (!useCustomMachineConfigurationHomeDirectory)
{
pollingTentacleBuilder.UseDefaultMachineConfigurationHomeDirectory();
}

tentacleBuilderAction?.Invoke(pollingTentacleBuilder);

if (installAsAService)
{
pollingTentacleBuilder.InstallAsAService();
}

ConfigureTentacleMachineConfigurationHomeDirectory(pollingTentacleBuilder, temporaryDirectory);

runningTentacle = await pollingTentacleBuilder.Build(logger, cancellationToken);

tentacleEndPoint = new ServiceEndPoint(runningTentacle.ServiceUri, runningTentacle.Thumbprint, serverHalibutRuntime.TimeoutsAndLimits);
Expand All @@ -227,15 +228,18 @@ public async Task<ClientAndTentacle> Build(CancellationToken cancellationToken)
var listeningTentacleBuilder = new ListeningTentacleBuilder(Certificates.ServerPublicThumbprint)
.WithTentacleExe(tentacleExe);

if (!useCustomMachineConfigurationHomeDirectory)
{
listeningTentacleBuilder.UseDefaultMachineConfigurationHomeDirectory();
}

tentacleBuilderAction?.Invoke(listeningTentacleBuilder);

if (installAsAService)
{
listeningTentacleBuilder.InstallAsAService();
}

ConfigureTentacleMachineConfigurationHomeDirectory(listeningTentacleBuilder, temporaryDirectory);

runningTentacle = await listeningTentacleBuilder.Build(logger, cancellationToken);

portForwarder = BuildPortForwarder(runningTentacle.ServiceUri.Port, null);
Expand Down Expand Up @@ -274,15 +278,5 @@ public async Task<ClientAndTentacle> Build(CancellationToken cancellationToken)

return new ClientAndTentacle(server.ServerHalibutRuntime, tentacleEndPoint, server, portForwarder, runningTentacle, tentacleClient, temporaryDirectory, retrySettings, logger);
}

void ConfigureTentacleMachineConfigurationHomeDirectory(ITentacleBuilder tentacleBuilder, TemporaryDirectory temporaryDirectory)
{
if (useCustomMachineConfigurationHomeDirectory)
{
var directory = Path.Combine(temporaryDirectory.DirectoryPath, "Octopus", "Tentacle", "Instances");

tentacleBuilder.WithRunTentacleEnvironmentVariable(EnvironmentVariables.TentacleMachineConfigurationHomeDirectory, directory);
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ internal async Task<RunningTentacle> Build(ILogger log, CancellationToken cancel
var logger = log.ForContext<ListeningTentacleBuilder>();
logger.Information($"Tentacle.exe location: {tentacleExe}");

ConfigureTentacleMachineConfigurationHomeDirectory();
await CreateInstance(tentacleExe, configFilePath, instanceName, HomeDirectory, logger, cancellationToken);
await AddCertificateToTentacle(tentacleExe, instanceName, CertificatePfxPath, HomeDirectory, logger, cancellationToken);
var applicationDirectory = Path.Combine(HomeDirectory.DirectoryPath, "appdir");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
using Octopus.Tentacle.CommonTestUtils;
using Octopus.Tentacle.Configuration;
using Octopus.Tentacle.Tests.Integration.Util;
using Octopus.Tentacle.Variables;
using Serilog;

namespace Octopus.Tentacle.Tests.Integration.Support
Expand All @@ -33,6 +34,7 @@ public abstract class TentacleBuilder<T> : ITentacleBuilder
protected string CertificatePfxPath = Certificates.TentaclePfxPath;
protected string TentacleThumbprint = Certificates.TentaclePublicThumbprint;
bool installAsService = false;
bool useCustomMachineConfigurationHomeDirectory = true;

static readonly Regex ListeningPortRegex = new (@"listen:\/\/.+:(\d+)\/");
readonly Dictionary<string, string> runTentacleEnvironmentVariables = new();
Expand All @@ -47,7 +49,7 @@ protected TemporaryDirectory HomeDirectory
return homeDirectory;
}
}

public ITentacleBuilder WithHomeDirectory(TemporaryDirectory homeDirectory)
{
this.homeDirectory = homeDirectory;
Expand Down Expand Up @@ -92,6 +94,13 @@ public ITentacleBuilder InstallAsAService()
return this;
}

public ITentacleBuilder UseDefaultMachineConfigurationHomeDirectory()
{
useCustomMachineConfigurationHomeDirectory = false;

return this;
}

protected async Task<RunningTentacle> StartTentacle(
Uri? serviceUri,
string tentacleExe,
Expand Down Expand Up @@ -265,6 +274,16 @@ await RunCommandOutOfProcess(
return (runningTentacle, serviceUri);
}

protected void ConfigureTentacleMachineConfigurationHomeDirectory()
{
if (useCustomMachineConfigurationHomeDirectory)
{
var directory = Path.Combine(HomeDirectory.DirectoryPath, "Octopus", "Tentacle", "Instances");

WithRunTentacleEnvironmentVariable(EnvironmentVariables.TentacleMachineConfigurationHomeDirectory, directory);
}
}

async Task SetEnvironmentVariablesForService(string instanceName, TemporaryDirectory tempDirectory, ILogger logger, CancellationToken cancellationToken)
{
if (PlatformDetection.IsRunningOnWindows)
Expand Down

0 comments on commit a4bb3e9

Please sign in to comment.