コード例 #1
0
        /// <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);
        }
コード例 #2
0
        /// <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);
        }