private TemplateValidationInfo CheckBasicDeploymentErrors(string resourceGroup, string deploymentName, BasicDeployment deployment) { DeploymentValidateResponse validationResult = ResourceManagementClient.Deployments.Validate( resourceGroup, deploymentName, deployment); return new TemplateValidationInfo(validationResult); }
private Deployment WaitDeploymentStatus( string resourceGroup, string deploymentName, BasicDeployment basicDeployment, Action<string, string, BasicDeployment> job, params string[] status) { Deployment deployment; do { if (job != null) { job(resourceGroup, deploymentName, basicDeployment); } deployment = ResourceManagementClient.Deployments.Get(resourceGroup, deploymentName).Deployment; Thread.Sleep(2000); } while (!status.Any(s => s.Equals(deployment.Properties.ProvisioningState, StringComparison.OrdinalIgnoreCase))); return deployment; }
private BasicDeployment CreateBasicDeployment(ValidatePSResourceGroupDeploymentParameters parameters) { BasicDeployment deployment = new BasicDeployment { Mode = DeploymentMode.Incremental, Template = GetTemplate(parameters.TemplateFile, parameters.GalleryTemplateIdentity), Parameters = GetDeploymentParameters(parameters.TemplateParameterObject) }; return deployment; }
private Deployment ProvisionDeploymentStatus(string resourceGroup, string deploymentName, BasicDeployment deployment) { operations = new List<DeploymentOperation>(); return WaitDeploymentStatus( resourceGroup, deploymentName, deployment, WriteDeploymentProgress, ProvisioningState.Canceled, ProvisioningState.Succeeded, ProvisioningState.Failed); }
private void WriteDeploymentProgress(string resourceGroup, string deploymentName, BasicDeployment deployment) { const string normalStatusFormat = "Resource {0} '{1}' provisioning status is {2}"; const string failureStatusFormat = "Resource {0} '{1}' failed with message '{2}'"; List<DeploymentOperation> newOperations; DeploymentOperationsListResult result; result = ResourceManagementClient.DeploymentOperations.List(resourceGroup, deploymentName, null); newOperations = GetNewOperations(operations, result.Operations); operations.AddRange(newOperations); while (!string.IsNullOrEmpty(result.NextLink)) { result = ResourceManagementClient.DeploymentOperations.ListNext(result.NextLink); newOperations = GetNewOperations(operations, result.Operations); operations.AddRange(newOperations); } foreach (DeploymentOperation operation in newOperations) { string statusMessage; if (operation.Properties.ProvisioningState != ProvisioningState.Failed) { statusMessage = string.Format(normalStatusFormat, operation.Properties.TargetResource.ResourceType, operation.Properties.TargetResource.ResourceName, operation.Properties.ProvisioningState.ToLower()); WriteVerbose(statusMessage); } else { string errorMessage = ParseErrorMessage(operation.Properties.StatusMessage); statusMessage = string.Format(failureStatusFormat, operation.Properties.TargetResource.ResourceType, operation.Properties.TargetResource.ResourceName, errorMessage); WriteError(statusMessage); } } }
public void NewResourceGroupFailsWithInvalidDeployment() { Uri templateUri = new Uri("http://templateuri.microsoft.com"); BasicDeployment deploymentFromGet = new BasicDeployment(); BasicDeployment deploymentFromValidate = new BasicDeployment(); CreatePSResourceGroupParameters parameters = new CreatePSResourceGroupParameters() { ResourceGroupName = resourceGroupName, Location = resourceGroupLocation, DeploymentName = deploymentName, TemplateFile = templateFile, StorageAccountName = storageAccountName, ConfirmAction = ConfirmAction }; resourceGroupMock.Setup(f => f.CheckExistenceAsync(parameters.ResourceGroupName, new CancellationToken())) .Returns(Task.Factory.StartNew(() => new ResourceGroupExistsResult { Exists = false })); resourceGroupMock.Setup(f => f.CreateOrUpdateAsync( parameters.ResourceGroupName, It.IsAny<BasicResourceGroup>(), new CancellationToken())) .Returns(Task.Factory.StartNew(() => new ResourceGroupCreateOrUpdateResult { ResourceGroup = new ResourceGroup() { Name = parameters.ResourceGroupName, Location = parameters.Location } })); resourceGroupMock.Setup(f => f.GetAsync(resourceGroupName, new CancellationToken())) .Returns(Task.Factory.StartNew(() => new ResourceGroupGetResult { ResourceGroup = new ResourceGroup() { Location = resourceGroupLocation } })); deploymentsMock.Setup(f => f.CreateOrUpdateAsync(resourceGroupName, deploymentName, It.IsAny<BasicDeployment>(), new CancellationToken())) .Returns(Task.Factory.StartNew(() => new DeploymentOperationsCreateResult { RequestId = requestId })) .Callback((string name, string dName, BasicDeployment bDeploy, CancellationToken token) => { deploymentFromGet = bDeploy; }); deploymentsMock.Setup(f => f.GetAsync(resourceGroupName, deploymentName, new CancellationToken())) .Returns(Task.Factory.StartNew(() => new DeploymentGetResult { Deployment = new Deployment { Name = deploymentName, Properties = new DeploymentProperties() { Mode = DeploymentMode.Incremental, ProvisioningState = ProvisioningState.Succeeded }, } })); deploymentsMock.Setup(f => f.ValidateAsync(resourceGroupName, It.IsAny<string>(), It.IsAny<BasicDeployment>(), new CancellationToken())) .Returns(Task.Factory.StartNew(() => new DeploymentValidateResponse { Error = new ResourceManagementErrorWithDetails() { Code = "404", Message = "Awesome error message", Target = "Bad deployment" } })) .Callback((string rg, string dn, BasicDeployment d, CancellationToken c) => { deploymentFromValidate = d; }); SetupListForResourceGroupAsync(parameters.ResourceGroupName, new List<Resource>() { new Resource() { Name = "website" } }); deploymentOperationsMock.Setup(f => f.ListAsync(resourceGroupName, deploymentName, null, new CancellationToken())) .Returns(Task.Factory.StartNew(() => new DeploymentOperationsListResult { Operations = new List<DeploymentOperation>() { new DeploymentOperation() { OperationId = Guid.NewGuid().ToString(), Properties = new DeploymentOperationProperties() { ProvisioningState = ProvisioningState.Succeeded, TargetResource = new TargetResource() { ResourceName = resourceName, ResourceType = "Microsoft.Website" } } } } })); Assert.Throws<ArgumentException>(() => resourcesClient.CreatePSResourceGroup(parameters)); }
public void TestTemplateShowsErrorMessage() { Uri templateUri = new Uri("http://templateuri.microsoft.com"); BasicDeployment deploymentFromValidate = new BasicDeployment(); ValidatePSResourceGroupDeploymentParameters parameters = new ValidatePSResourceGroupDeploymentParameters() { ResourceGroupName = resourceGroupName, TemplateFile = templateFile, StorageAccountName = storageAccountName, }; resourceGroupMock.Setup(f => f.CheckExistenceAsync(parameters.ResourceGroupName, new CancellationToken())) .Returns(Task.Factory.StartNew(() => new ResourceGroupExistsResult { Exists = true })); deploymentsMock.Setup(f => f.ValidateAsync(resourceGroupName, It.IsAny<string>(), It.IsAny<BasicDeployment>(), new CancellationToken())) .Returns(Task.Factory.StartNew(() => new DeploymentValidateResponse { IsValid = false, Error = new ResourceManagementErrorWithDetails() { Code = "404", Message = "Awesome error message", Details = new List<ResourceManagementError>(new[] { new ResourceManagementError { Code = "SubError", Message = "Sub error message" }}) } })) .Callback((string rg, string dn, BasicDeployment d, CancellationToken c) => { deploymentFromValidate = d; }); IEnumerable<PSResourceManagerError> error = resourcesClient.ValidatePSResourceGroupDeployment(parameters); Assert.Equal(2, error.Count()); }
public void CreatesResourceGroupWithDeploymentFromTemplateParameterObject() { Uri templateUri = new Uri("http://templateuri.microsoft.com"); BasicDeployment deploymentFromGet = new BasicDeployment(); BasicDeployment deploymentFromValidate = new BasicDeployment(); CreatePSResourceGroupParameters parameters = new CreatePSResourceGroupParameters() { ResourceGroupName = resourceGroupName, Location = resourceGroupLocation, DeploymentName = deploymentName, TemplateFile = templateFile, TemplateParameterObject = new Hashtable() { { "string", "myvalue" }, { "securestring", "myvalue" }, { "int", 12 }, { "bool", true }, }, StorageAccountName = storageAccountName, ConfirmAction = ConfirmAction }; resourceGroupMock.Setup(f => f.CheckExistenceAsync(parameters.ResourceGroupName, new CancellationToken())) .Returns(Task.Factory.StartNew(() => new ResourceGroupExistsResult { Exists = false })); resourceGroupMock.Setup(f => f.CreateOrUpdateAsync( parameters.ResourceGroupName, It.IsAny<BasicResourceGroup>(), new CancellationToken())) .Returns(Task.Factory.StartNew(() => new ResourceGroupCreateOrUpdateResult { ResourceGroup = new ResourceGroup() { Name = parameters.ResourceGroupName, Location = parameters.Location } })); resourceGroupMock.Setup(f => f.GetAsync(resourceGroupName, new CancellationToken())) .Returns(Task.Factory.StartNew(() => new ResourceGroupGetResult { ResourceGroup = new ResourceGroup() { Location = resourceGroupLocation } })); deploymentsMock.Setup(f => f.CreateOrUpdateAsync(resourceGroupName, deploymentName, It.IsAny<BasicDeployment>(), new CancellationToken())) .Returns(Task.Factory.StartNew(() => new DeploymentOperationsCreateResult { RequestId = requestId })) .Callback((string name, string dName, BasicDeployment bDeploy, CancellationToken token) => { deploymentFromGet = bDeploy; }); deploymentsMock.Setup(f => f.GetAsync(resourceGroupName, deploymentName, new CancellationToken())) .Returns(Task.Factory.StartNew(() => new DeploymentGetResult { Deployment = new Deployment { Name = deploymentName, Properties = new DeploymentProperties() { Mode = DeploymentMode.Incremental, ProvisioningState = ProvisioningState.Succeeded }, } })); deploymentsMock.Setup(f => f.ValidateAsync(resourceGroupName, It.IsAny<string>(), It.IsAny<BasicDeployment>(), new CancellationToken())) .Returns(Task.Factory.StartNew(() => new DeploymentValidateResponse { IsValid = true, Error = new ResourceManagementErrorWithDetails() })) .Callback((string rg, string dn, BasicDeployment d, CancellationToken c) => { deploymentFromValidate = d; }); SetupListForResourceGroupAsync(parameters.ResourceGroupName, new List<Resource>() { new Resource() { Name = "website" } }); deploymentOperationsMock.Setup(f => f.ListAsync(resourceGroupName, deploymentName, null, new CancellationToken())) .Returns(Task.Factory.StartNew(() => new DeploymentOperationsListResult { Operations = new List<DeploymentOperation>() { new DeploymentOperation() { OperationId = Guid.NewGuid().ToString(), Properties = new DeploymentOperationProperties() { ProvisioningState = ProvisioningState.Succeeded, TargetResource = new TargetResource() { ResourceType = "Microsoft.Website", ResourceName = resourceName } } } } })); PSResourceGroup result = resourcesClient.CreatePSResourceGroup(parameters); deploymentsMock.Verify((f => f.CreateOrUpdateAsync(resourceGroupName, deploymentName, deploymentFromGet, new CancellationToken())), Times.Once()); Assert.Equal(parameters.ResourceGroupName, result.ResourceGroupName); Assert.Equal(parameters.Location, result.Location); Assert.Equal(1, result.Resources.Count); Assert.Equal(DeploymentMode.Incremental, deploymentFromGet.Mode); Assert.NotNull(deploymentFromGet.Template); // Skip: Test produces different outputs since hashtable order is not guaranteed. //EqualsIgnoreWhitespace(File.ReadAllText(templateParameterFile), deploymentFromGet.Parameters); Assert.Equal(DeploymentMode.Incremental, deploymentFromValidate.Mode); Assert.NotNull(deploymentFromValidate.Template); // Skip: Test produces different outputs since hashtable order is not guaranteed. //EqualsIgnoreWhitespace(File.ReadAllText(templateParameterFile), deploymentFromValidate.Parameters); progressLoggerMock.Verify( f => f(string.Format("Resource {0} '{1}' provisioning status is {2}", "Microsoft.Website", resourceName, ProvisioningState.Succeeded.ToLower())), Times.Once()); }
public void ExtractsErrorMessageFromFailedDeploymentOperation() { Uri templateUri = new Uri("http://templateuri.microsoft.com"); BasicDeployment deploymentFromGet = new BasicDeployment(); BasicDeployment deploymentFromValidate = new BasicDeployment(); CreatePSResourceGroupParameters parameters = new CreatePSResourceGroupParameters() { ResourceGroupName = resourceGroupName, Location = resourceGroupLocation, DeploymentName = deploymentName, TemplateFile = templateFile, StorageAccountName = storageAccountName, ConfirmAction = ConfirmAction }; resourceGroupMock.Setup(f => f.CheckExistenceAsync(parameters.ResourceGroupName, new CancellationToken())) .Returns(Task.Factory.StartNew(() => new ResourceGroupExistsResult { Exists = false })); resourceGroupMock.Setup(f => f.CreateOrUpdateAsync( parameters.ResourceGroupName, It.IsAny<BasicResourceGroup>(), new CancellationToken())) .Returns(Task.Factory.StartNew(() => new ResourceGroupCreateOrUpdateResult { ResourceGroup = new ResourceGroup() { Name = parameters.ResourceGroupName, Location = parameters.Location } })); resourceGroupMock.Setup(f => f.GetAsync(resourceGroupName, new CancellationToken())) .Returns(Task.Factory.StartNew(() => new ResourceGroupGetResult { ResourceGroup = new ResourceGroup() { Location = resourceGroupLocation } })); deploymentsMock.Setup(f => f.CreateOrUpdateAsync(resourceGroupName, deploymentName, It.IsAny<BasicDeployment>(), new CancellationToken())) .Returns(Task.Factory.StartNew(() => new DeploymentOperationsCreateResult { RequestId = requestId })) .Callback((string name, string dName, BasicDeployment bDeploy, CancellationToken token) => { deploymentFromGet = bDeploy; }); deploymentsMock.Setup(f => f.GetAsync(resourceGroupName, deploymentName, new CancellationToken())) .Returns(Task.Factory.StartNew(() => new DeploymentGetResult { Deployment = new Deployment { Name = deploymentName, Properties = new DeploymentProperties() { Mode = DeploymentMode.Incremental, ProvisioningState = ProvisioningState.Succeeded } } })); deploymentsMock.Setup(f => f.ValidateAsync(resourceGroupName, It.IsAny<string>(), It.IsAny<BasicDeployment>(), new CancellationToken())) .Returns(Task.Factory.StartNew(() => new DeploymentValidateResponse { IsValid = true, Error = new ResourceManagementErrorWithDetails() })) .Callback((string rg, string dn, BasicDeployment d, CancellationToken c) => { deploymentFromValidate = d; }); SetupListForResourceGroupAsync(parameters.ResourceGroupName, new List<Resource>() { new Resource() { Name = "website" } }); deploymentOperationsMock.Setup(f => f.ListAsync(resourceGroupName, deploymentName, null, new CancellationToken())) .Returns(Task.Factory.StartNew(() => new DeploymentOperationsListResult { Operations = new List<DeploymentOperation>() { new DeploymentOperation() { OperationId = Guid.NewGuid().ToString(), Properties = new DeploymentOperationProperties() { ProvisioningState = ProvisioningState.Failed, StatusMessage = JsonConvert.SerializeObject(new ResourceManagementError() { Message = "A really bad error occured" }), TargetResource = new TargetResource() { ResourceType = "Microsoft.Website", ResourceName = resourceName } } } } })); PSResourceGroup result = resourcesClient.CreatePSResourceGroup(parameters); deploymentsMock.Verify((f => f.CreateOrUpdateAsync(resourceGroupName, deploymentName, deploymentFromGet, new CancellationToken())), Times.Once()); Assert.Equal(parameters.ResourceGroupName, result.ResourceGroupName); Assert.Equal(parameters.Location, result.Location); Assert.Equal(1, result.Resources.Count); Assert.Equal(DeploymentMode.Incremental, deploymentFromGet.Mode); Assert.NotNull(deploymentFromGet.Template); Assert.Equal(DeploymentMode.Incremental, deploymentFromValidate.Mode); Assert.NotNull(deploymentFromValidate.Template); errorLoggerMock.Verify( f => f(string.Format("Resource {0} '{1}' failed with message '{2}'", "Microsoft.Website", resourceName, "A really bad error occured")), Times.Once()); }
public void NewResourceGroupWithDeploymentSucceeds() { Uri templateUri = new Uri("http://templateuri.microsoft.com"); BasicDeployment deploymentFromGet = new BasicDeployment(); BasicDeployment deploymentFromValidate = new BasicDeployment(); CreatePSResourceGroupParameters parameters = new CreatePSResourceGroupParameters() { ResourceGroupName = resourceGroupName, Location = resourceGroupLocation, DeploymentName = deploymentName, TemplateFile = templateFile, StorageAccountName = storageAccountName, ConfirmAction = ConfirmAction }; resourceGroupMock.Setup(f => f.CheckExistenceAsync(parameters.ResourceGroupName, new CancellationToken())) .Returns(Task.Factory.StartNew(() => new ResourceGroupExistsResult { Exists = false })); resourceGroupMock.Setup(f => f.CreateOrUpdateAsync( parameters.ResourceGroupName, It.IsAny<BasicResourceGroup>(), new CancellationToken())) .Returns(Task.Factory.StartNew(() => new ResourceGroupCreateOrUpdateResult { ResourceGroup = new ResourceGroup() { Name = parameters.ResourceGroupName, Location = parameters.Location } })); resourceGroupMock.Setup(f => f.GetAsync(resourceGroupName, new CancellationToken())) .Returns(Task.Factory.StartNew(() => new ResourceGroupGetResult { ResourceGroup = new ResourceGroup() { Location = resourceGroupLocation } })); storageClientWrapperMock.Setup(f => f.UploadFileToBlob(It.IsAny<BlobUploadParameters>())).Returns(templateUri); deploymentsMock.Setup(f => f.CreateOrUpdateAsync(resourceGroupName, deploymentName, It.IsAny<BasicDeployment>(), new CancellationToken())) .Returns(Task.Factory.StartNew(() => new DeploymentOperationsCreateResult { RequestId = requestId })) .Callback((string name, string dName, BasicDeployment bDeploy, CancellationToken token) => { deploymentFromGet = bDeploy; }); deploymentsMock.Setup(f => f.GetAsync(resourceGroupName, deploymentName, new CancellationToken())) .Returns(Task.Factory.StartNew(() => new DeploymentGetResult { Deployment = new Deployment { DeploymentName = deploymentName, Properties = new DeploymentProperties() { Mode = DeploymentMode.Incremental, CorrelationId = "123", ProvisioningState = ProvisioningState.Succeeded }, } })); deploymentsMock.Setup(f => f.ValidateAsync(resourceGroupName, It.IsAny<string>(), It.IsAny<BasicDeployment>(), new CancellationToken())) .Returns(Task.Factory.StartNew(() => new DeploymentValidateResponse { IsValid = true, Error = new ResourceManagementErrorWithDetails() })) .Callback((string rg, string dn, BasicDeployment d, CancellationToken c) => { deploymentFromValidate = d; }); SetupListForResourceGroupAsync(parameters.ResourceGroupName, new List<Resource>() { new Resource() { Name = "website" } }); deploymentOperationsMock.Setup(f => f.ListAsync(resourceGroupName, deploymentName, null, new CancellationToken())) .Returns(Task.Factory.StartNew(() => new DeploymentOperationsListResult { Operations = new List<DeploymentOperation>() { new DeploymentOperation() { OperationId = Guid.NewGuid().ToString(), Properties = new DeploymentOperationProperties() { ProvisioningState = ProvisioningState.Succeeded, TargetResource = new TargetResource() { ResourceType = "Microsoft.Website", ResourceName = resourceName } } } } })); PSResourceGroup result = resourcesClient.CreatePSResourceGroup(parameters); deploymentsMock.Verify((f => f.CreateOrUpdateAsync(resourceGroupName, deploymentName, deploymentFromGet, new CancellationToken())), Times.Once()); Assert.Equal(parameters.ResourceGroupName, result.ResourceGroupName); Assert.Equal(parameters.Location, result.Location); Assert.Equal(1, result.Resources.Count); Assert.Equal(DeploymentMode.Incremental, deploymentFromGet.Mode); Assert.Equal(templateUri, deploymentFromGet.TemplateLink.Uri); Assert.Equal(DeploymentMode.Incremental, deploymentFromValidate.Mode); Assert.Equal(templateUri, deploymentFromValidate.TemplateLink.Uri); progressLoggerMock.Verify( f => f(string.Format("Resource {0} '{1}' provisioning status is {2}", "Microsoft.Website", resourceName, ProvisioningState.Succeeded.ToLower())), Times.Once()); }
public void NewResourceGroupUsesDeploymentNameForDeploymentName() { string deploymentName = "abc123"; BasicDeployment deploymentFromGet = new BasicDeployment(); BasicDeployment deploymentFromValidate = new BasicDeployment(); CreatePSResourceGroupParameters parameters = new CreatePSResourceGroupParameters() { ResourceGroupName = resourceGroupName, Location = resourceGroupLocation, DeploymentName = deploymentName, GalleryTemplateIdentity = "abc", StorageAccountName = storageAccountName, ConfirmAction = ConfirmAction }; galleryTemplatesClientMock.Setup(g => g.GetGalleryTemplateFile(It.IsAny<string>())).Returns("http://path/file.html"); deploymentsMock.Setup(f => f.ValidateAsync(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<BasicDeployment>(), new CancellationToken())) .Returns(Task.Factory.StartNew(() => new DeploymentValidateResponse { IsValid = true, Error = new ResourceManagementErrorWithDetails() })) .Callback((string rg, string dn, BasicDeployment d, CancellationToken c) => { deploymentFromValidate = d; }); deploymentsMock.Setup(f => f.CreateOrUpdateAsync(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<BasicDeployment>(), new CancellationToken())) .Returns(Task.Factory.StartNew(() => new DeploymentOperationsCreateResult { RequestId = requestId })) .Callback((string name, string dName, BasicDeployment bDeploy, CancellationToken token) => { deploymentFromGet = bDeploy; deploymentName = dName; }); SetupListForResourceGroupAsync(parameters.ResourceGroupName, new List<Resource>() { new Resource() { Name = "website" } }); var operationId = Guid.NewGuid().ToString(); var operationQueue = new Queue<DeploymentOperation>(); operationQueue.Enqueue( new DeploymentOperation() { OperationId = operationId, Properties = new DeploymentOperationProperties() { ProvisioningState = ProvisioningState.Accepted, TargetResource = new TargetResource() { ResourceType = "Microsoft.Website", ResourceName = resourceName } } } ); operationQueue.Enqueue( new DeploymentOperation() { OperationId = operationId, Properties = new DeploymentOperationProperties() { ProvisioningState = ProvisioningState.Running, TargetResource = new TargetResource() { ResourceType = "Microsoft.Website", ResourceName = resourceName } } } ); operationQueue.Enqueue( new DeploymentOperation() { OperationId = operationId, Properties = new DeploymentOperationProperties() { ProvisioningState = ProvisioningState.Succeeded, TargetResource = new TargetResource() { ResourceType = "Microsoft.Website", ResourceName = resourceName } } } ); deploymentOperationsMock.SetupSequence(f => f.ListAsync(It.IsAny<string>(), It.IsAny<string>(), null, new CancellationToken())) .Returns(Task.Factory.StartNew(() => new DeploymentOperationsListResult { Operations = new List<DeploymentOperation>() { operationQueue.Dequeue() } })) .Returns(Task.Factory.StartNew(() => new DeploymentOperationsListResult { Operations = new List<DeploymentOperation>() { operationQueue.Dequeue() } })) .Returns(Task.Factory.StartNew(() => new DeploymentOperationsListResult { Operations = new List<DeploymentOperation>() { operationQueue.Dequeue() } })); var deploymentQueue = new Queue<Deployment>(); deploymentQueue.Enqueue(new Deployment { Name = deploymentName, Properties = new DeploymentProperties() { Mode = DeploymentMode.Incremental, CorrelationId = "123", ProvisioningState = ProvisioningState.Accepted } }); deploymentQueue.Enqueue(new Deployment { Name = deploymentName, Properties = new DeploymentProperties() { Mode = DeploymentMode.Incremental, CorrelationId = "123", ProvisioningState = ProvisioningState.Running } }); deploymentQueue.Enqueue(new Deployment { Name = deploymentName, Properties = new DeploymentProperties() { Mode = DeploymentMode.Incremental, CorrelationId = "123", ProvisioningState = ProvisioningState.Succeeded } }); deploymentsMock.SetupSequence(f => f.GetAsync(It.IsAny<string>(), It.IsAny<string>(), new CancellationToken())) .Returns(Task.Factory.StartNew(() => new DeploymentGetResult { Deployment = deploymentQueue.Dequeue() })) .Returns(Task.Factory.StartNew(() => new DeploymentGetResult { Deployment = deploymentQueue.Dequeue() })) .Returns(Task.Factory.StartNew(() => new DeploymentGetResult { Deployment = deploymentQueue.Dequeue() })); PSResourceGroupDeployment result = resourcesClient.ExecuteDeployment(parameters); Assert.Equal(deploymentName, deploymentName); Assert.Equal(ProvisioningState.Succeeded, result.ProvisioningState); progressLoggerMock.Verify( f => f(string.Format("Resource {0} '{1}' provisioning status is {2}", "Microsoft.Website", resourceName, ProvisioningState.Accepted.ToLower())), Times.Once()); progressLoggerMock.Verify( f => f(string.Format("Resource {0} '{1}' provisioning status is {2}", "Microsoft.Website", resourceName, ProvisioningState.Running.ToLower())), Times.Once()); progressLoggerMock.Verify( f => f(string.Format("Resource {0} '{1}' provisioning status is {2}", "Microsoft.Website", resourceName, ProvisioningState.Succeeded.ToLower())), Times.Once()); }
public void NewResourceGroupUsesTemplateNameForDeploymentName(string templatePath, string expectedName) { BasicDeployment deploymentFromGet = new BasicDeployment(); BasicDeployment deploymentFromValidate = new BasicDeployment(); CreatePSResourceGroupParameters parameters = new CreatePSResourceGroupParameters() { ResourceGroupName = resourceGroupName, Location = resourceGroupLocation, DeploymentName = null, TemplateFile = templatePath, StorageAccountName = storageAccountName, ConfirmAction = ConfirmAction }; galleryTemplatesClientMock.Setup(g => g.GetGalleryTemplateFile(It.IsAny<string>())).Returns("http://path/file.html"); deploymentsMock.Setup(f => f.ValidateAsync(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<BasicDeployment>(), new CancellationToken())) .Returns(Task.Factory.StartNew(() => new DeploymentValidateResponse { IsValid = true, Error = new ResourceManagementErrorWithDetails() })) .Callback((string rg, string dn, BasicDeployment d, CancellationToken c) => { deploymentFromValidate = d; }); deploymentsMock.Setup(f => f.CreateOrUpdateAsync(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<BasicDeployment>(), new CancellationToken())) .Returns(Task.Factory.StartNew(() => new DeploymentOperationsCreateResult { RequestId = requestId })) .Callback((string name, string dName, BasicDeployment bDeploy, CancellationToken token) => { deploymentFromGet = bDeploy; deploymentName= dName; }); SetupListForResourceGroupAsync(parameters.ResourceGroupName, new List<Resource>() { new Resource() { Name = "website" } }); deploymentOperationsMock.Setup(f => f.ListAsync(It.IsAny<string>(), It.IsAny<string>(), null, new CancellationToken())) .Returns(Task.Factory.StartNew(() => new DeploymentOperationsListResult { Operations = new List<DeploymentOperation>() { new DeploymentOperation() { OperationId = Guid.NewGuid().ToString(), Properties = new DeploymentOperationProperties() { ProvisioningState = ProvisioningState.Succeeded, TargetResource = new TargetResource() { ResourceType = "Microsoft.Website", ResourceName = resourceName } } } } })); deploymentsMock.Setup(f => f.GetAsync(It.IsAny<string>(), It.IsAny<string>(), new CancellationToken())) .Returns(Task.Factory.StartNew(() => new DeploymentGetResult { Deployment = new Deployment { DeploymentName = deploymentName, Properties = new DeploymentProperties() { Mode = DeploymentMode.Incremental, CorrelationId = "123", ProvisioningState = ProvisioningState.Succeeded }, } })); resourcesClient.ExecuteDeployment(parameters); if (expectedName == "GUID") { Guid.Parse(deploymentName); } else { Assert.Equal(expectedName, deploymentName); } }
private BasicDeployment CreateBasicDeployment(ValidatePSResourceGroupDeploymentParameters parameters) { BasicDeployment deployment = new BasicDeployment { Mode = DeploymentMode.Incremental, TemplateLink = new TemplateLink { Uri = GetTemplateUri(parameters.TemplateFile, parameters.GalleryTemplateIdentity, parameters.StorageAccountName), ContentVersion = parameters.TemplateVersion }, Parameters = GetDeploymentParameters(parameters.TemplateParameterObject) }; return deployment; }
private List<ResourceManagementError> CheckBasicDeploymentErrors(string resourceGroup, string deploymentName, BasicDeployment deployment) { List<ResourceManagementError> errors = new List<ResourceManagementError>(); DeploymentValidateResponse validationResult = ResourceManagementClient.Deployments.Validate( resourceGroup, deploymentName, deployment); if (!validationResult.IsValid) { if (validationResult.Error != null) { errors.Add(validationResult.Error); if (validationResult.Error.Details != null && validationResult.Error.Details.Count > 0) { errors.AddRange(validationResult.Error.Details); } } } return errors; }
/// <summary> /// Validate a deployment template. /// </summary> /// <param name='operations'> /// Reference to the /// Microsoft.Azure.Management.Resources.IDeploymentOperations. /// </param> /// <param name='resourceGroupName'> /// Required. The name of the resource group. The name is case /// insensitive. /// </param> /// <param name='deploymentName'> /// Required. The name of the deployment. /// </param> /// <param name='parameters'> /// Required. Deployment to validate. /// </param> /// <returns> /// Information from validate template deployment response. /// </returns> public static Task<DeploymentValidateResponse> ValidateAsync(this IDeploymentOperations operations, string resourceGroupName, string deploymentName, BasicDeployment parameters) { return operations.ValidateAsync(resourceGroupName, deploymentName, parameters, CancellationToken.None); }
/// <summary> /// Validate a deployment template. /// </summary> /// <param name='operations'> /// Reference to the /// Microsoft.Azure.Management.Resources.IDeploymentOperations. /// </param> /// <param name='resourceGroupName'> /// Required. The name of the resource group. The name is case /// insensitive. /// </param> /// <param name='deploymentName'> /// Required. The name of the deployment. /// </param> /// <param name='parameters'> /// Required. Deployment to validate. /// </param> /// <returns> /// Information from validate template deployment response. /// </returns> public static DeploymentValidateResponse Validate(this IDeploymentOperations operations, string resourceGroupName, string deploymentName, BasicDeployment parameters) { return Task.Factory.StartNew((object s) => { return ((IDeploymentOperations)s).ValidateAsync(resourceGroupName, deploymentName, parameters); } , operations, CancellationToken.None, TaskCreationOptions.None, TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); }