From 3118e62f3a57a3eb7af137bc62afc4f75f3d499d Mon Sep 17 00:00:00 2001 From: "nicolas.dorier" Date: Tue, 21 Jan 2020 18:58:55 +0900 Subject: [PATCH] Rewrite docker-compose-generator code to make sure only processed fragments are integrated --- .../src/DockerComposeDefinition.cs | 37 +++++++++++-------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/docker-compose-generator/src/DockerComposeDefinition.cs b/docker-compose-generator/src/DockerComposeDefinition.cs index b42e1bc..8b866b5 100644 --- a/docker-compose-generator/src/DockerComposeDefinition.cs +++ b/docker-compose-generator/src/DockerComposeDefinition.cs @@ -50,9 +50,6 @@ namespace DockerGenerator var recommendedFragments = new HashSet(); var processedFragments = new HashSet(); var unprocessedFragments = new HashSet(); - var services = new List>(); - var volumes = new List>(); - var networks = new List>(); var exclusives = new List<(FragmentName FragmentName, string Exclusivity)>(); var incompatibles = new List<(FragmentName FragmentName, string Exclusivity)>(); @@ -74,19 +71,6 @@ namespace DockerGenerator { var doc = o.Item2; var fragment = o.f; - if (doc.Children.ContainsKey("services") && doc.Children["services"] is YamlMappingNode fragmentServicesRoot) - { - services.AddRange(fragmentServicesRoot.Children); - } - - if (doc.Children.ContainsKey("volumes") && doc.Children["volumes"] is YamlMappingNode fragmentVolumesRoot) - { - volumes.AddRange(fragmentVolumesRoot.Children); - } - if (doc.Children.ContainsKey("networks") && doc.Children["networks"] is YamlMappingNode fragmentNetworksRoot) - { - networks.AddRange(fragmentNetworksRoot.Children); - } if (doc.Children.ContainsKey("exclusive") && doc.Children["exclusive"] is YamlSequenceNode fragmentExclusiveRoot) { foreach (var node in fragmentExclusiveRoot) @@ -154,6 +138,27 @@ namespace DockerGenerator ConsoleUtils.WriteLine($"\t{fragment} not found in {fragmentPath}, ignoring...", ConsoleColor.Yellow); } + var services = new List>(); + var volumes = new List>(); + var networks = new List>(); + foreach (var o in processedFragments.Select(f => (f, ParseDocument(f))).ToList()) + { + var doc = o.Item2; + var fragment = o.f; + if (doc.Children.ContainsKey("services") && doc.Children["services"] is YamlMappingNode fragmentServicesRoot) + { + services.AddRange(fragmentServicesRoot.Children); + } + if (doc.Children.ContainsKey("volumes") && doc.Children["volumes"] is YamlMappingNode fragmentVolumesRoot) + { + volumes.AddRange(fragmentVolumesRoot.Children); + } + if (doc.Children.ContainsKey("networks") && doc.Children["networks"] is YamlMappingNode fragmentNetworksRoot) + { + networks.AddRange(fragmentNetworksRoot.Children); + } + } + YamlMappingNode output = new YamlMappingNode(); output.Add("version", new YamlScalarNode("3") { Style = YamlDotNet.Core.ScalarStyle.DoubleQuoted }); output.Add("services", new YamlMappingNode(Merge(services)));