Beispiel #1
0
        private bool IsDependencyInList(string fullName, ModuleManifestDependency dependency, IEnumerable <DependencyRecord> modules)
        {
            var deployed = modules.FirstOrDefault(module => module.Location.ModuleFullName == dependency.ModuleFullName);

            if (deployed == null)
            {
                return(false);
            }
            var deployedOwner = (deployed.Owner == null)
                ? "existing module"
                : $"module '{deployed.Owner}'";

            // confirm that the dependency version is in a valid range
            var deployedVersion = deployed.Location.ModuleVersion;

            if ((dependency.MaxVersion != null) && (deployedVersion > dependency.MaxVersion))
            {
                LogError($"version conflict for module '{dependency.ModuleFullName}': module '{fullName}' requires max version v{dependency.MaxVersion}, but {deployedOwner} uses v{deployedVersion})");
            }
            if ((dependency.MinVersion != null) && (deployedVersion < dependency.MinVersion))
            {
                LogError($"version conflict for module '{dependency.ModuleFullName}': module '{fullName}' requires min version v{dependency.MinVersion}, but {deployedOwner} uses v{deployedVersion})");
            }
            return(true);
        }
Beispiel #2
0
        private async Task <ModuleLocation> FindExistingDependencyAsync(ModuleManifestDependency dependency)
        {
            try {
                var describe = await Settings.CfnClient.DescribeStacksAsync(new DescribeStacksRequest {
                    StackName = ToStackName(dependency.ModuleFullName)
                });

                var deployedOutputs = describe.Stacks.FirstOrDefault()?.Outputs;
                var deployedInfo    = deployedOutputs?.FirstOrDefault(output => output.OutputKey == "Module")?.OutputValue;
                var success         = deployedInfo.TryParseModuleDescriptor(
                    out string deployedOwner,
                    out string deployedName,
                    out VersionInfo deployedVersion,
                    out string deployedBucketName
                    );
                var deployed = new ModuleLocation(deployedOwner, deployedName, deployedVersion, deployedBucketName);
                if (!success)
                {
                    LogError($"unable to retrieve information of the deployed dependent module");
                    return(deployed);
                }

                // confirm that the module name matches
                if (deployed.ModuleFullName != dependency.ModuleFullName)
                {
                    LogError($"deployed dependent module name ({deployed.ModuleFullName}) does not match {dependency.ModuleFullName}");
                    return(deployed);
                }

                // confirm that the module version is in a valid range
                if ((dependency.MaxVersion != null) && (deployedVersion > dependency.MaxVersion))
                {
                    LogError($"deployed dependent module version (v{deployedVersion}) is newer than max version constraint v{dependency.MaxVersion}");
                    return(deployed);
                }
                if ((dependency.MinVersion != null) && (deployedVersion < dependency.MinVersion))
                {
                    LogError($"deployed dependent module version (v{deployedVersion}) is older than min version constraint v{dependency.MinVersion}");
                    return(deployed);
                }
                return(deployed);
            } catch (AmazonCloudFormationException) {
                // stack doesn't exist
                return(null);
            }
        }