Skip to content

Commit f42be57

Browse files
authored
support tcr: data source (#1900)
* support tcr: data source * add changelog and doc
1 parent 730321a commit f42be57

15 files changed

+1054
-10
lines changed

.changelog/1900.txt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
```release-note:new-data-source
2+
tencentcloud_tcr_tag_retention_executions
3+
```
4+
5+
```release-note:new-data-source
6+
tencentcloud_tcr_replication_instance_create_tasks
7+
```
8+
9+
```release-note:new-data-source
10+
tencentcloud_tcr_replication_instance_sync_status
11+
```
Lines changed: 188 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,188 @@
1+
/*
2+
Use this data source to query detailed information of tcr replication_instance_create_tasks
3+
4+
Example Usage
5+
6+
```hcl
7+
local {
8+
src_registry_id = local.tcr_id
9+
dst_registry_id = tencentcloud_tcr_manage_replication_operation.my_replica.destination_registry_id
10+
dst_region_id = tencentcloud_tcr_manage_replication_operation.my_replica.destination_region_id
11+
}
12+
13+
data "tencentcloud_tcr_replication_instance_create_tasks" "create_tasks" {
14+
replication_registry_id = local.dst_registry_id
15+
replication_region_id = local.dst_region_id
16+
}
17+
```
18+
*/
19+
package tencentcloud
20+
21+
import (
22+
"context"
23+
24+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
25+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
26+
tcr "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tcr/v20190924"
27+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
28+
)
29+
30+
func dataSourceTencentCloudTcrReplicationInstanceCreateTasks() *schema.Resource {
31+
return &schema.Resource{
32+
Read: dataSourceTencentCloudTcrReplicationInstanceCreateTasksRead,
33+
Schema: map[string]*schema.Schema{
34+
"replication_registry_id": {
35+
Required: true,
36+
Type: schema.TypeString,
37+
Description: "synchronization instance Id, see RegistryId in DescribeReplicationInstances.",
38+
},
39+
40+
"replication_region_id": {
41+
Required: true,
42+
Type: schema.TypeInt,
43+
Description: "synchronization instance region Id, see ReplicationRegionId in DescribeReplicationInstances.",
44+
},
45+
46+
"task_detail": {
47+
Computed: true,
48+
Type: schema.TypeList,
49+
Description: "task details.",
50+
Elem: &schema.Resource{
51+
Schema: map[string]*schema.Schema{
52+
"task_name": {
53+
Type: schema.TypeString,
54+
Computed: true,
55+
Description: "task name.",
56+
},
57+
"task_uuid": {
58+
Type: schema.TypeString,
59+
Computed: true,
60+
Description: "task UUID.",
61+
},
62+
"task_status": {
63+
Type: schema.TypeString,
64+
Computed: true,
65+
Description: "task status.",
66+
},
67+
"task_message": {
68+
Type: schema.TypeString,
69+
Computed: true,
70+
Description: "Task status information. Note: This field may return null, indicating that no valid value can be obtained.",
71+
},
72+
"created_time": {
73+
Type: schema.TypeString,
74+
Computed: true,
75+
Description: "task start name.",
76+
},
77+
"finished_time": {
78+
Type: schema.TypeString,
79+
Computed: true,
80+
Description: "task end time. Note: This field may return null, indicating that no valid value can be obtained.",
81+
},
82+
},
83+
},
84+
},
85+
86+
"status": {
87+
Computed: true,
88+
Type: schema.TypeString,
89+
Description: "overall task status.",
90+
},
91+
92+
"result_output_file": {
93+
Type: schema.TypeString,
94+
Optional: true,
95+
Description: "Used to save results.",
96+
},
97+
},
98+
}
99+
}
100+
101+
func dataSourceTencentCloudTcrReplicationInstanceCreateTasksRead(d *schema.ResourceData, meta interface{}) error {
102+
defer logElapsed("data_source.tencentcloud_tcr_replication_instance_create_tasks.read")()
103+
defer inconsistentCheck(d, meta)()
104+
105+
logId := getLogId(contextNil)
106+
107+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
108+
109+
paramMap := make(map[string]interface{})
110+
if v, ok := d.GetOk("replication_registry_id"); ok {
111+
paramMap["ReplicationRegistryId"] = helper.String(v.(string))
112+
}
113+
114+
if v, _ := d.GetOk("replication_region_id"); v != nil {
115+
paramMap["ReplicationRegionId"] = helper.IntUint64(v.(int))
116+
}
117+
118+
service := TCRService{client: meta.(*TencentCloudClient).apiV3Conn}
119+
120+
var (
121+
result *tcr.DescribeReplicationInstanceCreateTasksResponseParams
122+
e error
123+
)
124+
125+
err := resource.Retry(readRetryTimeout, func() *resource.RetryError {
126+
result, e = service.DescribeTcrReplicationInstanceCreateTasksByFilter(ctx, paramMap)
127+
if e != nil {
128+
return retryError(e)
129+
}
130+
return nil
131+
})
132+
if err != nil {
133+
return err
134+
}
135+
136+
taskDetails := result.TaskDetail
137+
status := result.Status
138+
ids := []string{}
139+
140+
if taskDetails != nil {
141+
tmpList := make([]map[string]interface{}, 0, len(taskDetails))
142+
for _, taskDetail := range taskDetails {
143+
taskDetailMap := map[string]interface{}{}
144+
145+
if taskDetail.TaskName != nil {
146+
taskDetailMap["task_name"] = taskDetail.TaskName
147+
}
148+
149+
if taskDetail.TaskUUID != nil {
150+
taskDetailMap["task_uuid"] = taskDetail.TaskUUID
151+
}
152+
153+
if taskDetail.TaskStatus != nil {
154+
taskDetailMap["task_status"] = taskDetail.TaskStatus
155+
}
156+
157+
if taskDetail.TaskMessage != nil {
158+
taskDetailMap["task_message"] = taskDetail.TaskMessage
159+
}
160+
161+
if taskDetail.CreatedTime != nil {
162+
taskDetailMap["created_time"] = taskDetail.CreatedTime
163+
}
164+
165+
if taskDetail.FinishedTime != nil {
166+
taskDetailMap["finished_time"] = taskDetail.FinishedTime
167+
}
168+
169+
ids = append(ids, *taskDetail.TaskUUID)
170+
tmpList = append(tmpList, taskDetailMap)
171+
}
172+
173+
_ = d.Set("task_detail", tmpList)
174+
}
175+
176+
if status != nil {
177+
_ = d.Set("status", status)
178+
}
179+
180+
d.SetId(helper.DataResourceIdsHash(ids))
181+
output, ok := d.GetOk("result_output_file")
182+
if ok && output.(string) != "" {
183+
if e := writeToFile(output.(string), result); e != nil {
184+
return e
185+
}
186+
}
187+
return nil
188+
}
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
package tencentcloud
2+
3+
import (
4+
"testing"
5+
6+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
7+
)
8+
9+
func TestAccTencentCloudTcrReplicationInstanceCreateTasksDataSource_basic(t *testing.T) {
10+
t.Parallel()
11+
resource.Test(t, resource.TestCase{
12+
PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) },
13+
Providers: testAccProviders,
14+
Steps: []resource.TestStep{
15+
{
16+
// Config: fmt.Sprintf(testAccTcrReplicationInstance_create_tasks_and_sync_status_DataSource, "create-tasks-and-sync-status", time.Now().Nanosecond()),
17+
Config: testAccTcrReplicationInstance_create_tasks_and_sync_status_DataSource,
18+
PreConfig: func() {
19+
testAccStepSetRegion(t, "ap-shanghai")
20+
testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON)
21+
},
22+
Check: resource.ComposeTestCheckFunc(
23+
testAccCheckTencentCloudDataSourceID("data.tencentcloud_tcr_replication_instance_create_tasks.create_tasks"),
24+
resource.TestCheckResourceAttrSet("data.tencentcloud_tcr_replication_instance_create_tasks.create_tasks", "id"),
25+
resource.TestCheckResourceAttrSet("data.tencentcloud_tcr_replication_instance_create_tasks.create_tasks", "replication_registry_id"),
26+
resource.TestCheckResourceAttrSet("data.tencentcloud_tcr_replication_instance_create_tasks.create_tasks", "replication_region_id"),
27+
resource.TestCheckResourceAttrSet("data.tencentcloud_tcr_replication_instance_create_tasks.create_tasks", "status"),
28+
// resource.TestCheckResourceAttrSet("data.tencentcloud_tcr_replication_instance_create_tasks.create_tasks", "task_detail.#"),
29+
// resource.TestCheckResourceAttrSet("data.tencentcloud_tcr_replication_instance_create_tasks.create_tasks", "task_detail.0.task_name"),
30+
// resource.TestCheckResourceAttrSet("data.tencentcloud_tcr_replication_instance_create_tasks.create_tasks", "task_detail.0.task_uuid"),
31+
// resource.TestCheckResourceAttrSet("data.tencentcloud_tcr_replication_instance_create_tasks.create_tasks", "task_detail.0.task_status"),
32+
// resource.TestCheckResourceAttrSet("data.tencentcloud_tcr_replication_instance_create_tasks.create_tasks", "task_detail.0.task_message"),
33+
// resource.TestCheckResourceAttrSet("data.tencentcloud_tcr_replication_instance_create_tasks.create_tasks", "task_detail.0.created_time"),
34+
// resource.TestCheckResourceAttrSet("data.tencentcloud_tcr_replication_instance_create_tasks.create_tasks", "task_detail.0.finished_time"),
35+
36+
testAccCheckTencentCloudDataSourceID("data.tencentcloud_tcr_replication_instance_sync_status.sync_status"),
37+
resource.TestCheckResourceAttrSet("data.tencentcloud_tcr_replication_instance_sync_status.sync_status", "id"),
38+
resource.TestCheckResourceAttrSet("data.tencentcloud_tcr_replication_instance_sync_status.sync_status", "registry_id"),
39+
resource.TestCheckResourceAttrSet("data.tencentcloud_tcr_replication_instance_sync_status.sync_status", "replication_registry_id"),
40+
resource.TestCheckResourceAttrSet("data.tencentcloud_tcr_replication_instance_sync_status.sync_status", "replication_region_id"),
41+
resource.TestCheckResourceAttr("data.tencentcloud_tcr_replication_instance_sync_status.sync_status", "show_replication_log", "false"),
42+
resource.TestCheckResourceAttrSet("data.tencentcloud_tcr_replication_instance_sync_status.sync_status", "replication_status"),
43+
resource.TestCheckResourceAttrSet("data.tencentcloud_tcr_replication_instance_sync_status.sync_status", "replication_time"),
44+
// resource.TestCheckResourceAttrSet("data.tencentcloud_tcr_replication_instance_sync_status.sync_status", "replication_log.#"),
45+
// resource.TestCheckResourceAttrSet("data.tencentcloud_tcr_replication_instance_sync_status.sync_status", "replication_log.0.resource_type"),
46+
// resource.TestCheckResourceAttrSet("data.tencentcloud_tcr_replication_instance_sync_status.sync_status", "replication_log.0.source"),
47+
// resource.TestCheckResourceAttrSet("data.tencentcloud_tcr_replication_instance_sync_status.sync_status", "replication_log.0.destination"),
48+
// resource.TestCheckResourceAttrSet("data.tencentcloud_tcr_replication_instance_sync_status.sync_status", "replication_log.0.status"),
49+
// resource.TestCheckResourceAttrSet("data.tencentcloud_tcr_replication_instance_sync_status.sync_status", "replication_log.0.start_time"),
50+
// resource.TestCheckResourceAttrSet("data.tencentcloud_tcr_replication_instance_sync_status.sync_status", "replication_log.0.end_time"),
51+
),
52+
},
53+
},
54+
})
55+
}
56+
57+
// const testAccTcrReplicationInstance_create_tasks_and_sync_status_DataSource = testAccTcrManageReplicationOperation + `
58+
const testAccTcrReplicationInstance_create_tasks_and_sync_status_DataSource = `
59+
// locals {
60+
// src_registry_id = local.tcr_id
61+
// dst_registry_id = tencentcloud_tcr_manage_replication_operation.my_replica.destination_registry_id
62+
// dst_region_id = tencentcloud_tcr_manage_replication_operation.my_replica.destination_region_id
63+
// }
64+
locals {
65+
src_registry_id = "tcr-800uf6j9"
66+
dst_registry_id = "tcr-800uf6j9-1-cgeafk"
67+
dst_region_id = 1
68+
}
69+
70+
data "tencentcloud_tcr_replication_instance_create_tasks" "create_tasks" {
71+
replication_registry_id = local.dst_registry_id
72+
replication_region_id = local.dst_region_id
73+
}
74+
75+
data "tencentcloud_tcr_replication_instance_sync_status" "sync_status" {
76+
registry_id = local.src_registry_id
77+
replication_registry_id = local.dst_registry_id
78+
replication_region_id = local.dst_region_id
79+
show_replication_log = false
80+
}
81+
82+
`

0 commit comments

Comments
 (0)