diff --git a/pytest.ini b/pytest.ini index 122ff5d7..da0fde0d 100644 --- a/pytest.ini +++ b/pytest.ini @@ -1,5 +1,5 @@ [pytest] log_cli = 1 log_cli_level = INFO -testpaths = ucloud tests -addopts = --doctest-modules +testpaths = tests +addopts = -v diff --git a/tests/test_acceptance/conftest.py b/tests/test_acceptance/conftest.py index 2f49c09d..2e31979b 100644 --- a/tests/test_acceptance/conftest.py +++ b/tests/test_acceptance/conftest.py @@ -10,7 +10,7 @@ def ustack_client() -> Client: return Client( { - "base_url": "http://192.168.179.2/api", + "base_url": "http://console.pre.ucloudstack.com/api", "region": "cn", "public_key": os.getenv("UCLOUDSTACK_PUBLIC_KEY"), "private_key": os.getenv("UCLOUDSTACK_PRIVATE_KEY"), diff --git a/tests/test_acceptance/test_scenario_5292.py b/tests/test_acceptance/test_scenario_5292.py new file mode 100644 index 00000000..2be1b826 --- /dev/null +++ b/tests/test_acceptance/test_scenario_5292.py @@ -0,0 +1,1026 @@ +""" Code is generated by ucloud-model, DO NOT EDIT IT. """ + + +import pytest + +from ucloud.core import exc +from ucloud.testing import funcs, op, env, utest +from ucloud.testing.driver import spec + + +scenario = spec.scenario(5292, "UCloudStack_05", owners=["lisa.wang@ucloud.cn"]) + + +@pytest.mark.skipif(env.is_ut(), reason=env.get_skip_reason()) +def test_scenario_5292(ustack_client, variables): + scenario.store.update(variables) + + scenario.store["Region"] = "cn" + scenario.store["Zone"] = "zone-01" + scenario.store["BeginTime"] = funcs.get_timestamp(10,) - 3600 + scenario.store["EndTime"] = funcs.get_timestamp(10,) + + # 查询VPC信息 + describe_vpc_00(ustack_client) + + # 查询安全组信息 + describe_security_group_01(ustack_client) + + # 查询主机机型 + describe_vm_type_02(ustack_client) + + # 查询存储类型 + describe_storage_type_03(ustack_client) + + # 获取镜像信息,包括默认镜像和自制镜像。 + describe_image_04(ustack_client) + + # 创建虚拟机 + create_vm_instance_05(ustack_client) + + # 创建虚拟机 + create_vm_instance_06(ustack_client) + + # 查询虚拟机 + describe_vm_instance_07(ustack_client) + + # 查询虚拟机 + describe_vm_instance_08(ustack_client) + + # 创建证书 + create_certificate_09(ustack_client) + + # 创建证书 + create_certificate_10(ustack_client) + + # 查询证书 + describe_certificate_11(ustack_client) + + # 查询证书 + describe_certificate_12(ustack_client) + + # 创建负载均衡 + create_lb_13(ustack_client) + + # 获取负载均衡信息 + describe_lb_14(ustack_client) + + # 创建负载均衡VServer + create_vs_15(ustack_client) + + # 添加服务节点 + create_rs_16(ustack_client) + + # 获取服务节点信息 + describe_rs_17(ustack_client) + + # 修改负载均衡VServer + update_vs_18(ustack_client) + + # 移除服务节点 + delete_rs_19(ustack_client) + + # 删除VServer + delete_vs_20(ustack_client) + + # 查询操作日志 + describe_op_logs_21(ustack_client) + + # 删除负载均衡 + delete_lb_22(ustack_client) + + # 删除证书 + delete_certificate_23(ustack_client) + + # 删除证书 + delete_certificate_24(ustack_client) + + # 断电虚拟机 + poweroff_vm_instance_25(ustack_client) + + # 断电虚拟机 + poweroff_vm_instance_26(ustack_client) + + # 删除虚拟机 + delete_vm_instance_27(ustack_client) + + # 删除虚拟机 + delete_vm_instance_28(ustack_client) + + +@scenario.api( + title="查询VPC信息", + max_retries=3, + retry_interval=1, + startup_delay=0, + fast_fail=False, + validators=lambda variables: [ + ("str_eq", "RetCode", 0), + ("str_eq", "Action", "DescribeVPCResponse"), + ], + action="DescribeVPC", +) +def describe_vpc_00(step, client): + variables = step.store + + d = { + "Zone": variables.get("Zone"), + "Region": variables.get("Region"), + } + + try: + resp = client.ucloudstack().describe_vpc(d) + except exc.RetCodeException as e: + resp = e.json() + + variables["VPCID"] = utest.value_at_path(resp, "Infos.0.VPCID") + variables["SubnetID"] = utest.value_at_path( + resp, "Infos.0.SubnetInfos.0.SubnetID" + ) + return resp + + +@scenario.api( + title="查询安全组信息", + max_retries=3, + retry_interval=1, + startup_delay=0, + fast_fail=False, + validators=lambda variables: [ + ("str_eq", "RetCode", 0), + ("str_eq", "Action", "DescribeSecurityGroupResponse"), + ], + action="DescribeSecurityGroup", +) +def describe_security_group_01(step, client): + variables = step.store + + d = { + "Zone": variables.get("Zone"), + "Region": variables.get("Region"), + } + + try: + resp = client.ucloudstack().describe_security_group(d) + except exc.RetCodeException as e: + resp = e.json() + + variables["SGID"] = utest.value_at_path(resp, "Infos.0.SGID") + return resp + + +@scenario.api( + title="查询主机机型", + max_retries=3, + retry_interval=1, + startup_delay=0, + fast_fail=False, + validators=lambda variables: [ + ("str_eq", "RetCode", 0), + ("str_eq", "Action", "DescribeVMTypeResponse"), + ], + action="DescribeVMType", +) +def describe_vm_type_02(step, client): + variables = step.store + + d = { + "Zone": variables.get("Zone"), + "Region": variables.get("Region"), + } + + try: + resp = client.ucloudstack().describe_vm_type(d) + except exc.RetCodeException as e: + resp = e.json() + + variables["VMType"] = utest.value_at_path(resp, "Infos.0.VMType") + return resp + + +@scenario.api( + title="查询存储类型", + max_retries=3, + retry_interval=1, + startup_delay=0, + fast_fail=False, + validators=lambda variables: [ + ("str_eq", "RetCode", 0), + ("str_eq", "Action", "DescribeStorageTypeResponse"), + ], + action="DescribeStorageType", +) +def describe_storage_type_03(step, client): + variables = step.store + + d = { + "Zone": variables.get("Zone"), + "Region": variables.get("Region"), + } + + try: + resp = client.ucloudstack().describe_storage_type(d) + except exc.RetCodeException as e: + resp = e.json() + + variables["StorageType"] = utest.value_at_path(resp, "Infos.0.StorageType") + return resp + + +@scenario.api( + title="获取镜像信息,包括默认镜像和自制镜像。", + max_retries=3, + retry_interval=1, + startup_delay=0, + fast_fail=False, + validators=lambda variables: [ + ("str_eq", "RetCode", 0), + ("str_eq", "Action", "DescribeImageResponse"), + ], + action="DescribeImage", +) +def describe_image_04(step, client): + variables = step.store + + d = { + "Zone": variables.get("Zone"), + "Region": variables.get("Region"), + } + + try: + resp = client.ucloudstack().describe_image(d) + except exc.RetCodeException as e: + resp = e.json() + + variables["Image_id"] = utest.value_at_path(resp, "Infos.0.ImageID") + return resp + + +@scenario.api( + title="创建虚拟机", + max_retries=3, + retry_interval=1, + startup_delay=10, + fast_fail=False, + validators=lambda variables: [ + ("str_eq", "RetCode", 0), + ("str_eq", "Action", "CreateVMInstanceResponse"), + ], + action="CreateVMInstance", +) +def create_vm_instance_05(step, client): + variables = step.store + + d = { + "Zone": variables.get("Zone"), + "WANSGID": variables.get("SGID"), + "VPCID": variables.get("VPCID"), + "VMType": "ComputeSetBBBB", + "SubnetID": variables.get("SubnetID"), + "Region": variables.get("Region"), + "Password": "Zhongshang_2018", + "Name": "host_test", + "Memory": 2048, + "ImageID": "cn-image-centos-65", + "DataDiskSetType": "StorageSetBBBB", + "ChargeType": "Month", + "CPU": 1, + "BootDiskSetType": "StorageSetBBBB", + } + + try: + resp = client.ucloudstack().create_vm_instance(d) + except exc.RetCodeException as e: + resp = e.json() + + variables["VMID"] = utest.value_at_path(resp, "VMID") + return resp + + +@scenario.api( + title="创建虚拟机", + max_retries=3, + retry_interval=1, + startup_delay=0, + fast_fail=False, + validators=lambda variables: [ + ("str_eq", "RetCode", 0), + ("str_eq", "Action", "CreateVMInstanceResponse"), + ], + action="CreateVMInstance", +) +def create_vm_instance_06(step, client): + variables = step.store + + d = { + "Zone": variables.get("Zone"), + "WANSGID": variables.get("SGID"), + "VPCID": variables.get("VPCID"), + "VMType": "ComputeSetBBBB", + "SubnetID": variables.get("SubnetID"), + "Region": variables.get("Region"), + "Password": "Zhongshang_2018", + "Name": "host_test", + "Memory": 2048, + "ImageID": "cn-image-centos-65", + "DataDiskSetType": "StorageSetBBBB", + "ChargeType": "Month", + "CPU": 1, + "BootDiskSetType": "StorageSetBBBB", + } + + try: + resp = client.ucloudstack().create_vm_instance(d) + except exc.RetCodeException as e: + resp = e.json() + + variables["EIPID"] = utest.value_at_path(resp, "EIPID") + variables["DiskID"] = utest.value_at_path(resp, "DiskID") + variables["VMID_1"] = utest.value_at_path(resp, "VMID") + return resp + + +@scenario.api( + title="查询虚拟机", + max_retries=3, + retry_interval=1, + startup_delay=90, + fast_fail=False, + validators=lambda variables: [ + ("str_eq", "RetCode", 0), + ("str_eq", "Action", "DescribeVMInstanceResponse"), + ("str_eq", "Infos.0.State", "Running"), + ], + action="DescribeVMInstance", +) +def describe_vm_instance_07(step, client): + variables = step.store + + d = { + "Zone": variables.get("Zone"), + "VMIDs": [variables.get("VMID"),], + "Region": variables.get("Region"), + } + + try: + resp = client.ucloudstack().describe_vm_instance(d) + except exc.RetCodeException as e: + resp = e.json() + + return resp + + +@scenario.api( + title="查询虚拟机", + max_retries=3, + retry_interval=1, + startup_delay=0, + fast_fail=False, + validators=lambda variables: [ + ("str_eq", "RetCode", 0), + ("str_eq", "Action", "DescribeVMInstanceResponse"), + ("str_eq", "Infos.0.State", "Running"), + ], + action="DescribeVMInstance", +) +def describe_vm_instance_08(step, client): + variables = step.store + + d = { + "Zone": variables.get("Zone"), + "VMIDs": [variables.get("VMID_1"),], + "Region": variables.get("Region"), + } + + try: + resp = client.ucloudstack().describe_vm_instance(d) + except exc.RetCodeException as e: + resp = e.json() + + return resp + + +@scenario.api( + title="创建证书", + max_retries=3, + retry_interval=1, + startup_delay=0, + fast_fail=False, + validators=lambda variables: [ + ("str_eq", "RetCode", 0), + ("str_eq", "Action", "CreateCertificateResponse"), + ], + action="CreateCertificate", +) +def create_certificate_09(step, client): + variables = step.store + + d = { + "Zone": variables.get("Zone"), + "Region": variables.get("Region"), + "PrivateKey": "-----BEGIN RSA PRIVATE KEY-----\nMIIEowIBAAKCAQEA8QbLsBnQmXRFLONEkHL1LfvYZZi04HH5Kv4fX9UFT8S6vzwv\njrBu+oToMujfH+5O8eV4LTyovTuMnRZfFYmIRF0Y2EHFK05t5bu7PVE9gCFJitHS\nPj2YBVOYA8IfH0C6C9uE9pT35A/U54Apw2p36N8W8f3vYbCZH+4SlosfM68bWGAl\nE7feqU6UHlo6+4IJdmwxH02siTTPoucaBgT4kBXcT5ylgozZl4tncLNHdsIYtXrk\nVoCOcCF44uVin1H+hL8xtFM8+ovL7Eixr/KS+wtALlCODKzzQ3rBXgNixGHJUJKR\nxBOPQZKULwqJAlvXfP6+QElK8vu0qySJ3FOhcQIDAQABAoIBAAPvZnfzk/JNcauv\n8jihh9s+V2QhQCLB+Z14FK8N3U5WGe5xXx1nSAiTDu912d69l1BfvLyQVvjv9fXC\nnb7ORglHs9YkDMIOP8EWdZIkt2pWIMtBbbtSah78JGk7TCLIfcEfzmXwPLPehk1Z\nTFVCcb69lbRRvwzLQ1TAIFGQ5+uCEkW02KAl6kx+JnVpsE8/BjqZKG1Ne+sM6dOC\nGRd44hgiNHKUT3Xtbw6jttiUFDLKYMYtb7PpRAkZFM8tgnBV6dWWJ3xTYW9kOjPh\nXnScNARfphUZVibRhA04og5p1q/MUz9Sz9g2DURuSlo/MP3WZMbVRvZiUN1xhz5v\n2WhsddkCgYEA+gWPFo0TbVbZXUrx9J/ptI9NXNx5zjyUrv87MDt1pnmMDgWrsCEI\nRqQR4Lp2G11GA7IudiA/ipcZqgcRIIFvb+gu1kObox3BGGs59x+DqFeAPXt6dFG2\nW10f9k96/tcbdursurqwd3Zv3cqQqRTKgaP4xHFmexlcwGCF5YwewWMCgYEA9sos\n2acNINXwcNRUPnpg82DOrG9Zjr1aiNo9PDJmwGEdC9QMOUWM85dq0M9g388ttiLU\nWr/U4r5yDuqWJPcKtff2BaxSsZpcQ4Id9eddD9L+sxaBGyD23RtOC+IOlkG6WS4g\niUYulQvW69tBHWiwxQu7YMSIE2B3EuySPOQYlBsCgYEAxNwvqB/4lfT2PUDPdj+b\ncnILBf0LY1nL8GZCol2O6z91CW1pm8rGi2iQMxRd/nnYsPxRHO2TWnpS2M+rqp5/\nsettRYQCPdMlwSZcg7oqnhgXf1GEP6Y/IX0Xt4cpXxLcKywarYRlggqdVlMyyA74\nzE7hhzuK5442u7rEctN7O+UCgYAoM78ipafp1XAZsT0YAG+Stg504J7CNe5tpL+c\n8sjyRd+pcZ2cJsxTUjNAWMf7LZDQvtPBBMb1OPjznRtgYi4IfqBBRFUkQXUOOkAP\nMuViEokTO3NErBYK5svL+8NMjuCAbpc2RYyJEyiru0fcNpW1Q7f+h4VzQp+jIY6h\nBLdMSQKBgGauU7OQksZCEY2MVAcD5dShYYvWLxOkj4dVVwISN1M6ImCAHwXZ6Nak\n6YlzCGT+NbRJbB2cPfsrKXtAJVX15I3iDCKAoGkb+9kiHnPj7Q71KVuWQE6BQx7E\nvE88TSsshwtX1s+qU9UWUrMPodK32q5nO3p8N033NvS9wLNfbcdc\n-----END RSA PRIVATE KEY-----", + "Name": "server", + "CertificateType": "ServerCrt", + "Certificate": "-----BEGIN CERTIFICATE-----\nMIIFzTCCBLWgAwIBAgIQQ8IswmAhEIKfNhrKqb0F3DANBgkqhkiG9w0BAQsFADCB\nlzELMAkGA1UEBhMCQ04xJTAjBgNVBAoTHFRydXN0QXNpYSBUZWNobm9sb2dpZXMs\nIEluYy4xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxHTAbBgNVBAsT\nFERvbWFpbiBWYWxpZGF0ZWQgU1NMMSEwHwYDVQQDExhUcnVzdEFzaWEgRFYgU1NM\nIENBIC0gRzUwHhcNMTYxMjA2MDAwMDAwWhcNMTcxMjA2MjM1OTU5WjAgMR4wHAYD\nVQQDDBVtLmVjb2xvZ3ktZW1vYmlsZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IB\nDwAwggEKAoIBAQDxBsuwGdCZdEUs40SQcvUt+9hlmLTgcfkq/h9f1QVPxLq/PC+O\nsG76hOgy6N8f7k7x5XgtPKi9O4ydFl8ViYhEXRjYQcUrTm3lu7s9UT2AIUmK0dI+\nPZgFU5gDwh8fQLoL24T2lPfkD9TngCnDanfo3xbx/e9hsJkf7hKWix8zrxtYYCUT\nt96pTpQeWjr7ggl2bDEfTayJNM+i5xoGBPiQFdxPnKWCjNmXi2dws0d2whi1euRW\ngI5wIXji5WKfUf6EvzG0Uzz6i8vsSLGv8pL7C0AuUI4MrPNDesFeA2LEYclQkpHE\nE49BkpQvCokCW9d8/r5ASUry+7SrJIncU6FxAgMBAAGjggKJMIIChTAgBgNVHREE\nGTAXghVtLmVjb2xvZ3ktZW1vYmlsZS5jb20wCQYDVR0TBAIwADBhBgNVHSAEWjBY\nMFYGBmeBDAECATBMMCMGCCsGAQUFBwIBFhdodHRwczovL2Quc3ltY2IuY29tL2Nw\nczAlBggrBgEFBQcCAjAZDBdodHRwczovL2Quc3ltY2IuY29tL3JwYTAfBgNVHSME\nGDAWgBRtWMd/GufhPy6mjJc1Qrv00zisPzAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0l\nBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMIGbBggrBgEFBQcBAQSBjjCBizA8Bggr\nBgEFBQcwAYYwaHR0cDovL3RydXN0YXNpYTItb2NzcC5kaWdpdGFsY2VydHZhbGlk\nYXRpb24uY29tMEsGCCsGAQUFBzAChj9odHRwOi8vdHJ1c3Rhc2lhMi1haWEuZGln\naXRhbGNlcnR2YWxpZGF0aW9uLmNvbS90cnVzdGFzaWFnNS5jcnQwggEDBgorBgEE\nAdZ5AgQCBIH0BIHxAO8AdQDd6x0reg1PpiCLga2BaHB+Lo6dAdVciI09EcTNtuy+\nzAAAAVjT7zdSAAAEAwBGMEQCIDCzWufc1q7hjmrrCetGyoA8EsEqpRSIhmZXStX5\n8b7zAiA6x5aAaDK+yMyeAgw71yi3tRVrWayHN+W0+4BxC8u5UQB2AO5Lvbd1zmC6\n4UJpH6vhnmajD35fsHLYgwDEe4l6qP3LAAABWNPvN4kAAAQDAEcwRQIgZ/LNgg7n\n7AE4O2yZkrXNcqAOmJ3NU2nT6zcnBxPFTTsCIQCjyPbMfWMZTD3kxgxPQ1COw5zJ\nsM0dfNmSr3MiU7EhqDANBgkqhkiG9w0BAQsFAAOCAQEAeyfgUhg9ZWVCaz0f+BQU\n6fMMfmQ1BDzvVFu+ORoAqyJQogxwIdfjrlz/63YFee5qpUsW/aaz4ma3bb4dpE1K\nGsgYe5N3o0xybYlOj+KB61sufYkzQS3HgDevCwjfUlGEbNl4dpO2xh5s5AANXlnz\ns/X0+AJ33/bm+fWIjAbIjluaEoM6GETHTXi4Tlxy0j3nsXsB9tIIUibAdTtButef\nJJRnikGRN+eHjrsLYe0RUmdKOQz1ik6teHt0MQX0aCe8OlXeyGDd9m8u7+y0nAnH\nTVaNuT7vXMWyyXLVUcV898wkBo3Bo3hUiaw0QR0ttgDrf5ZwqPfqpytRW2K5GMZT\nuw==\n-----END CERTIFICATE-----\n\n\n-----BEGIN CERTIFICATE-----\nMIIFZTCCBE2gAwIBAgIQOhAOfxCeGsWcxf/2QNXkQjANBgkqhkiG9w0BAQsFADCB\nyjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL\nExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp\nU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW\nZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0\naG9yaXR5IC0gRzUwHhcNMTYwODExMDAwMDAwWhcNMjYwODEwMjM1OTU5WjCBlzEL\nMAkGA1UEBhMCQ04xJTAjBgNVBAoTHFRydXN0QXNpYSBUZWNobm9sb2dpZXMsIElu\nYy4xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxHTAbBgNVBAsTFERv\nbWFpbiBWYWxpZGF0ZWQgU1NMMSEwHwYDVQQDExhUcnVzdEFzaWEgRFYgU1NMIENB\nIC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC39aSJZG/97x3a\n6Qmuc9+MubagegRAVUmFYHTYTs8IKB2pM7wXN7W8mekdZaEgUjDFxvRBK/DhTb7U\n8ONLsKKdT86aOhzbz2noCTn9wPWnGwkg+/4YKg/dPQQdV9tMsSu0cwqInWHxSAkm\nAI1hYFC9D7Sf7Hp/5cRcD+dK454YMRzNOGLQnCVI8JEqrz6o9SOvQNTqTcfqt6DC\n0UlXG+MPD1eNPjlzf1Vwaab+VSTgySoC+Ikbq2VsdykeOiGXW/OIiASH7+2LcR05\nPmQ7GEOlM8yzoVojFpM8sHz+WxI05ZOPri5+vX3HhHHjWr5432G0dVmgohnZvlVZ\noy8XrlbpAgMBAAGjggF2MIIBcjASBgNVHRMBAf8ECDAGAQH/AgEAMC8GA1UdHwQo\nMCYwJKAioCCGHmh0dHA6Ly9zLnN5bWNiLmNvbS9wY2EzLWc1LmNybDAOBgNVHQ8B\nAf8EBAMCAQYwLgYIKwYBBQUHAQEEIjAgMB4GCCsGAQUFBzABhhJodHRwOi8vcy5z\neW1jZC5jb20wYQYDVR0gBFowWDBWBgZngQwBAgEwTDAjBggrBgEFBQcCARYXaHR0\ncHM6Ly9kLnN5bWNiLmNvbS9jcHMwJQYIKwYBBQUHAgIwGRoXaHR0cHM6Ly9kLnN5\nbWNiLmNvbS9ycGEwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMCkGA1Ud\nEQQiMCCkHjAcMRowGAYDVQQDExFTeW1hbnRlY1BLSS0yLTYwMTAdBgNVHQ4EFgQU\nbVjHfxrn4T8upoyXNUK79NM4rD8wHwYDVR0jBBgwFoAUf9Nlp8Ld7LvwMAnzQzn6\nAq8zMTMwDQYJKoZIhvcNAQELBQADggEBABUphhBbeG7scE3EveIN0dOjXPgwgQi8\nI2ZAKYm6DawoGz1lEJVdvFmkyMbP973X80b7mKmn0nNbe1kjA4M0O0hHaMM1ZaEv\n7e9vHEAoGyysMO6HzPWYMkyNxcCV7Nos2Uv4RvLDpQHh7P4Kt6fUU13ipcynrtQD\n1lFUM0yoTzwwFsPu3Pk+94hL58ErqwqJQwxoHMgLIQeMVHeNKcWFy1bddSbIbCWU\nZs6cMxhrra062ZCpDCbxyEaFNGAtYQMqNz55Z/14XgSUONZ/cJTns6QKhpcgTOwB\nfnNzRnk+aWreP7osKhXlz4zs+llP7goBDKFOMMtoEXx3YjJCKgpqmBU=\n-----END CERTIFICATE-----", + } + + try: + resp = client.ucloudstack().create_certificate(d) + except exc.RetCodeException as e: + resp = e.json() + + variables["CertificateID_server"] = utest.value_at_path( + resp, "CertificateID" + ) + return resp + + +@scenario.api( + title="创建证书", + max_retries=3, + retry_interval=1, + startup_delay=0, + fast_fail=False, + validators=lambda variables: [ + ("str_eq", "RetCode", 0), + ("str_eq", "Action", "CreateCertificateResponse"), + ], + action="CreateCertificate", +) +def create_certificate_10(step, client): + variables = step.store + + d = { + "Zone": variables.get("Zone"), + "Region": variables.get("Region"), + "Name": "ssl_client", + "CertificateType": "CACrt", + "Certificate": "-----BEGIN CERTIFICATE-----\nMIIFzTCCBLWgAwIBAgIQQ8IswmAhEIKfNhrKqb0F3DANBgkqhkiG9w0BAQsFADCB\nlzELMAkGA1UEBhMCQ04xJTAjBgNVBAoTHFRydXN0QXNpYSBUZWNobm9sb2dpZXMs\nIEluYy4xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxHTAbBgNVBAsT\nFERvbWFpbiBWYWxpZGF0ZWQgU1NMMSEwHwYDVQQDExhUcnVzdEFzaWEgRFYgU1NM\nIENBIC0gRzUwHhcNMTYxMjA2MDAwMDAwWhcNMTcxMjA2MjM1OTU5WjAgMR4wHAYD\nVQQDDBVtLmVjb2xvZ3ktZW1vYmlsZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IB\nDwAwggEKAoIBAQDxBsuwGdCZdEUs40SQcvUt+9hlmLTgcfkq/h9f1QVPxLq/PC+O\nsG76hOgy6N8f7k7x5XgtPKi9O4ydFl8ViYhEXRjYQcUrTm3lu7s9UT2AIUmK0dI+\nPZgFU5gDwh8fQLoL24T2lPfkD9TngCnDanfo3xbx/e9hsJkf7hKWix8zrxtYYCUT\nt96pTpQeWjr7ggl2bDEfTayJNM+i5xoGBPiQFdxPnKWCjNmXi2dws0d2whi1euRW\ngI5wIXji5WKfUf6EvzG0Uzz6i8vsSLGv8pL7C0AuUI4MrPNDesFeA2LEYclQkpHE\nE49BkpQvCokCW9d8/r5ASUry+7SrJIncU6FxAgMBAAGjggKJMIIChTAgBgNVHREE\nGTAXghVtLmVjb2xvZ3ktZW1vYmlsZS5jb20wCQYDVR0TBAIwADBhBgNVHSAEWjBY\nMFYGBmeBDAECATBMMCMGCCsGAQUFBwIBFhdodHRwczovL2Quc3ltY2IuY29tL2Nw\nczAlBggrBgEFBQcCAjAZDBdodHRwczovL2Quc3ltY2IuY29tL3JwYTAfBgNVHSME\nGDAWgBRtWMd/GufhPy6mjJc1Qrv00zisPzAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0l\nBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMIGbBggrBgEFBQcBAQSBjjCBizA8Bggr\nBgEFBQcwAYYwaHR0cDovL3RydXN0YXNpYTItb2NzcC5kaWdpdGFsY2VydHZhbGlk\nYXRpb24uY29tMEsGCCsGAQUFBzAChj9odHRwOi8vdHJ1c3Rhc2lhMi1haWEuZGln\naXRhbGNlcnR2YWxpZGF0aW9uLmNvbS90cnVzdGFzaWFnNS5jcnQwggEDBgorBgEE\nAdZ5AgQCBIH0BIHxAO8AdQDd6x0reg1PpiCLga2BaHB+Lo6dAdVciI09EcTNtuy+\nzAAAAVjT7zdSAAAEAwBGMEQCIDCzWufc1q7hjmrrCetGyoA8EsEqpRSIhmZXStX5\n8b7zAiA6x5aAaDK+yMyeAgw71yi3tRVrWayHN+W0+4BxC8u5UQB2AO5Lvbd1zmC6\n4UJpH6vhnmajD35fsHLYgwDEe4l6qP3LAAABWNPvN4kAAAQDAEcwRQIgZ/LNgg7n\n7AE4O2yZkrXNcqAOmJ3NU2nT6zcnBxPFTTsCIQCjyPbMfWMZTD3kxgxPQ1COw5zJ\nsM0dfNmSr3MiU7EhqDANBgkqhkiG9w0BAQsFAAOCAQEAeyfgUhg9ZWVCaz0f+BQU\n6fMMfmQ1BDzvVFu+ORoAqyJQogxwIdfjrlz/63YFee5qpUsW/aaz4ma3bb4dpE1K\nGsgYe5N3o0xybYlOj+KB61sufYkzQS3HgDevCwjfUlGEbNl4dpO2xh5s5AANXlnz\ns/X0+AJ33/bm+fWIjAbIjluaEoM6GETHTXi4Tlxy0j3nsXsB9tIIUibAdTtButef\nJJRnikGRN+eHjrsLYe0RUmdKOQz1ik6teHt0MQX0aCe8OlXeyGDd9m8u7+y0nAnH\nTVaNuT7vXMWyyXLVUcV898wkBo3Bo3hUiaw0QR0ttgDrf5ZwqPfqpytRW2K5GMZT\nuw==\n-----END CERTIFICATE-----\n\n\n-----BEGIN CERTIFICATE-----\nMIIFZTCCBE2gAwIBAgIQOhAOfxCeGsWcxf/2QNXkQjANBgkqhkiG9w0BAQsFADCB\nyjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL\nExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp\nU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW\nZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0\naG9yaXR5IC0gRzUwHhcNMTYwODExMDAwMDAwWhcNMjYwODEwMjM1OTU5WjCBlzEL\nMAkGA1UEBhMCQ04xJTAjBgNVBAoTHFRydXN0QXNpYSBUZWNobm9sb2dpZXMsIElu\nYy4xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxHTAbBgNVBAsTFERv\nbWFpbiBWYWxpZGF0ZWQgU1NMMSEwHwYDVQQDExhUcnVzdEFzaWEgRFYgU1NMIENB\nIC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC39aSJZG/97x3a\n6Qmuc9+MubagegRAVUmFYHTYTs8IKB2pM7wXN7W8mekdZaEgUjDFxvRBK/DhTb7U\n8ONLsKKdT86aOhzbz2noCTn9wPWnGwkg+/4YKg/dPQQdV9tMsSu0cwqInWHxSAkm\nAI1hYFC9D7Sf7Hp/5cRcD+dK454YMRzNOGLQnCVI8JEqrz6o9SOvQNTqTcfqt6DC\n0UlXG+MPD1eNPjlzf1Vwaab+VSTgySoC+Ikbq2VsdykeOiGXW/OIiASH7+2LcR05\nPmQ7GEOlM8yzoVojFpM8sHz+WxI05ZOPri5+vX3HhHHjWr5432G0dVmgohnZvlVZ\noy8XrlbpAgMBAAGjggF2MIIBcjASBgNVHRMBAf8ECDAGAQH/AgEAMC8GA1UdHwQo\nMCYwJKAioCCGHmh0dHA6Ly9zLnN5bWNiLmNvbS9wY2EzLWc1LmNybDAOBgNVHQ8B\nAf8EBAMCAQYwLgYIKwYBBQUHAQEEIjAgMB4GCCsGAQUFBzABhhJodHRwOi8vcy5z\neW1jZC5jb20wYQYDVR0gBFowWDBWBgZngQwBAgEwTDAjBggrBgEFBQcCARYXaHR0\ncHM6Ly9kLnN5bWNiLmNvbS9jcHMwJQYIKwYBBQUHAgIwGRoXaHR0cHM6Ly9kLnN5\nbWNiLmNvbS9ycGEwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMCkGA1Ud\nEQQiMCCkHjAcMRowGAYDVQQDExFTeW1hbnRlY1BLSS0yLTYwMTAdBgNVHQ4EFgQU\nbVjHfxrn4T8upoyXNUK79NM4rD8wHwYDVR0jBBgwFoAUf9Nlp8Ld7LvwMAnzQzn6\nAq8zMTMwDQYJKoZIhvcNAQELBQADggEBABUphhBbeG7scE3EveIN0dOjXPgwgQi8\nI2ZAKYm6DawoGz1lEJVdvFmkyMbP973X80b7mKmn0nNbe1kjA4M0O0hHaMM1ZaEv\n7e9vHEAoGyysMO6HzPWYMkyNxcCV7Nos2Uv4RvLDpQHh7P4Kt6fUU13ipcynrtQD\n1lFUM0yoTzwwFsPu3Pk+94hL58ErqwqJQwxoHMgLIQeMVHeNKcWFy1bddSbIbCWU\nZs6cMxhrra062ZCpDCbxyEaFNGAtYQMqNz55Z/14XgSUONZ/cJTns6QKhpcgTOwB\nfnNzRnk+aWreP7osKhXlz4zs+llP7goBDKFOMMtoEXx3YjJCKgpqmBU=\n-----END CERTIFICATE-----", + } + + try: + resp = client.ucloudstack().create_certificate(d) + except exc.RetCodeException as e: + resp = e.json() + + variables["CertificateID_client"] = utest.value_at_path( + resp, "CertificateID" + ) + return resp + + +@scenario.api( + title="查询证书", + max_retries=3, + retry_interval=1, + startup_delay=5, + fast_fail=False, + validators=lambda variables: [ + ("str_eq", "RetCode", 0), + ("str_eq", "Action", "DescribeCertificateResponse"), + ], + action="DescribeCertificate", +) +def describe_certificate_11(step, client): + variables = step.store + + d = { + "Zone": variables.get("Zone"), + "Region": variables.get("Region"), + "CertificateType": "ServerCrt", + "CertificateIDs": [variables.get("CertificateID_server"),], + } + + try: + resp = client.ucloudstack().describe_certificate(d) + except exc.RetCodeException as e: + resp = e.json() + + variables["ssl_ser"] = utest.value_at_path(resp, "Infos.0.CertificateID") + return resp + + +@scenario.api( + title="查询证书", + max_retries=3, + retry_interval=1, + startup_delay=5, + fast_fail=False, + validators=lambda variables: [ + ("str_eq", "RetCode", 0), + ("str_eq", "Action", "DescribeCertificateResponse"), + ], + action="DescribeCertificate", +) +def describe_certificate_12(step, client): + variables = step.store + + d = { + "Zone": variables.get("Zone"), + "Region": variables.get("Region"), + "CertificateType": "CACrt", + "CertificateIDs": [variables.get("CertificateID_client"),], + } + + try: + resp = client.ucloudstack().describe_certificate(d) + except exc.RetCodeException as e: + resp = e.json() + + variables["ssl_cl"] = utest.value_at_path(resp, "Infos.0.CertificateID") + return resp + + +@scenario.api( + title="创建负载均衡", + max_retries=3, + retry_interval=1, + startup_delay=0, + fast_fail=False, + validators=lambda variables: [ + ("str_eq", "RetCode", 0), + ("str_eq", "Action", "CreateLBResponse"), + ], + action="CreateLB", +) +def create_lb_13(step, client): + variables = step.store + + d = { + "Zone": variables.get("Zone"), + "VPCID": variables.get("VPCID"), + "VMType": "ComputeSetBBBB", + "SubnetID": variables.get("SubnetID"), + "Region": variables.get("Region"), + "Name": "lb_test1", + "LBType": "LAN", + "ChargeType": "Month", + } + + try: + resp = client.ucloudstack().create_lb(d) + except exc.RetCodeException as e: + resp = e.json() + + variables["LBID"] = utest.value_at_path(resp, "LBID") + return resp + + +@scenario.api( + title="获取负载均衡信息", + max_retries=3, + retry_interval=1, + startup_delay=90, + fast_fail=False, + validators=lambda variables: [ + ("str_eq", "RetCode", 0), + ("str_eq", "Action", "DescribeLBResponse"), + ("str_eq", "Infos.0.LBStatus", "Running"), + ], + action="DescribeLB", +) +def describe_lb_14(step, client): + variables = step.store + + d = { + "Zone": variables.get("Zone"), + "Region": variables.get("Region"), + } + + try: + resp = client.ucloudstack().describe_lb(d) + except exc.RetCodeException as e: + resp = e.json() + + return resp + + +@scenario.api( + title="创建负载均衡VServer", + max_retries=3, + retry_interval=1, + startup_delay=0, + fast_fail=False, + validators=lambda variables: [ + ("str_eq", "RetCode", 0), + ("str_eq", "Action", "CreateVSResponse"), + ], + action="CreateVS", +) +def create_vs_15(step, client): + variables = step.store + + d = { + "Zone": variables.get("Zone"), + "ServerCertificateID": variables.get("ssl_ser"), + "Scheduler": "wrr", + "SSLMode": "duplex", + "Region": variables.get("Region"), + "Protocol": "HTTPS", + "Port": 443, + "LBID": variables.get("LBID"), + "HealthcheckType": "Port", + "CACertificateID": variables.get("ssl_cl"), + } + + try: + resp = client.ucloudstack().create_vs(d) + except exc.RetCodeException as e: + resp = e.json() + + variables["VSID"] = utest.value_at_path(resp, "VSID") + return resp + + +@scenario.api( + title="添加服务节点", + max_retries=3, + retry_interval=1, + startup_delay=10, + fast_fail=False, + validators=lambda variables: [ + ("str_eq", "RetCode", 0), + ("str_eq", "Action", "CreateRSResponse"), + ], + action="CreateRS", +) +def create_rs_16(step, client): + variables = step.store + + d = { + "Zone": variables.get("Zone"), + "Weight": 1, + "VSID": variables.get("VSID"), + "Region": variables.get("Region"), + "Port": 189, + "LBID": variables.get("LBID"), + "BindResourceID": variables.get("VMID"), + } + + try: + resp = client.ucloudstack().create_rs(d) + except exc.RetCodeException as e: + resp = e.json() + + variables["RSID"] = utest.value_at_path(resp, "RSID") + return resp + + +@scenario.api( + title="获取服务节点信息", + max_retries=3, + retry_interval=1, + startup_delay=0, + fast_fail=False, + validators=lambda variables: [ + ("str_eq", "RetCode", 0), + ("str_eq", "Action", "DescribeRSResponse"), + ], + action="DescribeRS", +) +def describe_rs_17(step, client): + variables = step.store + + d = { + "Zone": variables.get("Zone"), + "VSID": variables.get("VSID"), + "Region": variables.get("Region"), + "LBID": variables.get("LBID"), + } + + try: + resp = client.ucloudstack().describe_rs(d) + except exc.RetCodeException as e: + resp = e.json() + + return resp + + +@scenario.api( + title="修改负载均衡VServer", + max_retries=3, + retry_interval=1, + startup_delay=0, + fast_fail=False, + validators=lambda variables: [ + ("str_eq", "RetCode", 0), + ("str_eq", "Action", "UpdateVSResponse"), + ], + action="UpdateVS", +) +def update_vs_18(step, client): + variables = step.store + + d = { + "Zone": variables.get("Zone"), + "VSID": variables.get("VSID"), + "Scheduler": "ip_hash", + "Region": variables.get("Region"), + "LBID": variables.get("LBID"), + } + + try: + resp = client.ucloudstack().update_vs(d) + except exc.RetCodeException as e: + resp = e.json() + + return resp + + +@scenario.api( + title="移除服务节点", + max_retries=3, + retry_interval=1, + startup_delay=30, + fast_fail=False, + validators=lambda variables: [ + ("str_eq", "RetCode", 0), + ("str_eq", "Action", "DeleteRSResponse"), + ], + action="DeleteRS", +) +def delete_rs_19(step, client): + variables = step.store + + d = { + "Zone": variables.get("Zone"), + "VSID": variables.get("VSID"), + "Region": variables.get("Region"), + "RSID": variables.get("RSID"), + "LBID": variables.get("LBID"), + } + + try: + resp = client.ucloudstack().delete_rs(d) + except exc.RetCodeException as e: + resp = e.json() + + return resp + + +@scenario.api( + title="删除VServer", + max_retries=3, + retry_interval=1, + startup_delay=10, + fast_fail=False, + validators=lambda variables: [ + ("str_eq", "RetCode", 0), + ("str_eq", "Action", "DeleteVSResponse"), + ], + action="DeleteVS", +) +def delete_vs_20(step, client): + variables = step.store + + d = { + "Zone": variables.get("Zone"), + "VSID": variables.get("VSID"), + "Region": variables.get("Region"), + "LBID": variables.get("LBID"), + } + + try: + resp = client.ucloudstack().delete_vs(d) + except exc.RetCodeException as e: + resp = e.json() + + return resp + + +@scenario.api( + title="查询操作日志", + max_retries=3, + retry_interval=1, + startup_delay=0, + fast_fail=False, + validators=lambda variables: [ + ("str_eq", "RetCode", 0), + ("str_eq", "Action", "DescribeOPLogsResponse"), + ], + action="DescribeOPLogs", +) +def describe_op_logs_21(step, client): + variables = step.store + + d = { + "Zone": variables.get("Zone"), + "ResourceType": "lb", + "ResourceID": variables.get("LBID"), + "Region": variables.get("Region"), + "Offset": 0, + "Limit": 100, + "IsSuccess": 1, + "EndTime": variables.get("EndTime"), + "BeginTime": variables.get("BeginTime"), + } + + try: + resp = client.ucloudstack().describe_op_logs(d) + except exc.RetCodeException as e: + resp = e.json() + + return resp + + +@scenario.api( + title="删除负载均衡", + max_retries=3, + retry_interval=1, + startup_delay=0, + fast_fail=False, + validators=lambda variables: [ + ("str_eq", "RetCode", 0), + ("str_eq", "Action", "DeleteLBResponse"), + ], + action="DeleteLB", +) +def delete_lb_22(step, client): + variables = step.store + + d = { + "Zone": variables.get("Zone"), + "Region": variables.get("Region"), + "LBID": variables.get("LBID"), + } + + try: + resp = client.ucloudstack().delete_lb(d) + except exc.RetCodeException as e: + resp = e.json() + + return resp + + +@scenario.api( + title="删除证书", + max_retries=3, + retry_interval=1, + startup_delay=0, + fast_fail=False, + validators=lambda variables: [ + ("str_eq", "RetCode", 0), + ("str_eq", "Action", "DeleteCertificateResponse"), + ], + action="DeleteCertificate", +) +def delete_certificate_23(step, client): + variables = step.store + + d = { + "Zone": variables.get("Zone"), + "Region": variables.get("Region"), + "CertificateID": variables.get("CertificateID_server"), + } + + try: + resp = client.ucloudstack().delete_certificate(d) + except exc.RetCodeException as e: + resp = e.json() + + return resp + + +@scenario.api( + title="删除证书", + max_retries=3, + retry_interval=1, + startup_delay=0, + fast_fail=False, + validators=lambda variables: [ + ("str_eq", "RetCode", 0), + ("str_eq", "Action", "DeleteCertificateResponse"), + ], + action="DeleteCertificate", +) +def delete_certificate_24(step, client): + variables = step.store + + d = { + "Zone": variables.get("Zone"), + "Region": variables.get("Region"), + "CertificateID": variables.get("CertificateID_client"), + } + + try: + resp = client.ucloudstack().delete_certificate(d) + except exc.RetCodeException as e: + resp = e.json() + + return resp + + +@scenario.api( + title="断电虚拟机", + max_retries=3, + retry_interval=1, + startup_delay=0, + fast_fail=False, + validators=lambda variables: [ + ("str_eq", "RetCode", 0), + ("str_eq", "Action", "PoweroffVMInstanceResponse"), + ], + action="PoweroffVMInstance", +) +def poweroff_vm_instance_25(step, client): + variables = step.store + + d = { + "Zone": variables.get("Zone"), + "VMID": variables.get("VMID"), + "Region": variables.get("Region"), + } + + try: + resp = client.ucloudstack().poweroff_vm_instance(d) + except exc.RetCodeException as e: + resp = e.json() + + return resp + + +@scenario.api( + title="断电虚拟机", + max_retries=3, + retry_interval=1, + startup_delay=0, + fast_fail=False, + validators=lambda variables: [ + ("str_eq", "RetCode", 0), + ("str_eq", "Action", "PoweroffVMInstanceResponse"), + ], + action="PoweroffVMInstance", +) +def poweroff_vm_instance_26(step, client): + variables = step.store + + d = { + "Zone": variables.get("Zone"), + "VMID": variables.get("VMID_1"), + "Region": variables.get("Region"), + } + + try: + resp = client.ucloudstack().poweroff_vm_instance(d) + except exc.RetCodeException as e: + resp = e.json() + + return resp + + +@scenario.api( + title="删除虚拟机", + max_retries=3, + retry_interval=1, + startup_delay=30, + fast_fail=False, + validators=lambda variables: [ + ("str_eq", "RetCode", 0), + ("str_eq", "Action", "DeleteVMInstanceResponse"), + ], + action="DeleteVMInstance", +) +def delete_vm_instance_27(step, client): + variables = step.store + + d = { + "Zone": variables.get("Zone"), + "VMID": variables.get("VMID"), + "Region": variables.get("Region"), + } + + try: + resp = client.ucloudstack().delete_vm_instance(d) + except exc.RetCodeException as e: + resp = e.json() + + return resp + + +@scenario.api( + title="删除虚拟机", + max_retries=3, + retry_interval=1, + startup_delay=30, + fast_fail=False, + validators=lambda variables: [ + ("str_eq", "RetCode", 0), + ("str_eq", "Action", "DeleteVMInstanceResponse"), + ], + action="DeleteVMInstance", +) +def delete_vm_instance_28(step, client): + variables = step.store + + d = { + "Zone": variables.get("Zone"), + "VMID": variables.get("VMID_1"), + "Region": variables.get("Region"), + } + + try: + resp = client.ucloudstack().delete_vm_instance(d) + except exc.RetCodeException as e: + resp = e.json() + + return resp diff --git a/ucloud/services/ucloudstack/client.py b/ucloud/services/ucloudstack/client.py index b7e36785..f5f3d20a 100644 --- a/ucloud/services/ucloudstack/client.py +++ b/ucloud/services/ucloudstack/client.py @@ -208,6 +208,37 @@ def clone_disk(self, req: typing.Optional[dict] = None, **kwargs) -> dict: resp = self.invoke("CloneDisk", d, **kwargs) return apis.CloneDiskResponseSchema().loads(resp) + def create_certificate( + self, req: typing.Optional[dict] = None, **kwargs + ) -> dict: + """ CreateCertificate - 创建证书 + + **Request** + + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ + - **Certificate** (str) - (Required) 证书内容 + - **CertificateType** (str) - (Required) 证书类型,枚举值["ServerCrt","CACrt"]。分别表示服务器证书和CA证书。只有在双向认证的时候才需要CA证书 + - **Name** (str) - (Required) 证书名称 + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 `_ + - **PrivateKey** (str) - 私钥内容,服务器证书必传,CA证书不用传递 + - **Remark** (str) - 证书描述 + + **Response** + + - **CertificateID** (str) - 证书ID + - **Message** (str) - 错误描述 + + """ + # build request + d = { + "Region": self.config.region, + } + req and d.update(req) + d = apis.CreateCertificateRequestSchema().dumps(d) + + resp = self.invoke("CreateCertificate", d, **kwargs) + return apis.CreateCertificateResponseSchema().loads(resp) + def create_custom_image( self, req: typing.Optional[dict] = None, **kwargs ) -> dict: @@ -579,16 +610,22 @@ def create_vm_instance( - **VPCID** (str) - (Required) VPC ID。 - **WANSGID** (str) - (Required) 外网安全组 ID。输入“有效”状态的安全组的ID。 - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + - **Bandwidth** (str) - 带宽 - **DataDiskSpace** (int) - 数据盘大小,单位 GB。默认值为0。范围:【0,8000】,步长10。 - **GPU** (int) - GPU 卡核心的占用个数。枚举值:【1,2,4】。GPU与CPU、内存大小关系:CPU个数>=4*GPU个数,同时内存与CPU规格匹配. + - **IPVersion** (str) - 外网IP版本,默认IPv4 - **InternalIP** (str) - 指定内网IP。输入有效的指定内网 IP。默认为系统自动分配内网 IP。 + - **InternetIP** (str) - 指定外网IP - **LANSGID** (str) - 内网安全组 ID。输入“有效”状态的安全组的ID。 + - **OperatorName** (str) - 线路 - **Quantity** (int) - 购买时长。默认值1。小时不生效,月范围【1,11】,年范围【1,5】。 **Response** + - **DiskID** (str) - 返回创建数据盘的 ID + - **EIPID** (str) - 返回创建外网IP的 ID - **Message** (str) - 返回信息描述。 - - **VMID** (str) - 返回创建虚拟机的 ID 数组。 + - **VMID** (str) - 返回创建虚拟机的 ID """ # build request @@ -637,14 +674,17 @@ def create_vs(self, req: typing.Optional[dict] = None, **kwargs) -> dict: - **HealthcheckType** (str) - (Required) 健康检查类型,枚举值,Port:端口,Path:域名。TCP和UDP协议只支持Port类型。 - **LBID** (str) - (Required) 负载均衡ID - **Port** (int) - (Required) VServer 的监听端口。端口范围为 1~65535 ,其中 323、9102、9103、9104、9105、60909、60910 被系统占用。 - - **Protocol** (str) - (Required) VServer 的监听协议。枚举值:支持 TCP、UDP、HTTP 三种协议转发。 - - **Scheduler** (str) - (Required) 负载均衡的调度算法。枚举值:wrr:加权轮训;lc:最小连接数;hash:原地址。 + - **Protocol** (str) - (Required) VServer 的监听协议。枚举值:支持 TCP、UDP、HTTP、HTTPS 四种协议转发。 + - **Scheduler** (str) - (Required) 负载均衡的调度算法。枚举值:wrr:加权轮训;least_conn:最小连接数;hash:原地址,四层lb使用。ip_hash:七层lb使用 - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + - **CACertificateID** (str) - CA证书ID,用于验证客户端证书的签名,仅当VServer监听协议为 HTTPS 且 SSLMode 为双向认证时有效。 - **Domain** (str) - HTTP 健康检查时校验请求的 HOST 字段中的域名。当健康检查类型为端口检查时,该值为空。 - **KeepaliveTimeout** (int) - 负载均衡的连接空闲超时时间,单位为秒,默认值为 60s 。 - **Path** (str) - HTTP 健康检查的路径,健康检查类型为 HTTP 检查时为必填项。当健康检查类型为端口检查时,该值为空。 - **PersistenceKey** (str) - 会话保持KEY,会话保持类型为Manual时为必填项,仅当 VServer 协议为 HTTP 时有效。 - **PersistenceType** (str) - 会话保持类型。枚举值:None:关闭;Auto:自动生成;Manual:手动生成 。当协议为 TCP 时,该值不生效,会话保持和选择的调度算法相关;当协议为 UDP 时 Auto 表示开启会话保持 。 + - **SSLMode** (str) - SSL认证模式,HTTPS协议下必传,取值范围["simplex","duplex"]分别表示单向认证和双向认证。 + - **ServerCertificateID** (str) - 服务器证书ID,用于证明服务器的身份,仅当 VServer监听协议为 HTTPS时有效。 **Response** @@ -693,6 +733,32 @@ def create_vs_policy( resp = self.invoke("CreateVSPolicy", d, **kwargs) return apis.CreateVSPolicyResponseSchema().loads(resp) + def delete_certificate( + self, req: typing.Optional[dict] = None, **kwargs + ) -> dict: + """ DeleteCertificate - 删除证书 + + **Request** + + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ + - **CertificateID** (str) - (Required) 证书ID + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 `_ + + **Response** + + - **Message** (str) - 返回信息描述 + + """ + # build request + d = { + "Region": self.config.region, + } + req and d.update(req) + d = apis.DeleteCertificateRequestSchema().dumps(d) + + resp = self.invoke("DeleteCertificate", d, **kwargs) + return apis.DeleteCertificateResponseSchema().loads(resp) + def delete_custom_image( self, req: typing.Optional[dict] = None, **kwargs ) -> dict: @@ -1065,9 +1131,7 @@ def delete_vs_policy( **Response** - - **Action** (str) - 操作名称 - **Message** (str) - 返回信息描述。 - - **RetCode** (int) - 返回码 """ # build request @@ -1080,6 +1144,64 @@ def delete_vs_policy( resp = self.invoke("DeleteVSPolicy", d, **kwargs) return apis.DeleteVSPolicyResponseSchema().loads(resp) + def describe_certificate( + self, req: typing.Optional[dict] = None, **kwargs + ) -> dict: + """ DescribeCertificate - 查询证书 + + **Request** + + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 `_ + - **CertificateIDs** (list) - 证书ID列表 + - **CertificateType** (str) - 证书类型,枚举值["ServerCrt","CACrt"]。分别表示服务器证书和CA证书。 + - **Limit** (int) - 返回数据长度,默认为20,最大100 + - **Offset** (int) - 列表起始位置偏移量,默认为0 + + **Response** + + - **Infos** (list) - 见 **CertificateInfo** 模型定义 + - **Message** (str) - 返回信息描述 + - **TotalCount** (int) - 证书总个数 + + **Response Model** + + **BindVSInfo** + + - **LBID** (str) - LB ID + - **LBName** (str) - LB名称 + - **Port** (int) - VS的端口 + - **Protocol** (str) - VS的协议 + - **VSID** (str) - VS ID + + **CertificateInfo** + + - **CertificateContent** (str) - 证书内容 + - **CertificateID** (str) - 证书ID + - **CertificateType** (str) - 证书类型,枚举值["ServerCrt","CACrt"] + - **CommonName** (str) - 主域名 + - **CreateTime** (int) - 创建时间(平台创建时间) + - **ExpireTime** (int) - 证书内容的过期时间 + - **Fingerprint** (str) - 证书指纹 + - **Name** (str) - 证书名 + - **Privatekey** (str) - 私钥内容 + - **Region** (str) - 地域 + - **Remark** (str) - 证书描述 + - **SubjectAlternativeNames** (list) - 备域名 + - **VSInfos** (list) - 见 **BindVSInfo** 模型定义 + - **Zone** (str) - 可用区 + + """ + # build request + d = { + "Region": self.config.region, + } + req and d.update(req) + d = apis.DescribeCertificateRequestSchema().dumps(d) + + resp = self.invoke("DescribeCertificate", d, **kwargs) + return apis.DescribeCertificateResponseSchema().loads(resp) + def describe_disk( self, req: typing.Optional[dict] = None, **kwargs ) -> dict: @@ -1190,8 +1312,10 @@ def describe_image( **Response** + - **Action** (str) - 操作名称 - **Infos** (list) - 见 **ImageInfo** 模型定义 - **Message** (str) - 返回信息描述。 + - **RetCode** (int) - 返回码 - **TotalCount** (int) - 返回镜像的总个数。 **Response Model** @@ -1200,7 +1324,7 @@ def describe_image( - **CreateTime** (int) - 创建时间。时间戳。 - **ImageID** (str) - 镜像ID - - **ImageStatus** (str) - 镜像状态。枚举类型:Making(创建中),Available(可用),Unavailable(不可用),Terminating(销毁中),Used(被使用中),Deleting(删除中),Deleted(已删除) + - **ImageStatus** (str) - 镜像状态。枚举类型:Making(创建中),Available(可用),Unavailable(不可用),Terminating(销毁中),Used(被使用中),Deleting(删除中),Deleted(已删除), Uploading(导入中) - **ImageType** (str) - 镜像类型。枚举类型:Base(基础镜像),Custom(自制镜像)。 - **Name** (str) - 镜像名称 - **OSDistribution** (str) - 镜像系统发行版本。例如:Centos, Ubuntu, Windows等 @@ -1413,6 +1537,57 @@ def describe_natgw_rule( resp = self.invoke("DescribeNATGWRule", d, **kwargs) return apis.DescribeNATGWRuleResponseSchema().loads(resp) + def describe_op_logs( + self, req: typing.Optional[dict] = None, **kwargs + ) -> dict: + """ DescribeOPLogs - 查询操作日志 + + **Request** + + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ + - **BeginTime** (int) - (Required) 开始时间 + - **EndTime** (int) - (Required) 结束时间 + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 `_ + - **IsSuccess** (str) - 是否操作成功 + - **Limit** (int) - + - **Offset** (int) - + - **ResourceID** (str) - 资源ID + - **ResourceType** (str) - 资源类型 + + **Response** + + - **Infos** (list) - 见 **OPLogInfo** 模型定义 + - **Message** (str) - 错误信息 + - **TotalCount** (int) - 总数 + + **Response Model** + + **OPLogInfo** + + - **CreateTime** (int) - 创建时间 + - **IsSuccess** (str) - 是否操作成功, Yes, No + - **OPLogsID** (str) - 日志ID + - **OPName** (str) - API + - **OPTime** (int) - 操作时间 + - **OpMessage** (str) - 错误信息 + - **Region** (str) - + - **ResourceID** (str) - 资源ID + - **ResourceType** (int) - 资源类型 + - **RetCode** (int) - 状态码 + - **UserEmail** (str) - 账号邮箱 + - **Zone** (str) - + + """ + # build request + d = { + "Region": self.config.region, + } + req and d.update(req) + d = apis.DescribeOPLogsRequestSchema().dumps(d) + + resp = self.invoke("DescribeOPLogs", d, **kwargs) + return apis.DescribeOPLogsResponseSchema().loads(resp) + def describe_physical_ip( self, req: typing.Optional[dict] = None, **kwargs ) -> dict: @@ -1756,6 +1931,7 @@ def describe_vm_instance( **VMIPInfo** - **IP** (str) - IP 值 + - **IPVersion** (str) - IP版本,支持值:IPv4\IPv6 - **InterfaceID** (str) - 网卡 ID - **IsElastic** (str) - 是否是弹性网卡。枚举值:Y,表示是;N,表示否; - **MAC** (str) - MAC 地址值 @@ -1792,7 +1968,7 @@ def describe_vm_instance( - **Region** (str) - Region - **RegionAlias** (str) - Region 别名 - **Remark** (str) - 备注 - - **State** (str) - 虚拟机状态。枚举值:Initializing,表示初始化;Starting,表示启动中;Restarting,表示重启中;Running,表示运行;Stopping,表示关机中;Stopped,表示关机;Deleted,表示已删除;Resizing,表示修改配置中;Terminating,表示销毁中;Terminated,表示已销毁;Migrating,表示迁移中;WaitReinstall,表示重装中;Reinstalling,表示重装中;Poweroffing,表示断电中;ChangeSGing,表示修改防火墙中; + - **State** (str) - 虚拟机状态。枚举值:Initializing,表示初始化;Starting,表示启动中;Restarting,表示重启中;Running,表示运行;Stopping,表示关机中;Stopped,表示关机;Deleted,表示已删除;Resizing,表示修改配置中;Terminating,表示销毁中;Terminated,表示已销毁;Migrating,表示迁移中;WaitReinstall,表示等待重装系统;Reinstalling,表示重装中;Poweroffing,表示断电中;ChangeSGing,表示修改防火墙中; - **SubnetID** (str) - 子网 ID - **SubnetName** (str) - 子网 名称 - **VMID** (str) - 虚拟机 ID @@ -1927,6 +2103,18 @@ def describe_vs(self, req: typing.Optional[dict] = None, **kwargs) -> dict: **Response Model** + **VSPolicyInfo** + + - **CreateTime** (int) - 创建时间,时间戳 + - **Domain** (str) - 内容转发规则关联的请求域名,值可为空,即代表仅匹配路径。 + - **LBID** (str) - 负载均衡ID + - **Path** (str) - 内容转发规则关联的请求访问路径,如 "/" 。 + - **PolicyID** (str) - 内容转发规则ID + - **PolicyStatus** (str) - 状态,枚举值,Available:有效,Deleted:已删除 + - **RSInfos** (list) - 见 **RSInfo** 模型定义 + - **UpdateTime** (int) - 更新时间,时间戳 + - **VSID** (str) - VServerID + **RSInfo** - **BindResourceID** (str) - 绑定的资源ID @@ -1942,18 +2130,6 @@ def describe_vs(self, req: typing.Optional[dict] = None, **kwargs) -> dict: - **VSID** (str) - 服务节点所属的 VServer ID - **Weight** (int) - 服务节点的权重 - **VSPolicyInfo** - - - **CreateTime** (int) - 创建时间,时间戳 - - **Domain** (str) - 内容转发规则关联的请求域名,值可为空,即代表仅匹配路径。 - - **LBID** (str) - 负载均衡ID - - **Path** (str) - 内容转发规则关联的请求访问路径,如 "/" 。 - - **PolicyID** (str) - 内容转发规则ID - - **PolicyStatus** (str) - 状态,枚举值,Available:有效,Deleted:已删除 - - **RSInfos** (list) - 见 **RSInfo** 模型定义 - - **UpdateTime** (int) - 更新时间,时间戳 - - **VSID** (str) - VServerID - **VSInfo** - **AlarmTemplateID** (str) - 告警模板ID @@ -2794,9 +2970,7 @@ def update_rs(self, req: typing.Optional[dict] = None, **kwargs) -> dict: **Response** - - **Action** (str) - 操作名称 - **Message** (str) - 返回信息描述。 - - **RetCode** (int) - 返回码 """ # build request @@ -2853,15 +3027,13 @@ def update_vs(self, req: typing.Optional[dict] = None, **kwargs) -> dict: - **PersistenceKey** (str) - 会话保持KEY,会话保持类型为Manual时为必填项,仅当 VServer 协议为 HTTP 时有效。 - **PersistenceType** (str) - 会话保持类型。枚举值:None:关闭;Auto:自动生成;Manual:手动生成 。当协议为 TCP 时,该值不生效,会话保持和选择的调度算法相关;当协议为 UDP 时 Auto 表示开启会话保持 。 - **Port** (int) - VServer 监听端口 - - **SSLMode** (str) - HTTPS SSL 认证解析模式。玫举值:UNIDIRECTIONAL:单向认证,MUTUAL:双向认证 。仅当VServer监听协议为 HTTPS 时有效。 + - **SSLMode** (str) - SSL认证模式,HTTPS协议下必传,取值范围["simplex","duplex"]分别表示单向认证和双向认证。 - **Scheduler** (str) - 负载均衡的调度算法。枚举值:wrr:加权轮训;least_conn:最小连接数;hash:原地址,四层lb使用。ip_hash:七层lb使用 - **ServerCertificateID** (str) - 服务器证书ID,用于证明服务器的身份,仅当 VServer监听协议为 HTTPS 时有效。 **Response** - - **Action** (str) - 操作名称 - **Message** (str) - 返回信息描述。 - - **RetCode** (int) - 返回码 """ # build request diff --git a/ucloud/services/ucloudstack/schemas/apis.py b/ucloud/services/ucloudstack/schemas/apis.py index 0d5436df..eabd8202 100644 --- a/ucloud/services/ucloudstack/schemas/apis.py +++ b/ucloud/services/ucloudstack/schemas/apis.py @@ -216,6 +216,38 @@ class CloneDiskResponseSchema(schema.ResponseSchema): } +""" +API: CreateCertificate + +创建证书 +""" + + +class CreateCertificateRequestSchema(schema.RequestSchema): + """ CreateCertificate - 创建证书 + """ + + fields = { + "Certificate": fields.Str(required=True, dump_to="Certificate"), + "CertificateType": fields.Str(required=True, dump_to="CertificateType"), + "Name": fields.Str(required=True, dump_to="Name"), + "PrivateKey": fields.Str(required=False, dump_to="PrivateKey"), + "Region": fields.Str(required=True, dump_to="Region"), + "Remark": fields.Str(required=False, dump_to="Remark"), + "Zone": fields.Str(required=True, dump_to="Zone"), + } + + +class CreateCertificateResponseSchema(schema.ResponseSchema): + """ CreateCertificate - 创建证书 + """ + + fields = { + "CertificateID": fields.Str(required=True, load_from="CertificateID"), + "Message": fields.Str(required=True, load_from="Message"), + } + + """ API: CreateCustomImage @@ -604,17 +636,21 @@ class CreateVMInstanceRequestSchema(schema.RequestSchema): """ fields = { + "Bandwidth": fields.Str(required=False, dump_to="Bandwidth"), "BootDiskSetType": fields.Str(required=True, dump_to="BootDiskSetType"), "CPU": fields.Int(required=True, dump_to="CPU"), "ChargeType": fields.Str(required=True, dump_to="ChargeType"), "DataDiskSetType": fields.Str(required=True, dump_to="DataDiskSetType"), "DataDiskSpace": fields.Int(required=False, dump_to="DataDiskSpace"), "GPU": fields.Int(required=False, dump_to="GPU"), + "IPVersion": fields.Str(required=False, dump_to="IPVersion"), "ImageID": fields.Str(required=True, dump_to="ImageID"), "InternalIP": fields.Str(required=False, dump_to="InternalIP"), + "InternetIP": fields.Str(required=False, dump_to="InternetIP"), "LANSGID": fields.Str(required=False, dump_to="LANSGID"), "Memory": fields.Int(required=True, dump_to="Memory"), "Name": fields.Str(required=True, dump_to="Name"), + "OperatorName": fields.Str(required=False, dump_to="OperatorName"), "Password": fields.Str(required=True, dump_to="Password"), "Quantity": fields.Int(required=False, dump_to="Quantity"), "Region": fields.Str(required=True, dump_to="Region"), @@ -631,6 +667,8 @@ class CreateVMInstanceResponseSchema(schema.ResponseSchema): """ fields = { + "DiskID": fields.Str(required=False, load_from="DiskID"), + "EIPID": fields.Str(required=False, load_from="EIPID"), "Message": fields.Str(required=False, load_from="Message"), "VMID": fields.Str(required=False, load_from="VMID"), } @@ -678,6 +716,9 @@ class CreateVSRequestSchema(schema.RequestSchema): """ fields = { + "CACertificateID": fields.Str( + required=False, dump_to="CACertificateID" + ), "Domain": fields.Str(required=False, dump_to="Domain"), "HealthcheckType": fields.Str(required=True, dump_to="HealthcheckType"), "KeepaliveTimeout": fields.Int( @@ -692,7 +733,11 @@ class CreateVSRequestSchema(schema.RequestSchema): "Port": fields.Int(required=True, dump_to="Port"), "Protocol": fields.Str(required=True, dump_to="Protocol"), "Region": fields.Str(required=True, dump_to="Region"), + "SSLMode": fields.Str(required=False, dump_to="SSLMode"), "Scheduler": fields.Str(required=True, dump_to="Scheduler"), + "ServerCertificateID": fields.Str( + required=False, dump_to="ServerCertificateID" + ), "Zone": fields.Str(required=True, dump_to="Zone"), } @@ -739,6 +784,33 @@ class CreateVSPolicyResponseSchema(schema.ResponseSchema): } +""" +API: DeleteCertificate + +删除证书 +""" + + +class DeleteCertificateRequestSchema(schema.RequestSchema): + """ DeleteCertificate - 删除证书 + """ + + fields = { + "CertificateID": fields.Str(required=True, dump_to="CertificateID"), + "Region": fields.Str(required=True, dump_to="Region"), + "Zone": fields.Str(required=True, dump_to="Zone"), + } + + +class DeleteCertificateResponseSchema(schema.ResponseSchema): + """ DeleteCertificate - 删除证书 + """ + + fields = { + "Message": fields.Str(required=True, load_from="Message"), + } + + """ API: DeleteCustomImage @@ -1147,9 +1219,43 @@ class DeleteVSPolicyResponseSchema(schema.ResponseSchema): """ fields = { - "Action": fields.Str(required=True, load_from="Action"), "Message": fields.Str(required=False, load_from="Message"), - "RetCode": fields.Int(required=True, load_from="RetCode"), + } + + +""" +API: DescribeCertificate + +查询证书 +""" + + +class DescribeCertificateRequestSchema(schema.RequestSchema): + """ DescribeCertificate - 查询证书 + """ + + fields = { + "CertificateIDs": fields.List(fields.Str()), + "CertificateType": fields.Str( + required=False, dump_to="CertificateType" + ), + "Limit": fields.Int(required=False, dump_to="Limit"), + "Offset": fields.Int(required=False, dump_to="Offset"), + "Region": fields.Str(required=True, dump_to="Region"), + "Zone": fields.Str(required=True, dump_to="Zone"), + } + + +class DescribeCertificateResponseSchema(schema.ResponseSchema): + """ DescribeCertificate - 查询证书 + """ + + fields = { + "Infos": fields.List( + models.CertificateInfoSchema(), required=False, load_from="Infos" + ), + "Message": fields.Str(required=True, load_from="Message"), + "TotalCount": fields.Int(required=True, load_from="TotalCount"), } @@ -1245,10 +1351,12 @@ class DescribeImageResponseSchema(schema.ResponseSchema): """ fields = { + "Action": fields.Str(required=True, load_from="Action"), "Infos": fields.List( models.ImageInfoSchema(), required=True, load_from="Infos" ), "Message": fields.Str(required=True, load_from="Message"), + "RetCode": fields.Int(required=True, load_from="RetCode"), "TotalCount": fields.Int(required=True, load_from="TotalCount"), } @@ -1392,6 +1500,43 @@ class DescribeNATGWRuleResponseSchema(schema.ResponseSchema): } +""" +API: DescribeOPLogs + +查询操作日志 +""" + + +class DescribeOPLogsRequestSchema(schema.RequestSchema): + """ DescribeOPLogs - 查询操作日志 + """ + + fields = { + "BeginTime": fields.Int(required=True, dump_to="BeginTime"), + "EndTime": fields.Int(required=True, dump_to="EndTime"), + "IsSuccess": fields.Str(required=False, dump_to="IsSuccess"), + "Limit": fields.Int(required=False, dump_to="Limit"), + "Offset": fields.Int(required=False, dump_to="Offset"), + "Region": fields.Str(required=True, dump_to="Region"), + "ResourceID": fields.Str(required=False, dump_to="ResourceID"), + "ResourceType": fields.Str(required=False, dump_to="ResourceType"), + "Zone": fields.Str(required=True, dump_to="Zone"), + } + + +class DescribeOPLogsResponseSchema(schema.ResponseSchema): + """ DescribeOPLogs - 查询操作日志 + """ + + fields = { + "Infos": fields.List( + models.OPLogInfoSchema(), required=True, load_from="Infos" + ), + "Message": fields.Str(required=True, load_from="Message"), + "TotalCount": fields.Int(required=True, load_from="TotalCount"), + } + + """ API: DescribePhysicalIP @@ -2576,9 +2721,7 @@ class UpdateRSResponseSchema(schema.ResponseSchema): """ fields = { - "Action": fields.Str(required=True, load_from="Action"), "Message": fields.Str(required=False, load_from="Message"), - "RetCode": fields.Int(required=True, load_from="RetCode"), } @@ -2655,9 +2798,7 @@ class UpdateVSResponseSchema(schema.ResponseSchema): """ fields = { - "Action": fields.Str(required=True, load_from="Action"), "Message": fields.Str(required=False, load_from="Message"), - "RetCode": fields.Int(required=True, load_from="RetCode"), } diff --git a/ucloud/services/ucloudstack/schemas/models.py b/ucloud/services/ucloudstack/schemas/models.py index dd456028..38c9bd30 100644 --- a/ucloud/services/ucloudstack/schemas/models.py +++ b/ucloud/services/ucloudstack/schemas/models.py @@ -3,6 +3,45 @@ from ucloud.core.typesystem import schema, fields +class BindVSInfoSchema(schema.ResponseSchema): + """ BindVSInfo - 证书绑定的vs信息 + """ + + fields = { + "LBID": fields.Str(required=False, load_from="LBID"), + "LBName": fields.Str(required=False, load_from="LBName"), + "Port": fields.Int(required=False, load_from="Port"), + "Protocol": fields.Str(required=False, load_from="Protocol"), + "VSID": fields.Str(required=False, load_from="VSID"), + } + + +class CertificateInfoSchema(schema.ResponseSchema): + """ CertificateInfo - 证书信息 + """ + + fields = { + "CertificateContent": fields.Str( + required=False, load_from="CertificateContent" + ), + "CertificateID": fields.Str(required=False, load_from="CertificateID"), + "CertificateType": fields.Str( + required=False, load_from="CertificateType" + ), + "CommonName": fields.Str(required=False, load_from="CommonName"), + "CreateTime": fields.Int(required=False, load_from="CreateTime"), + "ExpireTime": fields.Int(required=False, load_from="ExpireTime"), + "Fingerprint": fields.Str(required=False, load_from="Fingerprint"), + "Name": fields.Str(required=False, load_from="Name"), + "Privatekey": fields.Str(required=False, load_from="Privatekey"), + "Region": fields.Str(required=False, load_from="Region"), + "Remark": fields.Str(required=False, load_from="Remark"), + "SubjectAlternativeNames": fields.List(fields.Str()), + "VSInfos": fields.List(BindVSInfoSchema()), + "Zone": fields.Str(required=False, load_from="Zone"), + } + + class DiskInfoSchema(schema.ResponseSchema): """ DiskInfo - 磁盘信息 """ @@ -160,6 +199,26 @@ class NATGWRuleInfoSchema(schema.ResponseSchema): } +class OPLogInfoSchema(schema.ResponseSchema): + """ OPLogInfo - 操作日志 + """ + + fields = { + "CreateTime": fields.Int(required=False, load_from="CreateTime"), + "IsSuccess": fields.Str(required=False, load_from="IsSuccess"), + "OPLogsID": fields.Str(required=False, load_from="OPLogsID"), + "OPName": fields.Str(required=False, load_from="OPName"), + "OPTime": fields.Int(required=False, load_from="OPTime"), + "OpMessage": fields.Str(required=False, load_from="OpMessage"), + "Region": fields.Str(required=False, load_from="Region"), + "ResourceID": fields.Str(required=False, load_from="ResourceID"), + "ResourceType": fields.Int(required=False, load_from="ResourceType"), + "RetCode": fields.Int(required=False, load_from="RetCode"), + "UserEmail": fields.Str(required=False, load_from="UserEmail"), + "Zone": fields.Str(required=False, load_from="Zone"), + } + + class PhysicalIPInfoSchema(schema.ResponseSchema): """ PhysicalIPInfo - 物理IP信息 """ @@ -308,12 +367,27 @@ class UserInfoSchema(schema.ResponseSchema): } +class VMDiskInfoSchema(schema.ResponseSchema): + """ VMDiskInfo - UCloudStack虚拟机磁盘信息 + """ + + fields = { + "DiskID": fields.Str(required=False, load_from="DiskID"), + "Drive": fields.Str(required=False, load_from="Drive"), + "IsElastic": fields.Str(required=False, load_from="IsElastic"), + "Name": fields.Str(required=False, load_from="Name"), + "Size": fields.Int(required=False, load_from="Size"), + "Type": fields.Str(required=False, load_from="Type"), + } + + class VMIPInfoSchema(schema.ResponseSchema): """ VMIPInfo - UCloudStack虚拟机IP信息 """ fields = { "IP": fields.Str(required=False, load_from="IP"), + "IPVersion": fields.Str(required=False, load_from="IPVersion"), "InterfaceID": fields.Str(required=False, load_from="InterfaceID"), "IsElastic": fields.Str(required=False, load_from="IsElastic"), "MAC": fields.Str(required=False, load_from="MAC"), @@ -327,20 +401,6 @@ class VMIPInfoSchema(schema.ResponseSchema): } -class VMDiskInfoSchema(schema.ResponseSchema): - """ VMDiskInfo - UCloudStack虚拟机磁盘信息 - """ - - fields = { - "DiskID": fields.Str(required=False, load_from="DiskID"), - "Drive": fields.Str(required=False, load_from="Drive"), - "IsElastic": fields.Str(required=False, load_from="IsElastic"), - "Name": fields.Str(required=False, load_from="Name"), - "Size": fields.Int(required=False, load_from="Size"), - "Type": fields.Str(required=False, load_from="Type"), - } - - class VMInstanceInfoSchema(schema.ResponseSchema): """ VMInstanceInfo - UCloudStack虚拟机信息 """