diff --git a/tilework.core/Interfaces/Core/IContainerManager.cs b/tilework.core/Interfaces/Core/IContainerManager.cs index d9219fb..f6cabee 100644 --- a/tilework.core/Interfaces/Core/IContainerManager.cs +++ b/tilework.core/Interfaces/Core/IContainerManager.cs @@ -13,10 +13,12 @@ public interface IContainerManager public Task CreateNetwork(string name); public Task DeleteNetwork(string id); - public Task GetContainerAddress(string id); + public Task GetContainerAddress(string id); + public Task GetContainerAddress(string id, string networkName); public Task> GetContainerPorts(string id); - public Task> ListContainers(string? module); + public Task> ListNativeContainers(string? module); + public Task> ListNonNativeContainers(); public Task CreateContainer(string name, string image, string module, List? ports); public Task DeleteContainer(string id); public Task CopyFileToContainer(string id, string localPath, string containerPath); @@ -26,4 +28,4 @@ public interface IContainerManager public Task KillContainer(string id, UnixSignal signal); public Task ExecuteContainerCommand(string id, string command); -} \ No newline at end of file +} diff --git a/tilework.core/Providers/MonitoringProviders/Collectd/CollectdDataCollector.cs b/tilework.core/Providers/MonitoringProviders/Collectd/CollectdDataCollector.cs index 14b8acd..4e7d5e9 100644 --- a/tilework.core/Providers/MonitoringProviders/Collectd/CollectdDataCollector.cs +++ b/tilework.core/Providers/MonitoringProviders/Collectd/CollectdDataCollector.cs @@ -35,7 +35,7 @@ public CollectdConfigurator(IOptions settings, private async Task GetContainer() { - var containers = await _containerManager.ListContainers("monitoring.tile"); + var containers = await _containerManager.ListNativeContainers("monitoring.tile"); return containers.FirstOrDefault(c => c.Name == ContainerName); } diff --git a/tilework.core/Providers/Shared/BaseContainerProvider.cs b/tilework.core/Providers/Shared/BaseContainerProvider.cs index 00fffd9..da92873 100644 --- a/tilework.core/Providers/Shared/BaseContainerProvider.cs +++ b/tilework.core/Providers/Shared/BaseContainerProvider.cs @@ -51,7 +51,7 @@ private bool IsFullName(string name) protected async Task> GetContainers() { - return await _containerManager.ListContainers(_fullModule); + return await _containerManager.ListNativeContainers(_fullModule); } protected async Task GetContainer(string name) diff --git a/tilework.core/Services/CertificateManagement/AcmeVerificationService.cs b/tilework.core/Services/CertificateManagement/AcmeVerificationService.cs index ec9aceb..852d11d 100644 --- a/tilework.core/Services/CertificateManagement/AcmeVerificationService.cs +++ b/tilework.core/Services/CertificateManagement/AcmeVerificationService.cs @@ -66,7 +66,7 @@ await _containerManager.CopyFileToContainer( private async Task DeleteContainer(string name) { - var containers = await _containerManager.ListContainers("certificatemanagement.tile"); + var containers = await _containerManager.ListNativeContainers("certificatemanagement.tile"); var container = containers.FirstOrDefault(cnt => cnt.Name == $"certificatemanagement.acmeverification.{name}"); if (container == null) @@ -222,7 +222,7 @@ public async Task StopVerification(string id) public async Task StopAllVerifications() { - var containers = (await _containerManager.ListContainers("certificatemanagement.tile")) + var containers = (await _containerManager.ListNativeContainers("certificatemanagement.tile")) .Where(cnt => cnt.Name.StartsWith("AcmeVerification-")) .ToList(); diff --git a/tilework.core/Services/Core/DockerServiceManager.cs b/tilework.core/Services/Core/DockerServiceManager.cs index 45ffb94..1d52d76 100644 --- a/tilework.core/Services/Core/DockerServiceManager.cs +++ b/tilework.core/Services/Core/DockerServiceManager.cs @@ -134,16 +134,17 @@ public async Task DeleteNetwork(string id) public async Task GetContainerAddress(string id) { + return await GetContainerAddress(id, defaultNetworkName); + } + public async Task GetContainerAddress(string id, string networkName) + { var info = await _client.Containers.InspectContainerAsync(id); if (info.NetworkSettings.Networks.Count == 0) return null; - if (info.NetworkSettings.Networks.Count > 1) - _logger.LogWarning("Container is attached on multiple networks. Getting address on first"); - - var network = info.NetworkSettings.Networks.First(); + var network = info.NetworkSettings.Networks.First(n => n.Key == networkName); return IPAddress.Parse(network.Value.IPAddress); } @@ -201,7 +202,7 @@ public async Task> GetContainerPorts(string id) } - public async Task> ListContainers(string? module = null) + public async Task> ListNativeContainers(string? module = null) { var labelFilters = new Dictionary { @@ -229,6 +230,27 @@ public async Task> ListContainers(string? module = null) }).ToList(); } + public async Task> ListNonNativeContainers() + { + var containers = await _client.Containers.ListContainersAsync( + new ContainersListParameters() + { + All = true + }); + + var non_native = containers.Where(cnt => + cnt.Labels == null || + !cnt.Labels.TryGetValue("dev.tilework.managed", out var managed) || + !string.Equals(managed, "true", StringComparison.Ordinal)); + + return non_native.Select(cnt => new Container + { + Id = cnt.ID, + Name = cnt.Names[0].TrimStart('/'), + State = ParseState(cnt.State) + }).ToList(); + } + private async Task ImageExists(string image) { var images = await _client.Images.ListImagesAsync(new ImagesListParameters { All = true }); @@ -307,7 +329,7 @@ await _client.Images.CreateImageAsync( } }); - return (await ListContainers()).First(cnt => cnt.Id == response.ID); + return (await ListNativeContainers()).First(cnt => cnt.Id == response.ID); } public async Task DeleteContainer(string id)