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

[LTS]: Refactoring to use new APIs #2041

Merged
merged 2 commits into from Jan 10, 2023
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.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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