Ejemplo n.º 1
0
        public void LoadParameters()
        {
            Manifest = FabricSerializers.AppManifestFromFile(Path.Combine(PackagePath, "ApplicationManifest.xml"));
            Version  = Manifest.ApplicationTypeVersion;
            var parameters = new Dictionary <string, string>();

            if (Manifest.Parameters != null)
            {
                foreach (var p in Manifest.Parameters)
                {
                    parameters[p.Name] = p.DefaultValue;
                }
            }

            if (!string.IsNullOrWhiteSpace(ParameterFilePath))
            {
                var x = XElement.Load(ParameterFilePath);
                foreach (var p in x.Element(x.Name.Namespace + "Parameters").Elements(x.Name.Namespace + "Parameter"))
                {
                    parameters[p.Attribute("Name").Value] = p.Attribute("Value").Value;
                }
            }

            if (Parameters != null)
            {
                foreach (var p in parameters.Keys.ToList())
                {
                    if (Parameters.ContainsKey(p))
                    {
                        parameters[p] = Parameters[p];
                    }
                }
            }

            Parameters = parameters;
        }
        public static async Task <bool> CreateDiffPackage(this IServiceFabricClient Client, string packagePath, ILogger Logger = null)
        {
            var localAppManifest = FabricSerializers.AppManifestFromFile(Path.Combine(packagePath, "ApplicationManifest.xml"));
            var appTypes         = await Client.ApplicationTypes.GetApplicationTypeInfoListAsync();

            var appManifestTasks = appTypes.Data.Where(type => type.Name == localAppManifest.ApplicationTypeName).Select(type => Client.ApplicationTypes.GetApplicationManifestAsync(type.Name, type.Version));
            await Task.WhenAll(appManifestTasks);

            var    serverAppManifests = appManifestTasks.Select(task => FabricSerializers.AppManifestFromString(task.Result.Manifest)).ToList();
            string pkgPAth            = null;

            if (serverAppManifests.Any(serverAppManifest => serverAppManifest.ApplicationTypeVersion == localAppManifest.ApplicationTypeVersion))
            {
                Logger?.LogInfo($"Application {localAppManifest.ApplicationTypeName} {localAppManifest.ApplicationTypeVersion} is already provisioned");
                return(false);
            }

            foreach (var serverAppManifest in serverAppManifests)
            {
                foreach (var serviceImport in serverAppManifest.ServiceManifestImport)
                {
                    var localService = localAppManifest.ServiceManifestImport.FirstOrDefault(s => s.ServiceManifestRef.ServiceManifestName == serviceImport.ServiceManifestRef.ServiceManifestName);
                    if (localService != null && localService.ServiceManifestRef.ServiceManifestVersion == serviceImport.ServiceManifestRef.ServiceManifestVersion)
                    {
                        Logger?.LogInfo($"Service {localAppManifest.ApplicationTypeName}.{localService.ServiceManifestRef.ServiceManifestName} {localService.ServiceManifestRef.ServiceManifestVersion} is already provisioned");
                        foreach (var dir in Directory.GetDirectories(Path.Combine(packagePath, serviceImport.ServiceManifestRef.ServiceManifestName)))
                        {
                            Symlink.DeleteIfExists(dir);
                        }
                    }
                    else
                    {
                        var serverServiceManifest    = FabricSerializers.ServiceManifestFromString((await Client.ServiceTypes.GetServiceManifestAsync(serverAppManifest.ApplicationTypeName, serverAppManifest.ApplicationTypeVersion, serviceImport.ServiceManifestRef.ServiceManifestName)).Manifest);
                        var localServiceManifestPath = Path.Combine(packagePath, serviceImport.ServiceManifestRef.ServiceManifestName, "ServiceManifest.xml");
                        if (!File.Exists(localServiceManifestPath))
                        {
                            continue;
                        }
                        var localServiceManifest = FabricSerializers.ServiceManifestFromFile(localServiceManifestPath);

                        // Logger?.LogInfo($"{serverAppManifest.ApplicationTypeName}.{localService.ServiceManifestRef.ServiceManifestName} {localService.ServiceManifestRef.ServiceManifestVersion} not found on server, checking packages");
                        if (serverServiceManifest.CodePackage != null && localServiceManifest.CodePackage != null)
                        {
                            foreach (var package in serverServiceManifest.CodePackage.Where(sp => localServiceManifest.CodePackage.Any(lp => lp.Name == sp.Name && lp.Version == sp.Version)))
                            {
                                pkgPAth = Path.Combine(packagePath, localService.ServiceManifestRef.ServiceManifestName, package.Name);
                                if (Directory.Exists(pkgPAth))
                                {
                                    Logger?.LogInfo($"Deleting {localAppManifest.ApplicationTypeName}.{localService.ServiceManifestRef.ServiceManifestName}.{package.Name} {package.Version}");
                                    Symlink.DeleteIfExists(pkgPAth);
                                }
                            }
                        }

                        if (serverServiceManifest.ConfigPackage != null && localServiceManifest.ConfigPackage != null)
                        {
                            foreach (var package in serverServiceManifest.ConfigPackage.Where(sp => localServiceManifest.ConfigPackage.Any(lp => lp.Name == sp.Name && lp.Version == sp.Version)))
                            {
                                pkgPAth = Path.Combine(packagePath, localService.ServiceManifestRef.ServiceManifestName, package.Name);
                                if (Directory.Exists(pkgPAth))
                                {
                                    Logger?.LogInfo($"Deleting {localAppManifest.ApplicationTypeName}.{localService.ServiceManifestRef.ServiceManifestName}.{package.Name} {package.Version}");
                                    Symlink.DeleteIfExists(pkgPAth);
                                }
                            }
                        }

                        if (serverServiceManifest.DataPackage != null && localServiceManifest.DataPackage != null)
                        {
                            foreach (var package in serverServiceManifest.DataPackage.Where(sp => localServiceManifest.DataPackage.Any(lp => lp.Name == sp.Name && lp.Version == sp.Version)))
                            {
                                pkgPAth = Path.Combine(packagePath, localService.ServiceManifestRef.ServiceManifestName, package.Name);
                                if (Directory.Exists(pkgPAth))
                                {
                                    Logger?.LogInfo($"Deleting {localAppManifest.ApplicationTypeName}.{localService.ServiceManifestRef.ServiceManifestName}.{package.Name} {package.Version}");
                                    Symlink.DeleteIfExists(pkgPAth);
                                }
                            }
                        }
                    }
                }
            }

            return(true);
        }