/// <summary> /// The update node. /// </summary> /// <param name="nodeRequests"> /// The node requests. /// </param> /// <returns> /// The <see cref="Task"/>. /// </returns> public async Task <IEnumerable <NodeDetailResult> > UpdateNode(IEnumerable <NodeRequest> nodeRequests) { var details = new List <NodeDetailResult>(); foreach (var entry in nodeRequests) { var nodeRequest = entry; var detail = await this.NodeRepository.Include(n => n.Roles).FindNodeByName(entry.NodeName); detail.IncludeConfigurationProperties(this.Context); if (detail == null) { continue; } var dirty = detail.Merge(nodeRequest.NodeData, this.Context); detail.IncludeConfigurationProperties(this.Context, true); var view = detail.Map <NodeDetailView>(); BuildView build = null; if (nodeRequest.BuildMof && dirty) { if (this.BuildService == null) { this.Logging.BuildRequestedNoBuildService(nodeRequest); } else { build = await this.BuildService.Build(this.GetConfigurationData(view)); } } var result = new NodeDetailResult { Build = build, NodeView = view }; details.Add(result); this.Logging.NodeUpdated(detail.Name); if (entry.NodeData.ContainsKey("IsInitialDeployment") && (bool)entry.NodeData["IsInitialDeployment"] != result.NodeView.IsInitialDeployment) { this.Logging.NodeChangedInitialDeployment(result.NodeView.Name, result.NodeView.IsInitialDeployment); } } await this.Context.SaveChangesAsync(); return(details); }
/// <summary> /// The create node. /// </summary> /// <param name="nodeRequests"> /// The node requests. /// </param> /// <returns> /// The <see cref="Task"/>. /// </returns> public async Task <IEnumerable <NodeDetailResult> > CreateNode(IEnumerable <NodeRequest> nodeRequests) { var details = new List <NodeDetailResult>(); foreach (var nodeRequest in nodeRequests) { var detail = new Node(); detail.Merge(nodeRequest.NodeData, this.Context); this.NodeRepository.Add(detail); detail.IncludeConfigurationProperties(this.Context); var view = detail.Map <NodeDetailView>(); BuildView build = null; if (nodeRequest.BuildMof) { if (this.BuildService == null) { this.Logging.BuildRequestedNoBuildService(nodeRequest); } else { build = await this.BuildService.Build(this.GetConfigurationData(view)); } } var result = new NodeDetailResult { Build = build, NodeView = view }; details.Add(result); this.Logging.NodeCreated(detail.Name); if (detail.IsInitialDeployment) { this.Logging.NodeChangedInitialDeployment(detail.Name, detail.IsInitialDeployment); } } await this.Context.SaveChangesAsync(); return(details); }