private void DeploySolution(FarmModelHost modelHost, FarmSolutionDefinition definition) { var farm = modelHost.HostFarm; var existringSolution = FindExistingSolution(modelHost, definition); InvokeOnModelEvent(this, new ModelEventArgs { CurrentModelNode = null, Model = null, EventType = ModelEventType.OnProvisioning, Object = existringSolution, ObjectType = typeof(SPSolution), ObjectDefinition = definition, ModelHost = modelHost }); var tmpWspDirectory = string.Format("{0}_{1}", Path.GetFileNameWithoutExtension(definition.FileName), Guid.NewGuid().ToString("N")); var tmpWspDirectoryPath = Path.Combine(Path.GetTempPath(), tmpWspDirectory); Directory.CreateDirectory(tmpWspDirectoryPath); var tmpWspFilPath = Path.Combine(tmpWspDirectoryPath, definition.FileName); File.WriteAllBytes(tmpWspFilPath, definition.Content); if (existringSolution == null) { TraceService.Information((int)LogEventId.ModelProvisionProcessingNewObject, "Processing new farm solution"); existringSolution = farm.Solutions.Add(tmpWspFilPath, (uint)definition.LCID); } else { TraceService.Information((int)LogEventId.ModelProvisionProcessingExistingObject, "Upgrading existing farm solution"); if (existringSolution.Deployed) { existringSolution.Upgrade(tmpWspFilPath); } else { // TODO // https://github.com/SubPointSolutions/spmeta2/issues/324 } } InvokeOnModelEvent(this, new ModelEventArgs { CurrentModelNode = null, Model = null, EventType = ModelEventType.OnProvisioned, Object = existringSolution, ObjectType = typeof(SPSolution), ObjectDefinition = definition, ModelHost = modelHost }); }
protected SPSolution FindExistingSolution(FarmModelHost modelHost, FarmSolutionDefinition definition) { TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Resolving farm solution by SolutionId: [{0}] and Name: [{1}]", new object[] { definition.SolutionId, definition.FileName }); var farm = modelHost.HostFarm; return farm.Solutions.FirstOrDefault(s => s.Name.ToUpper() == definition.FileName.ToUpper() || definition.SolutionId != Guid.Empty && s.SolutionId == definition.SolutionId); }
public static ModelNode AddHostFarmSolution(this ModelNode model, FarmSolutionDefinition definition) { return AddHostFarmSolution(model, definition, null); }
public static ModelNode AddHostFarmSolution(this ModelNode model, FarmSolutionDefinition definition, Action<ModelNode> action) { return model.AddDefinitionNodeWithOptions(definition, action, ModelNodeOptions.New().NoSelfProcessing()); }
public static ModelNode AddFarmSolution(this ModelNode model, FarmSolutionDefinition definition, Action<ModelNode> action) { return model.AddDefinitionNode(definition, action); }