Skip to content

Commit f784407

Browse files
[CES]: APIv2 implementation (#903)
1 parent d96673e commit f784407

File tree

14 files changed

+870
-0
lines changed

14 files changed

+870
-0
lines changed

acceptance/clients/clients.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -971,6 +971,17 @@ func NewCesV1Client() (client *golangsdk.ServiceClient, err error) {
971971
})
972972
}
973973

974+
// NewCesV2Client returns authenticated CES v2 client
975+
func NewCesV2Client() (client *golangsdk.ServiceClient, err error) {
976+
cc, err := CloudAndClient()
977+
if err != nil {
978+
return nil, err
979+
}
980+
return openstack.NewCESV2(cc.ProviderClient, golangsdk.EndpointOpts{
981+
Region: cc.RegionName,
982+
})
983+
}
984+
974985
// NewLtsV2Client returns authenticated LTS v2 client
975986
func NewLtsV2Client() (client *golangsdk.ServiceClient, err error) {
976987
cc, err := CloudAndClient()
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
package v2
2+
3+
import (
4+
"testing"
5+
6+
"github.com/opentelekomcloud/gophertelekomcloud/acceptance/clients"
7+
"github.com/opentelekomcloud/gophertelekomcloud/openstack/ces/v2/alarms"
8+
"github.com/opentelekomcloud/gophertelekomcloud/openstack/common/pointerto"
9+
th "github.com/opentelekomcloud/gophertelekomcloud/testhelper"
10+
)
11+
12+
func TestAlarmsCRUD(t *testing.T) {
13+
client, err := clients.NewCesV2Client()
14+
th.AssertNoErr(t, err)
15+
16+
t.Log("Attempting to create alarm rule")
17+
createOpts := alarms.CreateOpts{
18+
Name: "test-alarm-v2-acc",
19+
Namespace: "SYS.ECS",
20+
Type: "MULTI_INSTANCE",
21+
Resources: [][]alarms.Dimension{
22+
{
23+
{
24+
Name: "instance_id",
25+
Value: "00000000-0000-0000-0000-000000000001",
26+
},
27+
},
28+
},
29+
Policies: []alarms.Policy{
30+
{
31+
MetricName: "cpu_util",
32+
Period: 300,
33+
Filter: "average",
34+
ComparisonOperator: ">",
35+
Value: 80,
36+
Count: 3,
37+
SuppressDuration: 300,
38+
Level: 2,
39+
},
40+
},
41+
Enabled: pointerto.Bool(false),
42+
NotificationEnabled: pointerto.Bool(false),
43+
}
44+
45+
alarmId, err := alarms.Create(client, createOpts)
46+
th.AssertNoErr(t, err)
47+
48+
t.Cleanup(func() {
49+
t.Log("Attempting to delete alarm rule")
50+
_, err := alarms.Delete(client, alarms.DeleteOpts{
51+
AlarmIds: []string{alarmId},
52+
})
53+
th.AssertNoErr(t, err)
54+
})
55+
56+
t.Log("Attempting to get alarm rule")
57+
listResp, err := alarms.List(client, alarms.ListOpts{
58+
AlarmId: alarmId,
59+
})
60+
th.AssertNoErr(t, err)
61+
th.AssertEquals(t, listResp.Count, 1)
62+
th.AssertEquals(t, listResp.Alarms[0].Name, "test-alarm-v2-acc")
63+
th.AssertEquals(t, listResp.Alarms[0].Enabled, false)
64+
65+
t.Log("Attempting to enable alarm rule")
66+
_, err = alarms.Action(client, alarms.ActionOpts{
67+
AlarmIds: []string{alarmId},
68+
AlarmEnabled: true,
69+
})
70+
th.AssertNoErr(t, err)
71+
72+
t.Log("Attempting to verify alarm rule is enabled")
73+
listResp, err = alarms.List(client, alarms.ListOpts{
74+
AlarmId: alarmId,
75+
})
76+
th.AssertNoErr(t, err)
77+
th.AssertEquals(t, listResp.Alarms[0].Enabled, true)
78+
79+
t.Log("Attempting to disable alarm rule")
80+
_, err = alarms.Action(client, alarms.ActionOpts{
81+
AlarmIds: []string{alarmId},
82+
AlarmEnabled: false,
83+
})
84+
th.AssertNoErr(t, err)
85+
}
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
package v2
2+
3+
import (
4+
"testing"
5+
6+
"github.com/opentelekomcloud/gophertelekomcloud/acceptance/clients"
7+
"github.com/opentelekomcloud/gophertelekomcloud/openstack/ces/v2/alarms"
8+
"github.com/opentelekomcloud/gophertelekomcloud/openstack/ces/v2/policies"
9+
"github.com/opentelekomcloud/gophertelekomcloud/openstack/common/pointerto"
10+
th "github.com/opentelekomcloud/gophertelekomcloud/testhelper"
11+
)
12+
13+
func TestAlarmPolicies(t *testing.T) {
14+
client, err := clients.NewCesV2Client()
15+
th.AssertNoErr(t, err)
16+
17+
t.Log("Attempting to create alarm rule")
18+
createOpts := alarms.CreateOpts{
19+
Name: "test-alarm-policies-acc",
20+
Namespace: "SYS.ECS",
21+
Type: "MULTI_INSTANCE",
22+
Resources: [][]alarms.Dimension{
23+
{
24+
{
25+
Name: "instance_id",
26+
Value: "00000000-0000-0000-0000-000000000001",
27+
},
28+
},
29+
},
30+
Policies: []alarms.Policy{
31+
{
32+
MetricName: "cpu_util",
33+
Period: 300,
34+
Filter: "average",
35+
ComparisonOperator: ">",
36+
Value: 80,
37+
Count: 3,
38+
SuppressDuration: 300,
39+
Level: 2,
40+
},
41+
},
42+
Enabled: pointerto.Bool(false),
43+
NotificationEnabled: pointerto.Bool(false),
44+
}
45+
46+
alarmId, err := alarms.Create(client, createOpts)
47+
th.AssertNoErr(t, err)
48+
49+
t.Cleanup(func() {
50+
t.Log("Attempting to delete alarm rule")
51+
_, err := alarms.Delete(client, alarms.DeleteOpts{
52+
AlarmIds: []string{alarmId},
53+
})
54+
th.AssertNoErr(t, err)
55+
})
56+
57+
t.Log("Attempting to list policies")
58+
listResp, err := policies.List(client, alarmId, policies.ListOpts{})
59+
th.AssertNoErr(t, err)
60+
th.AssertEquals(t, listResp.Count, 1)
61+
th.AssertEquals(t, listResp.Policies[0].MetricName, "cpu_util")
62+
th.AssertEquals(t, listResp.Policies[0].Value, float64(80))
63+
64+
t.Log("Attempting to update policies")
65+
_, err = policies.Update(client, alarmId, policies.UpdateOpts{
66+
Policies: []policies.Policy{
67+
{
68+
MetricName: "cpu_util",
69+
Period: 300,
70+
Filter: "average",
71+
ComparisonOperator: ">=",
72+
Value: 90,
73+
Count: 5,
74+
SuppressDuration: 600,
75+
Level: 1,
76+
},
77+
},
78+
})
79+
th.AssertNoErr(t, err)
80+
81+
t.Log("Attempting to verify policies were updated")
82+
listResp, err = policies.List(client, alarmId, policies.ListOpts{})
83+
th.AssertNoErr(t, err)
84+
th.AssertEquals(t, listResp.Policies[0].ComparisonOperator, ">=")
85+
th.AssertEquals(t, listResp.Policies[0].Value, float64(90))
86+
th.AssertEquals(t, listResp.Policies[0].Count, 5)
87+
th.AssertEquals(t, listResp.Policies[0].Level, 1)
88+
}
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
package v2
2+
3+
import (
4+
"testing"
5+
6+
"github.com/opentelekomcloud/gophertelekomcloud/acceptance/clients"
7+
"github.com/opentelekomcloud/gophertelekomcloud/openstack/ces/v2/alarms"
8+
"github.com/opentelekomcloud/gophertelekomcloud/openstack/ces/v2/resources"
9+
"github.com/opentelekomcloud/gophertelekomcloud/openstack/common/pointerto"
10+
th "github.com/opentelekomcloud/gophertelekomcloud/testhelper"
11+
)
12+
13+
func TestAlarmResources(t *testing.T) {
14+
client, err := clients.NewCesV2Client()
15+
th.AssertNoErr(t, err)
16+
17+
t.Log("Attempting to create alarm rule")
18+
createOpts := alarms.CreateOpts{
19+
Name: "test-alarm-resources-acc",
20+
Namespace: "SYS.ECS",
21+
Type: "MULTI_INSTANCE",
22+
Resources: [][]alarms.Dimension{
23+
{
24+
{
25+
Name: "instance_id",
26+
Value: "00000000-0000-0000-0000-000000000001",
27+
},
28+
},
29+
},
30+
Policies: []alarms.Policy{
31+
{
32+
MetricName: "cpu_util",
33+
Period: 300,
34+
Filter: "average",
35+
ComparisonOperator: ">",
36+
Value: 80,
37+
Count: 3,
38+
SuppressDuration: 300,
39+
Level: 2,
40+
},
41+
},
42+
Enabled: pointerto.Bool(false),
43+
NotificationEnabled: pointerto.Bool(false),
44+
}
45+
46+
alarmId, err := alarms.Create(client, createOpts)
47+
th.AssertNoErr(t, err)
48+
49+
t.Cleanup(func() {
50+
t.Log("Attempting to delete alarm rule")
51+
_, err := alarms.Delete(client, alarms.DeleteOpts{
52+
AlarmIds: []string{alarmId},
53+
})
54+
th.AssertNoErr(t, err)
55+
})
56+
57+
t.Log("Attempting to list resources")
58+
listResp, err := resources.List(client, alarmId, resources.ListOpts{})
59+
th.AssertNoErr(t, err)
60+
th.AssertEquals(t, listResp.Count, 1)
61+
62+
t.Log("Attempting to add resources")
63+
newResources := [][]resources.Dimension{
64+
{
65+
{
66+
Name: "instance_id",
67+
Value: "00000000-0000-0000-0000-000000000002",
68+
},
69+
},
70+
{
71+
{
72+
Name: "instance_id",
73+
Value: "00000000-0000-0000-0000-000000000003",
74+
},
75+
},
76+
}
77+
78+
err = resources.Add(client, alarmId, resources.AddOpts{
79+
Resources: newResources,
80+
})
81+
th.AssertNoErr(t, err)
82+
83+
t.Log("Attempting to verify resources were added")
84+
listResp, err = resources.List(client, alarmId, resources.ListOpts{})
85+
th.AssertNoErr(t, err)
86+
th.AssertEquals(t, listResp.Count, 3)
87+
88+
t.Log("Attempting to delete resources")
89+
err = resources.Delete(client, alarmId, resources.DeleteOpts{
90+
Resources: newResources,
91+
})
92+
th.AssertNoErr(t, err)
93+
94+
t.Log("Attempting to verify resources were deleted")
95+
listResp, err = resources.List(client, alarmId, resources.ListOpts{})
96+
th.AssertNoErr(t, err)
97+
th.AssertEquals(t, listResp.Count, 1)
98+
}

openstack/ces/v2/alarms/Action.go

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package alarms
2+
3+
import (
4+
golangsdk "github.com/opentelekomcloud/gophertelekomcloud"
5+
"github.com/opentelekomcloud/gophertelekomcloud/internal/build"
6+
"github.com/opentelekomcloud/gophertelekomcloud/internal/extract"
7+
)
8+
9+
// ActionOpts contains the options for enabling or disabling alarm rules in batches.
10+
type ActionOpts struct {
11+
// Specifies the IDs of the alarm rules.
12+
// A maximum of 100 alarm rules can be enabled or disabled at a time.
13+
AlarmIds []string `json:"alarm_ids" required:"true"`
14+
// Specifies whether to enable the alarm rules.
15+
// true: enables alarm rules, false: disables alarm rules
16+
AlarmEnabled bool `json:"alarm_enabled"`
17+
}
18+
19+
// ActionResponse contains the response from the Action request.
20+
type ActionResponse struct {
21+
// Specifies the IDs of the alarm rules that are enabled or disabled.
22+
AlarmIds []string `json:"alarm_ids"`
23+
}
24+
25+
// Action enables or disables alarm rules in batches.
26+
func Action(client *golangsdk.ServiceClient, opts ActionOpts) (*ActionResponse, error) {
27+
b, err := build.RequestBody(opts, "")
28+
if err != nil {
29+
return nil, err
30+
}
31+
32+
// POST /v2/{project_id}/alarms/action
33+
raw, err := client.Post(client.ServiceURL("alarms", "action"), b, nil, &golangsdk.RequestOpts{
34+
OkCodes: []int{200},
35+
})
36+
if err != nil {
37+
return nil, err
38+
}
39+
40+
var res ActionResponse
41+
err = extract.Into(raw.Body, &res)
42+
return &res, err
43+
}

0 commit comments

Comments
 (0)