Skip to content

Commit

Permalink
[LTS]: Refactoring to use new APIs (#2041)
Browse files Browse the repository at this point in the history
[LTS]: Refactoring to use new APIs

Summary of the Pull Request
Update to use new API for LTS resources.
PR Checklist

 Refers to: #2038
 Tests passed.
 Documentation updated.
 Schema updated.
 Release notes added.

Acceptance Steps Performed
=== RUN   TestAccLogTankGroupV2_basic
--- PASS: TestAccLogTankGroupV2_basic (34.43s)
PASS

Process finished with the exit code 0

=== RUN   TestAccLogTankTopicV2_basic
--- PASS: TestAccLogTankTopicV2_basic (31.00s)
PASS

Process finished with the exit code 0

Reviewed-by: Aloento
Reviewed-by: Anton Sidelnikov
  • Loading branch information
artem-lifshits committed Jan 10, 2023
1 parent b5a33b3 commit 7a6736c
Show file tree
Hide file tree
Showing 10 changed files with 176 additions and 58 deletions.
6 changes: 6 additions & 0 deletions docs/resources/lts_loggroup.md
Expand Up @@ -34,6 +34,12 @@ The following attributes are exported:

* `ttl_in_days` - Specifies the log expiration time. The value is fixed to 7 days.

## Attributes Reference

The following attributes are exported:

* `creation_time` - Specifies the time when a log group was created.

## Import

Log group can be imported using the `id`, e.g.
Expand Down
2 changes: 1 addition & 1 deletion docs/resources/lts_logtopic.md
Expand Up @@ -39,7 +39,7 @@ The following attributes are exported:

* `topic_name` - See Argument Reference above.

* `index_enabled` - Specifies the search switch. When index is enabled, the topic allows you to search for logs by keyword.
* `creation_time` - Specifies the time when a log group was created.

## Import

Expand Down
2 changes: 1 addition & 1 deletion go.mod
Expand Up @@ -14,7 +14,7 @@ require (
github.com/jinzhu/copier v0.3.5
github.com/keybase/go-crypto v0.0.0-20200123153347-de78d2cb44f4
github.com/mitchellh/go-homedir v1.1.0
github.com/opentelekomcloud/gophertelekomcloud v0.5.27-0.20230108080138-826e899720ed
github.com/opentelekomcloud/gophertelekomcloud v0.5.27-0.20230110094736-54b55975ed5c
github.com/unknwon/com v1.0.1
golang.org/x/crypto v0.0.0-20220517005047-85d78b3ac167
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9
Expand Down
4 changes: 2 additions & 2 deletions go.sum
Expand Up @@ -207,8 +207,8 @@ github.com/nsf/jsondiff v0.0.0-20200515183724-f29ed568f4ce h1:RPclfga2SEJmgMmz2k
github.com/nsf/jsondiff v0.0.0-20200515183724-f29ed568f4ce/go.mod h1:uFMI8w+ref4v2r9jz+c9i1IfIttS/OkmLfrk1jne5hs=
github.com/oklog/run v1.0.0 h1:Ru7dDtJNOyC66gQ5dQmaCa0qIsAUFY3sFpK1Xk8igrw=
github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA=
github.com/opentelekomcloud/gophertelekomcloud v0.5.27-0.20230108080138-826e899720ed h1:S9aCB+7zCND6vMk82ECx1UzdGUzprkS36xDrL8gVFFs=
github.com/opentelekomcloud/gophertelekomcloud v0.5.27-0.20230108080138-826e899720ed/go.mod h1:/QD0ZIzm3zMdE0iBSAP3+Z9eCViU2PgnQqp4KGrpR/M=
github.com/opentelekomcloud/gophertelekomcloud v0.5.27-0.20230110094736-54b55975ed5c h1:TOdxLN1shE19C1rufdBZR1mlV5nBvKxDXk+OCfXqr80=
github.com/opentelekomcloud/gophertelekomcloud v0.5.27-0.20230110094736-54b55975ed5c/go.mod h1:/QD0ZIzm3zMdE0iBSAP3+Z9eCViU2PgnQqp4KGrpR/M=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
Expand Down
Expand Up @@ -7,15 +7,15 @@ import (
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
"github.com/hashicorp/terraform-plugin-sdk/v2/terraform"
golangsdk "github.com/opentelekomcloud/gophertelekomcloud"
"github.com/opentelekomcloud/gophertelekomcloud/openstack/lts/v2/loggroups"
"github.com/opentelekomcloud/gophertelekomcloud/openstack/lts/v2/groups"

"github.com/opentelekomcloud/terraform-provider-opentelekomcloud/opentelekomcloud/acceptance/common"
"github.com/opentelekomcloud/terraform-provider-opentelekomcloud/opentelekomcloud/acceptance/env"
"github.com/opentelekomcloud/terraform-provider-opentelekomcloud/opentelekomcloud/common/cfg"
)

func TestAccLogTankGroupV2_basic(t *testing.T) {
var group loggroups.LogGroup
var group groups.LogGroup
resource.Test(t, resource.TestCase{
PreCheck: func() { common.TestAccPreCheck(t) },
ProviderFactories: common.TestAccProviderFactories,
Expand All @@ -32,6 +32,17 @@ func TestAccLogTankGroupV2_basic(t *testing.T) {
"opentelekomcloud_logtank_group_v2.testacc_group", "ttl_in_days", "7"),
),
},
{
Config: testAccLogTankGroupV2_updated,
Check: resource.ComposeTestCheckFunc(
testAccCheckLogTankGroupV2Exists(
"opentelekomcloud_logtank_group_v2.testacc_group", &group),
resource.TestCheckResourceAttr(
"opentelekomcloud_logtank_group_v2.testacc_group", "group_name", "testacc_group"),
resource.TestCheckResourceAttr(
"opentelekomcloud_logtank_group_v2.testacc_group", "ttl_in_days", "6"),
),
},
},
})
}
Expand All @@ -48,18 +59,25 @@ func testAccCheckLogTankGroupV2Destroy(s *terraform.State) error {
continue
}

_, err = loggroups.Get(ltsclient, rs.Primary.ID).Extract()
if err == nil {
return fmt.Errorf("log group (%s) still exists.", rs.Primary.ID)
allGroups, err := groups.ListLogGroups(ltsclient)
if err != nil {
return fmt.Errorf("error listing lts groups: %s", err)
}

for _, group := range allGroups {
if group.LogGroupId == rs.Primary.ID {
return fmt.Errorf("log group (%s) still exists", rs.Primary.ID)
}
}

if _, ok := err.(golangsdk.ErrDefault404); !ok {
return err
}
}
return nil
}

func testAccCheckLogTankGroupV2Exists(n string, group *loggroups.LogGroup) resource.TestCheckFunc {
func testAccCheckLogTankGroupV2Exists(n string, group *groups.LogGroup) resource.TestCheckFunc {
return func(s *terraform.State) error {
rs, ok := s.RootModule().Resources[n]
if !ok {
Expand All @@ -76,13 +94,17 @@ func testAccCheckLogTankGroupV2Exists(n string, group *loggroups.LogGroup) resou
return fmt.Errorf("error creating OpenTelekomCloud LTS client: %s", err)
}

var found *loggroups.LogGroup

found, err = loggroups.Get(ltsclient, rs.Primary.ID).Extract()
allGroups, err := groups.ListLogGroups(ltsclient)
if err != nil {
return err
}
*group = *found

for _, ltsGroup := range allGroups {
if ltsGroup.LogGroupId == rs.Primary.ID {
*group = ltsGroup
break
}
}

return nil
}
Expand All @@ -94,3 +116,10 @@ resource "opentelekomcloud_logtank_group_v2" "testacc_group" {
ttl_in_days = 7
}
`

const testAccLogTankGroupV2_updated = `
resource "opentelekomcloud_logtank_group_v2" "testacc_group" {
group_name = "testacc_group"
ttl_in_days = 6
}
`
Expand Up @@ -7,15 +7,15 @@ import (
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
"github.com/hashicorp/terraform-plugin-sdk/v2/terraform"
golangsdk "github.com/opentelekomcloud/gophertelekomcloud"
"github.com/opentelekomcloud/gophertelekomcloud/openstack/lts/v2/logtopics"
"github.com/opentelekomcloud/gophertelekomcloud/openstack/lts/v2/streams"

"github.com/opentelekomcloud/terraform-provider-opentelekomcloud/opentelekomcloud/acceptance/common"
"github.com/opentelekomcloud/terraform-provider-opentelekomcloud/opentelekomcloud/acceptance/env"
"github.com/opentelekomcloud/terraform-provider-opentelekomcloud/opentelekomcloud/common/cfg"
)

func TestAccLogTankTopicV2_basic(t *testing.T) {
var topic logtopics.LogTopic
var topic streams.LogStream
resource.Test(t, resource.TestCase{
PreCheck: func() { common.TestAccPreCheck(t) },
ProviderFactories: common.TestAccProviderFactories,
Expand Down Expand Up @@ -46,19 +46,29 @@ func testAccCheckLogTankTopicV2Destroy(s *terraform.State) error {
continue
}

group_id := rs.Primary.Attributes["group_id"]
_, err = logtopics.Get(ltsclient, group_id, rs.Primary.ID).Extract()
if err == nil {
return fmt.Errorf("log topic (%s) still exists.", rs.Primary.ID)
groupId := rs.Primary.Attributes["group_id"]
allStreams, err := streams.ListLogStream(ltsclient, groupId)
if err != nil {
if _, ok := err.(golangsdk.ErrDefault400); ok {
return nil
} else {
return err
}
}
for _, stream := range allStreams {
if stream.LogStreamId == rs.Primary.ID {
return fmt.Errorf("log topic (%s) still exists", rs.Primary.ID)
}
}
if _, ok := err.(golangsdk.ErrDefault404); !ok {

if _, ok := err.(golangsdk.ErrDefault400); !ok {
return err
}
}
return nil
}

func testAccCheckLogTankTopicV2Exists(n string, topic *logtopics.LogTopic) resource.TestCheckFunc {
func testAccCheckLogTankTopicV2Exists(n string, topic *streams.LogStream) resource.TestCheckFunc {
return func(s *terraform.State) error {
rs, ok := s.RootModule().Resources[n]
if !ok {
Expand All @@ -75,22 +85,28 @@ func testAccCheckLogTankTopicV2Exists(n string, topic *logtopics.LogTopic) resou
return fmt.Errorf("error creating OpenTelekomCloud LTS client: %s", err)
}

var found *logtopics.LogTopic
group_id := rs.Primary.Attributes["group_id"]

found, err = logtopics.Get(ltsclient, group_id, rs.Primary.ID).Extract()
allStreams, err := streams.ListLogStream(ltsclient, group_id)
if err != nil {
return err
}
*topic = *found

for _, stream := range allStreams {
if stream.LogStreamId == rs.Primary.ID {
*topic = stream
break
}
}

return nil
}
}

const testAccLogTankTopicV2_basic = `
resource "opentelekomcloud_logtank_group_v2" "testacc_group" {
group_name = "testacc_group"
group_name = "testacc_group"
ttl_in_days = 7
}
resource "opentelekomcloud_logtank_topic_v2" "testacc_topic" {
group_id = opentelekomcloud_logtank_group_v2.testacc_group.id
Expand Down
Expand Up @@ -7,7 +7,8 @@ import (
"github.com/hashicorp/go-multierror"
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"github.com/opentelekomcloud/gophertelekomcloud/openstack/lts/v2/loggroups"
golangsdk "github.com/opentelekomcloud/gophertelekomcloud"
"github.com/opentelekomcloud/gophertelekomcloud/openstack/lts/v2/groups"

"github.com/opentelekomcloud/terraform-provider-opentelekomcloud/opentelekomcloud/common"
"github.com/opentelekomcloud/terraform-provider-opentelekomcloud/opentelekomcloud/common/cfg"
Expand All @@ -18,6 +19,7 @@ func ResourceLTSGroupV2() *schema.Resource {
return &schema.Resource{
CreateContext: resourceGroupV2Create,
ReadContext: resourceGroupV2Read,
UpdateContext: resourceGroupV2Update,
DeleteContext: resourceGroupV2Delete,
Importer: &schema.ResourceImporter{
StateContext: schema.ImportStatePassthroughContext,
Expand All @@ -31,7 +33,10 @@ func ResourceLTSGroupV2() *schema.Resource {
},
"ttl_in_days": {
Type: schema.TypeInt,
Optional: true,
Required: true,
},
"creation_time": {
Type: schema.TypeInt,
Computed: true,
},
},
Expand All @@ -45,19 +50,19 @@ func resourceGroupV2Create(ctx context.Context, d *schema.ResourceData, meta int
return fmterr.Errorf("error creating OpenTelekomCloud LTS client: %s", err)
}

createOpts := &loggroups.CreateOpts{
createOpts := groups.CreateOpts{
LogGroupName: d.Get("group_name").(string),
TTL: d.Get("ttl_in_days").(int),
TTLInDays: d.Get("ttl_in_days").(int),
}

log.Printf("[DEBUG] Create Options: %#v", createOpts)

groupCreate, err := loggroups.Create(client, createOpts).Extract()
groupCreate, err := groups.CreateLogGroup(client, createOpts)
if err != nil {
return fmterr.Errorf("error creating log group: %s", err)
}

d.SetId(groupCreate.ID)
d.SetId(groupCreate)
return resourceGroupV2Read(ctx, d, meta)
}

Expand All @@ -68,33 +73,69 @@ func resourceGroupV2Read(_ context.Context, d *schema.ResourceData, meta interfa
return fmterr.Errorf("error creating OpenTelekomCloud LTS client: %s", err)
}

group, err := loggroups.Get(client, d.Id()).Extract()
allGroups, err := groups.ListLogGroups(client)
if err != nil {
return fmterr.Errorf("error getting OpenTelekomCloud log group %s: %s", d.Id(), err)
return fmterr.Errorf("error listing OpenTelekomCloud log groups")
}

var ltsGroup groups.LogGroup
for _, group := range allGroups {
if group.LogGroupId == d.Id() {
ltsGroup = group
break
}
}

log.Printf("[DEBUG] Retrieved Cluster %s: %#v", d.Id(), group)
d.SetId(group.ID)
if ltsGroup.LogGroupId == "" {
return fmterr.Errorf("OpenTelekomCloud log group %s was not found", d.Id())
}

log.Printf("[DEBUG] Retrieved Cluster %s: %#v", d.Id(), ltsGroup)
d.SetId(ltsGroup.LogGroupId)
mErr := multierror.Append(
d.Set("group_name", group.Name),
d.Set("ttl_in_days", group.TTLinDays),
d.Set("group_name", ltsGroup.LogGroupName),
d.Set("ttl_in_days", ltsGroup.TTLInDays),
d.Set("creation_time", ltsGroup.CreationTime),
)
if err := mErr.ErrorOrNil(); err != nil {
return diag.FromErr(err)
}
return nil
}

func resourceGroupV2Update(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
config := meta.(*cfg.Config)
client, err := config.LtsV2Client(config.GetRegion(d))
if err != nil {
return fmterr.Errorf("error creating OpenTelekomCloud LTS client: %s", err)
}

_, err = groups.UpdateLogGroup(client, groups.UpdateLogGroupOpts{
TTLInDays: int32(d.Get("ttl_in_days").(int)),
LogGroupId: d.Id(),
})
if err != nil {
return fmterr.Errorf("error updating OpenTelekomCloud LTS Log Group: %w", err)
}

return resourceGroupV2Read(ctx, d, meta)
}

func resourceGroupV2Delete(_ context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
config := meta.(*cfg.Config)
client, err := config.LtsV2Client(config.GetRegion(d))
if err != nil {
return fmterr.Errorf("error creating OpenTelekomCloud LTS client: %s", err)
}

err = loggroups.Delete(client, d.Id()).ExtractErr()
err = groups.DeleteLogGroup(client, d.Id())
if err != nil {
return common.CheckDeletedDiag(d, err, "Error deleting log group")
if _, ok := err.(golangsdk.ErrDefault400); ok {
d.SetId("")
return nil
} else {
return common.CheckDeletedDiag(d, err, "Error deleting log group")
}
}

d.SetId("")
Expand Down

0 comments on commit 7a6736c

Please sign in to comment.