Skip to content

Commit 6cf1275

Browse files
tutengmaxsxu
andauthored
make sure status optional for name (#82)
Co-authored-by: Max Xu <[email protected]>
1 parent d42282e commit 6cf1275

File tree

3 files changed

+58
-48
lines changed

3 files changed

+58
-48
lines changed

cloud/resource_pulsar_cluster.go

Lines changed: 46 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -50,17 +50,14 @@ func resourcePulsarCluster() *schema.Resource {
5050
// Auto generate the name, so we don't need to check the diff.
5151
return nil
5252
}
53-
if diff.HasChanges([]string{"organization", "name", "instance_name", "location", "pool_member_name"}...) {
53+
if diff.HasChanges([]string{"organization", "name", "instance_name", "location", "pool_member_name", "release_channel"}...) {
5454
return fmt.Errorf("ERROR_UPDATE_PULSAR_CLUSTER: " +
5555
"The pulsar cluster organization, name, instance_name, location, pool_member_name does not support updates, please recreate it")
5656
}
5757
return nil
5858
},
5959
Importer: &schema.ResourceImporter{
6060
StateContext: func(ctx context.Context, d *schema.ResourceData, meta interface{}) ([]*schema.ResourceData, error) {
61-
organizationCluster := strings.Split(d.Id(), "/")
62-
_ = d.Set("organization", organizationCluster[0])
63-
_ = d.Set("name", organizationCluster[1])
6461
err := resourcePulsarClusterRead(ctx, d, meta)
6562
if err.HasError() {
6663
return nil, fmt.Errorf("import %q: %s", d.Id(), err[0].Summary)
@@ -404,7 +401,15 @@ func resourcePulsarClusterCreate(ctx context.Context, d *schema.ResourceData, me
404401
if displayName != "" {
405402
pulsarCluster.Spec.DisplayName = displayName
406403
}
407-
if pulsarInstance.Spec.Type == "serverless" {
404+
if pulsarInstance.IsServerless() {
405+
if computeUnit != 0.5 {
406+
return diag.FromErr(fmt.Errorf("ERROR_CREATE_PULSAR_CLUSTER: " +
407+
"compute_unit must be 0.5 for serverless instance"))
408+
}
409+
if brokerReplicas != 2 {
410+
return diag.FromErr(fmt.Errorf("ERROR_CREATE_PULSAR_CLUSTER: " +
411+
"broker_replicas must be 2 for serverless instance"))
412+
}
408413
pulsarCluster.Annotations = map[string]string{
409414
"cloud.streamnative.io/type": "serverless",
410415
}
@@ -421,10 +426,6 @@ func resourcePulsarClusterCreate(ctx context.Context, d *schema.ResourceData, me
421426
if !ursaEnabled && !pulsarInstance.IsServerless() {
422427
pulsarCluster.Spec.BookKeeper = bookkeeper
423428
}
424-
if displayName == "" && name == "" {
425-
return diag.FromErr(fmt.Errorf("ERROR_CREATE_PULSAR_CLUSTER: " +
426-
"either name or display_name must be provided"))
427-
}
428429
if pool_member_name != "" {
429430
pulsarCluster.Spec.PoolMemberRef = cloudv1alpha1.PoolMemberReference{
430431
Name: pool_member_name,
@@ -442,7 +443,7 @@ func resourcePulsarClusterCreate(ctx context.Context, d *schema.ResourceData, me
442443
}
443444
}
444445
}
445-
if pulsarInstance.Spec.Type == cloudv1alpha1.PulsarInstanceTypeStandard {
446+
if pulsarInstance.Spec.Type != cloudv1alpha1.PulsarInstanceTypeServerless && !pulsarInstance.IsUsingUrsaEngine() {
446447
getPulsarClusterChanged(ctx, pulsarCluster, d)
447448
}
448449
pc, err := clientSet.CloudV1alpha1().PulsarClusters(namespace).Create(ctx, pulsarCluster, metav1.CreateOptions{
@@ -451,8 +452,7 @@ func resourcePulsarClusterCreate(ctx context.Context, d *schema.ResourceData, me
451452
if err != nil {
452453
return diag.FromErr(fmt.Errorf("ERROR_CREATE_PULSAR_CLUSTER: %w", err))
453454
}
454-
d.Set("name", pc.Name)
455-
d.Set("display_name", pc.Spec.DisplayName)
455+
d.SetId(fmt.Sprintf("%s/%s", pc.Namespace, pc.Name))
456456
if pc.Status.Conditions != nil {
457457
ready := false
458458
for _, condition := range pc.Status.Conditions {
@@ -484,36 +484,23 @@ func resourcePulsarClusterCreate(ctx context.Context, d *schema.ResourceData, me
484484
func resourcePulsarClusterRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
485485
namespace := d.Get("organization").(string)
486486
name := d.Get("name").(string)
487-
displayName := d.Get("display_name").(string)
488487
clientSet, err := getClientSet(getFactoryFromMeta(meta))
489488
if err != nil {
490489
return diag.FromErr(fmt.Errorf("ERROR_INIT_CLIENT_ON_READ_PULSAR_CLUSTER: %w", err))
491490
}
492491
var pulsarCluster *cloudv1alpha1.PulsarCluster
493-
if name != "" {
494-
pulsarCluster, err = clientSet.CloudV1alpha1().PulsarClusters(namespace).Get(ctx, name, metav1.GetOptions{})
495-
if err != nil {
496-
if apierrors.IsNotFound(err) {
497-
d.SetId("")
498-
return nil
499-
}
500-
return diag.FromErr(fmt.Errorf("ERROR_READ_PULSAR_CLUSTER: %w", err))
501-
}
502-
} else {
503-
pulsarClusters, err := clientSet.CloudV1alpha1().PulsarClusters(namespace).List(ctx, metav1.ListOptions{})
504-
if err != nil {
505-
return diag.FromErr(fmt.Errorf("ERROR_LIST_PULSAR_CLUSTER: %w", err))
506-
}
507-
for _, cluster := range pulsarClusters.Items {
508-
if cluster.Spec.DisplayName == displayName {
509-
pulsarCluster = &cluster
510-
break
511-
}
512-
}
513-
if pulsarCluster == nil {
514-
return diag.FromErr(fmt.Errorf("ERROR_READ_PULSAR_CLUSTER: "+
515-
"the pulsar cluster with display_name %s does not exist", displayName))
492+
if name == "" {
493+
organizationCluster := strings.Split(d.Id(), "/")
494+
name = organizationCluster[1]
495+
namespace = organizationCluster[0]
496+
}
497+
pulsarCluster, err = clientSet.CloudV1alpha1().PulsarClusters(namespace).Get(ctx, name, metav1.GetOptions{})
498+
if err != nil {
499+
if apierrors.IsNotFound(err) {
500+
d.SetId("")
501+
return nil
516502
}
503+
return diag.FromErr(fmt.Errorf("ERROR_READ_PULSAR_CLUSTER: %w", err))
517504
}
518505
_ = d.Set("ready", "False")
519506
if pulsarCluster.Status.Conditions != nil {
@@ -610,10 +597,10 @@ func resourcePulsarClusterRead(ctx context.Context, d *schema.ResourceData, meta
610597

611598
func resourcePulsarClusterUpdate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
612599
serverless := d.Get("type")
613-
if serverless == cloudv1alpha1.PulsarInstanceTypeServerless {
614-
return diag.FromErr(fmt.Errorf("ERROR_UPDATE_PULSAR_CLUSTER: "+
615-
"updating a cluster under instance of type '%s' is no longer allowed",
616-
cloudv1alpha1.PulsarInstanceTypeServerless))
600+
displayNameChanged := d.HasChange("display_name")
601+
if !displayNameChanged && serverless == string(cloudv1alpha1.PulsarInstanceTypeServerless) {
602+
return diag.FromErr(fmt.Errorf("ERROR_UPDATE_PULSAR_CLUSTER: " +
603+
"only display_name can be updated for serverless instance"))
617604
}
618605
if d.HasChange("organization") {
619606
return diag.FromErr(fmt.Errorf("ERROR_UPDATE_PULSAR_CLUSTER: " +
@@ -641,10 +628,20 @@ func resourcePulsarClusterUpdate(ctx context.Context, d *schema.ResourceData, me
641628
}
642629
namespace := d.Get("organization").(string)
643630
name := d.Get("name").(string)
631+
if d.Get("type") == cloudv1alpha1.PulsarInstanceTypeServerless {
632+
organizationCluster := strings.Split(d.Id(), "/")
633+
namespace = organizationCluster[0]
634+
name = organizationCluster[1]
635+
}
644636
clientSet, err := getClientSet(getFactoryFromMeta(meta))
645637
if err != nil {
646638
return diag.FromErr(fmt.Errorf("ERROR_INIT_CLIENT_ON_READ_PULSAR_CLUSTER: %w", err))
647639
}
640+
if name == "" {
641+
organizationCluster := strings.Split(d.Id(), "/")
642+
name = organizationCluster[1]
643+
namespace = organizationCluster[0]
644+
}
648645
pulsarCluster, err := clientSet.CloudV1alpha1().PulsarClusters(namespace).Get(ctx, name, metav1.GetOptions{})
649646
if err != nil {
650647
return diag.FromErr(fmt.Errorf("ERROR_READ_PULSAR_CLUSTER: %w", err))
@@ -672,10 +669,14 @@ func resourcePulsarClusterUpdate(ctx context.Context, d *schema.ResourceData, me
672669
int64(storageUnit*8*1024*1024*1024), resource.DecimalSI)
673670
}
674671
changed := getPulsarClusterChanged(ctx, pulsarCluster, d)
672+
if displayNameChanged {
673+
displayName := d.Get("display_name").(string)
674+
pulsarCluster.Spec.DisplayName = displayName
675+
}
675676
if d.HasChange("bookie_replicas") ||
676677
d.HasChange("broker_replicas") ||
677678
d.HasChange("compute_unit") ||
678-
d.HasChange("storage_unit") || changed {
679+
d.HasChange("storage_unit") || changed || displayNameChanged {
679680
_, err = clientSet.CloudV1alpha1().PulsarClusters(namespace).Update(ctx, pulsarCluster, metav1.UpdateOptions{
680681
FieldManager: "terraform-update",
681682
})
@@ -708,11 +709,11 @@ func resourcePulsarClusterDelete(ctx context.Context, d *schema.ResourceData, me
708709
return diag.FromErr(fmt.Errorf("ERROR_INIT_CLIENT_ON_DELETE_PULSAR_CLUSTER: %w", err))
709710
}
710711
namespace := d.Get("organization").(string)
711-
t := d.Get("type")
712712
name := d.Get("name").(string)
713-
if t == cloudv1alpha1.PulsarInstanceTypeServerless {
714-
id := strings.Split(d.Id(), "/")
715-
name = id[1]
713+
if name == "" {
714+
organizationCluster := strings.Split(d.Id(), "/")
715+
name = organizationCluster[1]
716+
namespace = organizationCluster[0]
716717
}
717718
err = clientSet.CloudV1alpha1().PulsarClusters(namespace).Delete(ctx, name, metav1.DeleteOptions{})
718719
if err != nil {

examples/pulsarclusters/hosted.tf

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,10 +61,15 @@ resource "streamnative_pulsar_cluster" "test-cluster-1" {
6161
}
6262
}
6363

64+
locals {
65+
depends_on = [streamnative_pulsar_cluster.test-cluster-1]
66+
nsCluster = split("/", streamnative_pulsar_cluster.test-cluster-1.id)
67+
}
68+
6469
data "streamnative_pulsar_cluster" "test-cluster-1" {
6570
depends_on = [streamnative_pulsar_cluster.test-cluster-1]
6671
organization = streamnative_pulsar_cluster.test-cluster-1.organization
67-
name = streamnative_pulsar_cluster.test-cluster-1.name
72+
name = local.nsCluster[1]
6873
}
6974

7075
output "pulsar_cluster_hosted" {

examples/serverless/main.tf

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,13 +54,17 @@ resource "streamnative_pulsar_cluster" "test-serverless" {
5454
display_name = "test-serverless"
5555
instance_name = streamnative_pulsar_instance.test-serverless.name
5656
location = "us-east-2"
57-
release_channel = "rapid"
57+
}
58+
59+
locals {
60+
depends_on = [streamnative_pulsar_cluster.test-serverless]
61+
nsCluster = split("/", streamnative_pulsar_cluster.test-serverless.id)
5862
}
5963

6064
data "streamnative_pulsar_cluster" "test-serverless" {
6165
depends_on = [streamnative_pulsar_cluster.test-serverless]
6266
organization = streamnative_pulsar_cluster.test-serverless.organization
63-
name = streamnative_pulsar_cluster.test-serverless.name
67+
name = local.nsCluster[1]
6468
}
6569

6670
output "pulsar_cluster_serverless" {

0 commit comments

Comments
 (0)