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 (#753)

Fix the LegacyClientAndTentacleBuilder not using a custom Machine configuration home directory
  • Loading branch information
nathanwoctopusdeploy authored Dec 20, 2023
1 parent 325fb78 commit 0adb39d
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 19 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 All @@ -39,7 +37,7 @@ public class ClientAndTentacleBuilder
Action<TentacleClientOptions>? configureClientOptions;
TcpConnectionUtilities? tcpConnectionUtilities;
bool installAsAService = false;
bool useCustomMachineConfigurationHomeDirectory = true;
bool useDefaultMachineConfigurationHomeDirectory = false;

public ClientAndTentacleBuilder(TentacleType tentacleType)
{
Expand Down Expand Up @@ -154,7 +152,7 @@ public ClientAndTentacleBuilder InstallAsAService()

public ClientAndTentacleBuilder UseDefaultMachineConfigurationHomeDirectory()
{
useCustomMachineConfigurationHomeDirectory = false;
useDefaultMachineConfigurationHomeDirectory = true;

return this;
}
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 (useDefaultMachineConfigurationHomeDirectory)
{
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 (useDefaultMachineConfigurationHomeDirectory)
{
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 @@ -30,6 +30,7 @@ internal async Task<RunningTentacle> Build(ILogger log, CancellationToken cancel
var logger = log.ForContext<PollingTentacleBuilder>();
logger.Information($"Tentacle.exe location: {tentacleExe}");

ConfigureTentacleMachineConfigurationHomeDirectory();
await CreateInstance(tentacleExe, configFilePath, instanceName, HomeDirectory, logger, cancellationToken);
var applicationDirectory = Path.Combine(HomeDirectory.DirectoryPath, "appdir");
ConfigureTentacleToPollOctopusServer(configFilePath, subscriptionId, applicationDirectory);
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 useDefaultMachineConfigurationHomeDirectory = false;

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()
{
useDefaultMachineConfigurationHomeDirectory = true;

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 (!useDefaultMachineConfigurationHomeDirectory)
{
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 0adb39d

Please sign in to comment.