Skip to content

Commit 8a15fca

Browse files
gitmknanonymous
andauthored
feat: grafana config (#1699)
* feat: grafana config * feat: add changelog --------- Co-authored-by: anonymous <anonymous@mail.org>
1 parent 2de14a3 commit 8a15fca

11 files changed

+343
-1
lines changed

.changelog/1699.txt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
```release-note:enhancement
2+
resource/tencentcloud_monitor_grafana_instance: Query results support `internet_url`, `internal_url`
3+
```
4+
5+
```release-note:new-resource
6+
tencentcloud_monitor_tmp_grafana_config
7+
```

tencentcloud/basic_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -788,7 +788,7 @@ const (
788788
defaultZoneName = "tf-teo-t.xyz"
789789
defaultZoneId = "zone-2a1u0y616jz6"
790790
defaultPolicyId = "11581"
791-
applicationProxyId = "proxy-f2c15f4f-5b34-11ed-aa27-525400b35dd9"
791+
applicationProxyId = "sid-2f8xqhmf32dt"
792792
)
793793

794794
// End of TEO

tencentcloud/provider.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -516,6 +516,7 @@ TencentCloud Managed Service for Grafana(TCMG)
516516
tencentcloud_monitor_grafana_notification_channel
517517
tencentcloud_monitor_grafana_plugin
518518
tencentcloud_monitor_grafana_sso_account
519+
tencentcloud_monitor_tmp_grafana_config
519520
520521
TencentDB for PostgreSQL(PostgreSQL)
521522
Data Source
@@ -1669,6 +1670,7 @@ func Provider() terraform.ResourceProvider {
16691670
"tencentcloud_monitor_grafana_notification_channel": resourceTencentCloudMonitorGrafanaNotificationChannel(),
16701671
"tencentcloud_monitor_grafana_plugin": resourceTencentCloudMonitorGrafanaPlugin(),
16711672
"tencentcloud_monitor_grafana_sso_account": resourceTencentCloudMonitorGrafanaSsoAccount(),
1673+
"tencentcloud_monitor_tmp_grafana_config": resourceTencentCloudMonitorTmpGrafanaConfig(),
16721674
"tencentcloud_mongodb_standby_instance": resourceTencentCloudMongodbStandbyInstance(),
16731675
"tencentcloud_elasticsearch_instance": resourceTencentCloudElasticsearchInstance(),
16741676
"tencentcloud_postgresql_instance": resourceTencentCloudPostgresqlInstance(),

tencentcloud/resource_tc_monitor_grafana_instance.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,18 @@ func resourceTencentCloudMonitorGrafanaInstance() *schema.Resource {
102102
Description: "Grafana instance status, 1: Creating, 2: Running, 6: Stopped.",
103103
},
104104

105+
"internet_url": {
106+
Type: schema.TypeString,
107+
Computed: true,
108+
Description: "Grafana intranet address.",
109+
},
110+
111+
"internal_url": {
112+
Type: schema.TypeString,
113+
Computed: true,
114+
Description: "Grafana public address.",
115+
},
116+
105117
"tags": {
106118
Type: schema.TypeMap,
107119
Optional: true,
@@ -143,6 +155,7 @@ func resourceTencentCloudMonitorGrafanaInstanceCreate(d *schema.ResourceData, me
143155
}
144156

145157
if v, _ := d.GetOk("enable_internet"); v != nil {
158+
// Internal account won't open
146159
request.EnableInternet = helper.Bool(v.(bool))
147160
}
148161

@@ -249,6 +262,14 @@ func resourceTencentCloudMonitorGrafanaInstanceRead(d *schema.ResourceData, meta
249262
_ = d.Set("enable_internet", false)
250263
}
251264

265+
if grafanaInstance.InternetUrl != nil {
266+
_ = d.Set("internet_url", grafanaInstance.InternetUrl)
267+
}
268+
269+
if grafanaInstance.InternalUrl != nil {
270+
_ = d.Set("internal_url", grafanaInstance.InternalUrl)
271+
}
272+
252273
if grafanaInstance.InstanceStatus != nil {
253274
_ = d.Set("instance_status", grafanaInstance.InstanceStatus)
254275
}

tencentcloud/resource_tc_monitor_grafana_instance_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ func TestAccTencentCloudMonitorGrafanaInstance_basic(t *testing.T) {
2727
resource.TestCheckResourceAttr("tencentcloud_monitor_grafana_instance.grafanaInstance", "vpc_id", defaultGrafanaVpcId),
2828
resource.TestCheckResourceAttr("tencentcloud_monitor_grafana_instance.grafanaInstance", "subnet_ids.#", "1"),
2929
resource.TestCheckResourceAttr("tencentcloud_monitor_grafana_instance.grafanaInstance", "enable_internet", "false"),
30+
resource.TestCheckResourceAttrSet("tencentcloud_monitor_grafana_instance.grafanaInstance", "internal_url"),
3031
),
3132
},
3233
{
Lines changed: 148 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,148 @@
1+
/*
2+
Provides a resource to create a monitor tmp_grafana_config
3+
4+
Example Usage
5+
6+
```hcl
7+
resource "tencentcloud_monitor_tmp_grafana_config" "tmp_grafana_config" {
8+
config = jsonencode(
9+
{
10+
server = {
11+
http_port = 8080
12+
root_url = "https://cloud-grafana.woa.com/grafana-ffrdnrfa/"
13+
serve_from_sub_path = true
14+
}
15+
}
16+
)
17+
instance_id = "grafana-29phe08q"
18+
}
19+
```
20+
21+
Import
22+
23+
monitor tmp_grafana_config can be imported using the id, e.g.
24+
25+
```
26+
terraform import tencentcloud_monitor_tmp_grafana_config.tmp_grafana_config tmp_grafana_config_id
27+
```
28+
*/
29+
package tencentcloud
30+
31+
import (
32+
"context"
33+
"log"
34+
35+
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
36+
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
37+
monitor "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor/v20180724"
38+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
39+
)
40+
41+
func resourceTencentCloudMonitorTmpGrafanaConfig() *schema.Resource {
42+
return &schema.Resource{
43+
Create: resourceTencentCloudMonitorTmpGrafanaConfigCreate,
44+
Read: resourceTencentCloudMonitorTmpGrafanaConfigRead,
45+
Update: resourceTencentCloudMonitorTmpGrafanaConfigUpdate,
46+
Delete: resourceTencentCloudMonitorTmpGrafanaConfigDelete,
47+
Importer: &schema.ResourceImporter{
48+
State: schema.ImportStatePassthrough,
49+
},
50+
Schema: map[string]*schema.Schema{
51+
"instance_id": {
52+
Required: true,
53+
Type: schema.TypeString,
54+
Description: "Instance id.",
55+
},
56+
57+
"config": {
58+
Required: true,
59+
Type: schema.TypeString,
60+
Description: "JSON encoded string.",
61+
},
62+
},
63+
}
64+
}
65+
66+
func resourceTencentCloudMonitorTmpGrafanaConfigCreate(d *schema.ResourceData, meta interface{}) error {
67+
defer logElapsed("resource.tencentcloud_monitor_tmp_grafana_config.create")()
68+
defer inconsistentCheck(d, meta)()
69+
70+
var instanceId string
71+
if v, ok := d.GetOk("instance_id"); ok {
72+
instanceId = v.(string)
73+
}
74+
75+
d.SetId(instanceId)
76+
77+
return resourceTencentCloudMonitorTmpGrafanaConfigUpdate(d, meta)
78+
}
79+
80+
func resourceTencentCloudMonitorTmpGrafanaConfigRead(d *schema.ResourceData, meta interface{}) error {
81+
defer logElapsed("resource.tencentcloud_monitor_tmp_grafana_config.read")()
82+
defer inconsistentCheck(d, meta)()
83+
84+
logId := getLogId(contextNil)
85+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
86+
87+
service := MonitorService{client: meta.(*TencentCloudClient).apiV3Conn}
88+
89+
instanceId := d.Id()
90+
91+
tmpGrafanaConfig, err := service.DescribeMonitorTmpGrafanaConfigById(ctx, instanceId)
92+
if err != nil {
93+
return err
94+
}
95+
96+
if tmpGrafanaConfig == nil {
97+
d.SetId("")
98+
log.Printf("[WARN]%s resource `MonitorTmpGrafanaConfig` [%s] not found, please check if it has been deleted.\n", logId, d.Id())
99+
return nil
100+
}
101+
102+
_ = d.Set("instance_id", instanceId)
103+
104+
if tmpGrafanaConfig.Config != nil {
105+
_ = d.Set("config", tmpGrafanaConfig.Config)
106+
}
107+
108+
return nil
109+
}
110+
111+
func resourceTencentCloudMonitorTmpGrafanaConfigUpdate(d *schema.ResourceData, meta interface{}) error {
112+
defer logElapsed("resource.tencentcloud_monitor_tmp_grafana_config.update")()
113+
defer inconsistentCheck(d, meta)()
114+
115+
logId := getLogId(contextNil)
116+
117+
request := monitor.NewUpdateGrafanaConfigRequest()
118+
119+
instanceId := d.Id()
120+
request.InstanceId = &instanceId
121+
122+
if v, ok := d.GetOk("config"); ok {
123+
request.Config = helper.String(v.(string))
124+
}
125+
126+
err := resource.Retry(writeRetryTimeout, func() *resource.RetryError {
127+
result, e := meta.(*TencentCloudClient).apiV3Conn.UseMonitorClient().UpdateGrafanaConfig(request)
128+
if e != nil {
129+
return retryError(e)
130+
} else {
131+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
132+
}
133+
return nil
134+
})
135+
if err != nil {
136+
log.Printf("[CRITAL]%s update monitor tmpGrafanaConfig failed, reason:%+v", logId, err)
137+
return err
138+
}
139+
140+
return resourceTencentCloudMonitorTmpGrafanaConfigRead(d, meta)
141+
}
142+
143+
func resourceTencentCloudMonitorTmpGrafanaConfigDelete(d *schema.ResourceData, meta interface{}) error {
144+
defer logElapsed("resource.tencentcloud_monitor_tmp_grafana_config.delete")()
145+
defer inconsistentCheck(d, meta)()
146+
147+
return nil
148+
}
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
package tencentcloud
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"testing"
7+
8+
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
9+
"github.com/hashicorp/terraform-plugin-sdk/terraform"
10+
)
11+
12+
// go test -i; go test -test.run TestAccTencentCloudMonitorTmpGrafanaConfigResource_basic -v
13+
func TestAccTencentCloudMonitorTmpGrafanaConfigResource_basic(t *testing.T) {
14+
t.Parallel()
15+
16+
resource.Test(t, resource.TestCase{
17+
PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) },
18+
Providers: testAccProviders,
19+
Steps: []resource.TestStep{
20+
{
21+
Config: testAccMonitorTmpGrafanaConfig,
22+
Check: resource.ComposeTestCheckFunc(
23+
testAccCheckMonitorTmpGrafanaConfigExists("tencentcloud_monitor_tmp_grafana_config.tmp_grafana_config"),
24+
resource.TestCheckResourceAttrSet("tencentcloud_monitor_tmp_grafana_config.tmp_grafana_config", "id"),
25+
resource.TestCheckResourceAttrSet("tencentcloud_monitor_tmp_grafana_config.tmp_grafana_config", "config"),
26+
),
27+
},
28+
{
29+
ResourceName: "tencentcloud_monitor_tmp_grafana_config.tmp_grafana_config",
30+
ImportState: true,
31+
ImportStateVerify: true,
32+
},
33+
},
34+
})
35+
}
36+
37+
func testAccCheckMonitorTmpGrafanaConfigExists(r string) resource.TestCheckFunc {
38+
return func(s *terraform.State) error {
39+
logId := getLogId(contextNil)
40+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
41+
42+
rs, ok := s.RootModule().Resources[r]
43+
if !ok {
44+
return fmt.Errorf("resource %s is not found", r)
45+
}
46+
if rs.Primary.ID == "" {
47+
return fmt.Errorf("resource id is not set")
48+
}
49+
instanceId := rs.Primary.ID
50+
51+
service := MonitorService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn}
52+
instance, err := service.DescribeMonitorTmpGrafanaConfigById(ctx, instanceId)
53+
if err != nil {
54+
return err
55+
}
56+
57+
if instance == nil {
58+
return fmt.Errorf("GrafanaInstance %s is not found", rs.Primary.ID)
59+
}
60+
61+
return nil
62+
}
63+
}
64+
65+
const testAccMonitorTmpGrafanaConfig = testAccMonitorGrafanaInstance + `
66+
67+
resource "tencentcloud_monitor_tmp_grafana_config" "tmp_grafana_config" {
68+
config = jsonencode(
69+
{
70+
server = {
71+
http_port = 8080
72+
root_url = "https://cloud-grafana.woa.com/grafana-ffrdnrfa/"
73+
serve_from_sub_path = true
74+
}
75+
}
76+
)
77+
instance_id = tencentcloud_monitor_grafana_instance.grafanaInstance.id
78+
}
79+
80+
`

tencentcloud/service_tencentcloud_monitor.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1702,3 +1702,28 @@ func (r *PrometheusConfig) SetRegex(configs []interface{}) (*[]interface{}, erro
17021702
}
17031703
return &configs, nil
17041704
}
1705+
1706+
func (me *MonitorService) DescribeMonitorTmpGrafanaConfigById(ctx context.Context, instanceId string) (tmpGrafanaConfig *monitor.DescribeGrafanaConfigResponseParams, errRet error) {
1707+
logId := getLogId(ctx)
1708+
1709+
request := monitor.NewDescribeGrafanaConfigRequest()
1710+
request.InstanceId = &instanceId
1711+
1712+
defer func() {
1713+
if errRet != nil {
1714+
log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error())
1715+
}
1716+
}()
1717+
1718+
ratelimit.Check(request.GetAction())
1719+
1720+
response, err := me.client.UseMonitorClient().DescribeGrafanaConfig(request)
1721+
if err != nil {
1722+
errRet = err
1723+
return
1724+
}
1725+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())
1726+
1727+
tmpGrafanaConfig = response.Response
1728+
return
1729+
}

website/docs/r/monitor_grafana_instance.html.markdown

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ In addition to all arguments above, the following attributes are exported:
4545
* `id` - ID of the resource.
4646
* `instance_id` - Grafana instance id.
4747
* `instance_status` - Grafana instance status, 1: Creating, 2: Running, 6: Stopped.
48+
* `internal_url` - Grafana public address.
49+
* `internet_url` - Grafana intranet address.
4850
* `root_url` - Grafana external url which could be accessed by user.
4951

5052

0 commit comments

Comments
 (0)