private static async Task UploadAppToLocalPath(this IServiceFabricClient Client, string imageStore, string imageStorep, ServiceFabricApplicationSpec app) { var name = app.Manifest.ApplicationTypeName + "." + app.Manifest.ApplicationTypeVersion; try { Symlink.CreateSymbolicLink(Path.Combine(imageStorep, name), app.PackagePath, SymbolicLink.Directory); await Client.ApplicationTypes.ProvisionApplicationTypeAsync(new ProvisionApplicationTypeDescription(name), 240, CancellationToken.None); Symlink.DeleteIfExists(Path.Combine(imageStorep, name)); } catch (FileNotFoundException) { Symlink.DeleteIfExists(Path.Combine(imageStorep, name)); await Client.UploadApp(imageStore, app); } }
private static async Task UploadApp(this IServiceFabricClient Client, string imageStore, ServiceFabricApplicationSpec app) { var name = app.Manifest.ApplicationTypeName + "." + app.Manifest.ApplicationTypeVersion; await Client.ImageStore.UploadApplicationPackageAsync(Path.GetFullPath(app.PackagePath), true, name); await Client.ApplicationTypes.ProvisionApplicationTypeAsync(new ProvisionApplicationTypeDescription(name), 240); if (imageStore == "fabric:ImageStore") { await Client.ImageStore.DeleteImageStoreContentAsync(name); } //else //{ // Directory.Delete(Path.Combine(new Uri(imageStore).LocalPath, name), true); //} }
public static async Task DeployServiceFabricApp(this IServiceFabricClient Client, ServiceFabricApplicationSpec app, ILogger Logger = null) { var serverAppVersions = await Client.Applications.GetApplicationInfoListAsync(); var deployed = serverAppVersions.Data.FirstOrDefault(sa => sa.Name == "fabric:/" + app.Name); if (deployed != null) { if (deployed.TypeVersion == app.Version) { Logger?.LogInfo($"{app.Name} version {app.Version} is already deployed"); return; } var upgradeDescription = new ApplicationUpgradeDescription("fabric:/" + app.Name, app.Version, UpgradeKind.Rolling, app.Parameters, UpgradeMode.Monitored, 15); Logger?.LogInfo($"Upgrading app {upgradeDescription.Name} to version {upgradeDescription.TargetApplicationTypeVersion}"); await Client.Applications.StartApplicationUpgradeAsync(app.Name, upgradeDescription); } else { var appDescription = new ApplicationDescription("fabric:/" + app.Name, app.Manifest.ApplicationTypeName, app.Manifest.ApplicationTypeVersion, app.Parameters); Logger?.LogInfo($"Creating app {appDescription.Name} with type {appDescription.TypeName} version {appDescription.TypeVersion}"); Logger?.LogVerbose($"With parameters"); if (appDescription.Parameters != null) { foreach (var parameter in appDescription.Parameters.Keys) { Logger?.LogVerbose($"{parameter} = {appDescription.Parameters[(string)parameter]}"); } } await Client.Applications.CreateApplicationAsync(appDescription); } }