From b07dadeb4ad3fd7e61ad71e0dd2a65251fc4abcb Mon Sep 17 00:00:00 2001 From: Artem Lifshits Date: Tue, 11 Feb 2025 10:59:21 +0100 Subject: [PATCH 1/2] kibana --- openstack/css/v1/kibana/Disable.go | 35 ++++++++++++++++ openstack/css/v1/kibana/DisableAccess.go | 21 ++++++++++ openstack/css/v1/kibana/Enable.go | 52 ++++++++++++++++++++++++ openstack/css/v1/kibana/UpdateAccess.go | 34 ++++++++++++++++ 4 files changed, 142 insertions(+) create mode 100644 openstack/css/v1/kibana/Disable.go create mode 100644 openstack/css/v1/kibana/DisableAccess.go create mode 100644 openstack/css/v1/kibana/Enable.go create mode 100644 openstack/css/v1/kibana/UpdateAccess.go diff --git a/openstack/css/v1/kibana/Disable.go b/openstack/css/v1/kibana/Disable.go new file mode 100644 index 000000000..9835f1801 --- /dev/null +++ b/openstack/css/v1/kibana/Disable.go @@ -0,0 +1,35 @@ +package kibana + +import ( + "strings" + + golangsdk "github.com/opentelekomcloud/gophertelekomcloud" + "github.com/opentelekomcloud/gophertelekomcloud/internal/build" +) + +func Disable(client *golangsdk.ServiceClient, opts ManageOpts) error { + request := Whitelist{ + EipSize: opts.EipSize, + ElbWhiteList: KibanaPublicWhitelist{ + EnableWhitelist: opts.EnableWhiteList, + WhiteList: opts.Whitelist, + }, + } + + b, err := build.RequestBody(request, "") + if err != nil { + return err + } + + url := client.ServiceURL("clusters", opts.ClusterId, "publickibana", "close") + convertedURL := strings.Replace(url, "v1.0", "v1.0/extend", 1) + + _, err = client.Put(convertedURL, b, nil, &golangsdk.RequestOpts{ + OkCodes: []int{200}, + MoreHeaders: map[string]string{ + "Content-Type": "application/json", + }, + }) + + return err +} diff --git a/openstack/css/v1/kibana/DisableAccess.go b/openstack/css/v1/kibana/DisableAccess.go new file mode 100644 index 000000000..31136ff73 --- /dev/null +++ b/openstack/css/v1/kibana/DisableAccess.go @@ -0,0 +1,21 @@ +package kibana + +import ( + "strings" + + golangsdk "github.com/opentelekomcloud/gophertelekomcloud" +) + +func DisableAccess(client *golangsdk.ServiceClient, clusterId string) error { + url := client.ServiceURL("clusters", clusterId, "publickibana", "whitelist", "close") + convertedURL := strings.Replace(url, "v1.0", "v1.0/extend", 1) + + _, err := client.Put(convertedURL, nil, nil, &golangsdk.RequestOpts{ + OkCodes: []int{200}, + MoreHeaders: map[string]string{ + "Content-Type": "application/json", + }, + }) + + return err +} diff --git a/openstack/css/v1/kibana/Enable.go b/openstack/css/v1/kibana/Enable.go new file mode 100644 index 000000000..247ba04cd --- /dev/null +++ b/openstack/css/v1/kibana/Enable.go @@ -0,0 +1,52 @@ +package kibana + +import ( + "strings" + + golangsdk "github.com/opentelekomcloud/gophertelekomcloud" + "github.com/opentelekomcloud/gophertelekomcloud/internal/build" +) + +type ManageOpts struct { + ClusterId string `json:"clusterId"` + EipSize int `json:"-"` + EnableWhiteList bool `json:"-"` + Whitelist string `json:"-"` +} + +func Enable(client *golangsdk.ServiceClient, opts ManageOpts) error { + request := Whitelist{ + EipSize: opts.EipSize, + ElbWhiteList: KibanaPublicWhitelist{ + EnableWhitelist: opts.EnableWhiteList, + WhiteList: opts.Whitelist, + }, + } + + b, err := build.RequestBody(request, "") + if err != nil { + return err + } + + url := client.ServiceURL("clusters", opts.ClusterId, "publickibana", "open") + convertedURL := strings.Replace(url, "v1.0", "v1.0/extend", 1) + + _, err = client.Post(convertedURL, b, nil, &golangsdk.RequestOpts{ + OkCodes: []int{200}, + MoreHeaders: map[string]string{ + "Content-Type": "application/json", + }, + }) + + return err +} + +type Whitelist struct { + EipSize int `json:"eipSize"` + ElbWhiteList KibanaPublicWhitelist `json:"elbWhiteList"` +} + +type KibanaPublicWhitelist struct { + EnableWhitelist bool `json:"enableWhiteList"` + WhiteList string `json:"whiteList"` +} diff --git a/openstack/css/v1/kibana/UpdateAccess.go b/openstack/css/v1/kibana/UpdateAccess.go new file mode 100644 index 000000000..e7447a00a --- /dev/null +++ b/openstack/css/v1/kibana/UpdateAccess.go @@ -0,0 +1,34 @@ +package kibana + +import ( + "strings" + + golangsdk "github.com/opentelekomcloud/gophertelekomcloud" + "github.com/opentelekomcloud/gophertelekomcloud/internal/build" +) + +func UpdateAccess(client *golangsdk.ServiceClient, clusterId, whitelist string) error { + config := Config{ + WhiteList: whitelist, + } + b, err := build.RequestBody(config, "") + if err != nil { + return err + } + + url := client.ServiceURL("clusters", clusterId, "publickibana", "whitelist", "update") + convertedURL := strings.Replace(url, "v1.0", "v1.0/extend", 1) + + _, err = client.Post(convertedURL, b, nil, &golangsdk.RequestOpts{ + OkCodes: []int{200}, + MoreHeaders: map[string]string{ + "Content-Type": "application/json", + }, + }) + + return err +} + +type Config struct { + WhiteList string `json:"whiteList"` +} From d43d90b610448199f90ec9a93c927e72239da955 Mon Sep 17 00:00:00 2001 From: Artem Lifshits Date: Tue, 11 Feb 2025 11:36:46 +0100 Subject: [PATCH 2/2] kibana 2 --- acceptance/openstack/css/v1/clusters_test.go | 99 ++++++++++++++++++++ openstack/css/v1/kibana/Disable.go | 7 +- openstack/css/v1/kibana/DisableAccess.go | 7 +- openstack/css/v1/kibana/Enable.go | 7 +- openstack/css/v1/kibana/Update.go | 36 +++++++ openstack/css/v1/kibana/UpdateAccess.go | 7 +- 6 files changed, 139 insertions(+), 24 deletions(-) create mode 100644 openstack/css/v1/kibana/Update.go diff --git a/acceptance/openstack/css/v1/clusters_test.go b/acceptance/openstack/css/v1/clusters_test.go index 5260b92c2..eb5953831 100644 --- a/acceptance/openstack/css/v1/clusters_test.go +++ b/acceptance/openstack/css/v1/clusters_test.go @@ -8,6 +8,7 @@ import ( "github.com/opentelekomcloud/gophertelekomcloud/acceptance/openstack" "github.com/opentelekomcloud/gophertelekomcloud/acceptance/tools" "github.com/opentelekomcloud/gophertelekomcloud/openstack/css/v1/clusters" + "github.com/opentelekomcloud/gophertelekomcloud/openstack/css/v1/kibana" th "github.com/opentelekomcloud/gophertelekomcloud/testhelper" ) @@ -185,3 +186,101 @@ func TestClusterPublicAccess(t *testing.T) { err = clusters.WaitForCluster(client, managePublicOpts.ClusterId, timeout) th.AssertNoErr(t, err) } + +func TestClusterKibanaPublicAccess(t *testing.T) { + client, err := clients.NewCssV1Client() + th.AssertNoErr(t, err) + + vpcID := clients.EnvOS.GetEnv("VPC_ID") + subnetID := clients.EnvOS.GetEnv("NETWORK_ID") + + if vpcID == "" || subnetID == "" { + t.Skip("Both `VPC_ID` and `NETWORK_ID` need to be defined") + } + + sgID := openstack.DefaultSecurityGroup(t) + + opts := clusters.CreateOpts{ + Name: tools.RandomString("css-cluster-", 4), + Instance: &clusters.InstanceSpec{ + Flavor: "css.medium.8", + + Volume: &clusters.Volume{ + Type: "COMMON", + Size: 40, + }, + Nics: &clusters.Nics{ + VpcID: vpcID, + SubnetID: subnetID, + SecurityGroupID: sgID, + }, + AvailabilityZone: "eu-de-02", + }, + InstanceNum: 1, + DiskEncryption: &clusters.DiskEncryption{ + Encrypted: "0", + }, + HttpsEnabled: "true", + AuthorityEnabled: true, + AdminPassword: "Test123!@#", + Datastore: &clusters.Datastore{ + Version: "7.6.2", + Type: "elasticsearch", + }, + } + created, err := clusters.Create(client, opts) + th.AssertNoErr(t, err) + + defer func() { + err = clusters.Delete(client, created.ID) + th.AssertNoErr(t, err) + }() + + got, err := clusters.Get(client, created.ID) + th.AssertNoErr(t, err) + + log.Printf("Creating cluster, ID: %s", got.ID) + th.AssertEquals(t, created.ID, got.ID) + th.AssertEquals(t, created.Name, got.Name) + + th.CheckNoErr(t, clusters.WaitForClusterOperationSucces(client, created.ID, timeout)) + + clusterId := got.ID + + manageKibanaOpts := kibana.ManageOpts{ + ClusterId: clusterId, + EipSize: 5, + EnableWhiteList: true, + Whitelist: "192.168.1.1", + } + + err = kibana.Enable(client, manageKibanaOpts) + th.AssertNoErr(t, err) + + err = clusters.WaitForCluster(client, manageKibanaOpts.ClusterId, timeout) + th.AssertNoErr(t, err) + + err = kibana.Update(client, clusterId, 10) + th.AssertNoErr(t, err) + + err = clusters.WaitForCluster(client, manageKibanaOpts.ClusterId, timeout) + th.AssertNoErr(t, err) + + err = kibana.Disable(client, manageKibanaOpts) + th.AssertNoErr(t, err) + + err = clusters.WaitForCluster(client, manageKibanaOpts.ClusterId, timeout) + th.AssertNoErr(t, err) + + err = kibana.UpdateAccess(client, clusterId, manageKibanaOpts.Whitelist) + th.AssertNoErr(t, err) + + err = clusters.WaitForCluster(client, manageKibanaOpts.ClusterId, timeout) + th.AssertNoErr(t, err) + + err = kibana.DisableAccess(client, clusterId) + th.AssertNoErr(t, err) + + err = clusters.WaitForCluster(client, manageKibanaOpts.ClusterId, timeout) + th.AssertNoErr(t, err) +} diff --git a/openstack/css/v1/kibana/Disable.go b/openstack/css/v1/kibana/Disable.go index 9835f1801..c576d3883 100644 --- a/openstack/css/v1/kibana/Disable.go +++ b/openstack/css/v1/kibana/Disable.go @@ -1,8 +1,6 @@ package kibana import ( - "strings" - golangsdk "github.com/opentelekomcloud/gophertelekomcloud" "github.com/opentelekomcloud/gophertelekomcloud/internal/build" ) @@ -21,10 +19,7 @@ func Disable(client *golangsdk.ServiceClient, opts ManageOpts) error { return err } - url := client.ServiceURL("clusters", opts.ClusterId, "publickibana", "close") - convertedURL := strings.Replace(url, "v1.0", "v1.0/extend", 1) - - _, err = client.Put(convertedURL, b, nil, &golangsdk.RequestOpts{ + _, err = client.Put(client.ServiceURL("clusters", opts.ClusterId, "publickibana", "close"), b, nil, &golangsdk.RequestOpts{ OkCodes: []int{200}, MoreHeaders: map[string]string{ "Content-Type": "application/json", diff --git a/openstack/css/v1/kibana/DisableAccess.go b/openstack/css/v1/kibana/DisableAccess.go index 31136ff73..e1067e937 100644 --- a/openstack/css/v1/kibana/DisableAccess.go +++ b/openstack/css/v1/kibana/DisableAccess.go @@ -1,16 +1,11 @@ package kibana import ( - "strings" - golangsdk "github.com/opentelekomcloud/gophertelekomcloud" ) func DisableAccess(client *golangsdk.ServiceClient, clusterId string) error { - url := client.ServiceURL("clusters", clusterId, "publickibana", "whitelist", "close") - convertedURL := strings.Replace(url, "v1.0", "v1.0/extend", 1) - - _, err := client.Put(convertedURL, nil, nil, &golangsdk.RequestOpts{ + _, err := client.Put(client.ServiceURL("clusters", clusterId, "publickibana", "whitelist", "close"), nil, nil, &golangsdk.RequestOpts{ OkCodes: []int{200}, MoreHeaders: map[string]string{ "Content-Type": "application/json", diff --git a/openstack/css/v1/kibana/Enable.go b/openstack/css/v1/kibana/Enable.go index 247ba04cd..adf353d64 100644 --- a/openstack/css/v1/kibana/Enable.go +++ b/openstack/css/v1/kibana/Enable.go @@ -1,8 +1,6 @@ package kibana import ( - "strings" - golangsdk "github.com/opentelekomcloud/gophertelekomcloud" "github.com/opentelekomcloud/gophertelekomcloud/internal/build" ) @@ -28,10 +26,7 @@ func Enable(client *golangsdk.ServiceClient, opts ManageOpts) error { return err } - url := client.ServiceURL("clusters", opts.ClusterId, "publickibana", "open") - convertedURL := strings.Replace(url, "v1.0", "v1.0/extend", 1) - - _, err = client.Post(convertedURL, b, nil, &golangsdk.RequestOpts{ + _, err = client.Post(client.ServiceURL("clusters", opts.ClusterId, "publickibana", "open"), b, nil, &golangsdk.RequestOpts{ OkCodes: []int{200}, MoreHeaders: map[string]string{ "Content-Type": "application/json", diff --git a/openstack/css/v1/kibana/Update.go b/openstack/css/v1/kibana/Update.go new file mode 100644 index 000000000..f05c7a9db --- /dev/null +++ b/openstack/css/v1/kibana/Update.go @@ -0,0 +1,36 @@ +package kibana + +import ( + golangsdk "github.com/opentelekomcloud/gophertelekomcloud" + "github.com/opentelekomcloud/gophertelekomcloud/internal/build" +) + +func Update(client *golangsdk.ServiceClient, clusterId string, size int) error { + request := UpdateOpts{ + Bandwidth: Bandwidth{ + Size: size, + }, + } + + b, err := build.RequestBody(request, "") + if err != nil { + return err + } + + _, err = client.Post(client.ServiceURL("clusters", clusterId, "publickibana", "bandwidth"), b, nil, &golangsdk.RequestOpts{ + OkCodes: []int{200}, + MoreHeaders: map[string]string{ + "Content-Type": "application/json", + }, + }) + + return err +} + +type UpdateOpts struct { + Bandwidth Bandwidth `json:"bandWidth" required:"true"` +} + +type Bandwidth struct { + Size int `json:"size" required:"true"` +} diff --git a/openstack/css/v1/kibana/UpdateAccess.go b/openstack/css/v1/kibana/UpdateAccess.go index e7447a00a..45338c0c0 100644 --- a/openstack/css/v1/kibana/UpdateAccess.go +++ b/openstack/css/v1/kibana/UpdateAccess.go @@ -1,8 +1,6 @@ package kibana import ( - "strings" - golangsdk "github.com/opentelekomcloud/gophertelekomcloud" "github.com/opentelekomcloud/gophertelekomcloud/internal/build" ) @@ -16,10 +14,7 @@ func UpdateAccess(client *golangsdk.ServiceClient, clusterId, whitelist string) return err } - url := client.ServiceURL("clusters", clusterId, "publickibana", "whitelist", "update") - convertedURL := strings.Replace(url, "v1.0", "v1.0/extend", 1) - - _, err = client.Post(convertedURL, b, nil, &golangsdk.RequestOpts{ + _, err = client.Post(client.ServiceURL("clusters", clusterId, "publickibana", "whitelist", "update"), b, nil, &golangsdk.RequestOpts{ OkCodes: []int{200}, MoreHeaders: map[string]string{ "Content-Type": "application/json",