public PSDataCenterResource(DataCenterResource dataCenterResource)
        {
            if (dataCenterResource == null)
            {
                return;
            }

            Id         = dataCenterResource.Id;
            Name       = dataCenterResource.Name;
            Properties = new PSDataCenterResourceProperties(dataCenterResource.Properties);
        }
Exemplo n.º 2
0
        public override void ExecuteCmdlet()
        {
            if (ParameterSetName.Equals(ParentObjectParameterSet, StringComparison.Ordinal))
            {
                ResourceIdentifier resourceIdentifier = new ResourceIdentifier(ParentObject.Id);
                ResourceGroupName = resourceIdentifier.ResourceGroupName;
                ClusterName       = resourceIdentifier.ResourceName;
            }

            DataCenterResource dataCenterResource = null;

            try
            {
                dataCenterResource = CosmosDBManagementClient.CassandraDataCenters.GetWithHttpMessagesAsync(ResourceGroupName, ClusterName, DatacenterName).GetAwaiter().GetResult().Body;
            }
            catch (CloudException e)
            {
                if (e.Response.StatusCode != System.Net.HttpStatusCode.NotFound)
                {
                    throw;
                }
            }

            if (dataCenterResource != null)
            {
                throw new ConflictingResourceException(message: string.Format(ExceptionMessage.Conflict, DatacenterName));
            }

            if (NodeCount < 3)
            {
                throw new ArgumentException("The minimum value for number of virtual machines should be 3.");
            }

            DataCenterResource dataCenterResourceParameters = new DataCenterResource
            {
                Properties = new DataCenterResourceProperties
                {
                    DataCenterLocation = Location,
                    DelegatedSubnetId  = DelegatedSubnetId,
                    NodeCount          = NodeCount,
                    Base64EncodedCassandraYamlFragment = Base64EncodedCassandraYamlFragment
                }
            };

            if (ShouldProcess(DatacenterName, "Creating a new Managed Cassandra DataCenter"))
            {
                DataCenterResource dataCenterResourceResult = CosmosDBManagementClient.CassandraDataCenters.CreateUpdateWithHttpMessagesAsync(ResourceGroupName, ClusterName, DatacenterName, dataCenterResourceParameters).GetAwaiter().GetResult().Body;
                WriteObject(new PSDataCenterResource(dataCenterResourceResult));
            }

            return;
        }
        public override void ExecuteCmdlet()
        {
            ResourceIdentifier resourceIdentifier = null;

            if (ParameterSetName.Equals(ParentObjectParameterSet, StringComparison.Ordinal))
            {
                resourceIdentifier = new ResourceIdentifier(ParentObject.Id);
                ResourceGroupName  = resourceIdentifier.ResourceGroupName;
                ClusterName        = resourceIdentifier.ResourceName;
            }
            else if (!ParameterSetName.Equals(NameParameterSet, StringComparison.Ordinal))
            {
                if (ParameterSetName.Equals(ResourceIdParameterSet))
                {
                    resourceIdentifier = new ResourceIdentifier(ResourceId);
                }
                else if (ParameterSetName.Equals(ObjectParameterSet))
                {
                    resourceIdentifier = new ResourceIdentifier(InputObject.Id);
                }

                string[] segments = resourceIdentifier.ToString().Split(new[] { '/' });
                if (segments.Length != 11)
                {
                    throw new ArgumentException("ResourceId is not a valid for a Cassandra data center.");
                }
                ResourceGroupName = resourceIdentifier.ResourceGroupName;
                ClusterName       = segments[8];
                DataCenterName    = segments[10];
            }

            if (!string.IsNullOrEmpty(DataCenterName))
            {
                DataCenterResource dataCenterResource = CosmosDBManagementClient.CassandraDataCenters.GetWithHttpMessagesAsync(ResourceGroupName, ClusterName, DataCenterName).GetAwaiter().GetResult().Body;
                WriteObject(new PSDataCenterResource(dataCenterResource));
            }
            else
            {
                IEnumerable <DataCenterResource> dataCenterResources = CosmosDBManagementClient.CassandraDataCenters.ListWithHttpMessagesAsync(ResourceGroupName, ClusterName).GetAwaiter().GetResult().Body;

                foreach (DataCenterResource dataCenterResource in dataCenterResources)
                {
                    WriteObject(new PSDataCenterResource(dataCenterResource));
                }
            }

            return;
        }
Exemplo n.º 4
0
        public override void ExecuteCmdlet()
        {
            if (ParameterSetName.Equals(ParentObjectParameterSet, StringComparison.Ordinal))
            {
                ResourceIdentifier resourceIdentifier = new ResourceIdentifier(ParentObject.Id);
                ResourceGroupName = resourceIdentifier.ResourceGroupName;
                ClusterName       = resourceIdentifier.ResourceName;
            }
            else if (!ParameterSetName.Equals(NameParameterSet, StringComparison.Ordinal))
            {
                ResourceIdentifier resourceIdentifier = null;
                if (ParameterSetName.Equals(ResourceIdParameterSet))
                {
                    resourceIdentifier = new ResourceIdentifier(ResourceId);
                }
                else if (ParameterSetName.Equals(ObjectParameterSet))
                {
                    resourceIdentifier = new ResourceIdentifier(InputObject.Id);
                }
                ResourceGroupName = resourceIdentifier.ResourceGroupName;
                String[] parentSegments = resourceIdentifier.ParentResource.Split(separator: '/');
                if (parentSegments.Length != 2)
                {
                    throw new ArgumentException("ResourceId is invalid.");
                }
                ClusterName    = resourceIdentifier.ParentResource.Split(separator: '/')[1];
                DatacenterName = resourceIdentifier.ResourceName;
            }

            DataCenterResource dataCenterResource = null;

            try
            {
                dataCenterResource = CosmosDBManagementClient.CassandraDataCenters.GetWithHttpMessagesAsync(ResourceGroupName, ClusterName, DatacenterName).GetAwaiter().GetResult().Body;
            }
            catch (CloudException e)
            {
                if (e.Response.StatusCode != System.Net.HttpStatusCode.NotFound)
                {
                    throw;
                }
                else
                {
                    throw new ResourceNotFoundException(message: string.Format(ExceptionMessage.NotFound, ClusterName), innerException: e);
                }
            }

            if (NodeCount < 3)
            {
                throw new ArgumentException("The minimum value for number of virtual machines should be 3.");
            }

            DataCenterResource datacenterUpdateParameters = new DataCenterResource
            {
                Properties = new DataCenterResourceProperties
                {
                    DataCenterLocation = dataCenterResource.Properties.DataCenterLocation,
                    DelegatedSubnetId  = dataCenterResource.Properties.DelegatedSubnetId,
                    Base64EncodedCassandraYamlFragment = Base64EncodedCassandraYamlFragment ?? dataCenterResource.Properties.Base64EncodedCassandraYamlFragment,
                    NodeCount = NodeCount.HasValue ? NodeCount.Value : dataCenterResource.Properties.NodeCount,
                    BackupStorageCustomerKeyUri = BackupStorageCustomerKeyUri ?? dataCenterResource.Properties.BackupStorageCustomerKeyUri
                }
            };

            if (ShouldProcess(ClusterName, "Updating Managed Cassandra Datacenter."))
            {
                DataCenterResource dataCenterResourceResult = CosmosDBManagementClient.CassandraDataCenters.CreateUpdateWithHttpMessagesAsync(ResourceGroupName, ClusterName, DatacenterName, datacenterUpdateParameters).GetAwaiter().GetResult().Body;
                WriteObject(new PSDataCenterResource(dataCenterResourceResult));
            }

            return;
        }
Exemplo n.º 5
0
 /// <summary>
 /// Update some of the properties of a managed Cassandra data center.
 /// </summary>
 /// <param name='operations'>
 /// The operations group for this extension method.
 /// </param>
 /// <param name='resourceGroupName'>
 /// The name of the resource group. The name is case insensitive.
 /// </param>
 /// <param name='clusterName'>
 /// Managed Cassandra cluster name.
 /// </param>
 /// <param name='dataCenterName'>
 /// Data center name in a managed Cassandra cluster.
 /// </param>
 /// <param name='body'>
 /// Parameters to provide for specifying the managed Cassandra data center.
 /// </param>
 /// <param name='cancellationToken'>
 /// The cancellation token.
 /// </param>
 public static async Task <DataCenterResource> BeginUpdateAsync(this ICassandraDataCentersOperations operations, string resourceGroupName, string clusterName, string dataCenterName, DataCenterResource body, CancellationToken cancellationToken = default(CancellationToken))
 {
     using (var _result = await operations.BeginUpdateWithHttpMessagesAsync(resourceGroupName, clusterName, dataCenterName, body, null, cancellationToken).ConfigureAwait(false))
     {
         return(_result.Body);
     }
 }
Exemplo n.º 6
0
 /// <summary>
 /// Update some of the properties of a managed Cassandra data center.
 /// </summary>
 /// <param name='operations'>
 /// The operations group for this extension method.
 /// </param>
 /// <param name='resourceGroupName'>
 /// The name of the resource group. The name is case insensitive.
 /// </param>
 /// <param name='clusterName'>
 /// Managed Cassandra cluster name.
 /// </param>
 /// <param name='dataCenterName'>
 /// Data center name in a managed Cassandra cluster.
 /// </param>
 /// <param name='body'>
 /// Parameters to provide for specifying the managed Cassandra data center.
 /// </param>
 public static DataCenterResource BeginUpdate(this ICassandraDataCentersOperations operations, string resourceGroupName, string clusterName, string dataCenterName, DataCenterResource body)
 {
     return(operations.BeginUpdateAsync(resourceGroupName, clusterName, dataCenterName, body).GetAwaiter().GetResult());
 }
Exemplo n.º 7
0
        public void ManagedCassandraCRUDTests()
        {
            var handler = new RecordedDelegatingHandler {
                StatusCodeToReturn = HttpStatusCode.OK
            };
            var handler2 = new RecordedDelegatingHandler {
                StatusCodeToReturn = HttpStatusCode.OK
            };

            using (MockContext context = MockContext.Start(this.GetType()))
            {
                // Create client
                CosmosDBManagementClient cosmosDBManagementClient =
                    CosmosDBTestUtilities.GetCosmosDBClient(context, handler);
                ResourceManagementClient resourcesClient =
                    CosmosDBTestUtilities.GetResourceManagementClient(context, handler2);

                string resourceGroupName = CosmosDBTestUtilities.CreateResourceGroup(resourcesClient);

                try
                {
                    string clusterName = TestUtilities.GenerateName("managedcluster");
                    string dcName      = TestUtilities.GenerateName("managedDC");
                    this.output.WriteLine($"Creating cluster {clusterName} in resource group {resourceGroupName}.");

                    string subnetId = CreateVirtualNetwork(resourcesClient, resourceGroupName);
                    this.output.WriteLine($"Created subnet {subnetId}.");

                    var clusterProperties = new ClusterResourceProperties
                    {
                        DelegatedManagementSubnetId = subnetId, InitialCassandraAdminPassword = "******",
                        ExternalSeedNodes           = new List <SeedNode>
                        {
                            new SeedNode {
                                IpAddress = "10.0.1.1"
                            }
                        }
                    };
                    var clusterPutResource = new ClusterResource
                    {
                        Location = "East US 2", Properties = clusterProperties
                    };
                    this.output.WriteLine($"Cluster create request body:");
                    this.output.WriteLine(JsonConvert.SerializeObject(clusterPutResource, Formatting.Indented));

                    ClusterResource clusterResource = cosmosDBManagementClient.CassandraClusters
                                                      .CreateUpdateWithHttpMessagesAsync(resourceGroupName: resourceGroupName,
                                                                                         clusterName: clusterName, body: clusterPutResource).GetAwaiter().GetResult().Body;

                    this.output.WriteLine($"Cluster create response:");
                    this.output.WriteLine(JsonConvert.SerializeObject(clusterResource, Formatting.Indented));

                    Assert.Equal(subnetId, clusterResource.Properties.DelegatedManagementSubnetId);
                    Assert.Null(clusterResource.Properties.InitialCassandraAdminPassword);
                    Assert.Equal("Cassandra", clusterResource.Properties.AuthenticationMethod);
                    Assert.Equal("Succeeded", clusterResource.Properties.ProvisioningState);
                    Assert.NotNull(clusterResource.Properties.ExternalSeedNodes);
                    Assert.Equal(1, clusterResource.Properties.ExternalSeedNodes.Count);
                    Assert.Equal("10.0.1.1", clusterResource.Properties.ExternalSeedNodes[0].IpAddress);

                    clusterPutResource.Properties.ExternalSeedNodes = new List <SeedNode>
                    {
                        new SeedNode {
                            IpAddress = "192.168.12.1"
                        }
                    };
                    this.output.WriteLine("");
                    this.output.WriteLine("Updating cluster. Put body:");
                    this.output.WriteLine(JsonConvert.SerializeObject(clusterPutResource, Formatting.Indented));

                    ClusterResource clusterResource2 = cosmosDBManagementClient.CassandraClusters
                                                       .CreateUpdateWithHttpMessagesAsync(resourceGroupName: resourceGroupName,
                                                                                          clusterName: clusterName, body: clusterPutResource).GetAwaiter().GetResult().Body;

                    this.output.WriteLine("Response:");
                    this.output.WriteLine(JsonConvert.SerializeObject(clusterResource2, Formatting.Indented));

                    Assert.Equal(clusterName, clusterResource2.Name);
                    Assert.Equal("East US 2", clusterResource2.Location);
                    Assert.Equal(subnetId, clusterResource2.Properties.DelegatedManagementSubnetId);
                    Assert.Null(clusterResource2.Properties.InitialCassandraAdminPassword);
                    Assert.Equal("Cassandra", clusterResource2.Properties.AuthenticationMethod);
                    Assert.Null(clusterResource2.Properties.CassandraVersion);
                    Assert.Equal("Succeeded", clusterResource2.Properties.ProvisioningState);
                    Assert.NotNull(clusterResource2.Properties.ExternalSeedNodes);
                    Assert.NotEmpty(clusterResource2.Properties.ExternalSeedNodes);

                    DataCenterResource dataCenterPutResource = new DataCenterResource
                    {
                        Properties = new DataCenterResourceProperties
                        {
                            DataCenterLocation = "East US 2", DelegatedSubnetId = subnetId, NodeCount = 3,
                        }
                    };
                    this.output.WriteLine($"Creating data center {dcName}. Put request:");
                    this.output.WriteLine(JsonConvert.SerializeObject(dataCenterPutResource, Formatting.Indented));
                    DataCenterResource dcResource = cosmosDBManagementClient.CassandraDataCenters
                                                    .CreateUpdateWithHttpMessagesAsync(resourceGroupName, clusterName, dcName,
                                                                                       dataCenterPutResource).GetAwaiter().GetResult().Body;
                    this.output.WriteLine("Response:");
                    this.output.WriteLine(JsonConvert.SerializeObject(dcResource, Formatting.Indented));

                    Assert.Equal("East US 2", dcResource.Properties.DataCenterLocation);
                    Assert.Equal(subnetId, dcResource.Properties.DelegatedSubnetId);
                    Assert.Equal(3, dcResource.Properties.NodeCount);
                    Assert.Equal(3, dcResource.Properties.SeedNodes.Count);

                    this.output.WriteLine($"Deleting data center {dcName}.");
                    cosmosDBManagementClient.CassandraDataCenters
                    .DeleteWithHttpMessagesAsync(resourceGroupName, clusterName, dcName).GetAwaiter().GetResult();

                    this.output.WriteLine($"Deleting cluster {clusterName}.");
                    cosmosDBManagementClient.CassandraClusters
                    .DeleteWithHttpMessagesAsync(resourceGroupName, clusterName).GetAwaiter().GetResult();

                    this.output.WriteLine("Deleting deployment of vnets.");
                    cosmosDBManagementClient.CassandraClusters
                    .DeleteWithHttpMessagesAsync(resourceGroupName, clusterName).GetAwaiter().GetResult();
                }
                finally
                {
                    this.output.WriteLine("Deleting resource group.");
                    resourcesClient.Deployments.Delete(resourceGroupName,
                                                       ManagedCassandraResourcesOperationsTests.VnetDeploymentName);
                    resourcesClient.ResourceGroups.Delete(resourceGroupName);
                }
            }
        }
        public async Task ManagedCassandraCRUDTests()
        {
            using (var context = MockContext.Start(this.GetType()))
            {
                var location = this.fixture.Location;

                fixture.Init(context);
                var clusterClient = this.fixture.CosmosDBManagementClient.CassandraClusters;
                var dcClient      = this.fixture.CosmosDBManagementClient.CassandraDataCenters;

                string clusterName = TestUtilities.GenerateName("managedcluster");
                string dcName      = TestUtilities.GenerateName("managedDC");
                this.output.WriteLine($"Creating cluster {clusterName} in resource group {this.fixture.ResourceGroupName}.");

                string subnetId = CreateVirtualNetwork(location);
                this.output.WriteLine($"Created subnet {subnetId}.");

                var clusterProperties = new ClusterResourceProperties
                {
                    DelegatedManagementSubnetId   = subnetId,
                    InitialCassandraAdminPassword = "******",
                    ExternalSeedNodes             = new List <SeedNode>
                    {
                        new SeedNode {
                            IpAddress = "10.0.1.1"
                        }
                    }
                };
                var clusterPutResource = new ClusterResource
                {
                    Location   = location,
                    Properties = clusterProperties
                };
                this.output.WriteLine($"Cluster create request body:");
                this.output.WriteLine(JsonConvert.SerializeObject(clusterPutResource, Formatting.Indented));

                ClusterResource clusterResource = (await clusterClient
                                                   .CreateUpdateWithHttpMessagesAsync(resourceGroupName: this.fixture.ResourceGroupName,
                                                                                      clusterName: clusterName, body: clusterPutResource)).Body;

                this.output.WriteLine($"Cluster create response:");
                this.output.WriteLine(JsonConvert.SerializeObject(clusterResource, Formatting.Indented));

                Assert.Equal(subnetId, clusterResource.Properties.DelegatedManagementSubnetId);
                Assert.Null(clusterResource.Properties.InitialCassandraAdminPassword);
                Assert.Equal("Cassandra", clusterResource.Properties.AuthenticationMethod);
                Assert.Equal("Succeeded", clusterResource.Properties.ProvisioningState);
                Assert.NotNull(clusterResource.Properties.ExternalSeedNodes);
                Assert.Equal(1, clusterResource.Properties.ExternalSeedNodes.Count);
                Assert.Equal("10.0.1.1", clusterResource.Properties.ExternalSeedNodes[0].IpAddress);

                clusterPutResource.Properties.ExternalSeedNodes = new List <SeedNode>
                {
                    new SeedNode {
                        IpAddress = "192.168.12.1"
                    }
                };
                this.output.WriteLine("");
                this.output.WriteLine("Updating cluster. Put body:");
                this.output.WriteLine(JsonConvert.SerializeObject(clusterPutResource, Formatting.Indented));

                ClusterResource clusterResource2 = (await clusterClient
                                                    .CreateUpdateWithHttpMessagesAsync(resourceGroupName: this.fixture.ResourceGroupName,
                                                                                       clusterName: clusterName, body: clusterPutResource)).Body;

                this.output.WriteLine("Response:");
                this.output.WriteLine(JsonConvert.SerializeObject(clusterResource2, Formatting.Indented));

                Assert.Equal(clusterName, clusterResource2.Name);
                Assert.Equal(location.ToLower(), clusterResource2.Location.ToLower());
                Assert.Equal(subnetId, clusterResource2.Properties.DelegatedManagementSubnetId);
                Assert.Null(clusterResource2.Properties.InitialCassandraAdminPassword);
                Assert.Equal("Cassandra", clusterResource2.Properties.AuthenticationMethod);
                Assert.Equal("3.11", clusterResource2.Properties.CassandraVersion);
                Assert.Equal("Succeeded", clusterResource2.Properties.ProvisioningState);
                Assert.NotNull(clusterResource2.Properties.ExternalSeedNodes);
                Assert.NotEmpty(clusterResource2.Properties.ExternalSeedNodes);
                Assert.False(clusterResource2.Properties.Deallocated);

                DataCenterResource dataCenterPutResource = new DataCenterResource
                {
                    Properties = new DataCenterResourceProperties
                    {
                        DataCenterLocation = location,
                        DelegatedSubnetId  = subnetId,
                        NodeCount          = 3
                    }
                };
                this.output.WriteLine($"Creating data center {dcName}. Put request:");
                this.output.WriteLine(JsonConvert.SerializeObject(dataCenterPutResource, Formatting.Indented));
                DataCenterResource dcResource = (await dcClient
                                                 .CreateUpdateWithHttpMessagesAsync(this.fixture.ResourceGroupName, clusterName, dcName,
                                                                                    dataCenterPutResource)).Body;
                this.output.WriteLine("Response:");
                this.output.WriteLine(JsonConvert.SerializeObject(dcResource, Formatting.Indented));

                Assert.Equal(location.ToLower(), dcResource.Properties.DataCenterLocation.ToLower());
                Assert.Equal(subnetId, dcResource.Properties.DelegatedSubnetId);
                Assert.Equal(3, dcResource.Properties.NodeCount);
                Assert.Equal(3, dcResource.Properties.SeedNodes.Count);

                await clusterClient.DeallocateWithHttpMessagesAsync(this.fixture.ResourceGroupName, clusterName);

                ClusterResource clusterResource3 = await clusterClient.GetAsync(this.fixture.ResourceGroupName, clusterName);

                Assert.True(clusterResource3.Properties.Deallocated);

                await clusterClient.StartWithHttpMessagesAsync(this.fixture.ResourceGroupName, clusterName);

                ClusterResource clusterResource4 = await clusterClient.GetAsync(this.fixture.ResourceGroupName, clusterName);

                Assert.False(clusterResource4.Properties.Deallocated);

                this.output.WriteLine($"Deleting data center {dcName}.");
                await dcClient.DeleteWithHttpMessagesAsync(this.fixture.ResourceGroupName, clusterName, dcName);

                this.output.WriteLine($"Deleting cluster {clusterName}.");
                await clusterClient.DeleteWithHttpMessagesAsync(this.fixture.ResourceGroupName, clusterName);
            }
        }