Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

support tags in cce node pool #993

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions docs/resources/cce_node_pool.md
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,8 @@ The following arguments are supported:

* `labels` - (Optional, Map, ForceNew) Tags of a Kubernetes node, key/value pair format. Changing this parameter will create a new resource.

* `tags` - (Optional, Map) Tags of a VM node, key/value pair format.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

According to the Go programming specification, a single line of code should not exceed 120 characters.
The (All) document content should be adjusted later.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed

* `root_volume` - (Required, List, ForceNew) It corresponds to the system disk related configuration. Changing this parameter will create a new resource.

* `data_volumes` - (Required, List, ForceNew) Represents the data disk to be created. Changing this parameter will create a new resource.
Expand Down
35 changes: 35 additions & 0 deletions huaweicloud/resource_huaweicloud_cce_node_pool.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import (
"github.com/huaweicloud/golangsdk"
"github.com/huaweicloud/golangsdk/openstack/cce/v3/nodepools"
"github.com/huaweicloud/golangsdk/openstack/cce/v3/nodes"
"github.com/huaweicloud/golangsdk/openstack/common/tags"
)

func ResourceCCENodePool() *schema.Resource {
Expand Down Expand Up @@ -166,6 +167,7 @@ func ResourceCCENodePool() *schema.Resource {
},
}},
},
"tags": tagsSchema(),
"billing_mode": {
Type: schema.TypeInt,
Computed: true,
Expand Down Expand Up @@ -240,6 +242,11 @@ func ResourceCCENodePool() *schema.Resource {
}
}

func resourceCCENodePoolTags(d *schema.ResourceData) []tags.ResourceTag {
tagRaw := d.Get("tags").(map[string]interface{})
return expandResourceTags(tagRaw)
}

func resourceCCENodePoolCreate(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config)
nodePoolClient, err := config.CceV3Client(GetRegion(d, config))
Expand Down Expand Up @@ -286,6 +293,7 @@ func resourceCCENodePoolCreate(d *schema.ResourceData, meta interface{}) error {
},
ExtendParam: resourceCCEExtendParam(d),
Taints: resourceCCETaint(d),
UserTags: resourceCCENodePoolTags(d),
},
Autoscaling: nodepools.AutoscalingSpec{
Enable: d.Get("scall_enable").(bool),
Expand Down Expand Up @@ -412,6 +420,13 @@ func resourceCCENodePoolRead(d *schema.ResourceData, meta interface{}) error {
return fmt.Errorf("[DEBUG] Error saving root Volume to state for HuaweiCloud Node Pool (%s): %s", d.Id(), err)
}

tagmap := tagsToMap(s.Spec.NodeTemplate.UserTags)
// ignore "CCE-Dynamic-Provisioning-Node"
delete(tagmap, "CCE-Dynamic-Provisioning-Node")
if err := d.Set("tags", tagmap); err != nil {
return fmt.Errorf("Error saving tags to state for CCE Node Pool(%s): %s", d.Id(), err)
}

d.Set("status", s.Status.Phase)

return nil
Expand All @@ -425,6 +440,17 @@ func resourceCCENodePoolUpdate(d *schema.ResourceData, meta interface{}) error {
}

initialNodeCount := d.Get("initial_node_count").(int)
var loginSpec nodes.LoginSpec
if hasFilledOpt(d, "key_pair") {
loginSpec = nodes.LoginSpec{SshKey: d.Get("key_pair").(string)}
} else if hasFilledOpt(d, "password") {
loginSpec = nodes.LoginSpec{
UserPassword: nodes.UserPassword{
Username: "root",
Password: d.Get("password").(string),
},
}
}

updateOpts := nodepools.UpdateOpts{
Kind: "NodePool",
Expand All @@ -441,6 +467,15 @@ func resourceCCENodePoolUpdate(d *schema.ResourceData, meta interface{}) error {
ScaleDownCooldownTime: d.Get("scale_down_cooldown_time").(int),
Priority: d.Get("priority").(int),
},
NodeTemplate: nodes.Spec{
Flavor: d.Get("flavor_id").(string),
Az: d.Get("availability_zone").(string),
Login: loginSpec,
RootVolume: resourceCCERootVolume(d),
DataVolumes: resourceCCEDataVolume(d),
Count: 1,
UserTags: resourceCCENodePoolTags(d),
},
Type: d.Get("type").(string),
},
}
Expand Down
107 changes: 107 additions & 0 deletions huaweicloud/resource_huaweicloud_cce_node_pool_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,41 @@ func TestAccCCENodePool_basic(t *testing.T) {
})
}

func TestAccCCENodePool_tags(t *testing.T) {
var nodePool nodepools.NodePool

rName := fmt.Sprintf("tf-acc-test-%s", acctest.RandString(5))
resourceName := "huaweicloud_cce_node_pool.test"
//clusterName here is used to provide the cluster id to fetch cce node pool.
clusterName := "huaweicloud_cce_cluster.test"

resource.ParallelTest(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
CheckDestroy: testAccCheckCCENodePoolDestroy,
Steps: []resource.TestStep{
{
Config: testAccCCENodePool_tags(rName),
Check: resource.ComposeTestCheckFunc(
testAccCheckCCENodePoolExists(resourceName, clusterName, &nodePool),
resource.TestCheckResourceAttr(resourceName, "name", rName),
resource.TestCheckResourceAttr(resourceName, "tags.test1", "val1"),
resource.TestCheckResourceAttr(resourceName, "tags.test2", "val2"),
),
},
{
Config: testAccCCENodePool_tags_update(rName),
Check: resource.ComposeTestCheckFunc(
testAccCheckCCENodePoolExists(resourceName, clusterName, &nodePool),
resource.TestCheckResourceAttr(resourceName, "name", rName),
resource.TestCheckResourceAttr(resourceName, "tags.test1", "val1_update"),
resource.TestCheckResourceAttr(resourceName, "tags.test2_update", "val2_update"),
),
},
},
})
}

func testAccCheckCCENodePoolDestroy(s *terraform.State) error {
config := testAccProvider.Meta().(*Config)
cceClient, err := config.CceV3Client(HW_REGION_NAME)
Expand Down Expand Up @@ -258,3 +293,75 @@ resource "huaweicloud_cce_node_pool" "test" {
}
`, testAccCCENodePool_Base(rName), rName)
}

func testAccCCENodePool_tags(rName string) string {
return fmt.Sprintf(`
%s
resource "huaweicloud_cce_node_pool" "test" {
cluster_id = huaweicloud_cce_cluster.test.id
name = "%s"
os = "EulerOS 2.5"
flavor_id = "s6.large.2"
initial_node_count = 1
availability_zone = data.huaweicloud_availability_zones.test.names[0]
key_pair = huaweicloud_compute_keypair.test.name
scall_enable = false
min_node_count = 0
max_node_count = 0
scale_down_cooldown_time = 0
priority = 0
type = "vm"
root_volume {
size = 40
volumetype = "SSD"
}
data_volumes {
size = 100
volumetype = "SSD"
}
tags = {
test1 = "val1"
test2 = "val2"
}
}
`, testAccCCENodePool_Base(rName), rName)
}

func testAccCCENodePool_tags_update(rName string) string {
return fmt.Sprintf(`
%s
resource "huaweicloud_cce_node_pool" "test" {
cluster_id = huaweicloud_cce_cluster.test.id
name = "%s"
os = "EulerOS 2.5"
flavor_id = "s6.large.2"
initial_node_count = 1
availability_zone = data.huaweicloud_availability_zones.test.names[0]
key_pair = huaweicloud_compute_keypair.test.name
scall_enable = false
min_node_count = 0
max_node_count = 0
scale_down_cooldown_time = 0
priority = 0
type = "vm"
root_volume {
size = 40
volumetype = "SSD"
}
data_volumes {
size = 100
volumetype = "SSD"
}
tags = {
test1 = "val1_update"
test2_update = "val2_update"
}
}
`, testAccCCENodePool_Base(rName), rName)
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.