Skip to content

Commit 3f9721f

Browse files
committed
feat: supprot grafana dns config
1 parent d5adba3 commit 3f9721f

6 files changed

+432
-0
lines changed
Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
/*
2+
Use this data source to query detailed information of monitor grafana_plugin_overviews
3+
4+
Example Usage
5+
6+
```hcl
7+
data "tencentcloud_monitor_grafana_plugin_overviews" "grafana_plugin_overviews" {
8+
}
9+
```
10+
*/
11+
package tencentcloud
12+
13+
import (
14+
"context"
15+
16+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
17+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
18+
monitor "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor/v20180724"
19+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
20+
)
21+
22+
func dataSourceTencentCloudMonitorGrafanaPluginOverviews() *schema.Resource {
23+
return &schema.Resource{
24+
Read: dataSourceTencentCloudMonitorGrafanaPluginOverviewsRead,
25+
Schema: map[string]*schema.Schema{
26+
"plugin_set": {
27+
Computed: true,
28+
Type: schema.TypeList,
29+
Description: "Plugin set.",
30+
Elem: &schema.Resource{
31+
Schema: map[string]*schema.Schema{
32+
"plugin_id": {
33+
Type: schema.TypeString,
34+
Computed: true,
35+
Description: "Grafana plugin ID.",
36+
},
37+
"version": {
38+
Type: schema.TypeString,
39+
Computed: true,
40+
Description: "Grafana plugin version.",
41+
},
42+
},
43+
},
44+
},
45+
46+
"result_output_file": {
47+
Type: schema.TypeString,
48+
Optional: true,
49+
Description: "Used to save results.",
50+
},
51+
},
52+
}
53+
}
54+
55+
func dataSourceTencentCloudMonitorGrafanaPluginOverviewsRead(d *schema.ResourceData, meta interface{}) error {
56+
defer logElapsed("data_source.tencentcloud_monitor_grafana_plugin_overviews.read")()
57+
defer inconsistentCheck(d, meta)()
58+
59+
logId := getLogId(contextNil)
60+
61+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
62+
63+
paramMap := make(map[string]interface{})
64+
service := MonitorService{client: meta.(*TencentCloudClient).apiV3Conn}
65+
66+
var pluginSet []*monitor.GrafanaPlugin
67+
err := resource.Retry(readRetryTimeout, func() *resource.RetryError {
68+
result, e := service.DescribeMonitorGrafanaPluginOverviewsByFilter(ctx, paramMap)
69+
if e != nil {
70+
return retryError(e)
71+
}
72+
pluginSet = result
73+
return nil
74+
})
75+
if err != nil {
76+
return err
77+
}
78+
79+
ids := make([]string, 0, len(pluginSet))
80+
tmpList := make([]map[string]interface{}, 0, len(pluginSet))
81+
82+
if pluginSet != nil {
83+
for _, grafanaPlugin := range pluginSet {
84+
grafanaPluginMap := map[string]interface{}{}
85+
86+
if grafanaPlugin.PluginId != nil {
87+
grafanaPluginMap["plugin_id"] = grafanaPlugin.PluginId
88+
}
89+
90+
if grafanaPlugin.Version != nil {
91+
grafanaPluginMap["version"] = grafanaPlugin.Version
92+
}
93+
94+
ids = append(ids, *grafanaPlugin.PluginId)
95+
tmpList = append(tmpList, grafanaPluginMap)
96+
}
97+
98+
_ = d.Set("plugin_set", tmpList)
99+
}
100+
101+
d.SetId(helper.DataResourceIdsHash(ids))
102+
output, ok := d.GetOk("result_output_file")
103+
if ok && output.(string) != "" {
104+
if e := writeToFile(output.(string), tmpList); e != nil {
105+
return e
106+
}
107+
}
108+
return nil
109+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package tencentcloud
2+
3+
import (
4+
"testing"
5+
6+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
7+
)
8+
9+
// go test -test.run TestAccTencentCloudMonitorGrafanaPluginOverviewsDataSource_basic -v
10+
func TestAccTencentCloudMonitorGrafanaPluginOverviewsDataSource_basic(t *testing.T) {
11+
t.Parallel()
12+
resource.Test(t, resource.TestCase{
13+
PreCheck: func() {
14+
testAccPreCheck(t)
15+
},
16+
Providers: testAccProviders,
17+
Steps: []resource.TestStep{
18+
{
19+
Config: testAccMonitorGrafanaPluginOverviewsDataSource,
20+
Check: resource.ComposeTestCheckFunc(
21+
testAccCheckTencentCloudDataSourceID("data.tencentcloud_monitor_grafana_plugin_overviews.plugin_overviews"),
22+
resource.TestCheckResourceAttrSet("data.tencentcloud_monitor_grafana_plugin_overviews.plugin_overviews", "plugin_set.#"),
23+
resource.TestCheckResourceAttrSet("data.tencentcloud_monitor_grafana_plugin_overviews.plugin_overviews", "plugin_set.0.plugin_id"),
24+
resource.TestCheckResourceAttrSet("data.tencentcloud_monitor_grafana_plugin_overviews.plugin_overviews", "plugin_set.0.version"),
25+
),
26+
},
27+
},
28+
})
29+
}
30+
31+
const testAccMonitorGrafanaPluginOverviewsDataSource = `
32+
33+
data "tencentcloud_monitor_grafana_plugin_overviews" "plugin_overviews" {
34+
}
35+
36+
`

tencentcloud/provider.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -751,6 +751,9 @@ Managed Service for Prometheus(TMP)
751751
tencentcloud_monitor_tmp_tke_basic_config
752752
753753
TencentCloud Managed Service for Grafana(TCMG)
754+
Data Source
755+
tencentcloud_monitor_grafana_plugin_overviews
756+
754757
Resource
755758
tencentcloud_monitor_grafana_instance
756759
tencentcloud_monitor_grafana_integration
@@ -2231,6 +2234,7 @@ func Provider() *schema.Provider {
22312234
"tencentcloud_monitor_policy_groups": dataSourceTencentMonitorPolicyGroups(),
22322235
"tencentcloud_monitor_product_namespace": dataSourceTencentMonitorProductNamespace(),
22332236
"tencentcloud_monitor_alarm_notices": dataSourceTencentMonitorAlarmNotices(),
2237+
"tencentcloud_monitor_grafana_plugin_overviews": dataSourceTencentCloudMonitorGrafanaPluginOverviews(),
22342238
"tencentcloud_elasticsearch_instances": dataSourceTencentCloudElasticsearchInstances(),
22352239
"tencentcloud_postgresql_instances": dataSourceTencentCloudPostgresqlInstances(),
22362240
"tencentcloud_postgresql_specinfos": dataSourceTencentCloudPostgresqlSpecinfos(),
@@ -2927,6 +2931,7 @@ func Provider() *schema.Provider {
29272931
"tencentcloud_monitor_grafana_plugin": resourceTencentCloudMonitorGrafanaPlugin(),
29282932
"tencentcloud_monitor_grafana_sso_account": resourceTencentCloudMonitorGrafanaSsoAccount(),
29292933
"tencentcloud_monitor_tmp_grafana_config": resourceTencentCloudMonitorTmpGrafanaConfig(),
2934+
"tencentcloud_monitor_grafana_dns_config": resourceTencentCloudMonitorGrafanaDnsConfig(),
29302935
"tencentcloud_mongodb_standby_instance": resourceTencentCloudMongodbStandbyInstance(),
29312936
"tencentcloud_elasticsearch_instance": resourceTencentCloudElasticsearchInstance(),
29322937
"tencentcloud_elasticsearch_security_group": resourceTencentCloudElasticsearchSecurityGroup(),
Lines changed: 174 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,174 @@
1+
/*
2+
Provides a resource to create a monitor grafana_dns_config
3+
4+
Example Usage
5+
6+
```hcl
7+
resource "tencentcloud_monitor_grafana_dns_config" "grafana_dns_config" {
8+
instance_id = "grafana-dp2hnnfa"
9+
name_servers = ["10.1.2.1", "10.1.2.2", "10.1.2.3"]
10+
}
11+
```
12+
13+
Import
14+
15+
monitor grafana_dns_config can be imported using the id, e.g.
16+
17+
```
18+
terraform import tencentcloud_monitor_grafana_dns_config.grafana_dns_config grafana-12345678
19+
```
20+
*/
21+
package tencentcloud
22+
23+
import (
24+
"context"
25+
"fmt"
26+
"log"
27+
"time"
28+
29+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
30+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
31+
monitor "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor/v20180724"
32+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
33+
)
34+
35+
func resourceTencentCloudMonitorGrafanaDnsConfig() *schema.Resource {
36+
return &schema.Resource{
37+
Create: resourceTencentCloudMonitorGrafanaDnsConfigCreate,
38+
Read: resourceTencentCloudMonitorGrafanaDnsConfigRead,
39+
Update: resourceTencentCloudMonitorGrafanaDnsConfigUpdate,
40+
Delete: resourceTencentCloudMonitorGrafanaDnsConfigDelete,
41+
Importer: &schema.ResourceImporter{
42+
State: schema.ImportStatePassthrough,
43+
},
44+
Schema: map[string]*schema.Schema{
45+
"instance_id": {
46+
Required: true,
47+
ForceNew: true,
48+
Type: schema.TypeString,
49+
Description: "Grafana instance ID.",
50+
},
51+
52+
"name_servers": {
53+
Required: true,
54+
Type: schema.TypeSet,
55+
Elem: &schema.Schema{
56+
Type: schema.TypeString,
57+
},
58+
Description: "DNS nameserver list.",
59+
},
60+
},
61+
}
62+
}
63+
64+
func resourceTencentCloudMonitorGrafanaDnsConfigCreate(d *schema.ResourceData, meta interface{}) error {
65+
defer logElapsed("resource.tencentcloud_monitor_grafana_dns_config.create")()
66+
defer inconsistentCheck(d, meta)()
67+
68+
var instanceId string
69+
if v, ok := d.GetOk("instance_id"); ok {
70+
instanceId = v.(string)
71+
}
72+
73+
d.SetId(instanceId)
74+
75+
return resourceTencentCloudMonitorGrafanaDnsConfigUpdate(d, meta)
76+
}
77+
78+
func resourceTencentCloudMonitorGrafanaDnsConfigRead(d *schema.ResourceData, meta interface{}) error {
79+
defer logElapsed("resource.tencentcloud_monitor_grafana_dns_config.read")()
80+
defer inconsistentCheck(d, meta)()
81+
82+
logId := getLogId(contextNil)
83+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
84+
85+
service := MonitorService{client: meta.(*TencentCloudClient).apiV3Conn}
86+
87+
instanceId := d.Id()
88+
grafanaDnsConfig, err := service.DescribeMonitorGrafanaDnsConfigById(ctx, instanceId)
89+
if err != nil {
90+
return err
91+
}
92+
93+
if grafanaDnsConfig == nil {
94+
d.SetId("")
95+
log.Printf("[WARN]%s resource `MonitorGrafanaDnsConfig` [%s] not found, please check if it has been deleted.\n", logId, d.Id())
96+
return nil
97+
}
98+
99+
_ = d.Set("instance_id", instanceId)
100+
101+
if grafanaDnsConfig.NameServers != nil {
102+
_ = d.Set("name_servers", grafanaDnsConfig.NameServers)
103+
}
104+
105+
return nil
106+
}
107+
108+
func resourceTencentCloudMonitorGrafanaDnsConfigUpdate(d *schema.ResourceData, meta interface{}) error {
109+
defer logElapsed("resource.tencentcloud_monitor_grafana_dns_config.update")()
110+
defer inconsistentCheck(d, meta)()
111+
112+
logId := getLogId(contextNil)
113+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
114+
115+
request := monitor.NewUpdateDNSConfigRequest()
116+
117+
instanceId := d.Id()
118+
119+
request.InstanceId = &instanceId
120+
121+
if v, ok := d.GetOk("name_servers"); ok {
122+
nameServersSet := v.(*schema.Set).List()
123+
for i := range nameServersSet {
124+
nameServers := nameServersSet[i].(string)
125+
request.NameServers = append(request.NameServers, &nameServers)
126+
}
127+
}
128+
129+
if len(request.NameServers) < 1 {
130+
request.NameServers = append(request.NameServers, helper.String(""))
131+
}
132+
133+
err := resource.Retry(writeRetryTimeout, func() *resource.RetryError {
134+
result, e := meta.(*TencentCloudClient).apiV3Conn.UseMonitorClient().UpdateDNSConfig(request)
135+
if e != nil {
136+
return retryError(e)
137+
} else {
138+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
139+
}
140+
return nil
141+
})
142+
if err != nil {
143+
log.Printf("[CRITAL]%s update monitor grafanaDnsConfig failed, reason:%+v", logId, err)
144+
return err
145+
}
146+
147+
time.Sleep(3 * time.Second)
148+
service := MonitorService{client: meta.(*TencentCloudClient).apiV3Conn}
149+
err = resource.Retry(1*readRetryTimeout, func() *resource.RetryError {
150+
instance, errRet := service.DescribeMonitorGrafanaInstance(ctx, instanceId)
151+
if errRet != nil {
152+
return retryError(errRet, InternalError)
153+
}
154+
if *instance.InstanceStatus == 2 {
155+
return nil
156+
}
157+
if *instance.InstanceStatus == 3 {
158+
return resource.NonRetryableError(fmt.Errorf("grafanaInstance status is %v, update dns config failed.", *instance.InstanceStatus))
159+
}
160+
return resource.RetryableError(fmt.Errorf("grafanaInstance status is %v, retry...", *instance.InstanceStatus))
161+
})
162+
if err != nil {
163+
return err
164+
}
165+
166+
return resourceTencentCloudMonitorGrafanaDnsConfigRead(d, meta)
167+
}
168+
169+
func resourceTencentCloudMonitorGrafanaDnsConfigDelete(d *schema.ResourceData, meta interface{}) error {
170+
defer logElapsed("resource.tencentcloud_monitor_grafana_dns_config.delete")()
171+
defer inconsistentCheck(d, meta)()
172+
173+
return nil
174+
}

0 commit comments

Comments
 (0)