コード例 #1
0
ファイル: ResourceDeployer.cs プロジェクト: vovoma/CaaSDeploy
        /// <summary>
        /// Deploys the supplied resource and waits.
        /// </summary>
        /// <param name="resourceDefinition">The resource definition.</param>
        /// <returns>The async <see cref="Task"/>.</returns>
        public async Task <ResourceLog> DeployAndWait(JObject resourceDefinition)
        {
            var response = new ResourceLog()
            {
                ResourceId = _resourceId, ResourceType = _resourceType
            };

            try
            {
                if (_resourceApi.ListUrl != null)
                {
                    var ids = GetResourceIdentifiers(resourceDefinition);
                    var existingResourceDetails = (await GetResourceByIdentifiers(ids)).SingleOrDefault();
                    if (existingResourceDetails != null)
                    {
                        if (_resourceApi.EditUrl == null)
                        {
                            _logProvider.LogMessage($"Resource '{_resourceId}' already exists and cannot be updated. Using existing resource even if its definition doesn't match the template.");
                            response.Details          = existingResourceDetails;
                            response.CaasId           = response.Details["id"].Value <string>();
                            response.DeploymentStatus = ResourceLogStatus.UsedExisting;
                            return(response);
                        }
                        else
                        {
                            var existingId = existingResourceDetails["id"].Value <string>();
                            await UpdateExistingResource(existingId, resourceDefinition);

                            response.Details = await Get(existingId);

                            response.CaasId           = response.Details["id"].Value <string>();
                            response.DeploymentStatus = ResourceLogStatus.Updated;
                            return(response);
                        }
                    }
                }

                var id = await DeployNewResource(resourceDefinition);

                response.Details = await WaitForDeploy(id);

                response.CaasId           = response.Details["id"].Value <string>();
                response.DeploymentStatus = ResourceLogStatus.Deployed;
                return(response);
            }
            catch (CaasException ex)
            {
                _logProvider.LogError(ex.Message);

                response.DeploymentStatus = ResourceLogStatus.Failed;
                response.Error            = new Error
                {
                    Message      = ex.Message,
                    Operation    = ex.Operation,
                    ResponseCode = ex.ResponseCode
                };

                return(response);
            }
        }
コード例 #2
0
ファイル: ResourceDeployer.cs プロジェクト: vovoma/CaaSDeploy
        /// <summary>
        /// Deletes a resource by CaaS identifier and waits.
        /// </summary>
        /// <param name="caasId">The CaaS identifier.</param>
        /// <returns>The async <see cref="Task"/>.</returns>
        public async Task <ResourceLog> DeleteAndWait(string caasId)
        {
            var response = new ResourceLog
            {
                CaasId           = caasId,
                ResourceId       = _resourceId,
                ResourceType     = _resourceType,
                DeploymentStatus = ResourceLogStatus.Deleted
            };

            try
            {
                bool wait = await DeleteExistingResource(caasId);

                if (wait)
                {
                    await WaitForDelete(caasId);
                }
            }
            catch (CaasException ex)
            {
                _logProvider.LogError(ex.Message);

                response.DeploymentStatus = ResourceLogStatus.Failed;
                response.Error            = new Error
                {
                    Message      = ex.Message,
                    Operation    = ex.Operation,
                    ResponseCode = ex.ResponseCode
                };
            }

            return(response);
        }
コード例 #3
0
        /// <summary>
        /// Initializes a new instance of the <see cref="DeleteResourceTask"/> class.
        /// </summary>
        /// <param name="resourceLog">The resource log to delete.</param>
        public DeleteResourceTask(ResourceLog resourceLog)
        {
            if (resourceLog == null)
            {
                throw new ArgumentNullException(nameof(resourceLog));
            }

            ResourceLog = resourceLog;
        }
コード例 #4
0
        public void AddItem_Adds1ItemWhen2OnlyDifferByCase_WhenCaseInsensitive()
        {
            var log = new ResourceLog();

            var urlA = new Uri2("http://www.foo.com/page.html");
            var urlB = new Uri2("http://www.foo.com/Page.html");

            log.AddItem(urlA);
            log.AddItem(urlB);

            Assert.AreEqual(1, log.ItemCount);
        }
コード例 #5
0
        public void AddItem_AddsTheItemToTheLog_WhenCalled()
        {
            var log = new ResourceLog();

            log.CaseSensitive = true;

            var url = new Uri2("http://www.foo.com/Page.html");

            log.AddItem(url);

            Assert.AreEqual(1, log.ItemCount);
        }
コード例 #6
0
        private ResourceLog GetLog(string alias)
        {
            ResourceLog log = logRepository.Get(alias);

            var newLog = new ResourceLog
            {
                ActionType    = ActionTypes.Delete,
                UserId        = memberService.GetCurrentUser().MemberId,
                PreviousLogId = log.Id
            };

            return(newLog);
        }
コード例 #7
0
        public void AddItem_Adds2ItemsThatOnlyDifferByCase_WhenCaseSensitive()
        {
            var log = new ResourceLog();

            log.CaseSensitive = true;

            var urlA = new Uri2("http://www.foo.com/page.html");
            var urlB = new Uri2("http://www.foo.com/Page.html");

            log.AddItem(urlA);
            log.AddItem(urlB);

            Assert.AreEqual(2, log.ItemCount);
        }
コード例 #8
0
        private ResourceLog GetLog(Resource resource)
        {
            IMemberModel currentUser = memberService.GetCurrentUser();
            ResourceLog  previousLog = logRepository.Get(resource.Alias);

            var log = new ResourceLog
            {
                UserId        = currentUser.MemberId,
                Resource      = resource,
                PreviousLogId = previousLog?.Id ?? Guid.Empty,
                ActionType    = previousLog == null ? ActionTypes.Create : ActionTypes.Modify
            };

            return(log);
        }
コード例 #9
0
 public void Save(ResourceLog entity)
 {
     logCollection.InsertOne(entity);
 }
コード例 #10
0
        public void PendingCount_EqualsZero_WhenNoItems()
        {
            var log = new ResourceLog();

            Assert.IsTrue(log.PendingCount == 0);
        }