public void GetValue_SingleDocument_ArrayPath(string path, string expected) { var x = @" instances: - field: abc image: tag: develop-2892 - field: def image: tag: develop-123 - field: xyz image: tag: develop-10"; var byteArray = Encoding.UTF8.GetBytes(x); var inStream = new MemoryStream(byteArray); var yamlUtilities = new YamlUtilities(); var yaml = new YamlStream(); yamlUtilities.ReadYamlStream(yaml, inStream); var doc = yaml.Documents.First(); var readValue = yamlUtilities.ExtractValueFromDoc(path, doc); readValue.Should().Be(expected); }
private IEnumerable <DeploymentManifestInstanceInfo> LoadDeploymentManifestInstanceInfos( IEnumerable <ApplicationImage> applicationImages, string instanceName, IEnumerable <FileInfo> files ) { var yamlUtilities = new YamlUtilities(); var imageToFilenameMap = new Dictionary <ApplicationImage, FileInfo>(); var result = new List <DeploymentManifestInstanceInfo>(); var fileInfos = files as FileInfo[] ?? files.ToArray(); foreach (var file in fileInfos) { var yaml = new YamlStream(); yamlUtilities.ReadYamlStream(yaml, file.FullName); foreach (var doc in yaml.Documents) { foreach (var image in applicationImages) { var tagInManifest = yamlUtilities.ExtractValueFromDoc(image.TagProperty.Path, doc); if (tagInManifest == null) { continue; } if (imageToFilenameMap.ContainsKey(image)) { // TODO: handle situation where multiple files define the same image tag (ERROR and warn user) } imageToFilenameMap[image] = file; result.Add( new DeploymentManifestInstanceInfo( instanceName, image, tagInManifest, file, fileInfos, ApplicationImageInstanceType.Primary, new ApplicationImageInstanceSource(ApplicationImageInstanceSourceType.Manual, 0) ) ); } } } return(result); }
public void GetValue_SingleDocument_MapPath(string path, string expected) { var x = @" cat: image1: tag: develop-2892 image2: tag: develop-123"; var byteArray = Encoding.UTF8.GetBytes(x); var inStream = new MemoryStream(byteArray); var yamlUtilities = new YamlUtilities(); var yaml = new YamlStream(); yamlUtilities.ReadYamlStream(yaml, inStream); var doc = yaml.Documents.First(); var readValue = yamlUtilities.ExtractValueFromDoc(path, doc); readValue.Should().Be(expected); }
private async Task <List <FileInfo> > InternalCreateRelease(RawDeploymentManifest manifest, string instance) { // the Raw Deployment Manifest type builds instances by cloning the original files and executes modifications on them. var copyOperations = new List <(FileInfo source, FileInfo dest)>(); var deploymentManifestSourcePath = manifest.GetFullPath().FullName; foreach (var file in manifest.Files) { var sourceFilePath = Path.Combine(deploymentManifestSourcePath, file); var sourceFileInfo = new FileInfo(sourceFilePath); var targetFilename = $"{Path.GetFileNameWithoutExtension(sourceFileInfo.Name)}-{instance}{sourceFileInfo.Extension}"; var targetFilePath = Path.Combine(deploymentManifestSourcePath, targetFilename); var targetFileInfo = new FileInfo(targetFilePath); copyOperations.Add((sourceFileInfo, targetFileInfo)); } copyOperations.ForEach(x => x.source.CopyTo(x.dest.FullName)); // prepare to apply required modifications var yamlUtilities = new YamlUtilities(); // TODO: load replacement entires from configuration var replacementEntries = new Dictionary <string, string>() { { "ingress.hosts[0].host", "{instanceid}.{original}" } }; var modifiedFiles = new List <FileInfo>(); foreach (var file in copyOperations.Select(x => x.dest)) { var modified = false; var yamlStream = new YamlStream(); { await using var stream = file.Open(FileMode.OpenOrCreate, FileAccess.Read, FileShare.None); yamlUtilities.ReadYamlStream(yamlStream, stream); foreach (var item in replacementEntries) { var currentValue = yamlUtilities.ExtractValueFromDoc(item.Key, yamlStream.Documents.First()); if (currentValue == null) { continue; } var replacementValue = item.Value; replacementValue = replacementValue.Replace("{original}", currentValue); replacementValue = replacementValue.Replace("{instanceid}", instance); yamlUtilities.SetValueInDoc(item.Key, yamlStream.Documents.First(), replacementValue); modified = true; } } if (modified) { await using var stream = file.Open(FileMode.Create, FileAccess.Write, FileShare.None); yamlUtilities.WriteYamlStream(yamlStream, stream); modifiedFiles.Add(file); } } return(modifiedFiles); }