/// <summary> /// Creates a new resource group and deployment using the passed template file option which /// can be user customized or from gallery tenplates. /// </summary> /// <param name="parameters">The create parameters</param> /// <returns>The created resource group</returns> public virtual PSResourceGroup CreatePSResourceGroup(CreatePSResourceGroupParameters parameters) { bool createDeployment = !string.IsNullOrEmpty(parameters.GalleryTemplateIdentity) || !string.IsNullOrEmpty(parameters.TemplateFile); bool resourceExists = ResourceManagementClient.ResourceGroups.CheckExistence(parameters.ResourceGroupName).Exists; ResourceGroup resourceGroup = null; Action createOrUpdateResourceGroup = () => { resourceGroup = CreateResourceGroup(parameters.ResourceGroupName, parameters.Location); if (createDeployment) { ExecuteDeployment(parameters); } }; if (resourceExists && !parameters.Force) { parameters.ConfirmAction(parameters.Force, Resources.ResourceGroupAlreadyExists, Resources.NewResourceGroupMessage, parameters.DeploymentName, createOrUpdateResourceGroup); resourceGroup = ResourceManagementClient.ResourceGroups.Get(parameters.ResourceGroupName).ResourceGroup; } else { createOrUpdateResourceGroup(); } return(resourceGroup.ToPSResourceGroup(this)); }
public override void ExecuteCmdlet() { CreatePSResourceGroupParameters parameters = new CreatePSResourceGroupParameters() { ResourceGroupName = Name, Location = Location, DeploymentName = DeploymentName, GalleryTemplateIdentity = GalleryTemplateIdentity, TemplateFile = TemplateUri ?? this.TryResolvePath(TemplateFile), TemplateParameterObject = GetTemplateParameterObject(TemplateParameterObject), TemplateVersion = TemplateVersion, StorageAccountName = StorageAccountName, Force = Force.IsPresent, ConfirmAction = ConfirmAction }; WriteObject(ResourcesClient.CreatePSResourceGroup(parameters)); }
public void CreatesNewPSResourceGroupWithUserTemplate() { CreatePSResourceGroupParameters expectedParameters = new CreatePSResourceGroupParameters() { ResourceGroupName = resourceGroupName, Location = resourceGroupLocation, TemplateFile = templateFile, DeploymentName = deploymentName, StorageAccountName = storageAccountName, TemplateVersion = "1.0" }; CreatePSResourceGroupParameters actualParameters = new CreatePSResourceGroupParameters(); PSResourceGroup expected = new PSResourceGroup() { Location = expectedParameters.Location, ResourceGroupName = expectedParameters.ResourceGroupName, Resources = new List<PSResource>() { new PSResource() { Name = "resource1" } } }; resourcesClientMock.Setup(f => f.CreatePSResourceGroup(It.IsAny<CreatePSResourceGroupParameters>())) .Returns(expected) .Callback((CreatePSResourceGroupParameters p) => { actualParameters = p; }); cmdlet.Name = expectedParameters.ResourceGroupName; cmdlet.Location = expectedParameters.Location; cmdlet.TemplateFile = expectedParameters.TemplateFile; cmdlet.DeploymentName = expectedParameters.DeploymentName; cmdlet.TemplateVersion = expectedParameters.TemplateVersion; cmdlet.ExecuteCmdlet(); Assert.Equal(expectedParameters.ResourceGroupName, actualParameters.ResourceGroupName); Assert.Equal(expectedParameters.Location, actualParameters.Location); Assert.Equal(expectedParameters.DeploymentName, actualParameters.DeploymentName); Assert.Equal(expectedParameters.GalleryTemplateIdentity, actualParameters.GalleryTemplateIdentity); Assert.Equal(expectedParameters.TemplateFile, actualParameters.TemplateFile); Assert.NotNull(actualParameters.TemplateParameterObject); Assert.Equal(expectedParameters.TemplateVersion, actualParameters.TemplateVersion); Assert.Equal(null, actualParameters.StorageAccountName); commandRuntimeMock.Verify(f => f.WriteObject(expected), Times.Once()); }
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 } })); 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, 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 NewResourceGroupWithoutDeploymentSucceeds() { CreatePSResourceGroupParameters parameters = new CreatePSResourceGroupParameters() { ResourceGroupName = resourceGroupName, Location = resourceGroupLocation, 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 } })); SetupListForResourceGroupAsync(parameters.ResourceGroupName, new List<Resource>()); PSResourceGroup result = resourcesClient.CreatePSResourceGroup(parameters); Assert.Equal(parameters.ResourceGroupName, result.ResourceGroupName); Assert.Equal(parameters.Location, result.Location); Assert.Empty(result.Resources); }
public void NewResourceGroupWithGalleryTemplateAndWithoutStorageAccountNameSucceeds() { CreatePSResourceGroupParameters parameters = new CreatePSResourceGroupParameters() { ResourceGroupName = resourceGroupName, Location = resourceGroupLocation, ConfirmAction = ConfirmAction, GalleryTemplateIdentity = "templateFile" }; galleryTemplatesClientMock.Setup(f => f.GetGalleryTemplateFile("templateFile")).Returns("http://microsoft.com"); 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() { Name = resourceGroupName, Location = resourceGroupLocation } })); SetupListForResourceGroupAsync(parameters.ResourceGroupName, new List<Resource>()); deploymentsMock.Setup(f=>f.ValidateAsync(resourceGroupName, It.IsAny<string>(), It.IsAny<BasicDeployment>(), new CancellationToken())) .Returns(Task.Factory.StartNew(() => new DeploymentValidateResponse { IsValid = true })); deploymentsMock.Setup(f => f.GetAsync(resourceGroupName, It.IsAny<string>(), new CancellationToken())) .Returns(Task.Factory.StartNew(() => new DeploymentGetResult { Deployment = new Deployment() { Properties = new DeploymentProperties() { ProvisioningState = ProvisioningState.Succeeded } } })); deploymentOperationsMock.Setup(f => f.ListAsync(resourceGroupName, It.IsAny<string>(), null, new CancellationToken())) .Returns(Task.Factory.StartNew(() => new DeploymentOperationsListResult { Operations = new List<DeploymentOperation>() })); PSResourceGroup result = resourcesClient.CreatePSResourceGroup(parameters); Assert.Equal(parameters.ResourceGroupName, result.ResourceGroupName); Assert.Equal(parameters.Location, result.Location); Assert.Empty(result.Resources); }
public void NewResourceGroupChecksForPermissionForExistingResource() { RejectActionCounter = 0; CreatePSResourceGroupParameters parameters = new CreatePSResourceGroupParameters() { ResourceGroupName = resourceGroupName, ConfirmAction = RejectAction }; resourceGroupMock.Setup(f => f.CheckExistenceAsync(parameters.ResourceGroupName, new CancellationToken())) .Returns(Task.Factory.StartNew(() => new ResourceGroupExistsResult { Exists = true })); resourceGroupMock.Setup(f => f.GetAsync( parameters.ResourceGroupName, new CancellationToken())) .Returns(Task.Factory.StartNew(() => new ResourceGroupGetResult { ResourceGroup = new ResourceGroup() { Name = parameters.ResourceGroupName, Location = parameters.Location } })); resourceOperationsMock.Setup(f => f.ListAsync(It.IsAny<ResourceListParameters>(), It.IsAny<CancellationToken>())) .Returns(() => Task.Factory.StartNew(() => new ResourceListResult { StatusCode = HttpStatusCode.OK, Resources = new List<Resource>(new[] { new Resource { Name = "foo", Properties = null, ProvisioningState = ProvisioningState.Running, Location = "West US" }, new Resource { Name = "bar", Properties = null, ProvisioningState = ProvisioningState.Running, Location = "West US" } }) })); resourcesClient.CreatePSResourceGroup(parameters); Assert.Equal(1, RejectActionCounter); }
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 } })); 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, 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.Equal(templateUri, deploymentFromGet.TemplateLink.Uri); Assert.Equal(DeploymentMode.Incremental, deploymentFromValidate.Mode); Assert.Equal(templateUri, deploymentFromValidate.TemplateLink.Uri); 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 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 } })); 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, 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); EqualsIgnoreWhitespace(File.ReadAllText(templateParameterFile), deploymentFromGet.Parameters); Assert.Equal(DeploymentMode.Incremental, deploymentFromValidate.Mode); Assert.Equal(templateUri, deploymentFromValidate.TemplateLink.Uri); 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 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" } }); 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.Accepted, 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 }, } })); PSResourceGroupDeployment result = resourcesClient.ExecuteDeployment(parameters); Assert.Equal(deploymentName, deploymentName); Assert.Equal(ProvisioningState.Succeeded, result.ProvisioningState); }
/// <summary> /// Creates a new resource group and deployment using the passed template file option which /// can be user customized or from gallery tenplates. /// </summary> /// <param name="parameters">The create parameters</param> /// <returns>The created resource group</returns> public virtual PSResourceGroup CreatePSResourceGroup(CreatePSResourceGroupParameters parameters) { bool createDeployment = !string.IsNullOrEmpty(parameters.GalleryTemplateIdentity) || !string.IsNullOrEmpty(parameters.TemplateFile); bool resourceExists = ResourceManagementClient.ResourceGroups.CheckExistence(parameters.ResourceGroupName).Exists; ResourceGroup resourceGroup = null; Action createOrUpdateResourceGroup = () => { resourceGroup = CreateResourceGroup(parameters.ResourceGroupName, parameters.Location); if (createDeployment) { ExecuteDeployment(parameters); } }; if (resourceExists && !parameters.Force) { parameters.ConfirmAction(parameters.Force, Resources.ResourceGroupAlreadyExists, Resources.NewResourceGroupMessage, parameters.DeploymentName, createOrUpdateResourceGroup); resourceGroup = ResourceManagementClient.ResourceGroups.Get(parameters.ResourceGroupName).ResourceGroup; } else { createOrUpdateResourceGroup(); } return resourceGroup.ToPSResourceGroup(this); }