diff --git a/.changelog/3244.txt b/.changelog/3244.txt new file mode 100644 index 0000000000..367bba915e --- /dev/null +++ b/.changelog/3244.txt @@ -0,0 +1,19 @@ +```release-note:new-data-source +tencentcloud_mqtt_registration_code +``` + +```release-note:new-resource +tencentcloud_mqtt_user +``` + +```release-note:new-resource +tencentcloud_mqtt_jwt_authenticator +``` + +```release-note:new-resource +tencentcloud_mqtt_jwks_authenticator +``` + +```release-note:new-resource +tencentcloud_mqtt_http_authenticator +``` \ No newline at end of file diff --git a/go.mod b/go.mod index 92a4c96261..546c645774 100644 --- a/go.mod +++ b/go.mod @@ -46,7 +46,7 @@ require ( github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb v1.0.1107 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cloudaudit v1.0.1033 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls v1.0.1078 - github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1129 + github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1130 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.1128 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cwp v1.0.762 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.1111 @@ -113,7 +113,7 @@ require ( github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/controlcenter v1.0.993 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/csip v1.0.860 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dasb v1.0.970 - github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mqtt v1.0.1099 + github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mqtt v1.0.1130 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/oceanus v1.0.831 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/region v1.0.920 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tcss v1.0.1031 diff --git a/go.sum b/go.sum index ab163961b4..7bce3ed5f4 100644 --- a/go.sum +++ b/go.sum @@ -939,6 +939,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1128 h1:NGn github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1128/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1129 h1:T9WMHYVasPNH3zcDNoaLL+9jUk04PcOZznDvJ6Dykr8= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1129/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1130 h1:pjtrqJUaidq1fFWwPvBorq7FScq0LXiQ7pZjJZx3Jsc= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1130/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/controlcenter v1.0.993 h1:WlPgXldQCxt7qi5Xrc6j6zTrsXWzN5BcOGs7Irq7fwQ= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/controlcenter v1.0.993/go.mod h1:Z9U8zNtyuyKhjS0698wqsrG/kLx1TQ5CEixXBwVe7xY= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/csip v1.0.860 h1:F3esKBIT3HW9+7Gt8cVgf8X06VdGIczpgLBUECzSEzU= @@ -991,6 +993,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mps v1.0.853 h1:abGpWsA github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mps v1.0.853/go.mod h1:xIprIT+IW+3Fj05GCWmgvxJOhICqFGoW4Ef77cDD2JQ= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mqtt v1.0.1099 h1:HL7Clg1JG3VAwiCqfQi6nfsJbrW2XINujiGOFzCDoQY= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mqtt v1.0.1099/go.mod h1:6dLvPs3g5fLg6f9LXskqAPq+8R9UHf4ulFFWpILd45E= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mqtt v1.0.1130 h1:2xpOVOz7a/qpDBmT6iRqu2JkaO2qy/KY/d0MhuZwPEU= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mqtt v1.0.1130/go.mod h1:BtUOe+YtbtNuZS7zR4sttSE7GkXHU7GDjNQHxPk59T4= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/oceanus v1.0.831 h1:oyazF5wgAgoinGo/SDGfUReE3JFxqcpI6/pstWhK7yE= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/oceanus v1.0.831/go.mod h1:2WuTlTnKCnZoa6l0JxY9GNfo0UG6nU7AEsljF8rMMsM= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/organization v1.0.1038 h1:BJqvIa+Z7bt1Y2VN9wZSye7Bq2RaVrRw1Rt50TwsgsM= diff --git a/tencentcloud/provider.go b/tencentcloud/provider.go index 17065983cc..e72a2db1c9 100644 --- a/tencentcloud/provider.go +++ b/tencentcloud/provider.go @@ -1176,6 +1176,7 @@ func Provider() *schema.Provider { "tencentcloud_cdwpg_instances": cdwpg.DataSourceTencentCloudCdwpgInstances(), "tencentcloud_cdwpg_log": cdwpg.DataSourceTencentCloudCdwpgLog(), "tencentcloud_cdwpg_nodes": cdwpg.DataSourceTencentCloudCdwpgNodes(), + "tencentcloud_mqtt_registration_code": mqtt.DataSourceTencentCloudMqttRegistrationCode(), }, ResourcesMap: map[string]*schema.Resource{ @@ -2264,6 +2265,12 @@ func Provider() *schema.Provider { "tencentcloud_mqtt_instance": mqtt.ResourceTencentCloudMqttInstance(), "tencentcloud_mqtt_instance_public_endpoint": mqtt.ResourceTencentCloudMqttInstancePublicEndpoint(), "tencentcloud_mqtt_topic": mqtt.ResourceTencentCloudMqttTopic(), + "tencentcloud_mqtt_ca_certificate": mqtt.ResourceTencentCloudMqttCaCertificate(), + "tencentcloud_mqtt_device_certificate": mqtt.ResourceTencentCloudMqttDeviceCertificate(), + "tencentcloud_mqtt_user": mqtt.ResourceTencentCloudMqttUser(), + "tencentcloud_mqtt_jwt_authenticator": mqtt.ResourceTencentCloudMqttJwtAuthenticator(), + "tencentcloud_mqtt_jwks_authenticator": mqtt.ResourceTencentCloudMqttJwksAuthenticator(), + "tencentcloud_mqtt_http_authenticator": mqtt.ResourceTencentCloudMqttHttpAuthenticator(), }, ConfigureFunc: providerConfigure, diff --git a/tencentcloud/provider.md b/tencentcloud/provider.md index 18d577c692..a6d0198830 100644 --- a/tencentcloud/provider.md +++ b/tencentcloud/provider.md @@ -2292,7 +2292,13 @@ Resource tencentcloud_tcss_image_registry TDMQ for MQTT(MQTT) +Data Source +tencentcloud_mqtt_registration_code Resource tencentcloud_mqtt_instance tencentcloud_mqtt_instance_public_endpoint -tencentcloud_mqtt_topic \ No newline at end of file +tencentcloud_mqtt_topic +tencentcloud_mqtt_user +tencentcloud_mqtt_jwt_authenticator +tencentcloud_mqtt_jwks_authenticator +tencentcloud_mqtt_http_authenticator diff --git a/tencentcloud/services/mqtt/data_source_tc_mqtt_registration_code.go b/tencentcloud/services/mqtt/data_source_tc_mqtt_registration_code.go new file mode 100644 index 0000000000..d3a9b6ca7d --- /dev/null +++ b/tencentcloud/services/mqtt/data_source_tc_mqtt_registration_code.go @@ -0,0 +1,93 @@ +package mqtt + +import ( + "context" + "fmt" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + mqttv20240516 "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mqtt/v20240516" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func DataSourceTencentCloudMqttRegistrationCode() *schema.Resource { + return &schema.Resource{ + Read: dataSourceTencentCloudMqttRegistrationCodeRead, + Schema: map[string]*schema.Schema{ + "instance_id": { + Type: schema.TypeString, + Required: true, + Description: "Instance ID.", + }, + + "registration_code": { + Type: schema.TypeString, + Computed: true, + Description: "Registration code.", + }, + + "result_output_file": { + Type: schema.TypeString, + Optional: true, + Description: "Used to save results.", + }, + }, + } +} + +func dataSourceTencentCloudMqttRegistrationCodeRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("data_source.tencentcloud_mqtt_registration_code.read")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(nil) + ctx = tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) + service = MqttService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + instanceId string + ) + + paramMap := make(map[string]interface{}) + if v, ok := d.GetOk("instance_id"); ok { + paramMap["InstanceId"] = helper.String(v.(string)) + instanceId = v.(string) + } + + var respData *mqttv20240516.ApplyRegistrationCodeResponseParams + reqErr := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := service.DescribeMqttRegistrationCodeByFilter(ctx, paramMap) + if e != nil { + return tccommon.RetryError(e) + } + + if result == nil { + return resource.NonRetryableError(fmt.Errorf("ApplyRegistrationCode response is nil.")) + } + + respData = result + return nil + }) + + if reqErr != nil { + return reqErr + } + + if respData.InstanceId != nil { + _ = d.Set("instance_id", respData.InstanceId) + } + + if respData.RegistrationCode != nil { + _ = d.Set("registration_code", respData.RegistrationCode) + } + + d.SetId(instanceId) + output, ok := d.GetOk("result_output_file") + if ok && output.(string) != "" { + if e := tccommon.WriteToFile(output.(string), d); e != nil { + return e + } + } + + return nil +} diff --git a/tencentcloud/services/mqtt/data_source_tc_mqtt_registration_code.md b/tencentcloud/services/mqtt/data_source_tc_mqtt_registration_code.md new file mode 100644 index 0000000000..84b970424e --- /dev/null +++ b/tencentcloud/services/mqtt/data_source_tc_mqtt_registration_code.md @@ -0,0 +1,9 @@ +Use this data source to query detailed information of MQTT registration code + +Example Usage + +```hcl +data "tencentcloud_mqtt_registration_code" "example" { + instance_id = "mqtt-zxjwkr98" +} +``` diff --git a/tencentcloud/services/mqtt/data_source_tc_mqtt_registration_code_test.go b/tencentcloud/services/mqtt/data_source_tc_mqtt_registration_code_test.go new file mode 100644 index 0000000000..2184966ba1 --- /dev/null +++ b/tencentcloud/services/mqtt/data_source_tc_mqtt_registration_code_test.go @@ -0,0 +1,32 @@ +package mqtt_test + +import ( + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" +) + +func TestAccTencentCloudMqttRegistrationCodeDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{{ + Config: testAccMqttRegistrationCodeDataSource, + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrSet("data.tencentcloud_mqtt_registration_code.example", "id"), + resource.TestCheckResourceAttrSet("data.tencentcloud_mqtt_registration_code.example", "instance_id"), + ), + }}, + }) +} + +const testAccMqttRegistrationCodeDataSource = ` +data "tencentcloud_mqtt_registration_code" "example" { + instance_id = "mqtt-zxjwkr98" +} +` diff --git a/tencentcloud/services/mqtt/resource_tc_mqtt_ca_certificate.go b/tencentcloud/services/mqtt/resource_tc_mqtt_ca_certificate.go new file mode 100644 index 0000000000..89739b0f43 --- /dev/null +++ b/tencentcloud/services/mqtt/resource_tc_mqtt_ca_certificate.go @@ -0,0 +1,408 @@ +package mqtt + +import ( + "context" + "fmt" + "log" + "strings" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + mqttv20240516 "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mqtt/v20240516" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudMqttCaCertificate() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudMqttCaCertificateCreate, + Read: resourceTencentCloudMqttCaCertificateRead, + Update: resourceTencentCloudMqttCaCertificateUpdate, + Delete: resourceTencentCloudMqttCaCertificateDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "instance_id": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + Description: "Instance ID.", + }, + + "ca_certificate": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + Description: "CA certificate.", + }, + + "verification_certificate": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + Description: "Verification certificate.", + }, + + "format": { + Type: schema.TypeString, + Optional: true, + ForceNew: true, + Computed: true, + Description: "Certificate format, Default is PEM.", + }, + + "status": { + Type: schema.TypeString, + Optional: true, + Computed: true, + ValidateFunc: tccommon.ValidateAllowedStringValue([]string{"ACTIVE", "INACTIVE"}), + Description: "Certificate status, Default is ACTIVE.\n ACTIVE activation;\n INACTIVE not active.", + }, + + "ca_sn": { + Type: schema.TypeString, + Computed: true, + Description: "Certificate serial number.", + }, + + "ca_cn": { + Type: schema.TypeString, + Computed: true, + Description: "Certificate common name.", + }, + + "created_time": { + Type: schema.TypeInt, + Computed: true, + Description: "Certificate create time.", + }, + + "update_time": { + Type: schema.TypeInt, + Computed: true, + Description: "Certificate update time.", + }, + + "not_before_time": { + Type: schema.TypeInt, + Computed: true, + Description: "Certificate effective start date.", + }, + + "not_after_time": { + Type: schema.TypeInt, + Computed: true, + Description: "Certificate expiring date.", + }, + }, + } +} + +func resourceTencentCloudMqttCaCertificateCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_mqtt_ca_certificate.create")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) + service = MqttService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + request = mqttv20240516.NewRegisterCaCertificateRequest() + instanceId string + certStr string + caSn string + ) + + if v, ok := d.GetOk("instance_id"); ok { + request.InstanceId = helper.String(v.(string)) + instanceId = v.(string) + } + + if v, ok := d.GetOk("ca_certificate"); ok { + request.CaCertificate = helper.String(v.(string)) + certStr = v.(string) + } + + if v, ok := d.GetOk("verification_certificate"); ok { + request.VerificationCertificate = helper.String(v.(string)) + } + + if v, ok := d.GetOk("format"); ok { + request.Format = helper.String(v.(string)) + } + + if v, ok := d.GetOk("status"); ok { + request.Status = helper.String(v.(string)) + } + + reqErr := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMqttV20240516Client().RegisterCaCertificateWithContext(ctx, 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()) + } + + if result == nil || result.Response == nil { + return resource.NonRetryableError(fmt.Errorf("Create mqtt ca certificate failed, Response is nil.")) + } + + return nil + }) + + if reqErr != nil { + log.Printf("[CRITAL]%s create mqtt ca certificate failed, reason:%+v", logId, reqErr) + return reqErr + } + + caSn, err := service.GetCertificateSerialNumber(certStr) + if err != nil { + return fmt.Errorf("Get certificate serial number error: %s", err.Error()) + } + + d.SetId(strings.Join([]string{instanceId, caSn}, tccommon.FILED_SP)) + + return resourceTencentCloudMqttCaCertificateRead(d, meta) +} + +func resourceTencentCloudMqttCaCertificateRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_mqtt_ca_certificate.read")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) + service = MqttService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + ) + + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", d.Id()) + } + + instanceId := idSplit[0] + caSn := idSplit[1] + + respData1, err := service.DescribeMqttCaCertificateById(ctx, instanceId, caSn) + if err != nil { + return err + } + + if respData1 == nil { + d.SetId("") + log.Printf("[WARN]%s resource `mqtt_ca_certificate` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + + _ = d.Set("instance_id", instanceId) + _ = d.Set("ca_sn", caSn) + + if respData1.CaCertificate != nil { + _ = d.Set("ca_certificate", respData1.CaCertificate) + } + + if respData1.Format != nil { + _ = d.Set("format", respData1.Format) + } + + if respData1.Status != nil { + _ = d.Set("status", respData1.Status) + } + + if respData1.CreatedTime != nil { + _ = d.Set("created_time", respData1.CreatedTime) + } + + if respData1.UpdateTime != nil { + _ = d.Set("update_time", respData1.UpdateTime) + } + + if respData1.NotBeforeTime != nil { + _ = d.Set("not_before_time", respData1.NotBeforeTime) + } + + if respData1.NotAfterTime != nil { + _ = d.Set("not_after_time", respData1.NotAfterTime) + } + + respData2, err := service.DescribeMqttCaCertificatesById(ctx, instanceId, caSn) + if err != nil { + return err + } + + if respData2 == nil { + d.SetId("") + log.Printf("[WARN]%s resource `mqtt_ca_certificate` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + + if respData2.VerificationCertificate != nil { + _ = d.Set("verification_certificate", respData2.VerificationCertificate) + } + + return nil +} + +func resourceTencentCloudMqttCaCertificateUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_mqtt_ca_certificate.update")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) + ) + + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", d.Id()) + } + + instanceId := idSplit[0] + caSn := idSplit[1] + + if d.HasChange("status") { + var status string + if v, ok := d.GetOk("status"); ok { + status = v.(string) + } + + if status == "ACTIVE" { + request := mqttv20240516.NewActivateCaCertificateRequest() + request.InstanceId = &instanceId + request.CaSn = &caSn + reqErr := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMqttV20240516Client().ActivateCaCertificateWithContext(ctx, 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 reqErr != nil { + log.Printf("[CRITAL]%s update mqtt ca certificate activate failed, reason:%+v", logId, reqErr) + return reqErr + } + } else if status == "INACTIVE" { + request := mqttv20240516.NewDeactivateCaCertificateRequest() + request.InstanceId = &instanceId + request.CaSn = &caSn + reqErr := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMqttV20240516Client().DeactivateCaCertificateWithContext(ctx, 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 reqErr != nil { + log.Printf("[CRITAL]%s update mqtt ca certificate deactivate failed, reason:%+v", logId, reqErr) + return reqErr + } + } else { + return fmt.Errorf("`status` only support `ACTIVE` and `INACTIVE`.") + } + } + + return resourceTencentCloudMqttCaCertificateRead(d, meta) +} + +func resourceTencentCloudMqttCaCertificateDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_mqtt_ca_certificate.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) + service = MqttService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + request = mqttv20240516.NewDeleteCaCertificateRequest() + ) + + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", d.Id()) + } + + instanceId := idSplit[0] + caSn := idSplit[1] + + respData, err := service.DescribeMqttCaCertificateById(ctx, instanceId, caSn) + if err != nil { + return err + } + + if respData == nil { + return nil + } + + if respData.Status != nil { + if *respData.Status == "ACTIVE" { + DeactivateRequest := mqttv20240516.NewDeactivateCaCertificateRequest() + DeactivateRequest.InstanceId = &instanceId + DeactivateRequest.CaSn = &caSn + reqErr := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMqttV20240516Client().DeactivateCaCertificateWithContext(ctx, DeactivateRequest) + if e != nil { + return tccommon.RetryError(e) + } else { + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, DeactivateRequest.GetAction(), DeactivateRequest.ToJsonString(), result.ToJsonString()) + } + + return nil + }) + + if reqErr != nil { + log.Printf("[CRITAL]%s update mqtt ca certificate deactivate failed, reason:%+v", logId, reqErr) + return reqErr + } + + request.InstanceId = &instanceId + request.CaSn = &caSn + reqErr = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMqttV20240516Client().DeleteCaCertificateWithContext(ctx, 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 reqErr != nil { + log.Printf("[CRITAL]%s delete mqtt ca certificate failed, reason:%+v", logId, reqErr) + return reqErr + } + } else if *respData.Status == "INACTIVE" { + request.InstanceId = &instanceId + request.CaSn = &caSn + reqErr := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMqttV20240516Client().DeleteCaCertificateWithContext(ctx, 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 reqErr != nil { + log.Printf("[CRITAL]%s delete mqtt ca certificate failed, reason:%+v", logId, reqErr) + return reqErr + } + } else { + return fmt.Errorf("The current certificate status is %s and cannot be deleted.", *respData.Status) + } + + return nil + } + + return fmt.Errorf("Failed to obtain certificate status, unable to perform destruction operation.") +} diff --git a/tencentcloud/services/mqtt/resource_tc_mqtt_ca_certificate.md b/tencentcloud/services/mqtt/resource_tc_mqtt_ca_certificate.md new file mode 100644 index 0000000000..3d9095e149 --- /dev/null +++ b/tencentcloud/services/mqtt/resource_tc_mqtt_ca_certificate.md @@ -0,0 +1,64 @@ +Provides a resource to create a MQTT CA certificate + +Example Usage + +```hcl +resource "tencentcloud_mqtt_ca_certificate" "example" { + instance_id = "mqtt-zxjwkr98" + ca_certificate = <<-EOF +-----BEGIN CERTIFICATE----- +MIIDUDCCAjigAwIBAgIBATANBgkqhkiG9w0BAQsFADA/MQswCQYDVQQGEwJDTjEb +MBkGA1UEChMSTXkgQ0EgT3JnYW5pemF0aW9uMRMwEQYDVQQDEwpNeSBDQSBSb290 +MB4XDTI1MDMyNTEyMzMyM1oXDTM1MDMyNTEyMzMyM1owPzELMAkGA1UEBhMCQ04x +GzAZBgNVBAoTEk15IENBIE9yZ2FuaXphdGlvbjETMBEGA1UEAxMKTXkgQ0EgUm9v +dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMd8mTXv6SPc6+sQY/Po +zeDHMMIgNFq5wTA23nMPZ15P5PH3Hy76oeR9lPIepQXs36BjoRRDlmc0wb9zhZdt +vG9t3Tr8SzTkLC9nSjjs+TIk26/rAuP1igc+V8MbnSuDkgmhepwioXeMrn/ns7RK +mgvKm5C8tC4MlRlmn0R29EPfchvhW+Ab+mybKFSJfiPABDxDzSfPTCZH2wVTgAIF +0lG93SqrytBJzqhwyXN6bXq/52+CGfG264/fLN4vH+VEGE++ys0eZh+9+0GQ4cFp +gqeRFRYG31ChXMWcnKTLzh/o7GpdTCN31w7h1XkJTbaHNvZbuV0H/wwCVN8bsGkK +zo0CAwEAAaNXMFUwDgYDVR0PAQH/BAQDAgEGMBMGA1UdJQQMMAoGCCsGAQUFBwMB +MA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFCFYj1RkM/mf/ZIYzZPoMvusMM9Z +MA0GCSqGSIb3DQEBCwUAA4IBAQC9TRuaXBnx7OHbdAgukWr4/tbIEhVudKrjEjyV +4tYXhZB/adouWLih/2t+E5U8DdpenTDXhQmT57VVdUjE7ey3VTK9qYQ6swTrOi4A +pW9xwpJuqqQPEj9l8/iOdhiSF3XG/UcxwyctPux6Wmm+Xg0Nz3MV0FGGIi56JZlB +sEE4WHwkzoFYTJxIlBNQvcNxVjWmBUWRm7bBCu7vW3sqdb22Uh5X2E0v5sH0vskG +Bj/1ZqTpbCuNC2UIyiqMGwKjVUifKpEmjzJI/gdGq7c2/o987TYlpWMBE1J1my0l +CjJmbR+Ces1k4hZUWrHijCmLS+iWPiadoQ9xzWgaQeQIbU43 +-----END CERTIFICATE----- +EOF + verification_certificate = <<-EOF +-----BEGIN CERTIFICATE----- +MIIDhDCCAmygAwIBAgIRAOr5LwhpwBWsYLWLt5+HwqMwDQYJKoZIhvcNAQELBQAw +PzELMAkGA1UEBhMCQ04xGzAZBgNVBAoTEk15IENBIE9yZ2FuaXphdGlvbjETMBEG +A1UEAxMKTXkgQ0EgUm9vdDAeFw0yNTAzMjUxMjMzMjNaFw0yNjAzMjUxMjMzMjNa +MFoxCzAJBgNVBAYTAkNOMRwwGgYDVQQKExNDbGllbnQgT3JnYW5pemF0aW9uMS0w +KwYDVQQDEyQ0NzAzY2VmNC0wNDM4LTRkM2QtOTgwNy0zMTAwNjI0ODJkNWIwggEi +MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDPOe0pjyLtj7Prt23T1Ep3pJaN +aKKiZyikPae4mHXDZ+AQ4zONA78OaJ6S8E9fAmf5tygWWFJQBwccjitlb1nKChGx +KogqeXS/6RwKPNWjaWUp6gabAmcCTF3g6F8gxjJv0eBn0i+UcS2LNp6wRECM08MI +xHc6B/jC78gkp+b4DuNXFQzGeqDTHgneF5immpjLP7ggWTFgjUOJgLAwGRcZf89K +T3TxN1tKtiKxiXIfzAcqgeAfDWjPYgb/3PEcWZj7Zyl4mJAPnAGghFkLDDeJHh6L +Gk9OpfIuAWmlitZFCujnM1MiEGyw5p6kSwAAD7I/p0yyIV/1VYs2AMmu2uehAgMB +AAGjYDBeMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYB +BQUHAwIwDAYDVR0TAQH/BAIwADAfBgNVHSMEGDAWgBQhWI9UZDP5n/2SGM2T6DL7 +rDDPWTANBgkqhkiG9w0BAQsFAAOCAQEAcsW08LGC/uARyX2X0QZ9A7I+aIluI23b +VSbNbU1+3SVbm8Jfk63rb/Zkc98jPLds598YswY2gQtjT4+Dcpv60wS+c0Ltw1nJ +O23cp2kJ05+jh/5GywOur7gOG8L1xwUngqX84ObBIyeYv5MfANLmzqfZBs9nKokF +keeHU9Y0NYmFiPw4xNM7S55dbFxKizYd66uGc5b+cWkqg5xNlOqU9He0cBC6KYAj +GnyAz0ruWFPFMlftw5/OwNbc9X8G9wm6+T+bNikzOh3FwMCqjK6hdjtR4/HHxgr2 +IpWw7p6yvzDYy4D99PLDjRWP+iLNQCzXOk+PKV+MYCwwYeD1loldOA== +-----END CERTIFICATE----- +EOF + format = "PEM" + status = "ACTIVE" +} +``` + +Import + +MQTT CA certificate can be imported using the id, e.g. + +``` +terraform import tencentcloud_mqtt_ca_certificate.example mqtt-zxjwkr98#01 +``` diff --git a/tencentcloud/services/mqtt/resource_tc_mqtt_ca_certificate_test.go b/tencentcloud/services/mqtt/resource_tc_mqtt_ca_certificate_test.go new file mode 100644 index 0000000000..63c082f93c --- /dev/null +++ b/tencentcloud/services/mqtt/resource_tc_mqtt_ca_certificate_test.go @@ -0,0 +1,154 @@ +package mqtt_test + +import ( + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" +) + +func TestAccTencentCloudMqttCaCertificateResource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccMqttCaCertificate, + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrSet("tencentcloud_mqtt_ca_certificate.example", "id"), + resource.TestCheckResourceAttrSet("tencentcloud_mqtt_ca_certificate.example", "instance_id"), + resource.TestCheckResourceAttrSet("tencentcloud_mqtt_ca_certificate.example", "ca_certificate"), + resource.TestCheckResourceAttrSet("tencentcloud_mqtt_ca_certificate.example", "verification_certificate"), + resource.TestCheckResourceAttrSet("tencentcloud_mqtt_ca_certificate.example", "format"), + resource.TestCheckResourceAttrSet("tencentcloud_mqtt_ca_certificate.example", "status"), + ), + }, + { + Config: testAccMqttCaCertificateUpdate, + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrSet("tencentcloud_mqtt_ca_certificate.example", "id"), + resource.TestCheckResourceAttrSet("tencentcloud_mqtt_ca_certificate.example", "instance_id"), + resource.TestCheckResourceAttrSet("tencentcloud_mqtt_ca_certificate.example", "ca_certificate"), + resource.TestCheckResourceAttrSet("tencentcloud_mqtt_ca_certificate.example", "verification_certificate"), + resource.TestCheckResourceAttrSet("tencentcloud_mqtt_ca_certificate.example", "format"), + resource.TestCheckResourceAttrSet("tencentcloud_mqtt_ca_certificate.example", "status"), + ), + }, + { + ResourceName: "tencentcloud_mqtt_ca_certificate.example", + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + +const testAccMqttCaCertificate = ` +resource "tencentcloud_mqtt_ca_certificate" "example" { + instance_id = "mqtt-zxjwkr98" + ca_certificate = <<-EOF +-----BEGIN CERTIFICATE----- +MIIDUDCCAjigAwIBAgIBATANBgkqhkiG9w0BAQsFADA/MQswCQYDVQQGEwJDTjEb +MBkGA1UEChMSTXkgQ0EgT3JnYW5pemF0aW9uMRMwEQYDVQQDEwpNeSBDQSBSb290 +MB4XDTI1MDMyNTEyMzMyM1oXDTM1MDMyNTEyMzMyM1owPzELMAkGA1UEBhMCQ04x +GzAZBgNVBAoTEk15IENBIE9yZ2FuaXphdGlvbjETMBEGA1UEAxMKTXkgQ0EgUm9v +dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMd8mTXv6SPc6+sQY/Po +zeDHMMIgNFq5wTA23nMPZ15P5PH3Hy76oeR9lPIepQXs36BjoRRDlmc0wb9zhZdt +vG9t3Tr8SzTkLC9nSjjs+TIk26/rAuP1igc+V8MbnSuDkgmhepwioXeMrn/ns7RK +mgvKm5C8tC4MlRlmn0R29EPfchvhW+Ab+mybKFSJfiPABDxDzSfPTCZH2wVTgAIF +0lG93SqrytBJzqhwyXN6bXq/52+CGfG264/fLN4vH+VEGE++ys0eZh+9+0GQ4cFp +gqeRFRYG31ChXMWcnKTLzh/o7GpdTCN31w7h1XkJTbaHNvZbuV0H/wwCVN8bsGkK +zo0CAwEAAaNXMFUwDgYDVR0PAQH/BAQDAgEGMBMGA1UdJQQMMAoGCCsGAQUFBwMB +MA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFCFYj1RkM/mf/ZIYzZPoMvusMM9Z +MA0GCSqGSIb3DQEBCwUAA4IBAQC9TRuaXBnx7OHbdAgukWr4/tbIEhVudKrjEjyV +4tYXhZB/adouWLih/2t+E5U8DdpenTDXhQmT57VVdUjE7ey3VTK9qYQ6swTrOi4A +pW9xwpJuqqQPEj9l8/iOdhiSF3XG/UcxwyctPux6Wmm+Xg0Nz3MV0FGGIi56JZlB +sEE4WHwkzoFYTJxIlBNQvcNxVjWmBUWRm7bBCu7vW3sqdb22Uh5X2E0v5sH0vskG +Bj/1ZqTpbCuNC2UIyiqMGwKjVUifKpEmjzJI/gdGq7c2/o987TYlpWMBE1J1my0l +CjJmbR+Ces1k4hZUWrHijCmLS+iWPiadoQ9xzWgaQeQIbU43 +-----END CERTIFICATE----- +EOF + verification_certificate = <<-EOF +-----BEGIN CERTIFICATE----- +MIIDhDCCAmygAwIBAgIRAOr5LwhpwBWsYLWLt5+HwqMwDQYJKoZIhvcNAQELBQAw +PzELMAkGA1UEBhMCQ04xGzAZBgNVBAoTEk15IENBIE9yZ2FuaXphdGlvbjETMBEG +A1UEAxMKTXkgQ0EgUm9vdDAeFw0yNTAzMjUxMjMzMjNaFw0yNjAzMjUxMjMzMjNa +MFoxCzAJBgNVBAYTAkNOMRwwGgYDVQQKExNDbGllbnQgT3JnYW5pemF0aW9uMS0w +KwYDVQQDEyQ0NzAzY2VmNC0wNDM4LTRkM2QtOTgwNy0zMTAwNjI0ODJkNWIwggEi +MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDPOe0pjyLtj7Prt23T1Ep3pJaN +aKKiZyikPae4mHXDZ+AQ4zONA78OaJ6S8E9fAmf5tygWWFJQBwccjitlb1nKChGx +KogqeXS/6RwKPNWjaWUp6gabAmcCTF3g6F8gxjJv0eBn0i+UcS2LNp6wRECM08MI +xHc6B/jC78gkp+b4DuNXFQzGeqDTHgneF5immpjLP7ggWTFgjUOJgLAwGRcZf89K +T3TxN1tKtiKxiXIfzAcqgeAfDWjPYgb/3PEcWZj7Zyl4mJAPnAGghFkLDDeJHh6L +Gk9OpfIuAWmlitZFCujnM1MiEGyw5p6kSwAAD7I/p0yyIV/1VYs2AMmu2uehAgMB +AAGjYDBeMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYB +BQUHAwIwDAYDVR0TAQH/BAIwADAfBgNVHSMEGDAWgBQhWI9UZDP5n/2SGM2T6DL7 +rDDPWTANBgkqhkiG9w0BAQsFAAOCAQEAcsW08LGC/uARyX2X0QZ9A7I+aIluI23b +VSbNbU1+3SVbm8Jfk63rb/Zkc98jPLds598YswY2gQtjT4+Dcpv60wS+c0Ltw1nJ +O23cp2kJ05+jh/5GywOur7gOG8L1xwUngqX84ObBIyeYv5MfANLmzqfZBs9nKokF +keeHU9Y0NYmFiPw4xNM7S55dbFxKizYd66uGc5b+cWkqg5xNlOqU9He0cBC6KYAj +GnyAz0ruWFPFMlftw5/OwNbc9X8G9wm6+T+bNikzOh3FwMCqjK6hdjtR4/HHxgr2 +IpWw7p6yvzDYy4D99PLDjRWP+iLNQCzXOk+PKV+MYCwwYeD1loldOA== +-----END CERTIFICATE----- +EOF + format = "PEM" + status = "ACTIVE" +} +` + +const testAccMqttCaCertificateUpdate = ` +resource "tencentcloud_mqtt_ca_certificate" "example" { + instance_id = "mqtt-zxjwkr98" + ca_certificate = <<-EOF +-----BEGIN CERTIFICATE----- +MIIDUDCCAjigAwIBAgIBATANBgkqhkiG9w0BAQsFADA/MQswCQYDVQQGEwJDTjEb +MBkGA1UEChMSTXkgQ0EgT3JnYW5pemF0aW9uMRMwEQYDVQQDEwpNeSBDQSBSb290 +MB4XDTI1MDMyNTEyMzMyM1oXDTM1MDMyNTEyMzMyM1owPzELMAkGA1UEBhMCQ04x +GzAZBgNVBAoTEk15IENBIE9yZ2FuaXphdGlvbjETMBEGA1UEAxMKTXkgQ0EgUm9v +dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMd8mTXv6SPc6+sQY/Po +zeDHMMIgNFq5wTA23nMPZ15P5PH3Hy76oeR9lPIepQXs36BjoRRDlmc0wb9zhZdt +vG9t3Tr8SzTkLC9nSjjs+TIk26/rAuP1igc+V8MbnSuDkgmhepwioXeMrn/ns7RK +mgvKm5C8tC4MlRlmn0R29EPfchvhW+Ab+mybKFSJfiPABDxDzSfPTCZH2wVTgAIF +0lG93SqrytBJzqhwyXN6bXq/52+CGfG264/fLN4vH+VEGE++ys0eZh+9+0GQ4cFp +gqeRFRYG31ChXMWcnKTLzh/o7GpdTCN31w7h1XkJTbaHNvZbuV0H/wwCVN8bsGkK +zo0CAwEAAaNXMFUwDgYDVR0PAQH/BAQDAgEGMBMGA1UdJQQMMAoGCCsGAQUFBwMB +MA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFCFYj1RkM/mf/ZIYzZPoMvusMM9Z +MA0GCSqGSIb3DQEBCwUAA4IBAQC9TRuaXBnx7OHbdAgukWr4/tbIEhVudKrjEjyV +4tYXhZB/adouWLih/2t+E5U8DdpenTDXhQmT57VVdUjE7ey3VTK9qYQ6swTrOi4A +pW9xwpJuqqQPEj9l8/iOdhiSF3XG/UcxwyctPux6Wmm+Xg0Nz3MV0FGGIi56JZlB +sEE4WHwkzoFYTJxIlBNQvcNxVjWmBUWRm7bBCu7vW3sqdb22Uh5X2E0v5sH0vskG +Bj/1ZqTpbCuNC2UIyiqMGwKjVUifKpEmjzJI/gdGq7c2/o987TYlpWMBE1J1my0l +CjJmbR+Ces1k4hZUWrHijCmLS+iWPiadoQ9xzWgaQeQIbU43 +-----END CERTIFICATE----- +EOF + verification_certificate = <<-EOF +-----BEGIN CERTIFICATE----- +MIIDhDCCAmygAwIBAgIRAOr5LwhpwBWsYLWLt5+HwqMwDQYJKoZIhvcNAQELBQAw +PzELMAkGA1UEBhMCQ04xGzAZBgNVBAoTEk15IENBIE9yZ2FuaXphdGlvbjETMBEG +A1UEAxMKTXkgQ0EgUm9vdDAeFw0yNTAzMjUxMjMzMjNaFw0yNjAzMjUxMjMzMjNa +MFoxCzAJBgNVBAYTAkNOMRwwGgYDVQQKExNDbGllbnQgT3JnYW5pemF0aW9uMS0w +KwYDVQQDEyQ0NzAzY2VmNC0wNDM4LTRkM2QtOTgwNy0zMTAwNjI0ODJkNWIwggEi +MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDPOe0pjyLtj7Prt23T1Ep3pJaN +aKKiZyikPae4mHXDZ+AQ4zONA78OaJ6S8E9fAmf5tygWWFJQBwccjitlb1nKChGx +KogqeXS/6RwKPNWjaWUp6gabAmcCTF3g6F8gxjJv0eBn0i+UcS2LNp6wRECM08MI +xHc6B/jC78gkp+b4DuNXFQzGeqDTHgneF5immpjLP7ggWTFgjUOJgLAwGRcZf89K +T3TxN1tKtiKxiXIfzAcqgeAfDWjPYgb/3PEcWZj7Zyl4mJAPnAGghFkLDDeJHh6L +Gk9OpfIuAWmlitZFCujnM1MiEGyw5p6kSwAAD7I/p0yyIV/1VYs2AMmu2uehAgMB +AAGjYDBeMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYB +BQUHAwIwDAYDVR0TAQH/BAIwADAfBgNVHSMEGDAWgBQhWI9UZDP5n/2SGM2T6DL7 +rDDPWTANBgkqhkiG9w0BAQsFAAOCAQEAcsW08LGC/uARyX2X0QZ9A7I+aIluI23b +VSbNbU1+3SVbm8Jfk63rb/Zkc98jPLds598YswY2gQtjT4+Dcpv60wS+c0Ltw1nJ +O23cp2kJ05+jh/5GywOur7gOG8L1xwUngqX84ObBIyeYv5MfANLmzqfZBs9nKokF +keeHU9Y0NYmFiPw4xNM7S55dbFxKizYd66uGc5b+cWkqg5xNlOqU9He0cBC6KYAj +GnyAz0ruWFPFMlftw5/OwNbc9X8G9wm6+T+bNikzOh3FwMCqjK6hdjtR4/HHxgr2 +IpWw7p6yvzDYy4D99PLDjRWP+iLNQCzXOk+PKV+MYCwwYeD1loldOA== +-----END CERTIFICATE----- +EOF + format = "PEM" + status = "INACTIVE" +} +` diff --git a/tencentcloud/services/mqtt/resource_tc_mqtt_device_certificate.go b/tencentcloud/services/mqtt/resource_tc_mqtt_device_certificate.go new file mode 100644 index 0000000000..e6b7849c27 --- /dev/null +++ b/tencentcloud/services/mqtt/resource_tc_mqtt_device_certificate.go @@ -0,0 +1,418 @@ +package mqtt + +import ( + "context" + "fmt" + "log" + "strings" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + mqttv20240516 "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mqtt/v20240516" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudMqttDeviceCertificate() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudMqttDeviceCertificateCreate, + Read: resourceTencentCloudMqttDeviceCertificateRead, + Update: resourceTencentCloudMqttDeviceCertificateUpdate, + Delete: resourceTencentCloudMqttDeviceCertificateDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "instance_id": { + Type: schema.TypeString, + Required: true, + Description: "Instance ID.", + }, + + "device_certificate": { + Type: schema.TypeString, + Required: true, + Description: "Device certificate.", + }, + + "ca_sn": { + Type: schema.TypeString, + Required: true, + Description: "Associated CA certificate SN.", + }, + + "client_id": { + Type: schema.TypeString, + Optional: true, + Description: "Client ID.", + }, + + "format": { + Type: schema.TypeString, + Optional: true, + Description: "Certificate format, Default is PEM.", + }, + + "status": { + Type: schema.TypeString, + Optional: true, + ValidateFunc: tccommon.ValidateAllowedStringValue([]string{"ACTIVE", "INACTIVE"}), + Description: "Certificate status, Default is ACTIVE.\\n ACTIVE activation;\\n INACTIVE not active.", + }, + + "device_certificate_sn": { + Type: schema.TypeString, + Computed: true, + Description: "Equipment certificate serial number.", + }, + + "device_certificate_cn": { + Type: schema.TypeString, + Computed: true, + Description: "Certificate common name.", + }, + + "certificate_source": { + Type: schema.TypeString, + Computed: true, + Description: "Certificate source.", + }, + + "created_time": { + Type: schema.TypeInt, + Computed: true, + Description: "Certificate create time.", + }, + + "update_time": { + Type: schema.TypeInt, + Computed: true, + Description: "Certificate update time.", + }, + + "not_before_time": { + Type: schema.TypeInt, + Computed: true, + Description: "Certificate effective start date.", + }, + + "not_after_time": { + Type: schema.TypeInt, + Computed: true, + Description: "Certificate expiring date.", + }, + }, + } +} + +func resourceTencentCloudMqttDeviceCertificateCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_mqtt_device_certificate.create")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) + service = MqttService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + request = mqttv20240516.NewRegisterDeviceCertificateRequest() + instanceId string + deviceCertificate string + deviceCertificateSn string + ) + + if v, ok := d.GetOk("instance_id"); ok { + request.InstanceId = helper.String(v.(string)) + instanceId = v.(string) + } + + if v, ok := d.GetOk("device_certificate"); ok { + request.DeviceCertificate = helper.String(v.(string)) + deviceCertificate = v.(string) + } + + if v, ok := d.GetOk("ca_sn"); ok { + request.CaSn = helper.String(v.(string)) + } + + if v, ok := d.GetOk("client_id"); ok { + request.ClientId = helper.String(v.(string)) + } + + if v, ok := d.GetOk("format"); ok { + request.Format = helper.String(v.(string)) + } + + if v, ok := d.GetOk("status"); ok { + request.Status = helper.String(v.(string)) + } + + reqErr := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMqttV20240516Client().RegisterDeviceCertificateWithContext(ctx, 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()) + } + + if result == nil || result.Response == nil { + return resource.NonRetryableError(fmt.Errorf("Create mqtt device certificate failed, Response is nil.")) + } + + return nil + }) + + if reqErr != nil { + log.Printf("[CRITAL]%s create mqtt device certificate failed, reason:%+v", logId, reqErr) + return reqErr + } + + deviceCertificateSn, err := service.GetCertificateSerialNumber(deviceCertificate) + if err != nil { + return fmt.Errorf("Get certificate serial number error: %s", err.Error()) + } + + d.SetId(strings.Join([]string{instanceId, deviceCertificateSn}, tccommon.FILED_SP)) + + return resourceTencentCloudMqttDeviceCertificateRead(d, meta) +} + +func resourceTencentCloudMqttDeviceCertificateRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_mqtt_device_certificate.read")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) + service = MqttService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + ) + + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", d.Id()) + } + + instanceId := idSplit[0] + deviceCertificateSn := idSplit[1] + + respData, err := service.DescribeMqttDeviceCertificateById(ctx, instanceId, deviceCertificateSn) + if err != nil { + return err + } + + if respData == nil { + d.SetId("") + log.Printf("[WARN]%s resource `mqtt_device_certificate` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + + _ = d.Set("instance_id", instanceId) + + if respData.DeviceCertificate != nil { + _ = d.Set("device_certificate", respData.DeviceCertificate) + } + + if respData.CaSn != nil { + _ = d.Set("ca_sn", respData.CaSn) + } + + if respData.ClientId != nil { + _ = d.Set("client_id", respData.ClientId) + } + + if respData.Format != nil { + _ = d.Set("format", respData.Format) + } + + if respData.Status != nil { + _ = d.Set("status", respData.Status) + } + + if respData.DeviceCertificateSn != nil { + _ = d.Set("device_certificate_sn", respData.DeviceCertificateSn) + } + + if respData.DeviceCertificateCn != nil { + _ = d.Set("device_certificate_cn", respData.DeviceCertificateCn) + } + + if respData.CertificateSource != nil { + _ = d.Set("certificate_source", respData.CertificateSource) + } + + if respData.CreatedTime != nil { + _ = d.Set("created_time", respData.CreatedTime) + } + + if respData.UpdateTime != nil { + _ = d.Set("update_time", respData.UpdateTime) + } + + if respData.NotBeforeTime != nil { + _ = d.Set("not_before_time", respData.NotBeforeTime) + } + + if respData.NotAfterTime != nil { + _ = d.Set("not_after_time", respData.NotAfterTime) + } + + return nil +} + +func resourceTencentCloudMqttDeviceCertificateUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_mqtt_device_certificate.update")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) + ) + + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", d.Id()) + } + + instanceId := idSplit[0] + deviceCertificateSn := idSplit[1] + + if d.HasChange("status") { + var status string + if v, ok := d.GetOk("status"); ok { + status = v.(string) + } + + if status == "ACTIVE" { + request := mqttv20240516.NewActivateDeviceCertificateRequest() + request.InstanceId = &instanceId + request.DeviceCertificateSn = &deviceCertificateSn + reqErr := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMqttV20240516Client().ActivateDeviceCertificateWithContext(ctx, 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 reqErr != nil { + log.Printf("[CRITAL]%s update mqtt device certificate activate failed, reason:%+v", logId, reqErr) + return reqErr + } + } else if status == "INACTIVE" { + request := mqttv20240516.NewDeactivateDeviceCertificateRequest() + request.InstanceId = &instanceId + request.DeviceCertificateSn = &deviceCertificateSn + reqErr := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMqttV20240516Client().DeactivateDeviceCertificateWithContext(ctx, 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 reqErr != nil { + log.Printf("[CRITAL]%s update mqtt device certificate deactivate failed, reason:%+v", logId, reqErr) + return reqErr + } + } else { + return fmt.Errorf("`status` only support `ACTIVE` and `INACTIVE`.") + } + } + + return resourceTencentCloudMqttDeviceCertificateRead(d, meta) +} + +func resourceTencentCloudMqttDeviceCertificateDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_mqtt_device_certificate.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) + service = MqttService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + request = mqttv20240516.NewDeleteDeviceCertificateRequest() + ) + + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", d.Id()) + } + + instanceId := idSplit[0] + deviceCertificateSn := idSplit[1] + + respData, err := service.DescribeMqttDeviceCertificateById(ctx, instanceId, deviceCertificateSn) + if err != nil { + return err + } + + if respData == nil { + return nil + } + + if respData.Status != nil { + if *respData.Status == "ACTIVE" { + DeactivateRequest := mqttv20240516.NewDeactivateDeviceCertificateRequest() + DeactivateRequest.InstanceId = &instanceId + DeactivateRequest.DeviceCertificateSn = &deviceCertificateSn + reqErr := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMqttV20240516Client().DeactivateDeviceCertificateWithContext(ctx, DeactivateRequest) + if e != nil { + return tccommon.RetryError(e) + } else { + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, DeactivateRequest.GetAction(), DeactivateRequest.ToJsonString(), result.ToJsonString()) + } + return nil + }) + + if reqErr != nil { + log.Printf("[CRITAL]%s update mqtt device certificate deactivate failed, reason:%+v", logId, reqErr) + return reqErr + } + + request.InstanceId = &instanceId + request.DeviceCertificateSn = &deviceCertificateSn + reqErr = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMqttV20240516Client().DeleteDeviceCertificateWithContext(ctx, 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 reqErr != nil { + log.Printf("[CRITAL]%s delete mqtt device certificate failed, reason:%+v", logId, reqErr) + return reqErr + } + } else if *respData.Status == "INACTIVE" { + request.InstanceId = &instanceId + request.DeviceCertificateSn = &deviceCertificateSn + reqErr := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMqttV20240516Client().DeleteDeviceCertificateWithContext(ctx, 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 reqErr != nil { + log.Printf("[CRITAL]%s delete mqtt device certificate failed, reason:%+v", logId, reqErr) + return reqErr + } + } else { + return fmt.Errorf("The current certificate status is %s and cannot be deleted.", *respData.Status) + } + + return nil + } + + return fmt.Errorf("Failed to obtain certificate status, unable to perform destruction operation.") +} diff --git a/tencentcloud/services/mqtt/resource_tc_mqtt_device_certificate.md b/tencentcloud/services/mqtt/resource_tc_mqtt_device_certificate.md new file mode 100644 index 0000000000..b090b75aa3 --- /dev/null +++ b/tencentcloud/services/mqtt/resource_tc_mqtt_device_certificate.md @@ -0,0 +1,22 @@ +Provides a resource to create a MQTT device certificate + +Example Usage + +```hcl +resource "tencentcloud_mqtt_device_certificate" "example" { + instance_id = "mqtt-zxjwkr98" + device_certificate = "" + ca_sn = "" + client_id = "" + format = "" + status = "ACTIVE" +} +``` + +Import + +MQTT device certificate can be imported using the id, e.g. + +``` +terraform import tencentcloud_mqtt_device_certificate.example mqtt_device_certificate_id +``` diff --git a/tencentcloud/services/mqtt/resource_tc_mqtt_device_certificate_test.go b/tencentcloud/services/mqtt/resource_tc_mqtt_device_certificate_test.go new file mode 100644 index 0000000000..bf4a3006e3 --- /dev/null +++ b/tencentcloud/services/mqtt/resource_tc_mqtt_device_certificate_test.go @@ -0,0 +1,72 @@ +package mqtt_test + +import ( + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" +) + +func TestAccTencentCloudMqttDeviceCertificateResource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccMqttDeviceCertificate, + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrSet("tencentcloud_mqtt_device_certificate.example", "id"), + resource.TestCheckResourceAttrSet("tencentcloud_mqtt_device_certificate.example", "instance_id"), + resource.TestCheckResourceAttrSet("tencentcloud_mqtt_device_certificate.example", "device_certificate"), + resource.TestCheckResourceAttrSet("tencentcloud_mqtt_device_certificate.example", "ca_sn"), + resource.TestCheckResourceAttrSet("tencentcloud_mqtt_device_certificate.example", "client_id"), + resource.TestCheckResourceAttrSet("tencentcloud_mqtt_device_certificate.example", "format"), + resource.TestCheckResourceAttrSet("tencentcloud_mqtt_device_certificate.example", "status"), + ), + }, + { + Config: testAccMqttDeviceCertificateUpdate, + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrSet("tencentcloud_mqtt_device_certificate.example", "id"), + resource.TestCheckResourceAttrSet("tencentcloud_mqtt_device_certificate.example", "instance_id"), + resource.TestCheckResourceAttrSet("tencentcloud_mqtt_device_certificate.example", "device_certificate"), + resource.TestCheckResourceAttrSet("tencentcloud_mqtt_device_certificate.example", "ca_sn"), + resource.TestCheckResourceAttrSet("tencentcloud_mqtt_device_certificate.example", "client_id"), + resource.TestCheckResourceAttrSet("tencentcloud_mqtt_device_certificate.example", "format"), + resource.TestCheckResourceAttrSet("tencentcloud_mqtt_device_certificate.example", "status"), + ), + }, + { + ResourceName: "tencentcloud_mqtt_device_certificate.example", + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + +const testAccMqttDeviceCertificate = ` +resource "tencentcloud_mqtt_device_certificate" "example" { + instance_id = "mqtt-zxjwkr98" + device_certificate = "" + ca_sn = "" + client_id = "" + format = "" + status = "ACTIVE" +} +` + +const testAccMqttDeviceCertificateUpdate = ` +resource "tencentcloud_mqtt_device_certificate" "example" { + instance_id = "mqtt-zxjwkr98" + device_certificate = "" + ca_sn = "" + client_id = "" + format = "" + status = "ACTIVE" +} +` diff --git a/tencentcloud/services/mqtt/resource_tc_mqtt_http_authenticator.go b/tencentcloud/services/mqtt/resource_tc_mqtt_http_authenticator.go new file mode 100644 index 0000000000..4371c5614e --- /dev/null +++ b/tencentcloud/services/mqtt/resource_tc_mqtt_http_authenticator.go @@ -0,0 +1,445 @@ +package mqtt + +import ( + "context" + "encoding/json" + "fmt" + "log" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + mqttv20240516 "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mqtt/v20240516" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudMqttHttpAuthenticator() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudMqttHttpAuthenticatorCreate, + Read: resourceTencentCloudMqttHttpAuthenticatorRead, + Update: resourceTencentCloudMqttHttpAuthenticatorUpdate, + Delete: resourceTencentCloudMqttHttpAuthenticatorDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "instance_id": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + Description: "Instance ID.", + }, + + "endpoint": { + Type: schema.TypeString, + Required: true, + Description: "JWKS endpoint.", + }, + + "concurrency": { + Type: schema.TypeInt, + Optional: true, + Description: "Maximum concurrent connections, default 8, range: 1-20.", + }, + + "method": { + Type: schema.TypeString, + Optional: true, + Description: "Network request method GET or POST, default POST.", + }, + + "status": { + Type: schema.TypeString, + Optional: true, + Computed: true, + Description: "Is the authenticator enabled: open enable; Close close.", + }, + + "remark": { + Type: schema.TypeString, + Optional: true, + Description: "Remark.", + }, + + "connect_timeout": { + Type: schema.TypeInt, + Optional: true, + Description: "Connection timeout, unit: seconds, range: 1-30.", + }, + + "read_timeout": { + Type: schema.TypeInt, + Optional: true, + Description: "Request timeout, unit: seconds, range: 1-30.", + }, + + "header": { + Type: schema.TypeList, + Optional: true, + Description: "Forwarding request header.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "key": { + Type: schema.TypeString, + Required: true, + Description: "Header key.", + }, + "value": { + Type: schema.TypeString, + Required: true, + Description: "Header value.", + }, + }, + }, + }, + + "body": { + Type: schema.TypeList, + Optional: true, + Description: "Forwarding request body.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "key": { + Type: schema.TypeString, + Required: true, + Description: "Body key.", + }, + "value": { + Type: schema.TypeString, + Required: true, + Description: "Body key.", + }, + }, + }, + }, + }, + } +} + +func resourceTencentCloudMqttHttpAuthenticatorCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_mqtt_http_authenticator.create")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) + request = mqttv20240516.NewCreateHttpAuthenticatorRequest() + instanceId string + ) + + if v, ok := d.GetOk("instance_id"); ok { + request.InstanceId = helper.String(v.(string)) + instanceId = v.(string) + } + + if v, ok := d.GetOk("endpoint"); ok { + request.Endpoint = helper.String(v.(string)) + } + + if v, ok := d.GetOkExists("concurrency"); ok { + request.Concurrency = helper.IntInt64(v.(int)) + } + + if v, ok := d.GetOk("method"); ok { + request.Method = helper.String(v.(string)) + } + + if v, ok := d.GetOk("status"); ok { + request.Status = helper.String(v.(string)) + } + + if v, ok := d.GetOk("remark"); ok { + request.Remark = helper.String(v.(string)) + } + + if v, ok := d.GetOkExists("connect_timeout"); ok { + request.ConnectTimeout = helper.IntInt64(v.(int)) + } + + if v, ok := d.GetOkExists("read_timeout"); ok { + request.ReadTimeout = helper.IntInt64(v.(int)) + } + + if v, ok := d.GetOk("header"); ok { + for _, item := range v.([]interface{}) { + headerMap := item.(map[string]interface{}) + headerItem := mqttv20240516.HeaderItem{} + if v, ok := headerMap["key"].(string); ok && v != "" { + headerItem.Key = helper.String(v) + } + + if v, ok := headerMap["value"].(string); ok && v != "" { + headerItem.Value = helper.String(v) + } + + request.Header = append(request.Header, &headerItem) + } + } + + if v, ok := d.GetOk("body"); ok { + for _, item := range v.([]interface{}) { + bodyMap := item.(map[string]interface{}) + bodyItem := mqttv20240516.BodyItem{} + if v, ok := bodyMap["key"].(string); ok && v != "" { + bodyItem.Key = helper.String(v) + } + + if v, ok := bodyMap["value"].(string); ok && v != "" { + bodyItem.Value = helper.String(v) + } + + request.Body = append(request.Body, &bodyItem) + } + } + + reqErr := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMqttV20240516Client().CreateHttpAuthenticatorWithContext(ctx, 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()) + } + + if result == nil || result.Response == nil { + return resource.NonRetryableError(fmt.Errorf("Create mqtt http authenticator failed, Response is nil.")) + } + + return nil + }) + + if reqErr != nil { + log.Printf("[CRITAL]%s create mqtt http authenticator failed, reason:%+v", logId, reqErr) + return reqErr + } + + d.SetId(instanceId) + + return resourceTencentCloudMqttHttpAuthenticatorRead(d, meta) +} + +func resourceTencentCloudMqttHttpAuthenticatorRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_mqtt_http_authenticator.read")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) + service = MqttService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + instanceId = d.Id() + ) + + respData, err := service.DescribeMqttHttpAuthenticatorById(ctx, instanceId) + if err != nil { + return err + } + + if respData == nil { + d.SetId("") + log.Printf("[WARN]%s resource `mqtt_http_authenticator` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + + _ = d.Set("instance_id", instanceId) + + if respData.Config != nil { + var configMap map[string]interface{} + e := json.Unmarshal([]byte(*respData.Config), &configMap) + if e != nil { + return fmt.Errorf("Failed to parse config content: %s", e.Error()) + } + + if v, ok := configMap["endpoint"].(string); ok && v != "" { + _ = d.Set("endpoint", v) + } + + if v, ok := configMap["concurrency"].(float64); ok { + _ = d.Set("concurrency", int(v)) + } + + if v, ok := configMap["method"].(string); ok && v != "" { + _ = d.Set("method", v) + } + + if v, ok := configMap["connectTimeout"].(float64); ok { + _ = d.Set("connect_timeout", int(v)) + } + + if v, ok := configMap["readTimeout"].(float64); ok { + _ = d.Set("read_timeout", int(v)) + } + + if v, ok := configMap["headers"].([]interface{}); ok { + tmpList := make([]map[string]interface{}, 0) + for _, item := range v { + bodyMap := item.(map[string]interface{}) + dMap := map[string]interface{}{} + if v, ok := bodyMap["key"].(string); ok && v != "" { + dMap["key"] = v + } + + if v, ok := bodyMap["value"].(string); ok && v != "" { + dMap["value"] = v + } + + tmpList = append(tmpList, dMap) + } + + _ = d.Set("header", tmpList) + } + + if v, ok := configMap["body"].([]interface{}); ok { + tmpList := make([]map[string]interface{}, 0) + for _, item := range v { + bodyMap := item.(map[string]interface{}) + dMap := map[string]interface{}{} + if v, ok := bodyMap["key"].(string); ok && v != "" { + dMap["key"] = v + } + + if v, ok := bodyMap["value"].(string); ok && v != "" { + dMap["value"] = v + } + + tmpList = append(tmpList, dMap) + } + + _ = d.Set("body", tmpList) + } + } + + if respData.Status != nil { + _ = d.Set("status", respData.Status) + } + + if respData.Remark != nil { + _ = d.Set("remark", respData.Remark) + } + + return nil +} + +func resourceTencentCloudMqttHttpAuthenticatorUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_mqtt_http_authenticator.update")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) + instanceId = d.Id() + ) + + request := mqttv20240516.NewModifyHttpAuthenticatorRequest() + request.InstanceId = &instanceId + + if v, ok := d.GetOk("endpoint"); ok { + request.Endpoint = helper.String(v.(string)) + } + + if v, ok := d.GetOkExists("concurrency"); ok { + request.Concurrency = helper.IntInt64(v.(int)) + } + + if v, ok := d.GetOkExists("connect_timeout"); ok { + request.ConnectTimeout = helper.IntInt64(v.(int)) + } + + if v, ok := d.GetOkExists("read_timeout"); ok { + request.ReadTimeout = helper.IntInt64(v.(int)) + } + + if v, ok := d.GetOk("remark"); ok { + request.Remark = helper.String(v.(string)) + } + + if v, ok := d.GetOk("method"); ok { + request.Method = helper.String(v.(string)) + } + + if v, ok := d.GetOk("status"); ok { + request.Status = helper.String(v.(string)) + } + + if v, ok := d.GetOk("header"); ok { + for _, item := range v.([]interface{}) { + headerMap := item.(map[string]interface{}) + headerItem := mqttv20240516.HeaderItem{} + if v, ok := headerMap["key"].(string); ok && v != "" { + headerItem.Key = helper.String(v) + } + + if v, ok := headerMap["value"].(string); ok && v != "" { + headerItem.Value = helper.String(v) + } + + request.Header = append(request.Header, &headerItem) + } + } + + if v, ok := d.GetOk("body"); ok { + for _, item := range v.([]interface{}) { + bodyMap := item.(map[string]interface{}) + bodyItem := mqttv20240516.BodyItem{} + if v, ok := bodyMap["key"].(string); ok && v != "" { + bodyItem.Key = helper.String(v) + } + + if v, ok := bodyMap["value"].(string); ok && v != "" { + bodyItem.Value = helper.String(v) + } + + request.Body = append(request.Body, &bodyItem) + } + } + + reqErr := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMqttV20240516Client().ModifyHttpAuthenticatorWithContext(ctx, 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 reqErr != nil { + log.Printf("[CRITAL]%s update mqtt http authenticator failed, reason:%+v", logId, reqErr) + return reqErr + } + + return resourceTencentCloudMqttHttpAuthenticatorRead(d, meta) +} + +func resourceTencentCloudMqttHttpAuthenticatorDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_mqtt_http_authenticator.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) + request = mqttv20240516.NewDeleteAuthenticatorRequest() + instanceId = d.Id() + ) + + request.InstanceId = &instanceId + request.Type = helper.String("HTTP") + + reqErr := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMqttV20240516Client().DeleteAuthenticatorWithContext(ctx, 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 reqErr != nil { + log.Printf("[CRITAL]%s delete mqtt http authenticator failed, reason:%+v", logId, reqErr) + return reqErr + } + + return nil +} diff --git a/tencentcloud/services/mqtt/resource_tc_mqtt_http_authenticator.md b/tencentcloud/services/mqtt/resource_tc_mqtt_http_authenticator.md new file mode 100644 index 0000000000..c65d65bf0b --- /dev/null +++ b/tencentcloud/services/mqtt/resource_tc_mqtt_http_authenticator.md @@ -0,0 +1,33 @@ +Provides a resource to create a MQTT http authenticator + +Example Usage + +```hcl +resource "tencentcloud_mqtt_http_authenticator" "example" { + instance_id = "mqtt-zxjwkr98" + endpoint = "https://example.com" + concurrency = 8 + method = "POST" + status = "open" + remark = "Remark." + connect_timeout = 10 + read_timeout = 10 + header { + key = "Content-type" + value = "application/json" + } + + body { + key = "bodyKey" + value = "bodyValue" + } +} +``` + +Import + +MQTT http authenticator can be imported using the id, e.g. + +``` +terraform import tencentcloud_mqtt_http_authenticator.example mqtt-zxjwkr98 +``` diff --git a/tencentcloud/services/mqtt/resource_tc_mqtt_http_authenticator_test.go b/tencentcloud/services/mqtt/resource_tc_mqtt_http_authenticator_test.go new file mode 100644 index 0000000000..b8ef8bfcc7 --- /dev/null +++ b/tencentcloud/services/mqtt/resource_tc_mqtt_http_authenticator_test.go @@ -0,0 +1,98 @@ +package mqtt_test + +import ( + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" +) + +func TestAccTencentCloudMqttHttpAuthenticatorResource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccMqttHttpAuthenticator, + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrSet("tencentcloud_mqtt_http_authenticator.example", "id"), + resource.TestCheckResourceAttrSet("tencentcloud_mqtt_http_authenticator.example", "instance_id"), + resource.TestCheckResourceAttrSet("tencentcloud_mqtt_http_authenticator.example", "endpoint"), + resource.TestCheckResourceAttrSet("tencentcloud_mqtt_http_authenticator.example", "concurrency"), + resource.TestCheckResourceAttrSet("tencentcloud_mqtt_http_authenticator.example", "method"), + resource.TestCheckResourceAttrSet("tencentcloud_mqtt_http_authenticator.example", "status"), + resource.TestCheckResourceAttrSet("tencentcloud_mqtt_http_authenticator.example", "remark"), + resource.TestCheckResourceAttrSet("tencentcloud_mqtt_http_authenticator.example", "connect_timeout"), + resource.TestCheckResourceAttrSet("tencentcloud_mqtt_http_authenticator.example", "read_timeout"), + ), + }, + { + Config: testAccMqttHttpAuthenticatorUpdate, + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrSet("tencentcloud_mqtt_http_authenticator.example", "id"), + resource.TestCheckResourceAttrSet("tencentcloud_mqtt_http_authenticator.example", "instance_id"), + resource.TestCheckResourceAttrSet("tencentcloud_mqtt_http_authenticator.example", "endpoint"), + resource.TestCheckResourceAttrSet("tencentcloud_mqtt_http_authenticator.example", "concurrency"), + resource.TestCheckResourceAttrSet("tencentcloud_mqtt_http_authenticator.example", "method"), + resource.TestCheckResourceAttrSet("tencentcloud_mqtt_http_authenticator.example", "status"), + resource.TestCheckResourceAttrSet("tencentcloud_mqtt_http_authenticator.example", "remark"), + resource.TestCheckResourceAttrSet("tencentcloud_mqtt_http_authenticator.example", "connect_timeout"), + resource.TestCheckResourceAttrSet("tencentcloud_mqtt_http_authenticator.example", "read_timeout"), + ), + }, + { + ResourceName: "tencentcloud_mqtt_http_authenticator.example", + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + +const testAccMqttHttpAuthenticator = ` +resource "tencentcloud_mqtt_http_authenticator" "example" { + instance_id = "mqtt-zxjwkr98" + endpoint = "https://example.com" + concurrency = 8 + method = "POST" + status = "open" + remark = "Remark." + connect_timeout = 10 + read_timeout = 10 + header { + key = "Content-type" + value = "application/json" + } + + body { + key = "bodyKey" + value = "bodyValue" + } +} +` + +const testAccMqttHttpAuthenticatorUpdate = ` +resource "tencentcloud_mqtt_http_authenticator" "example" { + instance_id = "mqtt-zxjwkr98" + endpoint = "https://example.com" + concurrency = 8 + method = "GET" + status = "close" + remark = "Remark update." + connect_timeout = 10 + read_timeout = 10 + header { + key = "Content-type" + value = "application/json" + } + + body { + key = "bodyKey" + value = "bodyValue" + } +} +` diff --git a/tencentcloud/services/mqtt/resource_tc_mqtt_jwks_authenticator.go b/tencentcloud/services/mqtt/resource_tc_mqtt_jwks_authenticator.go new file mode 100644 index 0000000000..a46874d7cc --- /dev/null +++ b/tencentcloud/services/mqtt/resource_tc_mqtt_jwks_authenticator.go @@ -0,0 +1,268 @@ +package mqtt + +import ( + "context" + "encoding/json" + "fmt" + "log" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + mqttv20240516 "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mqtt/v20240516" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudMqttJwksAuthenticator() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudMqttJwksAuthenticatorCreate, + Read: resourceTencentCloudMqttJwksAuthenticatorRead, + Update: resourceTencentCloudMqttJwksAuthenticatorUpdate, + Delete: resourceTencentCloudMqttJwksAuthenticatorDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "instance_id": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + Description: "Instance ID.", + }, + + "endpoint": { + Type: schema.TypeString, + Optional: true, + Description: "JWKS endpoint.", + }, + + "refresh_interval": { + Type: schema.TypeInt, + Optional: true, + Description: "JWKS refresh interval. unit: s.", + }, + + "text": { + Type: schema.TypeString, + Optional: true, + Description: "JWKS text.", + }, + + "remark": { + Type: schema.TypeString, + Optional: true, + Description: "Remark.", + }, + + "from": { + Type: schema.TypeString, + Optional: true, + Description: "Pass the key of JWT when connecting the device; Username - passed using the username field; Password - Pass using password field.", + }, + }, + } +} + +func resourceTencentCloudMqttJwksAuthenticatorCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_mqtt_jwks_authenticator.create")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) + request = mqttv20240516.NewCreateJWKSAuthenticatorRequest() + instanceId string + ) + + if v, ok := d.GetOk("instance_id"); ok { + request.InstanceId = helper.String(v.(string)) + instanceId = v.(string) + } + + if v, ok := d.GetOk("endpoint"); ok { + request.Endpoint = helper.String(v.(string)) + } + + if v, ok := d.GetOkExists("refresh_interval"); ok { + request.RefreshInterval = helper.IntInt64(v.(int)) + } + + if v, ok := d.GetOk("text"); ok { + request.Text = helper.String(v.(string)) + } + + if v, ok := d.GetOk("remark"); ok { + request.Remark = helper.String(v.(string)) + } + + if v, ok := d.GetOk("from"); ok { + request.From = helper.String(v.(string)) + } + + request.Status = helper.String("open") + reqErr := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMqttV20240516Client().CreateJWKSAuthenticatorWithContext(ctx, 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()) + } + + if result == nil || result.Response == nil { + return resource.NonRetryableError(fmt.Errorf("Create mqtt jwks authenticator failed, Response is nil.")) + } + + return nil + }) + + if reqErr != nil { + log.Printf("[CRITAL]%s create mqtt jwks authenticator failed, reason:%+v", logId, reqErr) + return reqErr + } + + d.SetId(instanceId) + + return resourceTencentCloudMqttJwksAuthenticatorRead(d, meta) +} + +func resourceTencentCloudMqttJwksAuthenticatorRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_mqtt_jwks_authenticator.read")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) + service = MqttService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + instanceId = d.Id() + ) + + respData, err := service.DescribeMqttJwksAuthenticatorById(ctx, instanceId) + if err != nil { + return err + } + + if respData == nil { + d.SetId("") + log.Printf("[WARN]%s resource `mqtt_jwks_authenticator` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + + _ = d.Set("instance_id", instanceId) + + if respData.Config != nil { + var configMap map[string]interface{} + e := json.Unmarshal([]byte(*respData.Config), &configMap) + if e != nil { + return fmt.Errorf("Failed to parse config content: %s", e.Error()) + } + + if v, ok := configMap["endpoint"].(string); ok && v != "" { + _ = d.Set("endpoint", v) + } + + if v, ok := configMap["refreshInterval"].(float64); ok { + _ = d.Set("refresh_interval", int(v)) + } + + if v, ok := configMap["text"].(string); ok && v != "" { + _ = d.Set("text", v) + } + + if v, ok := configMap["from"].(string); ok && v != "" { + _ = d.Set("from", v) + } + } + + if respData.Remark != nil { + _ = d.Set("remark", respData.Remark) + } + + return nil +} + +func resourceTencentCloudMqttJwksAuthenticatorUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_mqtt_jwks_authenticator.update")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) + instanceId = d.Id() + ) + + request := mqttv20240516.NewModifyJWKSAuthenticatorRequest() + request.InstanceId = &instanceId + + if v, ok := d.GetOk("endpoint"); ok { + request.Endpoint = helper.String(v.(string)) + } + + if v, ok := d.GetOkExists("refresh_interval"); ok { + request.RefreshInterval = helper.IntInt64(v.(int)) + } + + if v, ok := d.GetOk("text"); ok { + request.Text = helper.String(v.(string)) + } + + if v, ok := d.GetOk("from"); ok { + request.From = helper.String(v.(string)) + } + + if v, ok := d.GetOk("remark"); ok { + request.Remark = helper.String(v.(string)) + } + + request.Status = helper.String("open") + reqErr := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMqttV20240516Client().ModifyJWKSAuthenticatorWithContext(ctx, 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 reqErr != nil { + log.Printf("[CRITAL]%s update mqtt jwks authenticator failed, reason:%+v", logId, reqErr) + return reqErr + } + + return resourceTencentCloudMqttJwksAuthenticatorRead(d, meta) +} + +func resourceTencentCloudMqttJwksAuthenticatorDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_mqtt_jwks_authenticator.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) + request = mqttv20240516.NewDeleteAuthenticatorRequest() + instanceId = d.Id() + ) + + request.InstanceId = &instanceId + request.Type = helper.String("JWKS") + + reqErr := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMqttV20240516Client().DeleteAuthenticatorWithContext(ctx, 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 reqErr != nil { + log.Printf("[CRITAL]%s delete mqtt jwks authenticator failed, reason:%+v", logId, reqErr) + return reqErr + } + + return nil +} diff --git a/tencentcloud/services/mqtt/resource_tc_mqtt_jwks_authenticator.md b/tencentcloud/services/mqtt/resource_tc_mqtt_jwks_authenticator.md new file mode 100644 index 0000000000..9775d0c4e6 --- /dev/null +++ b/tencentcloud/services/mqtt/resource_tc_mqtt_jwks_authenticator.md @@ -0,0 +1,32 @@ +Provides a resource to create a MQTT jwks authenticator + +Example Usage + +```hcl +resource "tencentcloud_mqtt_jwks_authenticator" "example" { + instance_id = "mqtt-zxjwkr98" + from = "username" + endpoint = "https://example.com" + refresh_interval = 60 + remark = "Remark." +} +``` + +Or + +```hcl +resource "tencentcloud_mqtt_jwks_authenticator" "example" { + instance_id = "mqtt-zxjwkr98" + from = "password" + text = "your text content" + remark = "Remark." +} +``` + +Import + +MQTT jwks authenticator can be imported using the id, e.g. + +``` +terraform import tencentcloud_mqtt_jwks_authenticator.example mqtt-zxjwkr98 +``` diff --git a/tencentcloud/services/mqtt/resource_tc_mqtt_jwks_authenticator_test.go b/tencentcloud/services/mqtt/resource_tc_mqtt_jwks_authenticator_test.go new file mode 100644 index 0000000000..454d05dbe6 --- /dev/null +++ b/tencentcloud/services/mqtt/resource_tc_mqtt_jwks_authenticator_test.go @@ -0,0 +1,33 @@ +package mqtt_test + +import ( + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" +) + +func TestAccTencentCloudMqttJwksAuthenticatorResource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{{ + Config: testAccMqttJwksAuthenticator, + Check: resource.ComposeTestCheckFunc(resource.TestCheckResourceAttrSet("tencentcloud_mqtt_jwks_authenticator.mqtt_jwks_authenticator", "id")), + }, { + ResourceName: "tencentcloud_mqtt_jwks_authenticator.mqtt_jwks_authenticator", + ImportState: true, + ImportStateVerify: true, + }}, + }) +} + +const testAccMqttJwksAuthenticator = ` + +resource "tencentcloud_mqtt_jwks_authenticator" "mqtt_jwks_authenticator" { +} +` diff --git a/tencentcloud/services/mqtt/resource_tc_mqtt_jwt_authenticator.go b/tencentcloud/services/mqtt/resource_tc_mqtt_jwt_authenticator.go new file mode 100644 index 0000000000..d81cb85982 --- /dev/null +++ b/tencentcloud/services/mqtt/resource_tc_mqtt_jwt_authenticator.go @@ -0,0 +1,271 @@ +package mqtt + +import ( + "context" + "encoding/json" + "fmt" + "log" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + mqttv20240516 "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mqtt/v20240516" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudMqttJwtAuthenticator() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudMqttJwtAuthenticatorCreate, + Read: resourceTencentCloudMqttJwtAuthenticatorRead, + Update: resourceTencentCloudMqttJwtAuthenticatorUpdate, + Delete: resourceTencentCloudMqttJwtAuthenticatorDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "instance_id": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + Description: "Instance ID.", + }, + + "algorithm": { + Type: schema.TypeString, + Required: true, + Description: "Algorithm. hmac-based, public-key.", + }, + + "from": { + Type: schema.TypeString, + Required: true, + Description: "Pass the key of JWT when connecting the device; Username - passed using the username field; Password - Pass using password field.", + }, + + "secret": { + Type: schema.TypeString, + Optional: true, + Description: "Secret.", + }, + + "public_key": { + Type: schema.TypeString, + Optional: true, + Description: "Public key.", + }, + + "remark": { + Type: schema.TypeString, + Optional: true, + Description: "Remark.", + }, + }, + } +} + +func resourceTencentCloudMqttJwtAuthenticatorCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_mqtt_jwt_authenticator.create")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) + request = mqttv20240516.NewCreateJWTAuthenticatorRequest() + instanceId string + ) + + if v, ok := d.GetOk("instance_id"); ok { + request.InstanceId = helper.String(v.(string)) + instanceId = v.(string) + } + + if v, ok := d.GetOk("algorithm"); ok { + request.Algorithm = helper.String(v.(string)) + } + + if v, ok := d.GetOk("from"); ok { + request.From = helper.String(v.(string)) + } + + if v, ok := d.GetOk("secret"); ok { + request.Secret = helper.String(v.(string)) + } + + if v, ok := d.GetOk("public_key"); ok { + request.PublicKey = helper.String(v.(string)) + } + + if v, ok := d.GetOk("remark"); ok { + request.Remark = helper.String(v.(string)) + } + + request.Status = helper.String("open") + reqErr := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMqttV20240516Client().CreateJWTAuthenticatorWithContext(ctx, 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()) + } + + if result == nil || result.Response == nil { + return resource.NonRetryableError(fmt.Errorf("Create mqtt jwt authenticator failed, Response is nil.")) + } + + return nil + }) + + if reqErr != nil { + log.Printf("[CRITAL]%s create mqtt jwt authenticator failed, reason:%+v", logId, reqErr) + return reqErr + } + + d.SetId(instanceId) + + return resourceTencentCloudMqttJwtAuthenticatorRead(d, meta) +} + +func resourceTencentCloudMqttJwtAuthenticatorRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_mqtt_jwt_authenticator.read")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) + service = MqttService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + instanceId = d.Id() + ) + + respData, err := service.DescribeMqttJwtAuthenticatorById(ctx, instanceId) + if err != nil { + return err + } + + if respData == nil { + d.SetId("") + log.Printf("[WARN]%s resource `mqtt_jwt_authenticator` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + + _ = d.Set("instance_id", instanceId) + + if respData.Config != nil { + var configMap map[string]interface{} + e := json.Unmarshal([]byte(*respData.Config), &configMap) + if e != nil { + return fmt.Errorf("Failed to parse config content: %s", e.Error()) + } + + if v, ok := configMap["algorithm"].(string); ok && v != "" { + _ = d.Set("algorithm", v) + } + + if v, ok := configMap["from"].(string); ok && v != "" { + _ = d.Set("from", v) + } + + if v, ok := configMap["secret"].(string); ok && v != "" { + _ = d.Set("secret", v) + } + + if v, ok := configMap["public_key"].(string); ok && v != "" { + _ = d.Set("publicKey", v) + } + } + + if respData.Remark != nil { + _ = d.Set("remark", respData.Remark) + } + + return nil +} + +func resourceTencentCloudMqttJwtAuthenticatorUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_mqtt_jwt_authenticator.update")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) + instanceId = d.Id() + ) + + request := mqttv20240516.NewModifyJWTAuthenticatorRequest() + request.InstanceId = &instanceId + + if v, ok := d.GetOk("algorithm"); ok { + request.Algorithm = helper.String(v.(string)) + } + + if v, ok := d.GetOk("from"); ok { + request.From = helper.String(v.(string)) + } + + if v, ok := d.GetOk("secret"); ok { + request.Secret = helper.String(v.(string)) + } + + if v, ok := d.GetOk("public_key"); ok { + request.PublicKey = helper.String(v.(string)) + } + + if v, ok := d.GetOk("text"); ok { + request.Text = helper.String(v.(string)) + } + + if v, ok := d.GetOk("remark"); ok { + request.Remark = helper.String(v.(string)) + } + + reqErr := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMqttV20240516Client().ModifyJWTAuthenticatorWithContext(ctx, 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 reqErr != nil { + log.Printf("[CRITAL]%s update mqtt jwt authenticator failed, reason:%+v", logId, reqErr) + return reqErr + } + + return resourceTencentCloudMqttJwtAuthenticatorRead(d, meta) +} + +func resourceTencentCloudMqttJwtAuthenticatorDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_mqtt_jwt_authenticator.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) + request = mqttv20240516.NewDeleteAuthenticatorRequest() + instanceId = d.Id() + ) + + request.InstanceId = &instanceId + request.Type = helper.String("JWT") + + reqErr := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMqttV20240516Client().DeleteAuthenticatorWithContext(ctx, 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 reqErr != nil { + log.Printf("[CRITAL]%s delete mqtt jwt authenticator failed, reason:%+v", logId, reqErr) + return reqErr + } + + return nil +} diff --git a/tencentcloud/services/mqtt/resource_tc_mqtt_jwt_authenticator.md b/tencentcloud/services/mqtt/resource_tc_mqtt_jwt_authenticator.md new file mode 100644 index 0000000000..1a1cf90487 --- /dev/null +++ b/tencentcloud/services/mqtt/resource_tc_mqtt_jwt_authenticator.md @@ -0,0 +1,35 @@ +Provides a resource to create a MQTT jwt authenticator + +Example Usage + +If algorithm is hmac-based + +```hcl +resource "tencentcloud_mqtt_jwt_authenticator" "example" { + instance_id = "mqtt-zxjwkr98" + algorithm = "hmac-based" + from = "password" + secret = "your secret content" + remark = "Remark." +} +``` + +If algorithm is public-key + +```hcl +resource "tencentcloud_mqtt_jwt_authenticator" "example" { + instance_id = "mqtt-zxjwkr98" + algorithm = "public-key" + from = "username" + public_key = "your public key" + remark = "Remark." +} +``` + +Import + +MQTT jwt authenticator can be imported using the id, e.g. + +``` +terraform import tencentcloud_mqtt_jwt_authenticator.example mqtt-zxjwkr98 +``` diff --git a/tencentcloud/services/mqtt/resource_tc_mqtt_jwt_authenticator_test.go b/tencentcloud/services/mqtt/resource_tc_mqtt_jwt_authenticator_test.go new file mode 100644 index 0000000000..fb55887e2c --- /dev/null +++ b/tencentcloud/services/mqtt/resource_tc_mqtt_jwt_authenticator_test.go @@ -0,0 +1,72 @@ +package mqtt_test + +import ( + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" +) + +func TestAccTencentCloudMqttJwtAuthenticatorResource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccMqttJwtAuthenticator, + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrSet("tencentcloud_mqtt_jwt_authenticator.example", "id"), + resource.TestCheckResourceAttrSet("tencentcloud_mqtt_jwt_authenticator.example", "instance_id"), + resource.TestCheckResourceAttrSet("tencentcloud_mqtt_jwt_authenticator.example", "algorithm"), + resource.TestCheckResourceAttrSet("tencentcloud_mqtt_jwt_authenticator.example", "from"), + resource.TestCheckResourceAttrSet("tencentcloud_mqtt_jwt_authenticator.example", "secret"), + resource.TestCheckResourceAttrSet("tencentcloud_mqtt_jwt_authenticator.example", "status"), + resource.TestCheckResourceAttrSet("tencentcloud_mqtt_jwt_authenticator.example", "remark"), + ), + }, + { + Config: testAccMqttJwtAuthenticatorUpdate, + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrSet("tencentcloud_mqtt_jwt_authenticator.example", "id"), + resource.TestCheckResourceAttrSet("tencentcloud_mqtt_jwt_authenticator.example", "instance_id"), + resource.TestCheckResourceAttrSet("tencentcloud_mqtt_jwt_authenticator.example", "algorithm"), + resource.TestCheckResourceAttrSet("tencentcloud_mqtt_jwt_authenticator.example", "from"), + resource.TestCheckResourceAttrSet("tencentcloud_mqtt_jwt_authenticator.example", "secret"), + resource.TestCheckResourceAttrSet("tencentcloud_mqtt_jwt_authenticator.example", "status"), + resource.TestCheckResourceAttrSet("tencentcloud_mqtt_jwt_authenticator.example", "remark"), + ), + }, + { + ResourceName: "tencentcloud_mqtt_jwt_authenticator.example", + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + +const testAccMqttJwtAuthenticator = ` +resource "tencentcloud_mqtt_jwt_authenticator" "example" { + instance_id = "mqtt-zxjwkr98" + algorithm = "hmac-based" + from = "password" + secret = "your secret content" + status = "open" + remark = "Remark." +} +` + +const testAccMqttJwtAuthenticatorUpdate = ` +resource "tencentcloud_mqtt_jwt_authenticator" "example" { + instance_id = "mqtt-zxjwkr98" + algorithm = "hmac-based" + from = "password" + secret = "your secret content" + status = "open" + remark = "Remark update." +} +` diff --git a/tencentcloud/services/mqtt/resource_tc_mqtt_user.go b/tencentcloud/services/mqtt/resource_tc_mqtt_user.go new file mode 100644 index 0000000000..a323289f34 --- /dev/null +++ b/tencentcloud/services/mqtt/resource_tc_mqtt_user.go @@ -0,0 +1,262 @@ +package mqtt + +import ( + "context" + "fmt" + "log" + "strings" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + mqttv20240516 "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mqtt/v20240516" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudMqttUser() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudMqttUserCreate, + Read: resourceTencentCloudMqttUserRead, + Update: resourceTencentCloudMqttUserUpdate, + Delete: resourceTencentCloudMqttUserDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "instance_id": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + Description: "Instance ID.", + }, + + "username": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + Description: "Username, cannot be empty, only supports uppercase and lowercase letter separators (\"_\", \"-\"), cannot exceed 32 characters.", + }, + + "password": { + Type: schema.TypeString, + Optional: true, + Computed: true, + Sensitive: true, + Description: "Password, when this field is empty, the backend will generate it by default.", + }, + + "remark": { + Type: schema.TypeString, + Optional: true, + Description: "Note that the length should not exceed 128 characters.", + }, + + "created_time": { + Type: schema.TypeInt, + Computed: true, + Description: "Creation time, millisecond timestamp.", + }, + + "modified_time": { + Type: schema.TypeInt, + Computed: true, + Description: "Modify time, millisecond timestamp.", + }, + }, + } +} + +func resourceTencentCloudMqttUserCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_mqtt_user.create")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) + request = mqttv20240516.NewCreateUserRequest() + instanceId string + userName string + ) + + if v, ok := d.GetOk("instance_id"); ok { + request.InstanceId = helper.String(v.(string)) + instanceId = v.(string) + } + + if v, ok := d.GetOk("username"); ok { + request.Username = helper.String(v.(string)) + userName = v.(string) + } + + if v, ok := d.GetOk("password"); ok { + request.Password = helper.String(v.(string)) + } + + if v, ok := d.GetOk("remark"); ok { + request.Remark = helper.String(v.(string)) + } + + reqErr := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMqttV20240516Client().CreateUserWithContext(ctx, 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()) + } + + if result == nil || result.Response == nil { + return resource.NonRetryableError(fmt.Errorf("Create mqtt user failed, Response is nil.")) + } + + return nil + }) + + if reqErr != nil { + log.Printf("[CRITAL]%s create mqtt user failed, reason:%+v", logId, reqErr) + return reqErr + } + + d.SetId(strings.Join([]string{instanceId, userName}, tccommon.FILED_SP)) + + return resourceTencentCloudMqttUserRead(d, meta) +} + +func resourceTencentCloudMqttUserRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_mqtt_user.read")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) + service = MqttService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + ) + + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", d.Id()) + } + + instanceId := idSplit[0] + userName := idSplit[1] + + respData, err := service.DescribeMqttUserById(ctx, instanceId, userName) + if err != nil { + return err + } + + if respData == nil { + d.SetId("") + log.Printf("[WARN]%s resource `mqtt_user` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + + _ = d.Set("instance_id", instanceId) + _ = d.Set("username", userName) + + if respData.Password != nil { + _ = d.Set("password", respData.Password) + } + + if respData.Remark != nil { + _ = d.Set("remark", respData.Remark) + } + + if respData.CreatedTime != nil { + _ = d.Set("created_time", respData.CreatedTime) + } + + if respData.ModifiedTime != nil { + _ = d.Set("modified_time", respData.ModifiedTime) + } + + return nil +} + +func resourceTencentCloudMqttUserUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_mqtt_user.update")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) + ) + + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", d.Id()) + } + + instanceId := idSplit[0] + userName := idSplit[1] + + if d.HasChange("password") { + return fmt.Errorf("`password` can not be changed.") + } + + if d.HasChange("remark") { + request := mqttv20240516.NewModifyUserRequest() + if v, ok := d.GetOk("remark"); ok { + request.Remark = helper.String(v.(string)) + } + + request.InstanceId = &instanceId + request.Username = &userName + reqErr := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMqttV20240516Client().ModifyUserWithContext(ctx, 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 reqErr != nil { + log.Printf("[CRITAL]%s update mqtt user failed, reason:%+v", logId, reqErr) + return reqErr + } + } + + return resourceTencentCloudMqttUserRead(d, meta) +} + +func resourceTencentCloudMqttUserDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_mqtt_user.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) + request = mqttv20240516.NewDeleteUserRequest() + ) + + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", d.Id()) + } + + instanceId := idSplit[0] + userName := idSplit[1] + + request.InstanceId = &instanceId + request.Username = &userName + reqErr := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMqttV20240516Client().DeleteUserWithContext(ctx, 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 reqErr != nil { + log.Printf("[CRITAL]%s delete mqtt user failed, reason:%+v", logId, reqErr) + return reqErr + } + + return nil +} diff --git a/tencentcloud/services/mqtt/resource_tc_mqtt_user.md b/tencentcloud/services/mqtt/resource_tc_mqtt_user.md new file mode 100644 index 0000000000..96506289dd --- /dev/null +++ b/tencentcloud/services/mqtt/resource_tc_mqtt_user.md @@ -0,0 +1,20 @@ +Provides a resource to create a MQTT user + +Example Usage + +```hcl +resource "tencentcloud_mqtt_user" "example" { + instance_id = "mqtt-zxjwkr98" + username = "tf-example" + password = "Password@123" + remark = "Remark." +} +``` + +Import + +MQTT user can be imported using the id, e.g. + +``` +terraform import tencentcloud_mqtt_user.example mqtt-zxjwkr98#tf-example +``` diff --git a/tencentcloud/services/mqtt/resource_tc_mqtt_user_test.go b/tencentcloud/services/mqtt/resource_tc_mqtt_user_test.go new file mode 100644 index 0000000000..e66d859211 --- /dev/null +++ b/tencentcloud/services/mqtt/resource_tc_mqtt_user_test.go @@ -0,0 +1,64 @@ +package mqtt_test + +import ( + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" +) + +func TestAccTencentCloudMqttUserResource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccMqttUser, + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrSet("tencentcloud_mqtt_user.example", "id"), + resource.TestCheckResourceAttrSet("tencentcloud_mqtt_user.example", "instance_id"), + resource.TestCheckResourceAttrSet("tencentcloud_mqtt_user.example", "username"), + resource.TestCheckResourceAttrSet("tencentcloud_mqtt_user.example", "password"), + resource.TestCheckResourceAttrSet("tencentcloud_mqtt_user.example", "remark"), + ), + }, + { + Config: testAccMqttUserUpdate, + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrSet("tencentcloud_mqtt_user.example", "id"), + resource.TestCheckResourceAttrSet("tencentcloud_mqtt_user.example", "instance_id"), + resource.TestCheckResourceAttrSet("tencentcloud_mqtt_user.example", "username"), + resource.TestCheckResourceAttrSet("tencentcloud_mqtt_user.example", "password"), + resource.TestCheckResourceAttrSet("tencentcloud_mqtt_user.example", "remark"), + ), + }, + { + ResourceName: "tencentcloud_mqtt_user.example", + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + +const testAccMqttUser = ` +resource "tencentcloud_mqtt_user" "example" { + instance_id = "mqtt-zxjwkr98" + username = "tf-example" + password = "Password@123" + remark = "Remark." +} +` + +const testAccMqttUserUpdate = ` +resource "tencentcloud_mqtt_user" "example" { + instance_id = "mqtt-zxjwkr98" + username = "tf-example" + password = "Password@123" + remark = "Remark update." +} +` diff --git a/tencentcloud/services/mqtt/service_tencentcloud_mqtt.go b/tencentcloud/services/mqtt/service_tencentcloud_mqtt.go index 6620aa5d4e..d65b55f8ea 100644 --- a/tencentcloud/services/mqtt/service_tencentcloud_mqtt.go +++ b/tencentcloud/services/mqtt/service_tencentcloud_mqtt.go @@ -2,8 +2,14 @@ package mqtt import ( "context" + "crypto/x509" + "encoding/hex" + "encoding/pem" + "fmt" "log" + "strings" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" mqttv20240516 "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mqtt/v20240516" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" @@ -95,3 +101,325 @@ func (me *MqttService) DescribeMqttTopicById(ctx context.Context, instanceId str ret = response.Response return } + +func (me *MqttService) DescribeMqttRegistrationCodeByFilter(ctx context.Context, param map[string]interface{}) (ret *mqttv20240516.ApplyRegistrationCodeResponseParams, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = mqttv20240516.NewApplyRegistrationCodeRequest() + ) + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) + } + }() + + for k, v := range param { + if k == "InstanceId" { + request.InstanceId = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseMqttV20240516Client().ApplyRegistrationCode(request) + if err != nil { + errRet = err + return + } + + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || response.Response == nil { + return + } + + ret = response.Response + return +} + +func (me *MqttService) GetCertificateSerialNumber(certData string) (string, error) { + certData = strings.TrimSpace(certData) + var cert *x509.Certificate + var err error + + if strings.Contains(certData, "-----BEGIN CERTIFICATE-----") { + block, _ := pem.Decode([]byte(certData)) + if block == nil { + return "", fmt.Errorf("failed to parse certificate PEM") + } + + cert, err = x509.ParseCertificate(block.Bytes) + } else { + cert, err = x509.ParseCertificate([]byte(certData)) + } + + if err != nil { + return "", fmt.Errorf("failed to parse certificate: %v", err) + } + + serialHex := hex.EncodeToString(cert.SerialNumber.Bytes()) + return serialHex, nil +} + +func (me *MqttService) DescribeMqttCaCertificateById(ctx context.Context, instanceId, caSn string) (ret *mqttv20240516.DescribeCaCertificateResponseParams, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := mqttv20240516.NewDescribeCaCertificateRequest() + response := mqttv20240516.NewDescribeCaCertificateResponse() + request.InstanceId = &instanceId + request.CaSn = &caSn + reqErr := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := me.client.UseMqttV20240516Client().DescribeCaCertificate(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()) + } + + if result == nil || result.Response == nil { + return resource.NonRetryableError(fmt.Errorf("Response is nil.")) + } + + response = result + return nil + }) + + if reqErr != nil { + errRet = reqErr + return + } + + ret = response.Response + return +} + +func (me *MqttService) DescribeMqttCaCertificatesById(ctx context.Context, instanceId, caSn string) (data *mqttv20240516.CaCertificateItem, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := mqttv20240516.NewDescribeCaCertificatesRequest() + response := mqttv20240516.NewDescribeCaCertificatesResponse() + request.InstanceId = &instanceId + reqErr := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := me.client.UseMqttV20240516Client().DescribeCaCertificates(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()) + } + + if result == nil || result.Response == nil { + return resource.NonRetryableError(fmt.Errorf("Response is nil.")) + } + + response = result + return nil + }) + + if reqErr != nil { + errRet = reqErr + return + } + + if len(response.Response.Data) == 0 { + return + } + + for _, item := range response.Response.Data { + if *item.CaSn == caSn { + data = item + return + } + } + + return +} + +func (me *MqttService) DescribeMqttUserById(ctx context.Context, instanceId, userName string) (ret *mqttv20240516.MQTTUserItem, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := mqttv20240516.NewDescribeUserListRequest() + response := mqttv20240516.NewDescribeUserListResponse() + + request.InstanceId = &instanceId + if userName != "" { + request.Filters = []*mqttv20240516.Filter{ + { + Name: helper.String("Username"), + Values: helper.Strings([]string{userName}), + }, + } + } + + reqErr := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := me.client.UseMqttV20240516Client().DescribeUserList(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()) + } + + if result == nil || result.Response == nil { + return resource.NonRetryableError(fmt.Errorf("Response is nil.")) + } + + response = result + return nil + }) + + if reqErr != nil { + errRet = reqErr + return + } + + if len(response.Response.Data) == 0 { + return + } + + ret = response.Response.Data[0] + return +} + +func (me *MqttService) DescribeMqttDeviceCertificateById(ctx context.Context, instanceId, deviceCertificateSn string) (ret *mqttv20240516.DescribeDeviceCertificateResponseParams, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := mqttv20240516.NewDescribeDeviceCertificateRequest() + response := mqttv20240516.NewDescribeDeviceCertificateResponse() + request.InstanceId = &instanceId + request.DeviceCertificateSn = &deviceCertificateSn + + reqErr := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := me.client.UseMqttV20240516Client().DescribeDeviceCertificate(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()) + } + + if result == nil || result.Response == nil { + return resource.NonRetryableError(fmt.Errorf("Response is nil.")) + } + + response = result + return nil + }) + + if reqErr != nil { + errRet = reqErr + return + } + + ret = response.Response + return +} + +func (me *MqttService) DescribeMqttJwtAuthenticatorById(ctx context.Context, instanceId string) (ret *mqttv20240516.MQTTAuthenticatorItem, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := mqttv20240516.NewDescribeAuthenticatorRequest() + response := mqttv20240516.NewDescribeAuthenticatorResponse() + request.InstanceId = &instanceId + request.Type = helper.String("JWT") + + reqErr := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := me.client.UseMqttV20240516Client().DescribeAuthenticator(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()) + } + + if result == nil || result.Response == nil { + return resource.NonRetryableError(fmt.Errorf("Response is nil.")) + } + + response = result + return nil + }) + + if reqErr != nil { + errRet = reqErr + return + } + + if len(response.Response.Authenticators) == 0 { + return + } + + ret = response.Response.Authenticators[0] + return +} + +func (me *MqttService) DescribeMqttJwksAuthenticatorById(ctx context.Context, instanceId string) (ret *mqttv20240516.MQTTAuthenticatorItem, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := mqttv20240516.NewDescribeAuthenticatorRequest() + response := mqttv20240516.NewDescribeAuthenticatorResponse() + request.InstanceId = &instanceId + request.Type = helper.String("JWKS") + + reqErr := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := me.client.UseMqttV20240516Client().DescribeAuthenticator(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()) + } + + if result == nil || result.Response == nil { + return resource.NonRetryableError(fmt.Errorf("Response is nil.")) + } + + response = result + return nil + }) + + if reqErr != nil { + errRet = reqErr + return + } + + if len(response.Response.Authenticators) == 0 { + return + } + + ret = response.Response.Authenticators[0] + return +} + +func (me *MqttService) DescribeMqttHttpAuthenticatorById(ctx context.Context, instanceId string) (ret *mqttv20240516.MQTTAuthenticatorItem, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := mqttv20240516.NewDescribeAuthenticatorRequest() + response := mqttv20240516.NewDescribeAuthenticatorResponse() + request.InstanceId = &instanceId + request.Type = helper.String("HTTP") + + reqErr := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := me.client.UseMqttV20240516Client().DescribeAuthenticator(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()) + } + + if result == nil || result.Response == nil { + return resource.NonRetryableError(fmt.Errorf("Response is nil.")) + } + + response = result + return nil + }) + + if reqErr != nil { + errRet = reqErr + return + } + + if len(response.Response.Authenticators) == 0 { + return + } + + ret = response.Response.Authenticators[0] + + return +} diff --git a/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http/request.go b/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http/request.go index 6b41d2a8a6..e608e71db1 100644 --- a/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http/request.go +++ b/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http/request.go @@ -265,7 +265,7 @@ func CompleteCommonParams(request Request, region string, requestClient string) params["Action"] = request.GetAction() params["Timestamp"] = strconv.FormatInt(time.Now().Unix(), 10) params["Nonce"] = strconv.Itoa(rand.Int()) - params["RequestClient"] = "SDK_GO_1.0.1129" + params["RequestClient"] = "SDK_GO_1.0.1130" if requestClient != "" { params["RequestClient"] += ": " + requestClient } diff --git a/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mqtt/v20240516/client.go b/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mqtt/v20240516/client.go index 7c3fc04ad2..fa7e534a45 100644 --- a/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mqtt/v20240516/client.go +++ b/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mqtt/v20240516/client.go @@ -45,6 +45,57 @@ func NewClient(credential common.CredentialIface, region string, clientProfile * } +func NewActivateCaCertificateRequest() (request *ActivateCaCertificateRequest) { + request = &ActivateCaCertificateRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("mqtt", APIVersion, "ActivateCaCertificate") + + + return +} + +func NewActivateCaCertificateResponse() (response *ActivateCaCertificateResponse) { + response = &ActivateCaCertificateResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return + +} + +// ActivateCaCertificate +// 激活Ca证书 +// +// 可能返回的错误码: +// FAILEDOPERATION_INSTANCENOTREADY = "FailedOperation.InstanceNotReady" +// RESOURCENOTFOUND_INSTANCE = "ResourceNotFound.Instance" +func (c *Client) ActivateCaCertificate(request *ActivateCaCertificateRequest) (response *ActivateCaCertificateResponse, err error) { + return c.ActivateCaCertificateWithContext(context.Background(), request) +} + +// ActivateCaCertificate +// 激活Ca证书 +// +// 可能返回的错误码: +// FAILEDOPERATION_INSTANCENOTREADY = "FailedOperation.InstanceNotReady" +// RESOURCENOTFOUND_INSTANCE = "ResourceNotFound.Instance" +func (c *Client) ActivateCaCertificateWithContext(ctx context.Context, request *ActivateCaCertificateRequest) (response *ActivateCaCertificateResponse, err error) { + if request == nil { + request = NewActivateCaCertificateRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("ActivateCaCertificate require credential") + } + + request.SetContext(ctx) + + response = NewActivateCaCertificateResponse() + err = c.Send(request, response) + return +} + func NewActivateDeviceCertificateRequest() (request *ActivateDeviceCertificateRequest) { request = &ActivateDeviceCertificateRequest{ BaseRequest: &tchttp.BaseRequest{}, @@ -96,6 +147,57 @@ func (c *Client) ActivateDeviceCertificateWithContext(ctx context.Context, reque return } +func NewApplyRegistrationCodeRequest() (request *ApplyRegistrationCodeRequest) { + request = &ApplyRegistrationCodeRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("mqtt", APIVersion, "ApplyRegistrationCode") + + + return +} + +func NewApplyRegistrationCodeResponse() (response *ApplyRegistrationCodeResponse) { + response = &ApplyRegistrationCodeResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return + +} + +// ApplyRegistrationCode +// 申请ca注册码 +// +// 可能返回的错误码: +// FAILEDOPERATION_INSTANCENOTREADY = "FailedOperation.InstanceNotReady" +// RESOURCENOTFOUND_INSTANCE = "ResourceNotFound.Instance" +func (c *Client) ApplyRegistrationCode(request *ApplyRegistrationCodeRequest) (response *ApplyRegistrationCodeResponse, err error) { + return c.ApplyRegistrationCodeWithContext(context.Background(), request) +} + +// ApplyRegistrationCode +// 申请ca注册码 +// +// 可能返回的错误码: +// FAILEDOPERATION_INSTANCENOTREADY = "FailedOperation.InstanceNotReady" +// RESOURCENOTFOUND_INSTANCE = "ResourceNotFound.Instance" +func (c *Client) ApplyRegistrationCodeWithContext(ctx context.Context, request *ApplyRegistrationCodeRequest) (response *ApplyRegistrationCodeResponse, err error) { + if request == nil { + request = NewApplyRegistrationCodeRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("ApplyRegistrationCode require credential") + } + + request.SetContext(ctx) + + response = NewApplyRegistrationCodeResponse() + err = c.Send(request, response) + return +} + func NewCreateAuthorizationPolicyRequest() (request *CreateAuthorizationPolicyRequest) { request = &CreateAuthorizationPolicyRequest{ BaseRequest: &tchttp.BaseRequest{}, @@ -147,6 +249,61 @@ func (c *Client) CreateAuthorizationPolicyWithContext(ctx context.Context, reque return } +func NewCreateHttpAuthenticatorRequest() (request *CreateHttpAuthenticatorRequest) { + request = &CreateHttpAuthenticatorRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("mqtt", APIVersion, "CreateHttpAuthenticator") + + + return +} + +func NewCreateHttpAuthenticatorResponse() (response *CreateHttpAuthenticatorResponse) { + response = &CreateHttpAuthenticatorResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return + +} + +// CreateHttpAuthenticator +// 创建一个HTTP的认证器 +// +// 可能返回的错误码: +// FAILEDOPERATION = "FailedOperation" +// FAILEDOPERATION_INSTANCENOTREADY = "FailedOperation.InstanceNotReady" +// RESOURCENOTFOUND_INSTANCE = "ResourceNotFound.Instance" +// UNSUPPORTEDOPERATION_RESOURCEALREADYEXISTS = "UnsupportedOperation.ResourceAlreadyExists" +func (c *Client) CreateHttpAuthenticator(request *CreateHttpAuthenticatorRequest) (response *CreateHttpAuthenticatorResponse, err error) { + return c.CreateHttpAuthenticatorWithContext(context.Background(), request) +} + +// CreateHttpAuthenticator +// 创建一个HTTP的认证器 +// +// 可能返回的错误码: +// FAILEDOPERATION = "FailedOperation" +// FAILEDOPERATION_INSTANCENOTREADY = "FailedOperation.InstanceNotReady" +// RESOURCENOTFOUND_INSTANCE = "ResourceNotFound.Instance" +// UNSUPPORTEDOPERATION_RESOURCEALREADYEXISTS = "UnsupportedOperation.ResourceAlreadyExists" +func (c *Client) CreateHttpAuthenticatorWithContext(ctx context.Context, request *CreateHttpAuthenticatorRequest) (response *CreateHttpAuthenticatorResponse, err error) { + if request == nil { + request = NewCreateHttpAuthenticatorRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("CreateHttpAuthenticator require credential") + } + + request.SetContext(ctx) + + response = NewCreateHttpAuthenticatorResponse() + err = c.Send(request, response) + return +} + func NewCreateInsPublicEndpointRequest() (request *CreateInsPublicEndpointRequest) { request = &CreateInsPublicEndpointRequest{ BaseRequest: &tchttp.BaseRequest{}, @@ -170,8 +327,10 @@ func NewCreateInsPublicEndpointResponse() (response *CreateInsPublicEndpointResp // 为MQTT实例创建公网接入点 // // 可能返回的错误码: +// FAILEDOPERATION = "FailedOperation" // FAILEDOPERATION_INSTANCENOTREADY = "FailedOperation.InstanceNotReady" // RESOURCENOTFOUND_INSTANCE = "ResourceNotFound.Instance" +// UNSUPPORTEDOPERATION_RESOURCEALREADYEXISTS = "UnsupportedOperation.ResourceAlreadyExists" func (c *Client) CreateInsPublicEndpoint(request *CreateInsPublicEndpointRequest) (response *CreateInsPublicEndpointResponse, err error) { return c.CreateInsPublicEndpointWithContext(context.Background(), request) } @@ -180,8 +339,10 @@ func (c *Client) CreateInsPublicEndpoint(request *CreateInsPublicEndpointRequest // 为MQTT实例创建公网接入点 // // 可能返回的错误码: +// FAILEDOPERATION = "FailedOperation" // FAILEDOPERATION_INSTANCENOTREADY = "FailedOperation.InstanceNotReady" // RESOURCENOTFOUND_INSTANCE = "ResourceNotFound.Instance" +// UNSUPPORTEDOPERATION_RESOURCEALREADYEXISTS = "UnsupportedOperation.ResourceAlreadyExists" func (c *Client) CreateInsPublicEndpointWithContext(ctx context.Context, request *CreateInsPublicEndpointRequest) (response *CreateInsPublicEndpointResponse, err error) { if request == nil { request = NewCreateInsPublicEndpointRequest() @@ -477,6 +638,57 @@ func (c *Client) CreateUserWithContext(ctx context.Context, request *CreateUserR return } +func NewDeactivateCaCertificateRequest() (request *DeactivateCaCertificateRequest) { + request = &DeactivateCaCertificateRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("mqtt", APIVersion, "DeactivateCaCertificate") + + + return +} + +func NewDeactivateCaCertificateResponse() (response *DeactivateCaCertificateResponse) { + response = &DeactivateCaCertificateResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return + +} + +// DeactivateCaCertificate +// 失效Ca证书 +// +// 可能返回的错误码: +// FAILEDOPERATION_INSTANCENOTREADY = "FailedOperation.InstanceNotReady" +// RESOURCENOTFOUND_INSTANCE = "ResourceNotFound.Instance" +func (c *Client) DeactivateCaCertificate(request *DeactivateCaCertificateRequest) (response *DeactivateCaCertificateResponse, err error) { + return c.DeactivateCaCertificateWithContext(context.Background(), request) +} + +// DeactivateCaCertificate +// 失效Ca证书 +// +// 可能返回的错误码: +// FAILEDOPERATION_INSTANCENOTREADY = "FailedOperation.InstanceNotReady" +// RESOURCENOTFOUND_INSTANCE = "ResourceNotFound.Instance" +func (c *Client) DeactivateCaCertificateWithContext(ctx context.Context, request *DeactivateCaCertificateRequest) (response *DeactivateCaCertificateResponse, err error) { + if request == nil { + request = NewDeactivateCaCertificateRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("DeactivateCaCertificate require credential") + } + + request.SetContext(ctx) + + response = NewDeactivateCaCertificateResponse() + err = c.Send(request, response) + return +} + func NewDeactivateDeviceCertificateRequest() (request *DeactivateDeviceCertificateRequest) { request = &DeactivateDeviceCertificateRequest{ BaseRequest: &tchttp.BaseRequest{}, @@ -604,9 +816,9 @@ func NewDeleteAuthorizationPolicyResponse() (response *DeleteAuthorizationPolicy // 删除策略规则 // // 可能返回的错误码: -// FAILEDOPERATION = "FailedOperation" +// FAILEDOPERATION_INSTANCENOTREADY = "FailedOperation.InstanceNotReady" +// RESOURCENOTFOUND_AUTHORIZATIONPOLICY = "ResourceNotFound.AuthorizationPolicy" // RESOURCENOTFOUND_INSTANCE = "ResourceNotFound.Instance" -// RESOURCENOTFOUND_ROLE = "ResourceNotFound.Role" func (c *Client) DeleteAuthorizationPolicy(request *DeleteAuthorizationPolicyRequest) (response *DeleteAuthorizationPolicyResponse, err error) { return c.DeleteAuthorizationPolicyWithContext(context.Background(), request) } @@ -615,9 +827,9 @@ func (c *Client) DeleteAuthorizationPolicy(request *DeleteAuthorizationPolicyReq // 删除策略规则 // // 可能返回的错误码: -// FAILEDOPERATION = "FailedOperation" +// FAILEDOPERATION_INSTANCENOTREADY = "FailedOperation.InstanceNotReady" +// RESOURCENOTFOUND_AUTHORIZATIONPOLICY = "ResourceNotFound.AuthorizationPolicy" // RESOURCENOTFOUND_INSTANCE = "ResourceNotFound.Instance" -// RESOURCENOTFOUND_ROLE = "ResourceNotFound.Role" func (c *Client) DeleteAuthorizationPolicyWithContext(ctx context.Context, request *DeleteAuthorizationPolicyRequest) (response *DeleteAuthorizationPolicyResponse, err error) { if request == nil { request = NewDeleteAuthorizationPolicyRequest() @@ -634,6 +846,59 @@ func (c *Client) DeleteAuthorizationPolicyWithContext(ctx context.Context, reque return } +func NewDeleteCaCertificateRequest() (request *DeleteCaCertificateRequest) { + request = &DeleteCaCertificateRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("mqtt", APIVersion, "DeleteCaCertificate") + + + return +} + +func NewDeleteCaCertificateResponse() (response *DeleteCaCertificateResponse) { + response = &DeleteCaCertificateResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return + +} + +// DeleteCaCertificate +// 删除Ca证书 +// +// 可能返回的错误码: +// FAILEDOPERATION_INSTANCENOTREADY = "FailedOperation.InstanceNotReady" +// FAILEDOPERATION_RELATEDDEVICECERTIFICATEEXISTS = "FailedOperation.RelatedDeviceCertificateExists" +// RESOURCENOTFOUND_INSTANCE = "ResourceNotFound.Instance" +func (c *Client) DeleteCaCertificate(request *DeleteCaCertificateRequest) (response *DeleteCaCertificateResponse, err error) { + return c.DeleteCaCertificateWithContext(context.Background(), request) +} + +// DeleteCaCertificate +// 删除Ca证书 +// +// 可能返回的错误码: +// FAILEDOPERATION_INSTANCENOTREADY = "FailedOperation.InstanceNotReady" +// FAILEDOPERATION_RELATEDDEVICECERTIFICATEEXISTS = "FailedOperation.RelatedDeviceCertificateExists" +// RESOURCENOTFOUND_INSTANCE = "ResourceNotFound.Instance" +func (c *Client) DeleteCaCertificateWithContext(ctx context.Context, request *DeleteCaCertificateRequest) (response *DeleteCaCertificateResponse, err error) { + if request == nil { + request = NewDeleteCaCertificateRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("DeleteCaCertificate require credential") + } + + request.SetContext(ctx) + + response = NewDeleteCaCertificateResponse() + err = c.Send(request, response) + return +} + func NewDeleteDeviceCertificateRequest() (request *DeleteDeviceCertificateRequest) { request = &DeleteDeviceCertificateRequest{ BaseRequest: &tchttp.BaseRequest{}, @@ -866,6 +1131,7 @@ func NewDeleteUserResponse() (response *DeleteUserResponse) { // FAILEDOPERATION = "FailedOperation" // RESOURCENOTFOUND_INSTANCE = "ResourceNotFound.Instance" // RESOURCENOTFOUND_ROLE = "ResourceNotFound.Role" +// RESOURCENOTFOUND_USERNAME = "ResourceNotFound.Username" func (c *Client) DeleteUser(request *DeleteUserRequest) (response *DeleteUserResponse, err error) { return c.DeleteUserWithContext(context.Background(), request) } @@ -877,6 +1143,7 @@ func (c *Client) DeleteUser(request *DeleteUserRequest) (response *DeleteUserRes // FAILEDOPERATION = "FailedOperation" // RESOURCENOTFOUND_INSTANCE = "ResourceNotFound.Instance" // RESOURCENOTFOUND_ROLE = "ResourceNotFound.Role" +// RESOURCENOTFOUND_USERNAME = "ResourceNotFound.Username" func (c *Client) DeleteUserWithContext(ctx context.Context, request *DeleteUserRequest) (response *DeleteUserResponse, err error) { if request == nil { request = NewDeleteUserRequest() @@ -991,178 +1258,374 @@ func (c *Client) DescribeAuthorizationPoliciesWithContext(ctx context.Context, r return } -func NewDescribeDeviceCertificateRequest() (request *DescribeDeviceCertificateRequest) { - request = &DescribeDeviceCertificateRequest{ +func NewDescribeCaCertificateRequest() (request *DescribeCaCertificateRequest) { + request = &DescribeCaCertificateRequest{ BaseRequest: &tchttp.BaseRequest{}, } - request.Init().WithApiInfo("mqtt", APIVersion, "DescribeDeviceCertificate") + request.Init().WithApiInfo("mqtt", APIVersion, "DescribeCaCertificate") return } -func NewDescribeDeviceCertificateResponse() (response *DescribeDeviceCertificateResponse) { - response = &DescribeDeviceCertificateResponse{ +func NewDescribeCaCertificateResponse() (response *DescribeCaCertificateResponse) { + response = &DescribeCaCertificateResponse{ BaseResponse: &tchttp.BaseResponse{}, } return } -// DescribeDeviceCertificate -// 查询设备证书详情接口 +// DescribeCaCertificate +// 查询Ca证书详情接口 // // 可能返回的错误码: // RESOURCENOTFOUND_INSTANCE = "ResourceNotFound.Instance" -func (c *Client) DescribeDeviceCertificate(request *DescribeDeviceCertificateRequest) (response *DescribeDeviceCertificateResponse, err error) { - return c.DescribeDeviceCertificateWithContext(context.Background(), request) +func (c *Client) DescribeCaCertificate(request *DescribeCaCertificateRequest) (response *DescribeCaCertificateResponse, err error) { + return c.DescribeCaCertificateWithContext(context.Background(), request) } -// DescribeDeviceCertificate -// 查询设备证书详情接口 +// DescribeCaCertificate +// 查询Ca证书详情接口 // // 可能返回的错误码: // RESOURCENOTFOUND_INSTANCE = "ResourceNotFound.Instance" -func (c *Client) DescribeDeviceCertificateWithContext(ctx context.Context, request *DescribeDeviceCertificateRequest) (response *DescribeDeviceCertificateResponse, err error) { +func (c *Client) DescribeCaCertificateWithContext(ctx context.Context, request *DescribeCaCertificateRequest) (response *DescribeCaCertificateResponse, err error) { if request == nil { - request = NewDescribeDeviceCertificateRequest() + request = NewDescribeCaCertificateRequest() } if c.GetCredential() == nil { - return nil, errors.New("DescribeDeviceCertificate require credential") + return nil, errors.New("DescribeCaCertificate require credential") } request.SetContext(ctx) - response = NewDescribeDeviceCertificateResponse() + response = NewDescribeCaCertificateResponse() err = c.Send(request, response) return } -func NewDescribeDeviceCertificatesRequest() (request *DescribeDeviceCertificatesRequest) { - request = &DescribeDeviceCertificatesRequest{ +func NewDescribeCaCertificatesRequest() (request *DescribeCaCertificatesRequest) { + request = &DescribeCaCertificatesRequest{ BaseRequest: &tchttp.BaseRequest{}, } - request.Init().WithApiInfo("mqtt", APIVersion, "DescribeDeviceCertificates") + request.Init().WithApiInfo("mqtt", APIVersion, "DescribeCaCertificates") return } -func NewDescribeDeviceCertificatesResponse() (response *DescribeDeviceCertificatesResponse) { - response = &DescribeDeviceCertificatesResponse{ +func NewDescribeCaCertificatesResponse() (response *DescribeCaCertificatesResponse) { + response = &DescribeCaCertificatesResponse{ BaseResponse: &tchttp.BaseResponse{}, } return } -// DescribeDeviceCertificates -// 分页查询设备证书 +// DescribeCaCertificates +// 查询集群下的ca证书信息 // // 可能返回的错误码: // RESOURCENOTFOUND_INSTANCE = "ResourceNotFound.Instance" -func (c *Client) DescribeDeviceCertificates(request *DescribeDeviceCertificatesRequest) (response *DescribeDeviceCertificatesResponse, err error) { - return c.DescribeDeviceCertificatesWithContext(context.Background(), request) +func (c *Client) DescribeCaCertificates(request *DescribeCaCertificatesRequest) (response *DescribeCaCertificatesResponse, err error) { + return c.DescribeCaCertificatesWithContext(context.Background(), request) } -// DescribeDeviceCertificates -// 分页查询设备证书 +// DescribeCaCertificates +// 查询集群下的ca证书信息 // // 可能返回的错误码: // RESOURCENOTFOUND_INSTANCE = "ResourceNotFound.Instance" -func (c *Client) DescribeDeviceCertificatesWithContext(ctx context.Context, request *DescribeDeviceCertificatesRequest) (response *DescribeDeviceCertificatesResponse, err error) { +func (c *Client) DescribeCaCertificatesWithContext(ctx context.Context, request *DescribeCaCertificatesRequest) (response *DescribeCaCertificatesResponse, err error) { if request == nil { - request = NewDescribeDeviceCertificatesRequest() + request = NewDescribeCaCertificatesRequest() } if c.GetCredential() == nil { - return nil, errors.New("DescribeDeviceCertificates require credential") + return nil, errors.New("DescribeCaCertificates require credential") } request.SetContext(ctx) - response = NewDescribeDeviceCertificatesResponse() + response = NewDescribeCaCertificatesResponse() err = c.Send(request, response) return } -func NewDescribeInsPublicEndpointsRequest() (request *DescribeInsPublicEndpointsRequest) { - request = &DescribeInsPublicEndpointsRequest{ +func NewDescribeClientListRequest() (request *DescribeClientListRequest) { + request = &DescribeClientListRequest{ BaseRequest: &tchttp.BaseRequest{}, } - request.Init().WithApiInfo("mqtt", APIVersion, "DescribeInsPublicEndpoints") + request.Init().WithApiInfo("mqtt", APIVersion, "DescribeClientList") return } -func NewDescribeInsPublicEndpointsResponse() (response *DescribeInsPublicEndpointsResponse) { - response = &DescribeInsPublicEndpointsResponse{ +func NewDescribeClientListResponse() (response *DescribeClientListResponse) { + response = &DescribeClientListResponse{ BaseResponse: &tchttp.BaseResponse{}, } return } -// DescribeInsPublicEndpoints -// 查询MQTT实例公网接入点 +// DescribeClientList +// 查询 MQTT 客户端详情 // // 可能返回的错误码: // RESOURCENOTFOUND_INSTANCE = "ResourceNotFound.Instance" -func (c *Client) DescribeInsPublicEndpoints(request *DescribeInsPublicEndpointsRequest) (response *DescribeInsPublicEndpointsResponse, err error) { - return c.DescribeInsPublicEndpointsWithContext(context.Background(), request) +func (c *Client) DescribeClientList(request *DescribeClientListRequest) (response *DescribeClientListResponse, err error) { + return c.DescribeClientListWithContext(context.Background(), request) } -// DescribeInsPublicEndpoints -// 查询MQTT实例公网接入点 +// DescribeClientList +// 查询 MQTT 客户端详情 // // 可能返回的错误码: // RESOURCENOTFOUND_INSTANCE = "ResourceNotFound.Instance" -func (c *Client) DescribeInsPublicEndpointsWithContext(ctx context.Context, request *DescribeInsPublicEndpointsRequest) (response *DescribeInsPublicEndpointsResponse, err error) { +func (c *Client) DescribeClientListWithContext(ctx context.Context, request *DescribeClientListRequest) (response *DescribeClientListResponse, err error) { if request == nil { - request = NewDescribeInsPublicEndpointsRequest() + request = NewDescribeClientListRequest() } if c.GetCredential() == nil { - return nil, errors.New("DescribeInsPublicEndpoints require credential") + return nil, errors.New("DescribeClientList require credential") } request.SetContext(ctx) - response = NewDescribeInsPublicEndpointsResponse() + response = NewDescribeClientListResponse() err = c.Send(request, response) return } -func NewDescribeInstanceRequest() (request *DescribeInstanceRequest) { - request = &DescribeInstanceRequest{ +func NewDescribeDeviceCertificateRequest() (request *DescribeDeviceCertificateRequest) { + request = &DescribeDeviceCertificateRequest{ BaseRequest: &tchttp.BaseRequest{}, } - request.Init().WithApiInfo("mqtt", APIVersion, "DescribeInstance") + request.Init().WithApiInfo("mqtt", APIVersion, "DescribeDeviceCertificate") return } -func NewDescribeInstanceResponse() (response *DescribeInstanceResponse) { - response = &DescribeInstanceResponse{ +func NewDescribeDeviceCertificateResponse() (response *DescribeDeviceCertificateResponse) { + response = &DescribeDeviceCertificateResponse{ BaseResponse: &tchttp.BaseResponse{}, } return } -// DescribeInstance -// 查询实例信息 +// DescribeDeviceCertificate +// 查询设备证书详情接口 // // 可能返回的错误码: // RESOURCENOTFOUND_INSTANCE = "ResourceNotFound.Instance" -func (c *Client) DescribeInstance(request *DescribeInstanceRequest) (response *DescribeInstanceResponse, err error) { +func (c *Client) DescribeDeviceCertificate(request *DescribeDeviceCertificateRequest) (response *DescribeDeviceCertificateResponse, err error) { + return c.DescribeDeviceCertificateWithContext(context.Background(), request) +} + +// DescribeDeviceCertificate +// 查询设备证书详情接口 +// +// 可能返回的错误码: +// RESOURCENOTFOUND_INSTANCE = "ResourceNotFound.Instance" +func (c *Client) DescribeDeviceCertificateWithContext(ctx context.Context, request *DescribeDeviceCertificateRequest) (response *DescribeDeviceCertificateResponse, err error) { + if request == nil { + request = NewDescribeDeviceCertificateRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeDeviceCertificate require credential") + } + + request.SetContext(ctx) + + response = NewDescribeDeviceCertificateResponse() + err = c.Send(request, response) + return +} + +func NewDescribeDeviceCertificatesRequest() (request *DescribeDeviceCertificatesRequest) { + request = &DescribeDeviceCertificatesRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("mqtt", APIVersion, "DescribeDeviceCertificates") + + + return +} + +func NewDescribeDeviceCertificatesResponse() (response *DescribeDeviceCertificatesResponse) { + response = &DescribeDeviceCertificatesResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return + +} + +// DescribeDeviceCertificates +// 分页查询设备证书 +// +// 可能返回的错误码: +// RESOURCENOTFOUND_INSTANCE = "ResourceNotFound.Instance" +func (c *Client) DescribeDeviceCertificates(request *DescribeDeviceCertificatesRequest) (response *DescribeDeviceCertificatesResponse, err error) { + return c.DescribeDeviceCertificatesWithContext(context.Background(), request) +} + +// DescribeDeviceCertificates +// 分页查询设备证书 +// +// 可能返回的错误码: +// RESOURCENOTFOUND_INSTANCE = "ResourceNotFound.Instance" +func (c *Client) DescribeDeviceCertificatesWithContext(ctx context.Context, request *DescribeDeviceCertificatesRequest) (response *DescribeDeviceCertificatesResponse, err error) { + if request == nil { + request = NewDescribeDeviceCertificatesRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeDeviceCertificates require credential") + } + + request.SetContext(ctx) + + response = NewDescribeDeviceCertificatesResponse() + err = c.Send(request, response) + return +} + +func NewDescribeInsPublicEndpointsRequest() (request *DescribeInsPublicEndpointsRequest) { + request = &DescribeInsPublicEndpointsRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("mqtt", APIVersion, "DescribeInsPublicEndpoints") + + + return +} + +func NewDescribeInsPublicEndpointsResponse() (response *DescribeInsPublicEndpointsResponse) { + response = &DescribeInsPublicEndpointsResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return + +} + +// DescribeInsPublicEndpoints +// 查询MQTT实例公网接入点 +// +// 可能返回的错误码: +// RESOURCENOTFOUND_INSTANCE = "ResourceNotFound.Instance" +func (c *Client) DescribeInsPublicEndpoints(request *DescribeInsPublicEndpointsRequest) (response *DescribeInsPublicEndpointsResponse, err error) { + return c.DescribeInsPublicEndpointsWithContext(context.Background(), request) +} + +// DescribeInsPublicEndpoints +// 查询MQTT实例公网接入点 +// +// 可能返回的错误码: +// RESOURCENOTFOUND_INSTANCE = "ResourceNotFound.Instance" +func (c *Client) DescribeInsPublicEndpointsWithContext(ctx context.Context, request *DescribeInsPublicEndpointsRequest) (response *DescribeInsPublicEndpointsResponse, err error) { + if request == nil { + request = NewDescribeInsPublicEndpointsRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeInsPublicEndpoints require credential") + } + + request.SetContext(ctx) + + response = NewDescribeInsPublicEndpointsResponse() + err = c.Send(request, response) + return +} + +func NewDescribeInsVPCEndpointsRequest() (request *DescribeInsVPCEndpointsRequest) { + request = &DescribeInsVPCEndpointsRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("mqtt", APIVersion, "DescribeInsVPCEndpoints") + + + return +} + +func NewDescribeInsVPCEndpointsResponse() (response *DescribeInsVPCEndpointsResponse) { + response = &DescribeInsVPCEndpointsResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return + +} + +// DescribeInsVPCEndpoints +// 查询MQTT实例公网接入点 +// +// 可能返回的错误码: +// RESOURCENOTFOUND_INSTANCE = "ResourceNotFound.Instance" +func (c *Client) DescribeInsVPCEndpoints(request *DescribeInsVPCEndpointsRequest) (response *DescribeInsVPCEndpointsResponse, err error) { + return c.DescribeInsVPCEndpointsWithContext(context.Background(), request) +} + +// DescribeInsVPCEndpoints +// 查询MQTT实例公网接入点 +// +// 可能返回的错误码: +// RESOURCENOTFOUND_INSTANCE = "ResourceNotFound.Instance" +func (c *Client) DescribeInsVPCEndpointsWithContext(ctx context.Context, request *DescribeInsVPCEndpointsRequest) (response *DescribeInsVPCEndpointsResponse, err error) { + if request == nil { + request = NewDescribeInsVPCEndpointsRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeInsVPCEndpoints require credential") + } + + request.SetContext(ctx) + + response = NewDescribeInsVPCEndpointsResponse() + err = c.Send(request, response) + return +} + +func NewDescribeInstanceRequest() (request *DescribeInstanceRequest) { + request = &DescribeInstanceRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("mqtt", APIVersion, "DescribeInstance") + + + return +} + +func NewDescribeInstanceResponse() (response *DescribeInstanceResponse) { + response = &DescribeInstanceResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return + +} + +// DescribeInstance +// 查询实例信息 +// +// 可能返回的错误码: +// RESOURCENOTFOUND_INSTANCE = "ResourceNotFound.Instance" +func (c *Client) DescribeInstance(request *DescribeInstanceRequest) (response *DescribeInstanceResponse, err error) { return c.DescribeInstanceWithContext(context.Background(), request) } @@ -1256,6 +1719,155 @@ func (c *Client) DescribeInstanceListWithContext(ctx context.Context, request *D return } +func NewDescribeMessageListRequest() (request *DescribeMessageListRequest) { + request = &DescribeMessageListRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("mqtt", APIVersion, "DescribeMessageList") + + + return +} + +func NewDescribeMessageListResponse() (response *DescribeMessageListResponse) { + response = &DescribeMessageListResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return + +} + +// DescribeMessageList +// 查询消息列表,如查询死信,请设置ConsumerGroup参数 +// +// 可能返回的错误码: +// RESOURCENOTFOUND_INSTANCE = "ResourceNotFound.Instance" +func (c *Client) DescribeMessageList(request *DescribeMessageListRequest) (response *DescribeMessageListResponse, err error) { + return c.DescribeMessageListWithContext(context.Background(), request) +} + +// DescribeMessageList +// 查询消息列表,如查询死信,请设置ConsumerGroup参数 +// +// 可能返回的错误码: +// RESOURCENOTFOUND_INSTANCE = "ResourceNotFound.Instance" +func (c *Client) DescribeMessageListWithContext(ctx context.Context, request *DescribeMessageListRequest) (response *DescribeMessageListResponse, err error) { + if request == nil { + request = NewDescribeMessageListRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeMessageList require credential") + } + + request.SetContext(ctx) + + response = NewDescribeMessageListResponse() + err = c.Send(request, response) + return +} + +func NewDescribeProductSKUListRequest() (request *DescribeProductSKUListRequest) { + request = &DescribeProductSKUListRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("mqtt", APIVersion, "DescribeProductSKUList") + + + return +} + +func NewDescribeProductSKUListResponse() (response *DescribeProductSKUListResponse) { + response = &DescribeProductSKUListResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return + +} + +// DescribeProductSKUList +// 获取产品售卖规格 +// +// 可能返回的错误码: +// RESOURCENOTFOUND_INSTANCE = "ResourceNotFound.Instance" +func (c *Client) DescribeProductSKUList(request *DescribeProductSKUListRequest) (response *DescribeProductSKUListResponse, err error) { + return c.DescribeProductSKUListWithContext(context.Background(), request) +} + +// DescribeProductSKUList +// 获取产品售卖规格 +// +// 可能返回的错误码: +// RESOURCENOTFOUND_INSTANCE = "ResourceNotFound.Instance" +func (c *Client) DescribeProductSKUListWithContext(ctx context.Context, request *DescribeProductSKUListRequest) (response *DescribeProductSKUListResponse, err error) { + if request == nil { + request = NewDescribeProductSKUListRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeProductSKUList require credential") + } + + request.SetContext(ctx) + + response = NewDescribeProductSKUListResponse() + err = c.Send(request, response) + return +} + +func NewDescribeSharedSubscriptionLagRequest() (request *DescribeSharedSubscriptionLagRequest) { + request = &DescribeSharedSubscriptionLagRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("mqtt", APIVersion, "DescribeSharedSubscriptionLag") + + + return +} + +func NewDescribeSharedSubscriptionLagResponse() (response *DescribeSharedSubscriptionLagResponse) { + response = &DescribeSharedSubscriptionLagResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return + +} + +// DescribeSharedSubscriptionLag +// 查询共享订阅消息堆积量 +// +// 可能返回的错误码: +// FAILEDOPERATION_INSTANCENOTREADY = "FailedOperation.InstanceNotReady" +// RESOURCENOTFOUND_INSTANCE = "ResourceNotFound.Instance" +func (c *Client) DescribeSharedSubscriptionLag(request *DescribeSharedSubscriptionLagRequest) (response *DescribeSharedSubscriptionLagResponse, err error) { + return c.DescribeSharedSubscriptionLagWithContext(context.Background(), request) +} + +// DescribeSharedSubscriptionLag +// 查询共享订阅消息堆积量 +// +// 可能返回的错误码: +// FAILEDOPERATION_INSTANCENOTREADY = "FailedOperation.InstanceNotReady" +// RESOURCENOTFOUND_INSTANCE = "ResourceNotFound.Instance" +func (c *Client) DescribeSharedSubscriptionLagWithContext(ctx context.Context, request *DescribeSharedSubscriptionLagRequest) (response *DescribeSharedSubscriptionLagResponse, err error) { + if request == nil { + request = NewDescribeSharedSubscriptionLagRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeSharedSubscriptionLag require credential") + } + + request.SetContext(ctx) + + response = NewDescribeSharedSubscriptionLagResponse() + err = c.Send(request, response) + return +} + func NewDescribeTopicRequest() (request *DescribeTopicRequest) { request = &DescribeTopicRequest{ BaseRequest: &tchttp.BaseRequest{}, @@ -1474,6 +2086,55 @@ func (c *Client) ModifyAuthorizationPolicyWithContext(ctx context.Context, reque return } +func NewModifyHttpAuthenticatorRequest() (request *ModifyHttpAuthenticatorRequest) { + request = &ModifyHttpAuthenticatorRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("mqtt", APIVersion, "ModifyHttpAuthenticator") + + + return +} + +func NewModifyHttpAuthenticatorResponse() (response *ModifyHttpAuthenticatorResponse) { + response = &ModifyHttpAuthenticatorResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return + +} + +// ModifyHttpAuthenticator +// 修改MQTT HTTP 认证器 +// +// 可能返回的错误码: +// FAILEDOPERATION = "FailedOperation" +func (c *Client) ModifyHttpAuthenticator(request *ModifyHttpAuthenticatorRequest) (response *ModifyHttpAuthenticatorResponse, err error) { + return c.ModifyHttpAuthenticatorWithContext(context.Background(), request) +} + +// ModifyHttpAuthenticator +// 修改MQTT HTTP 认证器 +// +// 可能返回的错误码: +// FAILEDOPERATION = "FailedOperation" +func (c *Client) ModifyHttpAuthenticatorWithContext(ctx context.Context, request *ModifyHttpAuthenticatorRequest) (response *ModifyHttpAuthenticatorResponse, err error) { + if request == nil { + request = NewModifyHttpAuthenticatorRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("ModifyHttpAuthenticator require credential") + } + + request.SetContext(ctx) + + response = NewModifyHttpAuthenticatorResponse() + err = c.Send(request, response) + return +} + func NewModifyInsPublicEndpointRequest() (request *ModifyInsPublicEndpointRequest) { request = &ModifyInsPublicEndpointRequest{ BaseRequest: &tchttp.BaseRequest{}, @@ -1497,7 +2158,7 @@ func NewModifyInsPublicEndpointResponse() (response *ModifyInsPublicEndpointResp // 更新MQTT实例公网接入点 // // 可能返回的错误码: -// RESOURCENOTFOUND_INSTANCE = "ResourceNotFound.Instance" +// FAILEDOPERATION = "FailedOperation" func (c *Client) ModifyInsPublicEndpoint(request *ModifyInsPublicEndpointRequest) (response *ModifyInsPublicEndpointResponse, err error) { return c.ModifyInsPublicEndpointWithContext(context.Background(), request) } @@ -1506,7 +2167,7 @@ func (c *Client) ModifyInsPublicEndpoint(request *ModifyInsPublicEndpointRequest // 更新MQTT实例公网接入点 // // 可能返回的错误码: -// RESOURCENOTFOUND_INSTANCE = "ResourceNotFound.Instance" +// FAILEDOPERATION = "FailedOperation" func (c *Client) ModifyInsPublicEndpointWithContext(ctx context.Context, request *ModifyInsPublicEndpointRequest) (response *ModifyInsPublicEndpointResponse, err error) { if request == nil { request = NewModifyInsPublicEndpointRequest() @@ -1576,6 +2237,63 @@ func (c *Client) ModifyInstanceWithContext(ctx context.Context, request *ModifyI return } +func NewModifyInstanceCertBindingRequest() (request *ModifyInstanceCertBindingRequest) { + request = &ModifyInstanceCertBindingRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("mqtt", APIVersion, "ModifyInstanceCertBinding") + + + return +} + +func NewModifyInstanceCertBindingResponse() (response *ModifyInstanceCertBindingResponse) { + response = &ModifyInstanceCertBindingResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return + +} + +// ModifyInstanceCertBinding +// 更新MQTT集群绑定证书 +// +// 参数传空,则为删除证书 +// +// 可能返回的错误码: +// FAILEDOPERATION = "FailedOperation" +// FAILEDOPERATION_INSTANCENOTREADY = "FailedOperation.InstanceNotReady" +// RESOURCEUNAVAILABLE = "ResourceUnavailable" +func (c *Client) ModifyInstanceCertBinding(request *ModifyInstanceCertBindingRequest) (response *ModifyInstanceCertBindingResponse, err error) { + return c.ModifyInstanceCertBindingWithContext(context.Background(), request) +} + +// ModifyInstanceCertBinding +// 更新MQTT集群绑定证书 +// +// 参数传空,则为删除证书 +// +// 可能返回的错误码: +// FAILEDOPERATION = "FailedOperation" +// FAILEDOPERATION_INSTANCENOTREADY = "FailedOperation.InstanceNotReady" +// RESOURCEUNAVAILABLE = "ResourceUnavailable" +func (c *Client) ModifyInstanceCertBindingWithContext(ctx context.Context, request *ModifyInstanceCertBindingRequest) (response *ModifyInstanceCertBindingResponse, err error) { + if request == nil { + request = NewModifyInstanceCertBindingRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("ModifyInstanceCertBinding require credential") + } + + request.SetContext(ctx) + + response = NewModifyInstanceCertBindingResponse() + err = c.Send(request, response) + return +} + func NewModifyJWKSAuthenticatorRequest() (request *ModifyJWKSAuthenticatorRequest) { request = &ModifyJWKSAuthenticatorRequest{ BaseRequest: &tchttp.BaseRequest{}, @@ -1774,6 +2492,112 @@ func (c *Client) ModifyUserWithContext(ctx context.Context, request *ModifyUserR return } +func NewPublishMessageRequest() (request *PublishMessageRequest) { + request = &PublishMessageRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("mqtt", APIVersion, "PublishMessage") + + + return +} + +func NewPublishMessageResponse() (response *PublishMessageResponse) { + response = &PublishMessageResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return + +} + +// PublishMessage +// 发布 MQTT 消息到消息主题或客户端 +// +// 可能返回的错误码: +// FAILEDOPERATION = "FailedOperation" +func (c *Client) PublishMessage(request *PublishMessageRequest) (response *PublishMessageResponse, err error) { + return c.PublishMessageWithContext(context.Background(), request) +} + +// PublishMessage +// 发布 MQTT 消息到消息主题或客户端 +// +// 可能返回的错误码: +// FAILEDOPERATION = "FailedOperation" +func (c *Client) PublishMessageWithContext(ctx context.Context, request *PublishMessageRequest) (response *PublishMessageResponse, err error) { + if request == nil { + request = NewPublishMessageRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("PublishMessage require credential") + } + + request.SetContext(ctx) + + response = NewPublishMessageResponse() + err = c.Send(request, response) + return +} + +func NewRegisterCaCertificateRequest() (request *RegisterCaCertificateRequest) { + request = &RegisterCaCertificateRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("mqtt", APIVersion, "RegisterCaCertificate") + + + return +} + +func NewRegisterCaCertificateResponse() (response *RegisterCaCertificateResponse) { + response = &RegisterCaCertificateResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return + +} + +// RegisterCaCertificate +// 注册ca证书 +// +// 可能返回的错误码: +// FAILEDOPERATION_CERTIFICATEVERIFICATIONFAILED = "FailedOperation.CertificateVerificationFailed" +// FAILEDOPERATION_INSTANCENOTREADY = "FailedOperation.InstanceNotReady" +// FAILEDOPERATION_INSTANCEREGISTRATIONCODEEMPTY = "FailedOperation.InstanceRegistrationCodeEmpty" +// FAILEDOPERATION_REGISTRATIONCODEVERIFYFAILED = "FailedOperation.RegistrationCodeVerifyFailed" +// RESOURCENOTFOUND_INSTANCE = "ResourceNotFound.Instance" +func (c *Client) RegisterCaCertificate(request *RegisterCaCertificateRequest) (response *RegisterCaCertificateResponse, err error) { + return c.RegisterCaCertificateWithContext(context.Background(), request) +} + +// RegisterCaCertificate +// 注册ca证书 +// +// 可能返回的错误码: +// FAILEDOPERATION_CERTIFICATEVERIFICATIONFAILED = "FailedOperation.CertificateVerificationFailed" +// FAILEDOPERATION_INSTANCENOTREADY = "FailedOperation.InstanceNotReady" +// FAILEDOPERATION_INSTANCEREGISTRATIONCODEEMPTY = "FailedOperation.InstanceRegistrationCodeEmpty" +// FAILEDOPERATION_REGISTRATIONCODEVERIFYFAILED = "FailedOperation.RegistrationCodeVerifyFailed" +// RESOURCENOTFOUND_INSTANCE = "ResourceNotFound.Instance" +func (c *Client) RegisterCaCertificateWithContext(ctx context.Context, request *RegisterCaCertificateRequest) (response *RegisterCaCertificateResponse, err error) { + if request == nil { + request = NewRegisterCaCertificateRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("RegisterCaCertificate require credential") + } + + request.SetContext(ctx) + + response = NewRegisterCaCertificateResponse() + err = c.Send(request, response) + return +} + func NewRegisterDeviceCertificateRequest() (request *RegisterDeviceCertificateRequest) { request = &RegisterDeviceCertificateRequest{ BaseRequest: &tchttp.BaseRequest{}, @@ -1899,6 +2723,7 @@ func NewUpdateAuthorizationPolicyPriorityResponse() (response *UpdateAuthorizati // 修改策略规则优先级 // // 可能返回的错误码: +// FAILEDOPERATION_DUPLICATEAUTHORIZATIONIDORPRIORITY = "FailedOperation.DuplicateAuthorizationIdOrPriority" // FAILEDOPERATION_INSTANCENOTREADY = "FailedOperation.InstanceNotReady" // RESOURCENOTFOUND_INSTANCE = "ResourceNotFound.Instance" func (c *Client) UpdateAuthorizationPolicyPriority(request *UpdateAuthorizationPolicyPriorityRequest) (response *UpdateAuthorizationPolicyPriorityResponse, err error) { @@ -1909,6 +2734,7 @@ func (c *Client) UpdateAuthorizationPolicyPriority(request *UpdateAuthorizationP // 修改策略规则优先级 // // 可能返回的错误码: +// FAILEDOPERATION_DUPLICATEAUTHORIZATIONIDORPRIORITY = "FailedOperation.DuplicateAuthorizationIdOrPriority" // FAILEDOPERATION_INSTANCENOTREADY = "FailedOperation.InstanceNotReady" // RESOURCENOTFOUND_INSTANCE = "ResourceNotFound.Instance" func (c *Client) UpdateAuthorizationPolicyPriorityWithContext(ctx context.Context, request *UpdateAuthorizationPolicyPriorityRequest) (response *UpdateAuthorizationPolicyPriorityResponse, err error) { diff --git a/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mqtt/v20240516/errors.go b/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mqtt/v20240516/errors.go index 4d14e64b36..a0633f128a 100644 --- a/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mqtt/v20240516/errors.go +++ b/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mqtt/v20240516/errors.go @@ -20,12 +20,27 @@ const ( // 操作失败。 FAILEDOPERATION = "FailedOperation" + // FailedOperation.CertificateVerificationFailed + FAILEDOPERATION_CERTIFICATEVERIFICATIONFAILED = "FailedOperation.CertificateVerificationFailed" + + // 策略优先级重复 + FAILEDOPERATION_DUPLICATEAUTHORIZATIONIDORPRIORITY = "FailedOperation.DuplicateAuthorizationIdOrPriority" + // FailedOperation.InstanceNotReady FAILEDOPERATION_INSTANCENOTREADY = "FailedOperation.InstanceNotReady" + // FailedOperation.InstanceRegistrationCodeEmpty + FAILEDOPERATION_INSTANCEREGISTRATIONCODEEMPTY = "FailedOperation.InstanceRegistrationCodeEmpty" + // FailedOperation.PublicKeyVerifyFailed FAILEDOPERATION_PUBLICKEYVERIFYFAILED = "FailedOperation.PublicKeyVerifyFailed" + // FailedOperation.RegistrationCodeVerifyFailed + FAILEDOPERATION_REGISTRATIONCODEVERIFYFAILED = "FailedOperation.RegistrationCodeVerifyFailed" + + // RelatedDeviceCertificateExists + FAILEDOPERATION_RELATEDDEVICECERTIFICATEEXISTS = "FailedOperation.RelatedDeviceCertificateExists" + // LimitExceeded.TopicNum LIMITEXCEEDED_TOPICNUM = "LimitExceeded.TopicNum" @@ -38,6 +53,9 @@ const ( // 资源被占用。 RESOURCEINUSE = "ResourceInUse" + // 授权策略未找到 + RESOURCENOTFOUND_AUTHORIZATIONPOLICY = "ResourceNotFound.AuthorizationPolicy" + // ResourceNotFound.Instance RESOURCENOTFOUND_INSTANCE = "ResourceNotFound.Instance" @@ -47,6 +65,9 @@ const ( // ResourceNotFound.Topic RESOURCENOTFOUND_TOPIC = "ResourceNotFound.Topic" + // 用户名未找到 + RESOURCENOTFOUND_USERNAME = "ResourceNotFound.Username" + // 资源不可用。 RESOURCEUNAVAILABLE = "ResourceUnavailable" diff --git a/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mqtt/v20240516/models.go b/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mqtt/v20240516/models.go index 465f7780cb..6bc5d6aac5 100644 --- a/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mqtt/v20240516/models.go +++ b/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mqtt/v20240516/models.go @@ -20,6 +20,67 @@ import ( "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/json" ) +// Predefined struct for user +type ActivateCaCertificateRequestParams struct { + // 集群id + InstanceId *string `json:"InstanceId,omitnil,omitempty" name:"InstanceId"` + + // 证书序列号 + CaSn *string `json:"CaSn,omitnil,omitempty" name:"CaSn"` +} + +type ActivateCaCertificateRequest struct { + *tchttp.BaseRequest + + // 集群id + InstanceId *string `json:"InstanceId,omitnil,omitempty" name:"InstanceId"` + + // 证书序列号 + CaSn *string `json:"CaSn,omitnil,omitempty" name:"CaSn"` +} + +func (r *ActivateCaCertificateRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *ActivateCaCertificateRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "InstanceId") + delete(f, "CaSn") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "ActivateCaCertificateRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type ActivateCaCertificateResponseParams struct { + // 唯一请求 ID,由服务端生成,每次请求都会返回(若请求因其他原因未能抵达服务端,则该次请求不会获得 RequestId)。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitnil,omitempty" name:"RequestId"` +} + +type ActivateCaCertificateResponse struct { + *tchttp.BaseResponse + Response *ActivateCaCertificateResponseParams `json:"Response"` +} + +func (r *ActivateCaCertificateResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *ActivateCaCertificateResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + // Predefined struct for user type ActivateDeviceCertificateRequestParams struct { // 集群id @@ -81,6 +142,66 @@ func (r *ActivateDeviceCertificateResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ApplyRegistrationCodeRequestParams struct { + // 集群id + InstanceId *string `json:"InstanceId,omitnil,omitempty" name:"InstanceId"` +} + +type ApplyRegistrationCodeRequest struct { + *tchttp.BaseRequest + + // 集群id + InstanceId *string `json:"InstanceId,omitnil,omitempty" name:"InstanceId"` +} + +func (r *ApplyRegistrationCodeRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *ApplyRegistrationCodeRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "InstanceId") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "ApplyRegistrationCodeRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type ApplyRegistrationCodeResponseParams struct { + // 集群ID + InstanceId *string `json:"InstanceId,omitnil,omitempty" name:"InstanceId"` + + // 注册码 + RegistrationCode *string `json:"RegistrationCode,omitnil,omitempty" name:"RegistrationCode"` + + // 唯一请求 ID,由服务端生成,每次请求都会返回(若请求因其他原因未能抵达服务端,则该次请求不会获得 RequestId)。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitnil,omitempty" name:"RequestId"` +} + +type ApplyRegistrationCodeResponse struct { + *tchttp.BaseResponse + Response *ApplyRegistrationCodeResponseParams `json:"Response"` +} + +func (r *ApplyRegistrationCodeResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *ApplyRegistrationCodeResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + type AuthorizationPolicyItem struct { // 规则ID Id *int64 `json:"Id,omitnil,omitempty" name:"Id"` @@ -89,53 +210,41 @@ type AuthorizationPolicyItem struct { InstanceId *string `json:"InstanceId,omitnil,omitempty" name:"InstanceId"` // 规则名 - // 注意:此字段可能返回 null,表示取不到有效值。 PolicyName *string `json:"PolicyName,omitnil,omitempty" name:"PolicyName"` // 规则语法版本 - // 注意:此字段可能返回 null,表示取不到有效值。 Version *int64 `json:"Version,omitnil,omitempty" name:"Version"` // 越小越优先 - // 注意:此字段可能返回 null,表示取不到有效值。 Priority *int64 `json:"Priority,omitnil,omitempty" name:"Priority"` // allow/deny - // 注意:此字段可能返回 null,表示取不到有效值。 Effect *string `json:"Effect,omitnil,omitempty" name:"Effect"` // connect、pub、sub - // 注意:此字段可能返回 null,表示取不到有效值。 Actions *string `json:"Actions,omitnil,omitempty" name:"Actions"` // 资源 - // 注意:此字段可能返回 null,表示取不到有效值。 Resources *string `json:"Resources,omitnil,omitempty" name:"Resources"` // client - // 注意:此字段可能返回 null,表示取不到有效值。 ClientId *string `json:"ClientId,omitnil,omitempty" name:"ClientId"` // 用户 - // 注意:此字段可能返回 null,表示取不到有效值。 Username *string `json:"Username,omitnil,omitempty" name:"Username"` // IP地址 - // 注意:此字段可能返回 null,表示取不到有效值。 Ip *string `json:"Ip,omitnil,omitempty" name:"Ip"` // 0,1,2 - // 注意:此字段可能返回 null,表示取不到有效值。 Qos *string `json:"Qos,omitnil,omitempty" name:"Qos"` // 1:表示匹配retain消息 // 2:表示匹配非retain消息 // 3:表示匹配retain和非retain消息 - // 注意:此字段可能返回 null,表示取不到有效值。 Retain *int64 `json:"Retain,omitnil,omitempty" name:"Retain"` // 描述 - // 注意:此字段可能返回 null,表示取不到有效值。 Remark *string `json:"Remark,omitnil,omitempty" name:"Remark"` // 1713164969433 @@ -147,14 +256,61 @@ type AuthorizationPolicyItem struct { type AuthorizationPolicyPriority struct { // 策略id - // 注意:此字段可能返回 null,表示取不到有效值。 Id *int64 `json:"Id,omitnil,omitempty" name:"Id"` // 优先级 - // 注意:此字段可能返回 null,表示取不到有效值。 Priority *int64 `json:"Priority,omitnil,omitempty" name:"Priority"` } +type BodyItem struct { + // body key + Key *string `json:"Key,omitnil,omitempty" name:"Key"` + + // body key + Value *string `json:"Value,omitnil,omitempty" name:"Value"` +} + +type CaCertificateItem struct { + // common name + CaCn *string `json:"CaCn,omitnil,omitempty" name:"CaCn"` + + // 证书内容 + CaCertificate *string `json:"CaCertificate,omitnil,omitempty" name:"CaCertificate"` + + // 证书序列号 + CaSn *string `json:"CaSn,omitnil,omitempty" name:"CaSn"` + + // 证书格式 + Format *string `json:"Format,omitnil,omitempty" name:"Format"` + + // 验证证书内容 + VerificationCertificate *string `json:"VerificationCertificate,omitnil,omitempty" name:"VerificationCertificate"` + + // ca状态 + Status *string `json:"Status,omitnil,omitempty" name:"Status"` + + // 上次激活时间 + LastActivationTime *int64 `json:"LastActivationTime,omitnil,omitempty" name:"LastActivationTime"` + + // 创建时间 + CreatedTime *int64 `json:"CreatedTime,omitnil,omitempty" name:"CreatedTime"` + + // 预销毁时间 + UpdateTime *int64 `json:"UpdateTime,omitnil,omitempty" name:"UpdateTime"` + + // 上次去激活时间 + LastInactivationTime *int64 `json:"LastInactivationTime,omitnil,omitempty" name:"LastInactivationTime"` + + // Ca证书颁发者CN + CaIssuerCn *string `json:"CaIssuerCn,omitnil,omitempty" name:"CaIssuerCn"` + + // 生效时间 + NotBeforeTime *int64 `json:"NotBeforeTime,omitnil,omitempty" name:"NotBeforeTime"` + + // 失效时间 + NotAfterTime *int64 `json:"NotAfterTime,omitnil,omitempty" name:"NotAfterTime"` +} + // Predefined struct for user type CreateAuthorizationPolicyRequestParams struct { // 实例ID @@ -293,6 +449,123 @@ func (r *CreateAuthorizationPolicyResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type CreateHttpAuthenticatorRequestParams struct { + // 实例ID + InstanceId *string `json:"InstanceId,omitnil,omitempty" name:"InstanceId"` + + // jwks端点 + Endpoint *string `json:"Endpoint,omitnil,omitempty" name:"Endpoint"` + + // 最大并发连接数,默认8,范围:1-20 + Concurrency *int64 `json:"Concurrency,omitnil,omitempty" name:"Concurrency"` + + // 网络请求方法 Get 或 Post,默认post + Method *string `json:"Method,omitnil,omitempty" name:"Method"` + + // 认证器是否开启:open-启用;close-关闭 + Status *string `json:"Status,omitnil,omitempty" name:"Status"` + + // 说明 + Remark *string `json:"Remark,omitnil,omitempty" name:"Remark"` + + // 连接超时时间,单位:秒,范围:1-30 + ConnectTimeout *int64 `json:"ConnectTimeout,omitnil,omitempty" name:"ConnectTimeout"` + + // 请求超时时间,单位:秒,范围:1-30 + ReadTimeout *int64 `json:"ReadTimeout,omitnil,omitempty" name:"ReadTimeout"` + + // 转发请求header + Header []*HeaderItem `json:"Header,omitnil,omitempty" name:"Header"` + + // 转发请求body + Body []*BodyItem `json:"Body,omitnil,omitempty" name:"Body"` +} + +type CreateHttpAuthenticatorRequest struct { + *tchttp.BaseRequest + + // 实例ID + InstanceId *string `json:"InstanceId,omitnil,omitempty" name:"InstanceId"` + + // jwks端点 + Endpoint *string `json:"Endpoint,omitnil,omitempty" name:"Endpoint"` + + // 最大并发连接数,默认8,范围:1-20 + Concurrency *int64 `json:"Concurrency,omitnil,omitempty" name:"Concurrency"` + + // 网络请求方法 Get 或 Post,默认post + Method *string `json:"Method,omitnil,omitempty" name:"Method"` + + // 认证器是否开启:open-启用;close-关闭 + Status *string `json:"Status,omitnil,omitempty" name:"Status"` + + // 说明 + Remark *string `json:"Remark,omitnil,omitempty" name:"Remark"` + + // 连接超时时间,单位:秒,范围:1-30 + ConnectTimeout *int64 `json:"ConnectTimeout,omitnil,omitempty" name:"ConnectTimeout"` + + // 请求超时时间,单位:秒,范围:1-30 + ReadTimeout *int64 `json:"ReadTimeout,omitnil,omitempty" name:"ReadTimeout"` + + // 转发请求header + Header []*HeaderItem `json:"Header,omitnil,omitempty" name:"Header"` + + // 转发请求body + Body []*BodyItem `json:"Body,omitnil,omitempty" name:"Body"` +} + +func (r *CreateHttpAuthenticatorRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *CreateHttpAuthenticatorRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "InstanceId") + delete(f, "Endpoint") + delete(f, "Concurrency") + delete(f, "Method") + delete(f, "Status") + delete(f, "Remark") + delete(f, "ConnectTimeout") + delete(f, "ReadTimeout") + delete(f, "Header") + delete(f, "Body") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "CreateHttpAuthenticatorRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type CreateHttpAuthenticatorResponseParams struct { + // 唯一请求 ID,由服务端生成,每次请求都会返回(若请求因其他原因未能抵达服务端,则该次请求不会获得 RequestId)。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitnil,omitempty" name:"RequestId"` +} + +type CreateHttpAuthenticatorResponse struct { + *tchttp.BaseResponse + Response *CreateHttpAuthenticatorResponseParams `json:"Response"` +} + +func (r *CreateHttpAuthenticatorResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *CreateHttpAuthenticatorResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + // Predefined struct for user type CreateInsPublicEndpointRequestParams struct { // 实例ID @@ -844,6 +1117,67 @@ func (r *CreateUserResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeactivateCaCertificateRequestParams struct { + // 集群id + InstanceId *string `json:"InstanceId,omitnil,omitempty" name:"InstanceId"` + + // 证书序列号 + CaSn *string `json:"CaSn,omitnil,omitempty" name:"CaSn"` +} + +type DeactivateCaCertificateRequest struct { + *tchttp.BaseRequest + + // 集群id + InstanceId *string `json:"InstanceId,omitnil,omitempty" name:"InstanceId"` + + // 证书序列号 + CaSn *string `json:"CaSn,omitnil,omitempty" name:"CaSn"` +} + +func (r *DeactivateCaCertificateRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DeactivateCaCertificateRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "InstanceId") + delete(f, "CaSn") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DeactivateCaCertificateRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DeactivateCaCertificateResponseParams struct { + // 唯一请求 ID,由服务端生成,每次请求都会返回(若请求因其他原因未能抵达服务端,则该次请求不会获得 RequestId)。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitnil,omitempty" name:"RequestId"` +} + +type DeactivateCaCertificateResponse struct { + *tchttp.BaseResponse + Response *DeactivateCaCertificateResponseParams `json:"Response"` +} + +func (r *DeactivateCaCertificateResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DeactivateCaCertificateResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + // Predefined struct for user type DeactivateDeviceCertificateRequestParams struct { // 集群id @@ -1034,11 +1368,72 @@ func (r *DeleteAuthorizationPolicyResponse) FromJsonString(s string) error { } // Predefined struct for user -type DeleteDeviceCertificateRequestParams struct { +type DeleteCaCertificateRequestParams struct { // 集群id InstanceId *string `json:"InstanceId,omitnil,omitempty" name:"InstanceId"` - // 设备证书序列号 + // 证书序列号 + CaSn *string `json:"CaSn,omitnil,omitempty" name:"CaSn"` +} + +type DeleteCaCertificateRequest struct { + *tchttp.BaseRequest + + // 集群id + InstanceId *string `json:"InstanceId,omitnil,omitempty" name:"InstanceId"` + + // 证书序列号 + CaSn *string `json:"CaSn,omitnil,omitempty" name:"CaSn"` +} + +func (r *DeleteCaCertificateRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DeleteCaCertificateRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "InstanceId") + delete(f, "CaSn") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DeleteCaCertificateRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DeleteCaCertificateResponseParams struct { + // 唯一请求 ID,由服务端生成,每次请求都会返回(若请求因其他原因未能抵达服务端,则该次请求不会获得 RequestId)。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitnil,omitempty" name:"RequestId"` +} + +type DeleteCaCertificateResponse struct { + *tchttp.BaseResponse + Response *DeleteCaCertificateResponseParams `json:"Response"` +} + +func (r *DeleteCaCertificateResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DeleteCaCertificateResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DeleteDeviceCertificateRequestParams struct { + // 集群id + InstanceId *string `json:"InstanceId,omitnil,omitempty" name:"InstanceId"` + + // 设备证书序列号 DeviceCertificateSn *string `json:"DeviceCertificateSn,omitnil,omitempty" name:"DeviceCertificateSn"` } @@ -1445,6 +1840,231 @@ func (r *DescribeAuthorizationPoliciesResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeCaCertificateRequestParams struct { + // ca证书sn + CaSn *string `json:"CaSn,omitnil,omitempty" name:"CaSn"` + + // 集群id + InstanceId *string `json:"InstanceId,omitnil,omitempty" name:"InstanceId"` +} + +type DescribeCaCertificateRequest struct { + *tchttp.BaseRequest + + // ca证书sn + CaSn *string `json:"CaSn,omitnil,omitempty" name:"CaSn"` + + // 集群id + InstanceId *string `json:"InstanceId,omitnil,omitempty" name:"InstanceId"` +} + +func (r *DescribeCaCertificateRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DescribeCaCertificateRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "CaSn") + delete(f, "InstanceId") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeCaCertificateRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DescribeCaCertificateResponseParams struct { + // 创建时间 + CreatedTime *int64 `json:"CreatedTime,omitnil,omitempty" name:"CreatedTime"` + + // 上次更新时间 + UpdateTime *int64 `json:"UpdateTime,omitnil,omitempty" name:"UpdateTime"` + + // 失效日期 + NotAfterTime *int64 `json:"NotAfterTime,omitnil,omitempty" name:"NotAfterTime"` + + // 上次激活时间 + LastActivationTime *int64 `json:"LastActivationTime,omitnil,omitempty" name:"LastActivationTime"` + + // 上次吊销时间 + LastInactivationTime *int64 `json:"LastInactivationTime,omitnil,omitempty" name:"LastInactivationTime"` + + // 证书状态 + Status *string `json:"Status,omitnil,omitempty" name:"Status"` + + // 证书序列号 + CaSn *string `json:"CaSn,omitnil,omitempty" name:"CaSn"` + + // common name + CaCn *string `json:"CaCn,omitnil,omitempty" name:"CaCn"` + + // 证书内容 + CaCertificate *string `json:"CaCertificate,omitnil,omitempty" name:"CaCertificate"` + + // 证书格式 + Format *string `json:"Format,omitnil,omitempty" name:"Format"` + + // Ca证书颁发者CN + CaIssuerCn *string `json:"CaIssuerCn,omitnil,omitempty" name:"CaIssuerCn"` + + // 生效开始时间 + NotBeforeTime *int64 `json:"NotBeforeTime,omitnil,omitempty" name:"NotBeforeTime"` + + // 唯一请求 ID,由服务端生成,每次请求都会返回(若请求因其他原因未能抵达服务端,则该次请求不会获得 RequestId)。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitnil,omitempty" name:"RequestId"` +} + +type DescribeCaCertificateResponse struct { + *tchttp.BaseResponse + Response *DescribeCaCertificateResponseParams `json:"Response"` +} + +func (r *DescribeCaCertificateResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DescribeCaCertificateResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DescribeCaCertificatesRequestParams struct { + // 集群ID + InstanceId *string `json:"InstanceId,omitnil,omitempty" name:"InstanceId"` +} + +type DescribeCaCertificatesRequest struct { + *tchttp.BaseRequest + + // 集群ID + InstanceId *string `json:"InstanceId,omitnil,omitempty" name:"InstanceId"` +} + +func (r *DescribeCaCertificatesRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DescribeCaCertificatesRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "InstanceId") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeCaCertificatesRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DescribeCaCertificatesResponseParams struct { + // ca证书列表 + Data []*CaCertificateItem `json:"Data,omitnil,omitempty" name:"Data"` + + // 唯一请求 ID,由服务端生成,每次请求都会返回(若请求因其他原因未能抵达服务端,则该次请求不会获得 RequestId)。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitnil,omitempty" name:"RequestId"` +} + +type DescribeCaCertificatesResponse struct { + *tchttp.BaseResponse + Response *DescribeCaCertificatesResponseParams `json:"Response"` +} + +func (r *DescribeCaCertificatesResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DescribeCaCertificatesResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DescribeClientListRequestParams struct { + // 实例ID + InstanceId *string `json:"InstanceId,omitnil,omitempty" name:"InstanceId"` + + // 客户端名 + ClientId *string `json:"ClientId,omitnil,omitempty" name:"ClientId"` + + // 客户端数量限制,最大1024,默认1024 + Number *string `json:"Number,omitnil,omitempty" name:"Number"` +} + +type DescribeClientListRequest struct { + *tchttp.BaseRequest + + // 实例ID + InstanceId *string `json:"InstanceId,omitnil,omitempty" name:"InstanceId"` + + // 客户端名 + ClientId *string `json:"ClientId,omitnil,omitempty" name:"ClientId"` + + // 客户端数量限制,最大1024,默认1024 + Number *string `json:"Number,omitnil,omitempty" name:"Number"` +} + +func (r *DescribeClientListRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DescribeClientListRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "InstanceId") + delete(f, "ClientId") + delete(f, "Number") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeClientListRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DescribeClientListResponseParams struct { + // 客户端列表 + Clients []*MQTTClientInfo `json:"Clients,omitnil,omitempty" name:"Clients"` + + // 唯一请求 ID,由服务端生成,每次请求都会返回(若请求因其他原因未能抵达服务端,则该次请求不会获得 RequestId)。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitnil,omitempty" name:"RequestId"` +} + +type DescribeClientListResponse struct { + *tchttp.BaseResponse + Response *DescribeClientListResponseParams `json:"Response"` +} + +func (r *DescribeClientListResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DescribeClientListResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + // Predefined struct for user type DescribeDeviceCertificateRequestParams struct { // 设备证书sn @@ -1520,7 +2140,6 @@ type DescribeDeviceCertificateResponseParams struct { Format *string `json:"Format,omitnil,omitempty" name:"Format"` // 客户端id - // 注意:此字段可能返回 null,表示取不到有效值。 ClientId *string `json:"ClientId,omitnil,omitempty" name:"ClientId"` // API, 手动注册 @@ -1530,6 +2149,9 @@ type DescribeDeviceCertificateResponseParams struct { // 证书生效开始时间 NotBeforeTime *int64 `json:"NotBeforeTime,omitnil,omitempty" name:"NotBeforeTime"` + // 组织单位 + OrganizationalUnit *string `json:"OrganizationalUnit,omitnil,omitempty" name:"OrganizationalUnit"` + // 唯一请求 ID,由服务端生成,每次请求都会返回(若请求因其他原因未能抵达服务端,则该次请求不会获得 RequestId)。定位问题时需要提供该次请求的 RequestId。 RequestId *string `json:"RequestId,omitnil,omitempty" name:"RequestId"` } @@ -1719,50 +2341,107 @@ func (r *DescribeInsPublicEndpointsResponse) FromJsonString(s string) error { } // Predefined struct for user -type DescribeInstanceListRequestParams struct { - // 查询条件列表,支持以下子弹 - // InstanceName:集群名模糊搜索 - // InstanceId:集群id精确搜索 - // InstanceStatus:集群状态搜索 - Filters []*Filter `json:"Filters,omitnil,omitempty" name:"Filters"` - - // 查询起始位置 - Offset *int64 `json:"Offset,omitnil,omitempty" name:"Offset"` - - // 查询结果限制数量 - Limit *int64 `json:"Limit,omitnil,omitempty" name:"Limit"` - - // 标签过滤器 - TagFilters []*TagFilter `json:"TagFilters,omitnil,omitempty" name:"TagFilters"` +type DescribeInsVPCEndpointsRequestParams struct { + // 实例ID + InstanceId *string `json:"InstanceId,omitnil,omitempty" name:"InstanceId"` } -type DescribeInstanceListRequest struct { +type DescribeInsVPCEndpointsRequest struct { *tchttp.BaseRequest - // 查询条件列表,支持以下子弹 - // InstanceName:集群名模糊搜索 - // InstanceId:集群id精确搜索 - // InstanceStatus:集群状态搜索 - Filters []*Filter `json:"Filters,omitnil,omitempty" name:"Filters"` - - // 查询起始位置 - Offset *int64 `json:"Offset,omitnil,omitempty" name:"Offset"` - - // 查询结果限制数量 - Limit *int64 `json:"Limit,omitnil,omitempty" name:"Limit"` - - // 标签过滤器 - TagFilters []*TagFilter `json:"TagFilters,omitnil,omitempty" name:"TagFilters"` + // 实例ID + InstanceId *string `json:"InstanceId,omitnil,omitempty" name:"InstanceId"` } -func (r *DescribeInstanceListRequest) ToJsonString() string { +func (r *DescribeInsVPCEndpointsRequest) ToJsonString() string { b, _ := json.Marshal(r) return string(b) } // FromJsonString It is highly **NOT** recommended to use this function // because it has no param check, nor strict type check -func (r *DescribeInstanceListRequest) FromJsonString(s string) error { +func (r *DescribeInsVPCEndpointsRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "InstanceId") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeInsVPCEndpointsRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DescribeInsVPCEndpointsResponseParams struct { + // 接入点 + Endpoints []*MQTTEndpointItem `json:"Endpoints,omitnil,omitempty" name:"Endpoints"` + + // 唯一请求 ID,由服务端生成,每次请求都会返回(若请求因其他原因未能抵达服务端,则该次请求不会获得 RequestId)。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitnil,omitempty" name:"RequestId"` +} + +type DescribeInsVPCEndpointsResponse struct { + *tchttp.BaseResponse + Response *DescribeInsVPCEndpointsResponseParams `json:"Response"` +} + +func (r *DescribeInsVPCEndpointsResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DescribeInsVPCEndpointsResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DescribeInstanceListRequestParams struct { + // 查询条件列表,支持以下字段 + // InstanceName:集群名模糊搜索 + // InstanceId:集群id精确搜索 + // InstanceStatus:集群状态搜索(RUNNING-运行中,CREATING-创建中,MODIFYING-变配中,DELETING-删除中) + Filters []*Filter `json:"Filters,omitnil,omitempty" name:"Filters"` + + // 查询起始位置,默认0 + Offset *int64 `json:"Offset,omitnil,omitempty" name:"Offset"` + + // 查询结果限制数量,默认20,最大100 + Limit *int64 `json:"Limit,omitnil,omitempty" name:"Limit"` + + // 标签过滤器 + TagFilters []*TagFilter `json:"TagFilters,omitnil,omitempty" name:"TagFilters"` +} + +type DescribeInstanceListRequest struct { + *tchttp.BaseRequest + + // 查询条件列表,支持以下字段 + // InstanceName:集群名模糊搜索 + // InstanceId:集群id精确搜索 + // InstanceStatus:集群状态搜索(RUNNING-运行中,CREATING-创建中,MODIFYING-变配中,DELETING-删除中) + Filters []*Filter `json:"Filters,omitnil,omitempty" name:"Filters"` + + // 查询起始位置,默认0 + Offset *int64 `json:"Offset,omitnil,omitempty" name:"Offset"` + + // 查询结果限制数量,默认20,最大100 + Limit *int64 `json:"Limit,omitnil,omitempty" name:"Limit"` + + // 标签过滤器 + TagFilters []*TagFilter `json:"TagFilters,omitnil,omitempty" name:"TagFilters"` +} + +func (r *DescribeInstanceListRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DescribeInstanceListRequest) FromJsonString(s string) error { f := make(map[string]interface{}) if err := json.Unmarshal([]byte(s), &f); err != nil { return err @@ -1780,7 +2459,6 @@ func (r *DescribeInstanceListRequest) FromJsonString(s string) error { // Predefined struct for user type DescribeInstanceListResponseParams struct { // 查询总数 - // 注意:此字段可能返回 null,表示取不到有效值。 TotalCount *int64 `json:"TotalCount,omitnil,omitempty" name:"TotalCount"` // 实例列表 @@ -1934,10 +2612,236 @@ func (r *DescribeInstanceResponse) FromJsonString(s string) error { } // Predefined struct for user -type DescribeTopicListRequestParams struct { +type DescribeMessageListRequestParams struct { // 实例ID InstanceId *string `json:"InstanceId,omitnil,omitempty" name:"InstanceId"` + // 主题 + Topic *string `json:"Topic,omitnil,omitempty" name:"Topic"` + + // 开始时间 + StartTime *int64 `json:"StartTime,omitnil,omitempty" name:"StartTime"` + + // 结束时间 + EndTime *int64 `json:"EndTime,omitnil,omitempty" name:"EndTime"` + + // 请求任务id + TaskRequestId *string `json:"TaskRequestId,omitnil,omitempty" name:"TaskRequestId"` + + // 查询起始位置 + Offset *int64 `json:"Offset,omitnil,omitempty" name:"Offset"` + + // 查询结果限制数量 + Limit *int64 `json:"Limit,omitnil,omitempty" name:"Limit"` +} + +type DescribeMessageListRequest struct { + *tchttp.BaseRequest + + // 实例ID + InstanceId *string `json:"InstanceId,omitnil,omitempty" name:"InstanceId"` + + // 主题 + Topic *string `json:"Topic,omitnil,omitempty" name:"Topic"` + + // 开始时间 + StartTime *int64 `json:"StartTime,omitnil,omitempty" name:"StartTime"` + + // 结束时间 + EndTime *int64 `json:"EndTime,omitnil,omitempty" name:"EndTime"` + + // 请求任务id + TaskRequestId *string `json:"TaskRequestId,omitnil,omitempty" name:"TaskRequestId"` + + // 查询起始位置 + Offset *int64 `json:"Offset,omitnil,omitempty" name:"Offset"` + + // 查询结果限制数量 + Limit *int64 `json:"Limit,omitnil,omitempty" name:"Limit"` +} + +func (r *DescribeMessageListRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DescribeMessageListRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "InstanceId") + delete(f, "Topic") + delete(f, "StartTime") + delete(f, "EndTime") + delete(f, "TaskRequestId") + delete(f, "Offset") + delete(f, "Limit") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeMessageListRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DescribeMessageListResponseParams struct { + // 查询总数 + TotalCount *int64 `json:"TotalCount,omitnil,omitempty" name:"TotalCount"` + + // 消息记录列表 + Data []*MQTTMessageItem `json:"Data,omitnil,omitempty" name:"Data"` + + // 请求任务id + TaskRequestId *string `json:"TaskRequestId,omitnil,omitempty" name:"TaskRequestId"` + + // 唯一请求 ID,由服务端生成,每次请求都会返回(若请求因其他原因未能抵达服务端,则该次请求不会获得 RequestId)。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitnil,omitempty" name:"RequestId"` +} + +type DescribeMessageListResponse struct { + *tchttp.BaseResponse + Response *DescribeMessageListResponseParams `json:"Response"` +} + +func (r *DescribeMessageListResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DescribeMessageListResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DescribeProductSKUListRequestParams struct { + +} + +type DescribeProductSKUListRequest struct { + *tchttp.BaseRequest + +} + +func (r *DescribeProductSKUListRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DescribeProductSKUListRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeProductSKUListRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DescribeProductSKUListResponseParams struct { + // 查询总数 + TotalCount *int64 `json:"TotalCount,omitnil,omitempty" name:"TotalCount"` + + // mqtt商品配置信息 + MQTTProductSkuList []*ProductSkuItem `json:"MQTTProductSkuList,omitnil,omitempty" name:"MQTTProductSkuList"` + + // 唯一请求 ID,由服务端生成,每次请求都会返回(若请求因其他原因未能抵达服务端,则该次请求不会获得 RequestId)。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitnil,omitempty" name:"RequestId"` +} + +type DescribeProductSKUListResponse struct { + *tchttp.BaseResponse + Response *DescribeProductSKUListResponseParams `json:"Response"` +} + +func (r *DescribeProductSKUListResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DescribeProductSKUListResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DescribeSharedSubscriptionLagRequestParams struct { + // 集群id + InstanceId *string `json:"InstanceId,omitnil,omitempty" name:"InstanceId"` + + // 共享订阅表达式 + SharedSubscription *string `json:"SharedSubscription,omitnil,omitempty" name:"SharedSubscription"` +} + +type DescribeSharedSubscriptionLagRequest struct { + *tchttp.BaseRequest + + // 集群id + InstanceId *string `json:"InstanceId,omitnil,omitempty" name:"InstanceId"` + + // 共享订阅表达式 + SharedSubscription *string `json:"SharedSubscription,omitnil,omitempty" name:"SharedSubscription"` +} + +func (r *DescribeSharedSubscriptionLagRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DescribeSharedSubscriptionLagRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "InstanceId") + delete(f, "SharedSubscription") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeSharedSubscriptionLagRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DescribeSharedSubscriptionLagResponseParams struct { + // 堆积值 + Lag *int64 `json:"Lag,omitnil,omitempty" name:"Lag"` + + // 唯一请求 ID,由服务端生成,每次请求都会返回(若请求因其他原因未能抵达服务端,则该次请求不会获得 RequestId)。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitnil,omitempty" name:"RequestId"` +} + +type DescribeSharedSubscriptionLagResponse struct { + *tchttp.BaseResponse + Response *DescribeSharedSubscriptionLagResponseParams `json:"Response"` +} + +func (r *DescribeSharedSubscriptionLagResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DescribeSharedSubscriptionLagResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DescribeTopicListRequestParams struct { + // 实例ID,从 [DescribeInstanceList](https://cloud.tencent.com/document/api/1778/111029)接口或控制台获得。 + InstanceId *string `json:"InstanceId,omitnil,omitempty" name:"InstanceId"` + // 查询条件列表: // 支持TopicName模糊查询 Filters []*Filter `json:"Filters,omitnil,omitempty" name:"Filters"` @@ -1952,7 +2856,7 @@ type DescribeTopicListRequestParams struct { type DescribeTopicListRequest struct { *tchttp.BaseRequest - // 实例ID + // 实例ID,从 [DescribeInstanceList](https://cloud.tencent.com/document/api/1778/111029)接口或控制台获得。 InstanceId *string `json:"InstanceId,omitnil,omitempty" name:"InstanceId"` // 查询条件列表: @@ -1991,7 +2895,6 @@ func (r *DescribeTopicListRequest) FromJsonString(s string) error { // Predefined struct for user type DescribeTopicListResponseParams struct { // 查询总数 - // 注意:此字段可能返回 null,表示取不到有效值。 TotalCount *int64 `json:"TotalCount,omitnil,omitempty" name:"TotalCount"` // 主题列表 @@ -2148,7 +3051,6 @@ func (r *DescribeUserListRequest) FromJsonString(s string) error { // Predefined struct for user type DescribeUserListResponseParams struct { // 查询总数 - // 注意:此字段可能返回 null,表示取不到有效值。 TotalCount *int64 `json:"TotalCount,omitnil,omitempty" name:"TotalCount"` // 角色信息列表 @@ -2176,7 +3078,6 @@ func (r *DescribeUserListResponse) FromJsonString(s string) error { type DeviceCertificateItem struct { // 客户端id - // 注意:此字段可能返回 null,表示取不到有效值。 ClientId *string `json:"ClientId,omitnil,omitempty" name:"ClientId"` // 设备证书 @@ -2201,33 +3102,30 @@ type DeviceCertificateItem struct { // PENDING_ACTIVATION,//注册待激活 Status *string `json:"Status,omitnil,omitempty" name:"Status"` + // 组织单位 + OrganizationalUnit *string `json:"OrganizationalUnit,omitnil,omitempty" name:"OrganizationalUnit"` + // 上次激活时间 - // 注意:此字段可能返回 null,表示取不到有效值。 LastActivationTime *int64 `json:"LastActivationTime,omitnil,omitempty" name:"LastActivationTime"` // 上次取消激活时间 - // 注意:此字段可能返回 null,表示取不到有效值。 LastInactivationTime *int64 `json:"LastInactivationTime,omitnil,omitempty" name:"LastInactivationTime"` // 创建时间 CreatedTime *int64 `json:"CreatedTime,omitnil,omitempty" name:"CreatedTime"` // 预销毁时间 - // 注意:此字段可能返回 null,表示取不到有效值。 UpdateTime *int64 `json:"UpdateTime,omitnil,omitempty" name:"UpdateTime"` // 证书来源: // API, 手动注册 // JITP 自动注册 - // 注意:此字段可能返回 null,表示取不到有效值。 CertificateSource *string `json:"CertificateSource,omitnil,omitempty" name:"CertificateSource"` // 证书失效日期 - // 注意:此字段可能返回 null,表示取不到有效值。 NotAfterTime *int64 `json:"NotAfterTime,omitnil,omitempty" name:"NotAfterTime"` // 证书生效开始日期 - // 注意:此字段可能返回 null,表示取不到有效值。 NotBeforeTime *int64 `json:"NotBeforeTime,omitnil,omitempty" name:"NotBeforeTime"` } @@ -2239,6 +3137,14 @@ type Filter struct { Values []*string `json:"Values,omitnil,omitempty" name:"Values"` } +type HeaderItem struct { + // header key + Key *string `json:"Key,omitnil,omitempty" name:"Key"` + + // header value + Value *string `json:"Value,omitnil,omitempty" name:"Value"` +} + type IpRule struct { // IP地址 Ip *string `json:"Ip,omitnil,omitempty" name:"Ip"` @@ -2247,59 +3153,89 @@ type IpRule struct { Allow *bool `json:"Allow,omitnil,omitempty" name:"Allow"` // 备注信息 - // 注意:此字段可能返回 null,表示取不到有效值。 Remark *string `json:"Remark,omitnil,omitempty" name:"Remark"` } type MQTTAuthenticatorItem struct { // 认证器类型: JWT:JWT认证器 JWKS:JWKS认证器 BYOC:一端一证认证器 - // 注意:此字段可能返回 null,表示取不到有效值。 Type *string `json:"Type,omitnil,omitempty" name:"Type"` // 认证器配置 - // 注意:此字段可能返回 null,表示取不到有效值。 Config *string `json:"Config,omitnil,omitempty" name:"Config"` // 认证器状态 - // 注意:此字段可能返回 null,表示取不到有效值。 Status *string `json:"Status,omitnil,omitempty" name:"Status"` // 创建时间 - // 注意:此字段可能返回 null,表示取不到有效值。 CreateTime *int64 `json:"CreateTime,omitnil,omitempty" name:"CreateTime"` // 说明 - // 注意:此字段可能返回 null,表示取不到有效值。 Remark *string `json:"Remark,omitnil,omitempty" name:"Remark"` } +type MQTTClientInfo struct { + // 客户端唯一标识 + ClientId *string `json:"ClientId,omitnil,omitempty" name:"ClientId"` + + // 客户端网络地址 + ClientAddress *string `json:"ClientAddress,omitnil,omitempty" name:"ClientAddress"` + + // MQTT 协议版本,4 表示 MQTT 3.1.1 + ProtocolVersion *int64 `json:"ProtocolVersion,omitnil,omitempty" name:"ProtocolVersion"` + + // 保持连接时间,单位:秒 + Keepalive *int64 `json:"Keepalive,omitnil,omitempty" name:"Keepalive"` + + // 连接状态,CONNECTED 已连接,DISCONNECTED 未连接 + ConnectionStatus *string `json:"ConnectionStatus,omitnil,omitempty" name:"ConnectionStatus"` + + // 客户端创建时间 + CreateTime *int64 `json:"CreateTime,omitnil,omitempty" name:"CreateTime"` + + // 上次建立连接时间 + ConnectTime *int64 `json:"ConnectTime,omitnil,omitempty" name:"ConnectTime"` + + // 上次断开连接时间,仅对持久会话(cleanSession=false)并且客户端当前未连接时有意义 + DisconnectTime *int64 `json:"DisconnectTime,omitnil,omitempty" name:"DisconnectTime"` + + // 客户端的订阅列表 + MQTTClientSubscriptions []*MQTTClientSubscription `json:"MQTTClientSubscriptions,omitnil,omitempty" name:"MQTTClientSubscriptions"` +} + +type MQTTClientSubscription struct { + // topic 订阅 + TopicFilter *string `json:"TopicFilter,omitnil,omitempty" name:"TopicFilter"` + + // 服务质量等级 + Qos *int64 `json:"Qos,omitnil,omitempty" name:"Qos"` + + // 堆积数量 + Lag *int64 `json:"Lag,omitnil,omitempty" name:"Lag"` + + // 投递未确认数量 + Inflight *int64 `json:"Inflight,omitnil,omitempty" name:"Inflight"` +} + type MQTTEndpointItem struct { // 类型 - // 注意:此字段可能返回 null,表示取不到有效值。 Type *string `json:"Type,omitnil,omitempty" name:"Type"` // 接入点 - // 注意:此字段可能返回 null,表示取不到有效值。 Url *string `json:"Url,omitnil,omitempty" name:"Url"` // vpc信息 - // 注意:此字段可能返回 null,表示取不到有效值。 VpcId *string `json:"VpcId,omitnil,omitempty" name:"VpcId"` // 子网信息 - // 注意:此字段可能返回 null,表示取不到有效值。 SubnetId *string `json:"SubnetId,omitnil,omitempty" name:"SubnetId"` // 主机 - // 注意:此字段可能返回 null,表示取不到有效值。 Host *string `json:"Host,omitnil,omitempty" name:"Host"` // 端口 - // 注意:此字段可能返回 null,表示取不到有效值。 Port *int64 `json:"Port,omitnil,omitempty" name:"Port"` // 接入点ip - // 注意:此字段可能返回 null,表示取不到有效值。 Ip *string `json:"Ip,omitnil,omitempty" name:"Ip"` } @@ -2313,8 +3249,7 @@ type MQTTInstanceItem struct { // 实例版本 Version *string `json:"Version,omitnil,omitempty" name:"Version"` - // 实例类型, - // EXPERIMENT,体验版 + // 实例类型 // BASIC,基础版 // PRO,专业版 // PLATINUM,铂金版 @@ -2337,7 +3272,6 @@ type MQTTInstanceItem struct { TopicNumLimit *int64 `json:"TopicNumLimit,omitnil,omitempty" name:"TopicNumLimit"` // 备注信息 - // 注意:此字段可能返回 null,表示取不到有效值。 Remark *string `json:"Remark,omitnil,omitempty" name:"Remark"` // 主题数量 @@ -2347,50 +3281,70 @@ type MQTTInstanceItem struct { SkuCode *string `json:"SkuCode,omitnil,omitempty" name:"SkuCode"` // 弹性TPS限流值 - // 注意:此字段可能返回 null,表示取不到有效值。 TpsLimit *int64 `json:"TpsLimit,omitnil,omitempty" name:"TpsLimit"` - // 创建时间 - // 注意:此字段可能返回 null,表示取不到有效值。 + // 创建时间,毫秒级时间戳 CreateTime *int64 `json:"CreateTime,omitnil,omitempty" name:"CreateTime"` // 单客户端最大订阅数量 - // 注意:此字段可能返回 null,表示取不到有效值。 MaxSubscriptionPerClient *int64 `json:"MaxSubscriptionPerClient,omitnil,omitempty" name:"MaxSubscriptionPerClient"` // 客户端连接数上线 - // 注意:此字段可能返回 null,表示取不到有效值。 ClientNumLimit *int64 `json:"ClientNumLimit,omitnil,omitempty" name:"ClientNumLimit"` - // 是否自动续费 - // 注意:此字段可能返回 null,表示取不到有效值。 + // 是否自动续费。仅包年包月就去那生效。 + // 1:自动续费 + // 0:非自动续费 RenewFlag *int64 `json:"RenewFlag,omitnil,omitempty" name:"RenewFlag"` // 计费模式, POSTPAID,按量计费 PREPAID,包年包月 - // 注意:此字段可能返回 null,表示取不到有效值。 PayMode *string `json:"PayMode,omitnil,omitempty" name:"PayMode"` - // 到期时间,秒为单位 - // 注意:此字段可能返回 null,表示取不到有效值。 + // 到期时间,毫秒级时间戳 ExpiryTime *int64 `json:"ExpiryTime,omitnil,omitempty" name:"ExpiryTime"` - // 预销毁时间 - // 注意:此字段可能返回 null,表示取不到有效值。 + // 预销毁时间,毫秒级时间戳 DestroyTime *int64 `json:"DestroyTime,omitnil,omitempty" name:"DestroyTime"` // 授权规则条数限制 - // 注意:此字段可能返回 null,表示取不到有效值。 AuthorizationPolicyLimit *int64 `json:"AuthorizationPolicyLimit,omitnil,omitempty" name:"AuthorizationPolicyLimit"` // 最大ca配额 - // 注意:此字段可能返回 null,表示取不到有效值。 MaxCaNum *int64 `json:"MaxCaNum,omitnil,omitempty" name:"MaxCaNum"` // 最大订阅数 - // 注意:此字段可能返回 null,表示取不到有效值。 MaxSubscription *int64 `json:"MaxSubscription,omitnil,omitempty" name:"MaxSubscription"` } +type MQTTMessageItem struct { + // 消息ID + MsgId *string `json:"MsgId,omitnil,omitempty" name:"MsgId"` + + // 消息tag + Tags *string `json:"Tags,omitnil,omitempty" name:"Tags"` + + // 消息key + Keys *string `json:"Keys,omitnil,omitempty" name:"Keys"` + + // 客户端地址 + ProducerAddr *string `json:"ProducerAddr,omitnil,omitempty" name:"ProducerAddr"` + + // 消息发送时间 + ProduceTime *string `json:"ProduceTime,omitnil,omitempty" name:"ProduceTime"` + + // 死信重发次数 + DeadLetterResendTimes *int64 `json:"DeadLetterResendTimes,omitnil,omitempty" name:"DeadLetterResendTimes"` + + // 死信重发成功次数 + DeadLetterResendSuccessTimes *int64 `json:"DeadLetterResendSuccessTimes,omitnil,omitempty" name:"DeadLetterResendSuccessTimes"` + + // 子topic + SubTopic *string `json:"SubTopic,omitnil,omitempty" name:"SubTopic"` + + // 消息质量等级 + Qos *string `json:"Qos,omitnil,omitempty" name:"Qos"` +} + type MQTTTopicItem struct { // 实例 ID InstanceId *string `json:"InstanceId,omitnil,omitempty" name:"InstanceId"` @@ -2399,7 +3353,6 @@ type MQTTTopicItem struct { Topic *string `json:"Topic,omitnil,omitempty" name:"Topic"` // 主题描述 - // 注意:此字段可能返回 null,表示取不到有效值。 Remark *string `json:"Remark,omitnil,omitempty" name:"Remark"` } @@ -2486,82 +3439,199 @@ type ModifyAuthorizationPolicyRequest struct { // allow、deny Effect *string `json:"Effect,omitnil,omitempty" name:"Effect"` - // connect、pub、sub - Actions *string `json:"Actions,omitnil,omitempty" name:"Actions"` + // connect、pub、sub + Actions *string `json:"Actions,omitnil,omitempty" name:"Actions"` + + // 资源 + Resources *string `json:"Resources,omitnil,omitempty" name:"Resources"` + + // 用户名 + Username *string `json:"Username,omitnil,omitempty" name:"Username"` + + // 1.匹配保留消息;2.匹配非保留消息;3.匹配所有消息 + Retain *int64 `json:"Retain,omitnil,omitempty" name:"Retain"` + + // 客户端 + ClientId *string `json:"ClientId,omitnil,omitempty" name:"ClientId"` + + // IP + Ip *string `json:"Ip,omitnil,omitempty" name:"Ip"` + + // 0、1、2 + Qos *string `json:"Qos,omitnil,omitempty" name:"Qos"` + + // 备注信息 + Remark *string `json:"Remark,omitnil,omitempty" name:"Remark"` +} + +func (r *ModifyAuthorizationPolicyRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *ModifyAuthorizationPolicyRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "Id") + delete(f, "InstanceId") + delete(f, "PolicyName") + delete(f, "PolicyVersion") + delete(f, "Priority") + delete(f, "Effect") + delete(f, "Actions") + delete(f, "Resources") + delete(f, "Username") + delete(f, "Retain") + delete(f, "ClientId") + delete(f, "Ip") + delete(f, "Qos") + delete(f, "Remark") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "ModifyAuthorizationPolicyRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type ModifyAuthorizationPolicyResponseParams struct { + // 唯一请求 ID,由服务端生成,每次请求都会返回(若请求因其他原因未能抵达服务端,则该次请求不会获得 RequestId)。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitnil,omitempty" name:"RequestId"` +} + +type ModifyAuthorizationPolicyResponse struct { + *tchttp.BaseResponse + Response *ModifyAuthorizationPolicyResponseParams `json:"Response"` +} + +func (r *ModifyAuthorizationPolicyResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *ModifyAuthorizationPolicyResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type ModifyHttpAuthenticatorRequestParams struct { + // 实例ID + InstanceId *string `json:"InstanceId,omitnil,omitempty" name:"InstanceId"` + + // 端点 + Endpoint *string `json:"Endpoint,omitnil,omitempty" name:"Endpoint"` + + // 认证器状态:open-启用;close-关闭 + Status *string `json:"Status,omitnil,omitempty" name:"Status"` + + // 最大并发连接数,默认8,范围:1-20 + Concurrency *int64 `json:"Concurrency,omitnil,omitempty" name:"Concurrency"` + + // 连接超时时间,单位:秒,范围:1-30 + ConnectTimeout *int64 `json:"ConnectTimeout,omitnil,omitempty" name:"ConnectTimeout"` + + // 请求超时时间,单位:秒,范围:1-30 + ReadTimeout *int64 `json:"ReadTimeout,omitnil,omitempty" name:"ReadTimeout"` + + // 说明 + Remark *string `json:"Remark,omitnil,omitempty" name:"Remark"` + + // 请求方法,GET 或者 POST + Method *string `json:"Method,omitnil,omitempty" name:"Method"` + + // 请求header + Header []*HeaderItem `json:"Header,omitnil,omitempty" name:"Header"` + + // 请求body + Body []*BodyItem `json:"Body,omitnil,omitempty" name:"Body"` +} + +type ModifyHttpAuthenticatorRequest struct { + *tchttp.BaseRequest + + // 实例ID + InstanceId *string `json:"InstanceId,omitnil,omitempty" name:"InstanceId"` + + // 端点 + Endpoint *string `json:"Endpoint,omitnil,omitempty" name:"Endpoint"` - // 资源 - Resources *string `json:"Resources,omitnil,omitempty" name:"Resources"` + // 认证器状态:open-启用;close-关闭 + Status *string `json:"Status,omitnil,omitempty" name:"Status"` - // 用户名 - Username *string `json:"Username,omitnil,omitempty" name:"Username"` + // 最大并发连接数,默认8,范围:1-20 + Concurrency *int64 `json:"Concurrency,omitnil,omitempty" name:"Concurrency"` - // 1.匹配保留消息;2.匹配非保留消息;3.匹配所有消息 - Retain *int64 `json:"Retain,omitnil,omitempty" name:"Retain"` + // 连接超时时间,单位:秒,范围:1-30 + ConnectTimeout *int64 `json:"ConnectTimeout,omitnil,omitempty" name:"ConnectTimeout"` - // 客户端 - ClientId *string `json:"ClientId,omitnil,omitempty" name:"ClientId"` + // 请求超时时间,单位:秒,范围:1-30 + ReadTimeout *int64 `json:"ReadTimeout,omitnil,omitempty" name:"ReadTimeout"` - // IP - Ip *string `json:"Ip,omitnil,omitempty" name:"Ip"` + // 说明 + Remark *string `json:"Remark,omitnil,omitempty" name:"Remark"` - // 0、1、2 - Qos *string `json:"Qos,omitnil,omitempty" name:"Qos"` + // 请求方法,GET 或者 POST + Method *string `json:"Method,omitnil,omitempty" name:"Method"` - // 备注信息 - Remark *string `json:"Remark,omitnil,omitempty" name:"Remark"` + // 请求header + Header []*HeaderItem `json:"Header,omitnil,omitempty" name:"Header"` + + // 请求body + Body []*BodyItem `json:"Body,omitnil,omitempty" name:"Body"` } -func (r *ModifyAuthorizationPolicyRequest) ToJsonString() string { +func (r *ModifyHttpAuthenticatorRequest) ToJsonString() string { b, _ := json.Marshal(r) return string(b) } // FromJsonString It is highly **NOT** recommended to use this function // because it has no param check, nor strict type check -func (r *ModifyAuthorizationPolicyRequest) FromJsonString(s string) error { +func (r *ModifyHttpAuthenticatorRequest) FromJsonString(s string) error { f := make(map[string]interface{}) if err := json.Unmarshal([]byte(s), &f); err != nil { return err } - delete(f, "Id") delete(f, "InstanceId") - delete(f, "PolicyName") - delete(f, "PolicyVersion") - delete(f, "Priority") - delete(f, "Effect") - delete(f, "Actions") - delete(f, "Resources") - delete(f, "Username") - delete(f, "Retain") - delete(f, "ClientId") - delete(f, "Ip") - delete(f, "Qos") + delete(f, "Endpoint") + delete(f, "Status") + delete(f, "Concurrency") + delete(f, "ConnectTimeout") + delete(f, "ReadTimeout") delete(f, "Remark") + delete(f, "Method") + delete(f, "Header") + delete(f, "Body") if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "ModifyAuthorizationPolicyRequest has unknown keys!", "") + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "ModifyHttpAuthenticatorRequest has unknown keys!", "") } return json.Unmarshal([]byte(s), &r) } // Predefined struct for user -type ModifyAuthorizationPolicyResponseParams struct { +type ModifyHttpAuthenticatorResponseParams struct { // 唯一请求 ID,由服务端生成,每次请求都会返回(若请求因其他原因未能抵达服务端,则该次请求不会获得 RequestId)。定位问题时需要提供该次请求的 RequestId。 RequestId *string `json:"RequestId,omitnil,omitempty" name:"RequestId"` } -type ModifyAuthorizationPolicyResponse struct { +type ModifyHttpAuthenticatorResponse struct { *tchttp.BaseResponse - Response *ModifyAuthorizationPolicyResponseParams `json:"Response"` + Response *ModifyHttpAuthenticatorResponseParams `json:"Response"` } -func (r *ModifyAuthorizationPolicyResponse) ToJsonString() string { +func (r *ModifyHttpAuthenticatorResponse) ToJsonString() string { b, _ := json.Marshal(r) return string(b) } // FromJsonString It is highly **NOT** recommended to use this function // because it has no param check, nor strict type check -func (r *ModifyAuthorizationPolicyResponse) FromJsonString(s string) error { +func (r *ModifyHttpAuthenticatorResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } @@ -2633,6 +3703,105 @@ func (r *ModifyInsPublicEndpointResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyInstanceCertBindingRequestParams struct { + // 实例ID + InstanceId *string `json:"InstanceId,omitnil,omitempty" name:"InstanceId"` + + // 服务端证书id + SSLServerCertId *string `json:"SSLServerCertId,omitnil,omitempty" name:"SSLServerCertId"` + + // CA证书id + SSLCaCertId *string `json:"SSLCaCertId,omitnil,omitempty" name:"SSLCaCertId"` + + // 加密通信方式 + // TLS:单向证书认证 + // mTLS:双向证书认证 + // BYOC:一设备一证书认证 + X509Mode *string `json:"X509Mode,omitnil,omitempty" name:"X509Mode"` + + // 设备证书注册类型: + // JITP,自动注册; + // MANUAL 手动注册 + DeviceCertificateProvisionType *string `json:"DeviceCertificateProvisionType,omitnil,omitempty" name:"DeviceCertificateProvisionType"` + + // 是否自动激活,默认为false + AutomaticActivation *bool `json:"AutomaticActivation,omitnil,omitempty" name:"AutomaticActivation"` +} + +type ModifyInstanceCertBindingRequest struct { + *tchttp.BaseRequest + + // 实例ID + InstanceId *string `json:"InstanceId,omitnil,omitempty" name:"InstanceId"` + + // 服务端证书id + SSLServerCertId *string `json:"SSLServerCertId,omitnil,omitempty" name:"SSLServerCertId"` + + // CA证书id + SSLCaCertId *string `json:"SSLCaCertId,omitnil,omitempty" name:"SSLCaCertId"` + + // 加密通信方式 + // TLS:单向证书认证 + // mTLS:双向证书认证 + // BYOC:一设备一证书认证 + X509Mode *string `json:"X509Mode,omitnil,omitempty" name:"X509Mode"` + + // 设备证书注册类型: + // JITP,自动注册; + // MANUAL 手动注册 + DeviceCertificateProvisionType *string `json:"DeviceCertificateProvisionType,omitnil,omitempty" name:"DeviceCertificateProvisionType"` + + // 是否自动激活,默认为false + AutomaticActivation *bool `json:"AutomaticActivation,omitnil,omitempty" name:"AutomaticActivation"` +} + +func (r *ModifyInstanceCertBindingRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *ModifyInstanceCertBindingRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "InstanceId") + delete(f, "SSLServerCertId") + delete(f, "SSLCaCertId") + delete(f, "X509Mode") + delete(f, "DeviceCertificateProvisionType") + delete(f, "AutomaticActivation") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "ModifyInstanceCertBindingRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type ModifyInstanceCertBindingResponseParams struct { + // 唯一请求 ID,由服务端生成,每次请求都会返回(若请求因其他原因未能抵达服务端,则该次请求不会获得 RequestId)。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitnil,omitempty" name:"RequestId"` +} + +type ModifyInstanceCertBindingResponse struct { + *tchttp.BaseResponse + Response *ModifyInstanceCertBindingResponseParams `json:"Response"` +} + +func (r *ModifyInstanceCertBindingResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *ModifyInstanceCertBindingResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + // Predefined struct for user type ModifyInstanceRequestParams struct { // 实例ID @@ -3058,20 +4227,248 @@ func (r *ModifyUserResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +type PriceTag struct { + // 计价名称 + Name *string `json:"Name,omitnil,omitempty" name:"Name"` + + // 计价类别 + Category *string `json:"Category,omitnil,omitempty" name:"Category"` + + // 计费项标签 + Code *string `json:"Code,omitnil,omitempty" name:"Code"` + + // 步长 + Step *int64 `json:"Step,omitnil,omitempty" name:"Step"` +} + +type ProductSkuItem struct { + // 规格类型 + // BASIC:基础版 + // PRO :专业版 + InstanceType *string `json:"InstanceType,omitnil,omitempty" name:"InstanceType"` + + // 规格代码 + SkuCode *string `json:"SkuCode,omitnil,omitempty" name:"SkuCode"` + + // 是否售卖 + OnSale *bool `json:"OnSale,omitnil,omitempty" name:"OnSale"` + + // topic num限制 + TopicNumLimit *int64 `json:"TopicNumLimit,omitnil,omitempty" name:"TopicNumLimit"` + + // tps + TpsLimit *int64 `json:"TpsLimit,omitnil,omitempty" name:"TpsLimit"` + + // 客户端连接数 + ClientNumLimit *int64 `json:"ClientNumLimit,omitnil,omitempty" name:"ClientNumLimit"` + + // 单客户端最大订阅数 + MaxSubscriptionPerClient *int64 `json:"MaxSubscriptionPerClient,omitnil,omitempty" name:"MaxSubscriptionPerClient"` + + // 授权规则条数 + AuthorizationPolicyLimit *int64 `json:"AuthorizationPolicyLimit,omitnil,omitempty" name:"AuthorizationPolicyLimit"` + + // 计费项信息 + PriceTags []*PriceTag `json:"PriceTags,omitnil,omitempty" name:"PriceTags"` +} + type PublicAccessRule struct { // ip网段信息 - // 注意:此字段可能返回 null,表示取不到有效值。 IpRule *string `json:"IpRule,omitnil,omitempty" name:"IpRule"` // 允许或者拒绝 - // 注意:此字段可能返回 null,表示取不到有效值。 Allow *bool `json:"Allow,omitnil,omitempty" name:"Allow"` // 备注信息 - // 注意:此字段可能返回 null,表示取不到有效值。 Remark *string `json:"Remark,omitnil,omitempty" name:"Remark"` } +// Predefined struct for user +type PublishMessageRequestParams struct { + // 实例ID + InstanceId *string `json:"InstanceId,omitnil,omitempty" name:"InstanceId"` + + // 消息 payload,需要按 encoding 指定的编码方式进行编码 + Payload *string `json:"Payload,omitnil,omitempty" name:"Payload"` + + // 消息目的主题,该参数与 TargetClientId 二选一 + TargetTopic *string `json:"TargetTopic,omitnil,omitempty" name:"TargetTopic"` + + // 消息目的客户端 ID,该参数与 TargetTopic 二选一 + TargetClientId *string `json:"TargetClientId,omitnil,omitempty" name:"TargetClientId"` + + // 消息 payload 编码,可选 plain 或 base64,默认为 plain(即不编码) + Encoding *string `json:"Encoding,omitnil,omitempty" name:"Encoding"` + + // 消息的服务质量等级,默认为 1 + Qos *int64 `json:"Qos,omitnil,omitempty" name:"Qos"` + + // 是否为保留消息,默认为 false,且仅支持发布到主题的消息设置为 true + Retain *bool `json:"Retain,omitnil,omitempty" name:"Retain"` +} + +type PublishMessageRequest struct { + *tchttp.BaseRequest + + // 实例ID + InstanceId *string `json:"InstanceId,omitnil,omitempty" name:"InstanceId"` + + // 消息 payload,需要按 encoding 指定的编码方式进行编码 + Payload *string `json:"Payload,omitnil,omitempty" name:"Payload"` + + // 消息目的主题,该参数与 TargetClientId 二选一 + TargetTopic *string `json:"TargetTopic,omitnil,omitempty" name:"TargetTopic"` + + // 消息目的客户端 ID,该参数与 TargetTopic 二选一 + TargetClientId *string `json:"TargetClientId,omitnil,omitempty" name:"TargetClientId"` + + // 消息 payload 编码,可选 plain 或 base64,默认为 plain(即不编码) + Encoding *string `json:"Encoding,omitnil,omitempty" name:"Encoding"` + + // 消息的服务质量等级,默认为 1 + Qos *int64 `json:"Qos,omitnil,omitempty" name:"Qos"` + + // 是否为保留消息,默认为 false,且仅支持发布到主题的消息设置为 true + Retain *bool `json:"Retain,omitnil,omitempty" name:"Retain"` +} + +func (r *PublishMessageRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *PublishMessageRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "InstanceId") + delete(f, "Payload") + delete(f, "TargetTopic") + delete(f, "TargetClientId") + delete(f, "Encoding") + delete(f, "Qos") + delete(f, "Retain") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "PublishMessageRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type PublishMessageResponseParams struct { + // 唯一请求 ID,由服务端生成,每次请求都会返回(若请求因其他原因未能抵达服务端,则该次请求不会获得 RequestId)。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitnil,omitempty" name:"RequestId"` +} + +type PublishMessageResponse struct { + *tchttp.BaseResponse + Response *PublishMessageResponseParams `json:"Response"` +} + +func (r *PublishMessageResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *PublishMessageResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type RegisterCaCertificateRequestParams struct { + // 集群id + InstanceId *string `json:"InstanceId,omitnil,omitempty" name:"InstanceId"` + + // CA证书 + CaCertificate *string `json:"CaCertificate,omitnil,omitempty" name:"CaCertificate"` + + // 验证证书 + VerificationCertificate *string `json:"VerificationCertificate,omitnil,omitempty" name:"VerificationCertificate"` + + // 证书格式,不传默认PEM格式 + Format *string `json:"Format,omitnil,omitempty" name:"Format"` + + // 证书状态,不传默认ACTIVE状态 + // ACTIVE,//激活 + // INACTIVE,//未激活 + // REVOKED,//吊销 + // PENDING_ACTIVATION,//注册待激活 + Status *string `json:"Status,omitnil,omitempty" name:"Status"` +} + +type RegisterCaCertificateRequest struct { + *tchttp.BaseRequest + + // 集群id + InstanceId *string `json:"InstanceId,omitnil,omitempty" name:"InstanceId"` + + // CA证书 + CaCertificate *string `json:"CaCertificate,omitnil,omitempty" name:"CaCertificate"` + + // 验证证书 + VerificationCertificate *string `json:"VerificationCertificate,omitnil,omitempty" name:"VerificationCertificate"` + + // 证书格式,不传默认PEM格式 + Format *string `json:"Format,omitnil,omitempty" name:"Format"` + + // 证书状态,不传默认ACTIVE状态 + // ACTIVE,//激活 + // INACTIVE,//未激活 + // REVOKED,//吊销 + // PENDING_ACTIVATION,//注册待激活 + Status *string `json:"Status,omitnil,omitempty" name:"Status"` +} + +func (r *RegisterCaCertificateRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *RegisterCaCertificateRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "InstanceId") + delete(f, "CaCertificate") + delete(f, "VerificationCertificate") + delete(f, "Format") + delete(f, "Status") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "RegisterCaCertificateRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type RegisterCaCertificateResponseParams struct { + // 唯一请求 ID,由服务端生成,每次请求都会返回(若请求因其他原因未能抵达服务端,则该次请求不会获得 RequestId)。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitnil,omitempty" name:"RequestId"` +} + +type RegisterCaCertificateResponse struct { + *tchttp.BaseResponse + Response *RegisterCaCertificateResponseParams `json:"Response"` +} + +func (r *RegisterCaCertificateResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *RegisterCaCertificateResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + // Predefined struct for user type RegisterDeviceCertificateRequestParams struct { // 集群id @@ -3224,11 +4621,9 @@ func (r *RevokedDeviceCertificateResponse) FromJsonString(s string) error { type Tag struct { // 标签名称 - // 注意:此字段可能返回 null,表示取不到有效值。 TagKey *string `json:"TagKey,omitnil,omitempty" name:"TagKey"` // 标签值 - // 注意:此字段可能返回 null,表示取不到有效值。 TagValue *string `json:"TagValue,omitnil,omitempty" name:"TagValue"` } diff --git a/vendor/modules.txt b/vendor/modules.txt index f1ba1655ab..58e7360a42 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -1166,7 +1166,7 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cloudaudit/v20190319 # github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls v1.0.1078 ## explicit; go 1.14 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls/v20201016 -# github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1129 +# github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1130 ## explicit; go 1.11 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors @@ -1249,7 +1249,7 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor/v20180724 # github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mps v1.0.853 ## explicit; go 1.14 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mps/v20190612 -# github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mqtt v1.0.1099 +# github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mqtt v1.0.1130 ## explicit; go 1.14 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mqtt/v20240516 # github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/oceanus v1.0.831 diff --git a/website/docs/d/mqtt_registration_code.html.markdown b/website/docs/d/mqtt_registration_code.html.markdown new file mode 100644 index 0000000000..eaf0fef8a1 --- /dev/null +++ b/website/docs/d/mqtt_registration_code.html.markdown @@ -0,0 +1,35 @@ +--- +subcategory: "TDMQ for MQTT(MQTT)" +layout: "tencentcloud" +page_title: "TencentCloud: tencentcloud_mqtt_registration_code" +sidebar_current: "docs-tencentcloud-datasource-mqtt_registration_code" +description: |- + Use this data source to query detailed information of MQTT registration code +--- + +# tencentcloud_mqtt_registration_code + +Use this data source to query detailed information of MQTT registration code + +## Example Usage + +```hcl +data "tencentcloud_mqtt_registration_code" "example" { + instance_id = "mqtt-zxjwkr98" +} +``` + +## Argument Reference + +The following arguments are supported: + +* `instance_id` - (Required, String) Instance ID. +* `result_output_file` - (Optional, String) Used to save results. + +## Attributes Reference + +In addition to all arguments above, the following attributes are exported: + +* `registration_code` - Registration code. + + diff --git a/website/docs/r/mqtt_ca_certificate.html.markdown b/website/docs/r/mqtt_ca_certificate.html.markdown new file mode 100644 index 0000000000..8eb4ad6620 --- /dev/null +++ b/website/docs/r/mqtt_ca_certificate.html.markdown @@ -0,0 +1,101 @@ +--- +subcategory: "TDMQ for MQTT(MQTT)" +layout: "tencentcloud" +page_title: "TencentCloud: tencentcloud_mqtt_ca_certificate" +sidebar_current: "docs-tencentcloud-resource-mqtt_ca_certificate" +description: |- + Provides a resource to create a MQTT CA certificate +--- + +# tencentcloud_mqtt_ca_certificate + +Provides a resource to create a MQTT CA certificate + +## Example Usage + +```hcl +resource "tencentcloud_mqtt_ca_certificate" "example" { + instance_id = "mqtt-zxjwkr98" + ca_certificate = <<-EOF +-----BEGIN CERTIFICATE----- +MIIDUDCCAjigAwIBAgIBATANBgkqhkiG9w0BAQsFADA/MQswCQYDVQQGEwJDTjEb +MBkGA1UEChMSTXkgQ0EgT3JnYW5pemF0aW9uMRMwEQYDVQQDEwpNeSBDQSBSb290 +MB4XDTI1MDMyNTEyMzMyM1oXDTM1MDMyNTEyMzMyM1owPzELMAkGA1UEBhMCQ04x +GzAZBgNVBAoTEk15IENBIE9yZ2FuaXphdGlvbjETMBEGA1UEAxMKTXkgQ0EgUm9v +dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMd8mTXv6SPc6+sQY/Po +zeDHMMIgNFq5wTA23nMPZ15P5PH3Hy76oeR9lPIepQXs36BjoRRDlmc0wb9zhZdt +vG9t3Tr8SzTkLC9nSjjs+TIk26/rAuP1igc+V8MbnSuDkgmhepwioXeMrn/ns7RK +mgvKm5C8tC4MlRlmn0R29EPfchvhW+Ab+mybKFSJfiPABDxDzSfPTCZH2wVTgAIF +0lG93SqrytBJzqhwyXN6bXq/52+CGfG264/fLN4vH+VEGE++ys0eZh+9+0GQ4cFp +gqeRFRYG31ChXMWcnKTLzh/o7GpdTCN31w7h1XkJTbaHNvZbuV0H/wwCVN8bsGkK +zo0CAwEAAaNXMFUwDgYDVR0PAQH/BAQDAgEGMBMGA1UdJQQMMAoGCCsGAQUFBwMB +MA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFCFYj1RkM/mf/ZIYzZPoMvusMM9Z +MA0GCSqGSIb3DQEBCwUAA4IBAQC9TRuaXBnx7OHbdAgukWr4/tbIEhVudKrjEjyV +4tYXhZB/adouWLih/2t+E5U8DdpenTDXhQmT57VVdUjE7ey3VTK9qYQ6swTrOi4A +pW9xwpJuqqQPEj9l8/iOdhiSF3XG/UcxwyctPux6Wmm+Xg0Nz3MV0FGGIi56JZlB +sEE4WHwkzoFYTJxIlBNQvcNxVjWmBUWRm7bBCu7vW3sqdb22Uh5X2E0v5sH0vskG +Bj/1ZqTpbCuNC2UIyiqMGwKjVUifKpEmjzJI/gdGq7c2/o987TYlpWMBE1J1my0l +CjJmbR+Ces1k4hZUWrHijCmLS+iWPiadoQ9xzWgaQeQIbU43 +-----END CERTIFICATE----- +EOF + verification_certificate = <<-EOF +-----BEGIN CERTIFICATE----- +MIIDhDCCAmygAwIBAgIRAOr5LwhpwBWsYLWLt5+HwqMwDQYJKoZIhvcNAQELBQAw +PzELMAkGA1UEBhMCQ04xGzAZBgNVBAoTEk15IENBIE9yZ2FuaXphdGlvbjETMBEG +A1UEAxMKTXkgQ0EgUm9vdDAeFw0yNTAzMjUxMjMzMjNaFw0yNjAzMjUxMjMzMjNa +MFoxCzAJBgNVBAYTAkNOMRwwGgYDVQQKExNDbGllbnQgT3JnYW5pemF0aW9uMS0w +KwYDVQQDEyQ0NzAzY2VmNC0wNDM4LTRkM2QtOTgwNy0zMTAwNjI0ODJkNWIwggEi +MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDPOe0pjyLtj7Prt23T1Ep3pJaN +aKKiZyikPae4mHXDZ+AQ4zONA78OaJ6S8E9fAmf5tygWWFJQBwccjitlb1nKChGx +KogqeXS/6RwKPNWjaWUp6gabAmcCTF3g6F8gxjJv0eBn0i+UcS2LNp6wRECM08MI +xHc6B/jC78gkp+b4DuNXFQzGeqDTHgneF5immpjLP7ggWTFgjUOJgLAwGRcZf89K +T3TxN1tKtiKxiXIfzAcqgeAfDWjPYgb/3PEcWZj7Zyl4mJAPnAGghFkLDDeJHh6L +Gk9OpfIuAWmlitZFCujnM1MiEGyw5p6kSwAAD7I/p0yyIV/1VYs2AMmu2uehAgMB +AAGjYDBeMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYB +BQUHAwIwDAYDVR0TAQH/BAIwADAfBgNVHSMEGDAWgBQhWI9UZDP5n/2SGM2T6DL7 +rDDPWTANBgkqhkiG9w0BAQsFAAOCAQEAcsW08LGC/uARyX2X0QZ9A7I+aIluI23b +VSbNbU1+3SVbm8Jfk63rb/Zkc98jPLds598YswY2gQtjT4+Dcpv60wS+c0Ltw1nJ +O23cp2kJ05+jh/5GywOur7gOG8L1xwUngqX84ObBIyeYv5MfANLmzqfZBs9nKokF +keeHU9Y0NYmFiPw4xNM7S55dbFxKizYd66uGc5b+cWkqg5xNlOqU9He0cBC6KYAj +GnyAz0ruWFPFMlftw5/OwNbc9X8G9wm6+T+bNikzOh3FwMCqjK6hdjtR4/HHxgr2 +IpWw7p6yvzDYy4D99PLDjRWP+iLNQCzXOk+PKV+MYCwwYeD1loldOA== +-----END CERTIFICATE----- +EOF + format = "PEM" + status = "ACTIVE" +} +``` + +## Argument Reference + +The following arguments are supported: + +* `ca_certificate` - (Required, String, ForceNew) CA certificate. +* `instance_id` - (Required, String, ForceNew) Instance ID. +* `verification_certificate` - (Required, String, ForceNew) Verification certificate. +* `format` - (Optional, String, ForceNew) Certificate format, Default is PEM. +* `status` - (Optional, String) Certificate status, Default is ACTIVE. + ACTIVE activation; + INACTIVE not active. + +## Attributes Reference + +In addition to all arguments above, the following attributes are exported: + +* `id` - ID of the resource. +* `ca_cn` - Certificate common name. +* `ca_sn` - Certificate serial number. +* `created_time` - Certificate create time. +* `not_after_time` - Certificate expiring date. +* `not_before_time` - Certificate effective start date. +* `update_time` - Certificate update time. + + +## Import + +MQTT CA certificate can be imported using the id, e.g. + +``` +terraform import tencentcloud_mqtt_ca_certificate.example mqtt-zxjwkr98#01 +``` + diff --git a/website/docs/r/mqtt_device_certificate.html.markdown b/website/docs/r/mqtt_device_certificate.html.markdown new file mode 100644 index 0000000000..37eb4644f3 --- /dev/null +++ b/website/docs/r/mqtt_device_certificate.html.markdown @@ -0,0 +1,59 @@ +--- +subcategory: "TDMQ for MQTT(MQTT)" +layout: "tencentcloud" +page_title: "TencentCloud: tencentcloud_mqtt_device_certificate" +sidebar_current: "docs-tencentcloud-resource-mqtt_device_certificate" +description: |- + Provides a resource to create a MQTT device certificate +--- + +# tencentcloud_mqtt_device_certificate + +Provides a resource to create a MQTT device certificate + +## Example Usage + +```hcl +resource "tencentcloud_mqtt_device_certificate" "example" { + instance_id = "mqtt-zxjwkr98" + device_certificate = "" + ca_sn = "" + client_id = "" + format = "" + status = "ACTIVE" +} +``` + +## Argument Reference + +The following arguments are supported: + +* `ca_sn` - (Required, String) Associated CA certificate SN. +* `device_certificate` - (Required, String) Device certificate. +* `instance_id` - (Required, String) Instance ID. +* `client_id` - (Optional, String) Client ID. +* `format` - (Optional, String) Certificate format, Default is PEM. +* `status` - (Optional, String) Certificate status, Default is ACTIVE.\n ACTIVE activation;\n INACTIVE not active. + +## Attributes Reference + +In addition to all arguments above, the following attributes are exported: + +* `id` - ID of the resource. +* `certificate_source` - Certificate source. +* `created_time` - Certificate create time. +* `device_certificate_cn` - Certificate common name. +* `device_certificate_sn` - Equipment certificate serial number. +* `not_after_time` - Certificate expiring date. +* `not_before_time` - Certificate effective start date. +* `update_time` - Certificate update time. + + +## Import + +MQTT device certificate can be imported using the id, e.g. + +``` +terraform import tencentcloud_mqtt_device_certificate.example mqtt_device_certificate_id +``` + diff --git a/website/docs/r/mqtt_http_authenticator.html.markdown b/website/docs/r/mqtt_http_authenticator.html.markdown new file mode 100644 index 0000000000..08c8e534b4 --- /dev/null +++ b/website/docs/r/mqtt_http_authenticator.html.markdown @@ -0,0 +1,78 @@ +--- +subcategory: "TDMQ for MQTT(MQTT)" +layout: "tencentcloud" +page_title: "TencentCloud: tencentcloud_mqtt_http_authenticator" +sidebar_current: "docs-tencentcloud-resource-mqtt_http_authenticator" +description: |- + Provides a resource to create a MQTT http authenticator +--- + +# tencentcloud_mqtt_http_authenticator + +Provides a resource to create a MQTT http authenticator + +## Example Usage + +```hcl +resource "tencentcloud_mqtt_http_authenticator" "example" { + instance_id = "mqtt-zxjwkr98" + endpoint = "https://example.com" + concurrency = 8 + method = "POST" + status = "open" + remark = "Remark." + connect_timeout = 10 + read_timeout = 10 + header { + key = "Content-type" + value = "application/json" + } + + body { + key = "bodyKey" + value = "bodyValue" + } +} +``` + +## Argument Reference + +The following arguments are supported: + +* `endpoint` - (Required, String) JWKS endpoint. +* `instance_id` - (Required, String, ForceNew) Instance ID. +* `body` - (Optional, List) Forwarding request body. +* `concurrency` - (Optional, Int) Maximum concurrent connections, default 8, range: 1-20. +* `connect_timeout` - (Optional, Int) Connection timeout, unit: seconds, range: 1-30. +* `header` - (Optional, List) Forwarding request header. +* `method` - (Optional, String) Network request method GET or POST, default POST. +* `read_timeout` - (Optional, Int) Request timeout, unit: seconds, range: 1-30. +* `remark` - (Optional, String) Remark. +* `status` - (Optional, String) Is the authenticator enabled: open enable; Close close. + +The `body` object supports the following: + +* `key` - (Required, String) Body key. +* `value` - (Required, String) Body key. + +The `header` object supports the following: + +* `key` - (Required, String) Header key. +* `value` - (Required, String) Header value. + +## Attributes Reference + +In addition to all arguments above, the following attributes are exported: + +* `id` - ID of the resource. + + + +## Import + +MQTT http authenticator can be imported using the id, e.g. + +``` +terraform import tencentcloud_mqtt_http_authenticator.example mqtt-zxjwkr98 +``` + diff --git a/website/docs/r/mqtt_jwks_authenticator.html.markdown b/website/docs/r/mqtt_jwks_authenticator.html.markdown new file mode 100644 index 0000000000..b94267486f --- /dev/null +++ b/website/docs/r/mqtt_jwks_authenticator.html.markdown @@ -0,0 +1,63 @@ +--- +subcategory: "TDMQ for MQTT(MQTT)" +layout: "tencentcloud" +page_title: "TencentCloud: tencentcloud_mqtt_jwks_authenticator" +sidebar_current: "docs-tencentcloud-resource-mqtt_jwks_authenticator" +description: |- + Provides a resource to create a MQTT jwks authenticator +--- + +# tencentcloud_mqtt_jwks_authenticator + +Provides a resource to create a MQTT jwks authenticator + +## Example Usage + +```hcl +resource "tencentcloud_mqtt_jwks_authenticator" "example" { + instance_id = "mqtt-zxjwkr98" + from = "username" + endpoint = "https://example.com" + refresh_interval = 60 + remark = "Remark." +} +``` + +### Or + +```hcl +resource "tencentcloud_mqtt_jwks_authenticator" "example" { + instance_id = "mqtt-zxjwkr98" + from = "password" + text = "your text content" + remark = "Remark." +} +``` + +## Argument Reference + +The following arguments are supported: + +* `instance_id` - (Required, String, ForceNew) Instance ID. +* `endpoint` - (Optional, String) JWKS endpoint. +* `from` - (Optional, String) Pass the key of JWT when connecting the device; Username - passed using the username field; Password - Pass using password field. +* `refresh_interval` - (Optional, Int) JWKS refresh interval. unit: s. +* `remark` - (Optional, String) Remark. +* `text` - (Optional, String) JWKS text. + +## Attributes Reference + +In addition to all arguments above, the following attributes are exported: + +* `id` - ID of the resource. + + + +## Import + +MQTT jwks authenticator can be imported using the id, e.g. + +``` +terraform import tencentcloud_mqtt_jwks_authenticator.example mqtt-zxjwkr98 +``` + diff --git a/website/docs/r/mqtt_jwt_authenticator.html.markdown b/website/docs/r/mqtt_jwt_authenticator.html.markdown new file mode 100644 index 0000000000..5603a88cd2 --- /dev/null +++ b/website/docs/r/mqtt_jwt_authenticator.html.markdown @@ -0,0 +1,66 @@ +--- +subcategory: "TDMQ for MQTT(MQTT)" +layout: "tencentcloud" +page_title: "TencentCloud: tencentcloud_mqtt_jwt_authenticator" +sidebar_current: "docs-tencentcloud-resource-mqtt_jwt_authenticator" +description: |- + Provides a resource to create a MQTT jwt authenticator +--- + +# tencentcloud_mqtt_jwt_authenticator + +Provides a resource to create a MQTT jwt authenticator + +## Example Usage + +### If algorithm is hmac-based + +```hcl +resource "tencentcloud_mqtt_jwt_authenticator" "example" { + instance_id = "mqtt-zxjwkr98" + algorithm = "hmac-based" + from = "password" + secret = "your secret content" + remark = "Remark." +} +``` + +### If algorithm is public-key + +```hcl +resource "tencentcloud_mqtt_jwt_authenticator" "example" { + instance_id = "mqtt-zxjwkr98" + algorithm = "public-key" + from = "username" + public_key = "your public key" + remark = "Remark." +} +``` + +## Argument Reference + +The following arguments are supported: + +* `algorithm` - (Required, String) Algorithm. hmac-based, public-key. +* `from` - (Required, String) Pass the key of JWT when connecting the device; Username - passed using the username field; Password - Pass using password field. +* `instance_id` - (Required, String, ForceNew) Instance ID. +* `public_key` - (Optional, String) Public key. +* `remark` - (Optional, String) Remark. +* `secret` - (Optional, String) Secret. + +## Attributes Reference + +In addition to all arguments above, the following attributes are exported: + +* `id` - ID of the resource. + + + +## Import + +MQTT jwt authenticator can be imported using the id, e.g. + +``` +terraform import tencentcloud_mqtt_jwt_authenticator.example mqtt-zxjwkr98 +``` + diff --git a/website/docs/r/mqtt_user.html.markdown b/website/docs/r/mqtt_user.html.markdown new file mode 100644 index 0000000000..6074a1eee4 --- /dev/null +++ b/website/docs/r/mqtt_user.html.markdown @@ -0,0 +1,50 @@ +--- +subcategory: "TDMQ for MQTT(MQTT)" +layout: "tencentcloud" +page_title: "TencentCloud: tencentcloud_mqtt_user" +sidebar_current: "docs-tencentcloud-resource-mqtt_user" +description: |- + Provides a resource to create a MQTT user +--- + +# tencentcloud_mqtt_user + +Provides a resource to create a MQTT user + +## Example Usage + +```hcl +resource "tencentcloud_mqtt_user" "example" { + instance_id = "mqtt-zxjwkr98" + username = "tf-example" + password = "Password@123" + remark = "Remark." +} +``` + +## Argument Reference + +The following arguments are supported: + +* `instance_id` - (Required, String, ForceNew) Instance ID. +* `username` - (Required, String, ForceNew) Username, cannot be empty, only supports uppercase and lowercase letter separators ("_", "-"), cannot exceed 32 characters. +* `password` - (Optional, String) Password, when this field is empty, the backend will generate it by default. +* `remark` - (Optional, String) Note that the length should not exceed 128 characters. + +## Attributes Reference + +In addition to all arguments above, the following attributes are exported: + +* `id` - ID of the resource. +* `created_time` - Creation time, millisecond timestamp. +* `modified_time` - Modify time, millisecond timestamp. + + +## Import + +MQTT user can be imported using the id, e.g. + +``` +terraform import tencentcloud_mqtt_user.example mqtt-zxjwkr98#tf-example +``` + diff --git a/website/tencentcloud.erb b/website/tencentcloud.erb index 0511b24352..c511e2b351 100644 --- a/website/tencentcloud.erb +++ b/website/tencentcloud.erb @@ -4004,7 +4004,14 @@