Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix the LegacyClientAndTentacleBuilder not using a custom Machine configuration home directory #753

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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