diff --git a/.changelog/3171.txt b/.changelog/3171.txt new file mode 100644 index 0000000000..6da8fd7ce8 --- /dev/null +++ b/.changelog/3171.txt @@ -0,0 +1,3 @@ +```release-note:new-resource +tencentcloud_dasb_asset_sync_job_operation +``` \ No newline at end of file diff --git a/tencentcloud/provider.go b/tencentcloud/provider.go index dae3bad123..2ca5c2d9e0 100644 --- a/tencentcloud/provider.go +++ b/tencentcloud/provider.go @@ -2184,6 +2184,7 @@ func Provider() *schema.Provider { "tencentcloud_dasb_reset_user": bh.ResourceTencentCloudDasbResetUser(), "tencentcloud_dasb_bind_device_account_private_key": bh.ResourceTencentCloudDasbBindDeviceAccountPrivateKey(), "tencentcloud_dasb_bind_device_account_password": bh.ResourceTencentCloudDasbBindDeviceAccountPassword(), + "tencentcloud_dasb_asset_sync_job_operation": bh.ResourceTencentCloudDasbAssetSyncJobOperationOperation(), "tencentcloud_ssl_check_certificate_chain_operation": ssl.ResourceTencentCloudSslCheckCertificateChainOperation(), "tencentcloud_ssl_complete_certificate_operation": ssl.ResourceTencentCloudSslCompleteCertificateOperation(), "tencentcloud_ssl_deploy_certificate_instance_operation": ssl.ResourceTencentCloudSslDeployCertificateInstanceOperation(), diff --git a/tencentcloud/provider.md b/tencentcloud/provider.md index f56b0a930b..cbe8baa4c5 100644 --- a/tencentcloud/provider.md +++ b/tencentcloud/provider.md @@ -2209,6 +2209,7 @@ tencentcloud_dasb_user_group tencentcloud_dasb_reset_user tencentcloud_dasb_bind_device_account_private_key tencentcloud_dasb_bind_device_account_password +tencentcloud_dasb_asset_sync_job_operation Cwp Data Source diff --git a/tencentcloud/services/bh/resource_tc_dasb_asset_sync_job_operation.go b/tencentcloud/services/bh/resource_tc_dasb_asset_sync_job_operation.go new file mode 100644 index 0000000000..3e8dfd6816 --- /dev/null +++ b/tencentcloud/services/bh/resource_tc_dasb_asset_sync_job_operation.go @@ -0,0 +1,113 @@ +package bh + +import ( + "fmt" + "log" + "strconv" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + dasb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dasb/v20191018" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudDasbAssetSyncJobOperationOperation() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudDasbAssetSyncJobOperationCreate, + Read: resourceTencentCloudDasbAssetSyncJobOperationRead, + Delete: resourceTencentCloudDasbAssetSyncJobOperationDelete, + + Schema: map[string]*schema.Schema{ + "category": { + Required: true, + ForceNew: true, + Type: schema.TypeInt, + Description: "Synchronize asset categories, 1- Host assets, 2- Database assets.", + }, + }, + } +} + +func resourceTencentCloudDasbAssetSyncJobOperationCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_dasb_asset_sync_job_operation.create")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + request = dasb.NewCreateAssetSyncJobRequest() + waitReq = dasb.NewDescribeAssetSyncStatusRequest() + category string + ) + + if v, ok := d.GetOkExists("category"); ok { + request.Category = helper.IntUint64(v.(int)) + waitReq.Category = helper.IntUint64(v.(int)) + category = strconv.Itoa(v.(int)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseDasbClient().CreateAssetSyncJob(request) + if e != nil { + return tccommon.RetryError(e) + } else { + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) + } + + return nil + }) + + if err != nil { + log.Printf("[CRITAL]%s create dasb AssetSyncJob failed, reason:%+v", logId, err) + return err + } + + d.SetId(category) + + // wait + err = resource.Retry(4*tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseDasbClient().DescribeAssetSyncStatus(waitReq) + if e != nil { + return tccommon.RetryError(e) + } else { + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, waitReq.GetAction(), waitReq.ToJsonString(), result.ToJsonString()) + } + + if result == nil || result.Response == nil || result.Response.Status == nil { + return resource.NonRetryableError(fmt.Errorf("Describe dasb AssetSyncJob failed, Response is nil.")) + } + + if result.Response.Status.InProcess == nil { + return resource.NonRetryableError(fmt.Errorf("InProcess is nil.")) + } + + if !*result.Response.Status.InProcess { + return nil + } + + return resource.RetryableError(fmt.Errorf("Dasb asset sync job is still running...")) + }) + + if err != nil { + log.Printf("[CRITAL]%s describe dasb AssetSyncJob failed, reason:%+v", logId, err) + return err + } + + return resourceTencentCloudDasbAssetSyncJobOperationRead(d, meta) +} + +func resourceTencentCloudDasbAssetSyncJobOperationRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_dasb_asset_sync_job_operation.read")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} + +func resourceTencentCloudDasbAssetSyncJobOperationDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_dasb_asset_sync_job_operation.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} diff --git a/tencentcloud/services/bh/resource_tc_dasb_asset_sync_job_operation.md b/tencentcloud/services/bh/resource_tc_dasb_asset_sync_job_operation.md new file mode 100644 index 0000000000..c422bd1837 --- /dev/null +++ b/tencentcloud/services/bh/resource_tc_dasb_asset_sync_job_operation.md @@ -0,0 +1,9 @@ +Provides a resource to create a dasb asset sync job + +Example Usage + +```hcl +resource "tencentcloud_dasb_asset_sync_job_operation" "example" { + category = 1 +} +``` \ No newline at end of file diff --git a/tencentcloud/services/bh/resource_tc_dasb_asset_sync_job_operation_test.go b/tencentcloud/services/bh/resource_tc_dasb_asset_sync_job_operation_test.go new file mode 100644 index 0000000000..1589355fdd --- /dev/null +++ b/tencentcloud/services/bh/resource_tc_dasb_asset_sync_job_operation_test.go @@ -0,0 +1,35 @@ +package bh_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +// go test -i; go test -test.run TestAccTencentCloudNeedFixDasbAssetSyncJobOperationOperationResource_basic -v +func TestAccTencentCloudNeedFixDasbAssetSyncJobOperationOperationResource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccDasbAssetSyncJobOperationOperation, + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrSet("tencentcloud_dasb_asset_sync_job_operation.example", "id"), + resource.TestCheckResourceAttrSet("tencentcloud_dasb_asset_sync_job_operation.example", "category"), + ), + }, + }, + }) +} + +const testAccDasbAssetSyncJobOperationOperation = ` +resource "tencentcloud_dasb_asset_sync_job_operation" "example" { + category = 1 +} +` diff --git a/website/docs/r/dasb_asset_sync_job_operation.html.markdown b/website/docs/r/dasb_asset_sync_job_operation.html.markdown new file mode 100644 index 0000000000..a93a7fef17 --- /dev/null +++ b/website/docs/r/dasb_asset_sync_job_operation.html.markdown @@ -0,0 +1,35 @@ +--- +subcategory: "Bastion Host(BH)" +layout: "tencentcloud" +page_title: "TencentCloud: tencentcloud_dasb_asset_sync_job_operation" +sidebar_current: "docs-tencentcloud-resource-dasb_asset_sync_job_operation" +description: |- + Provides a resource to create a dasb asset sync job +--- + +# tencentcloud_dasb_asset_sync_job_operation + +Provides a resource to create a dasb asset sync job + +## Example Usage + +```hcl +resource "tencentcloud_dasb_asset_sync_job_operation" "example" { + category = 1 +} +``` + +## Argument Reference + +The following arguments are supported: + +* `category` - (Required, Int, ForceNew) Synchronize asset categories, 1- Host assets, 2- Database assets. + +## Attributes Reference + +In addition to all arguments above, the following attributes are exported: + +* `id` - ID of the resource. + + + diff --git a/website/tencentcloud.erb b/website/tencentcloud.erb index 4201333c13..f7c9690b1e 100644 --- a/website/tencentcloud.erb +++ b/website/tencentcloud.erb @@ -438,6 +438,9 @@