How to create a CVM through API
Editor to share with you how to create a cloud server through API, I believe most people do not know much about it, so share this article for your reference, I hope you can learn a lot after reading this article, let's learn about it!
Nine steps to create a CVM through API (for example, create a CVM with a specified image) step 1: determine the availability zone where the CVM is to be created.
1. Query the availability zone.
(1) Information related to API
URI format: GET / v2.1 / {project_id} / os-availability-zone
(2) request example
GET: https://{endpoint}/v2.1/74610f3a5ad941998e91f076297ecf27/os-availability-zone
(3) response example
{"availabilityZoneInfo": [{"hosts": null, "zoneState": {"available": true}, "zoneName": "zone_01"}, {"hosts": null, "zoneState": {"available": true}, "zoneName": "zone_01"}]}
2. Select the availability zone according to the actual needs, and record the zoneName of the availability zone.
Step 2: determine the specification of the CVM to be created.
1. Query the specification information of CVM.
(1) Information related to API
URI format: GET/v2.1/ {project_id} / flavors/detail {? minDisk,minRam,is_public,sort_key,sort_dir}
Among them, "?" The latter field is the optional query retrieval parameter when querying the specification.
(2) request example
GET: https://{endpoint}/v2.1/74610f3a5ad941998e91f076297ecf27/flavors/detail
(3) response example
{"flavors": [{"name": "c1.2xlarge", "links": [{"href": "https://xxx/v2.1/74610f3a5ad941998e91f076297ecf27/flavors/c1.2xlarge"," rel ":" self "}, {" href ":" https://xxx/74610f3a5ad941998e91f076297ecf27/flavors/c1.2xlarge", " "rel": "bookmark"}], "ram": 8192, "OS-FLV-DISABLED:disabled": false, "vcpus": 8, "swap": "", "os-flavor-access:is_public": true, "rxtx_factor": 1, "OS-FLV-EXT-DATA:ephemeral": 0, "disk": 0 "id": "c1.2xlarge"}]}
2. Select the specification according to the actual need, and record the ID of the specification.
Step 3: determine the image to be used by the CVM to be created.
1. Query the image.
(1) Information related to API
URI format: GET / v2.1 / {project_id} / images/detail
(2) request example
GET: https://{endpoint}/v2.1/74610f3a5ad941998e91f076297ecf27/images/detail
(3) response example
{"images": [{"OS-EXT-IMG-SIZE:size": 0, "metadata": {"_ os_type": "Linux", "hw_vif_multiqueue_enabled": "true", "_ _ imagetype": "gold", "_ _ quick_start": "true", "virtual_env_type": "FusionCompute" "_ _ support_xen": "true", "_ _ support_kvm": "true", "_ _ image_source_type": "uds", "_ _ platform": "EulerOS", "_ _ os_version": "EulerOS 2.264bit", "_ _ os_bit": "64", "_ _ isregistered": "false"} "created": "2018-05-14T06:13:50Z", "minRam": 0, "name": "DBS-MySQL-Image_2.1.3.3", "progress": 100,100, "links": [{"rel": "self", "href": "https://None/v2.1/74610f3a5ad941998e91f076297ecf27/images/11e8f727-d439-4ed1-b3b8-33f46c0379c4"}" {"rel": "bookmark", "href": "https://None/74610f3a5ad941998e91f076297ecf27/images/11e8f727-d439-4ed1-b3b8-33f46c0379c4"}, {" rel ":" alternate "," href ":" https://None/images/11e8f727-d439-4ed1-b3b8-33f46c0379c4", " "type": "application/vnd.openstack.image"}], "id": "11e8f727-d439-4ed1-b3b8-33f46c0379c4", "updated": "2018-05-14T06:13:52Z", "minDisk": 40, "status": "ACTIVE"}]}
2. Select the image as needed, and record the image ID.
Step 4: determine the network information of the CVM.
1. Query the network.
(1) Information related to API
URI format: GET / v2.1 / {project_id} / os-networks
(2) request example
GET: https://{endpoint}/v2.1/74610f3a5ad941998e91f076297ecf27/os-networks
(3) response example
{"networks": [{"id": "07a9557d-4256-48ae-847c-415a9c8f7ff6", "label": "b_tt3_td1b", "broadcast": null, "cidr": null, "dns1": null, "dns2": null, "gateway": null, "netmask": null, "cidr_v6": null, "gateway_v6": null "netmask_v6": null}]}
2. Select the network according to the need, and record the network ID.
Step 5: set the login mode of the key pair.
If you need to set it to password login, please jump directly to step 7.
1. Create a key pair.
(1) Information related to API
URI format: POST / v2.1 / {project_id} / os-keypairs
(2) request example
POST: https://{endpoint}/v2.1/74610f3a5ad941998e91f076297ecf27/os-keypairs
Body:
{"keypair": {"type": "ssh", "name": "demo1", "user_id": "fake"}}
(3) response example
{"keypair": {"public_key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCrR5Gcwlh6ih7JOvzIUuQxS5qzWWPMYHeDXkDKSQ9W5pumOV05SiO3WCswnaQ5xMdOl31mNiHtwlwq9dJi7X6jJBB2shTD+00G5WuwkBbFU4CLvt1B44u0NUiaTJ35NAvW2/4XvpXm9OwiQ3B5ge6ZY7Esi38Unh+pkbhPkYxNBCK8yoOlojQhWs75abdxZBi811/8RwLcNiFiocA2RGxtRjBdpEScj+1TU+OcfZdQnr0AFbO11z7yxfIygwwzVTgUuJNbMbKHStQqRbklfMlHY4RBPQgb7RN/YaXKTQSXT84k+D9xlDNo7Wj4fwOJTOz/s/PvbIOqjRHt9D6Y4IKd Generated-by-Nova\ n" "private_key": "- BEGIN RSA PRIVATE KEY-\ nMIIEogIBAAKCAQEAq0eRnMJYeYoeyTr8yFLkMUuas1ljzGB3g15AykkPVuabpjld\ nOUojt1grMJ2kOcTHTpd9ZjYh7cJcKvXSYu1+oyQQdrIUw/tNBuVrsJAWxVOAi77d\ nQeOLtDVImkyd+TQL1tv+F76V5vTsIkNweYHumWOxLIt/FJ4fqZG4T5GMTQQivMqD\ npaI0IVrO+Wm3cWQYvNdf/EcC3DYhYqHANkRsbUYwXaREnI/tU1PjnH2XUJ69ABWz\ ntdc+8sXyMoMMM1U4FLiTWzGyh0rUKkW5JXzJR2OEQT0IG+0Tf2Glyk0El0/OJPg/\ ncZQzaO1o+H8DiUzs/7Pz72yDqo0R7fQ+mOCCnQIDAQABAoIBAA6/c9dGmK2mae4z\ nyQ5KrOFdvC1TNhej+sZx+CwyzEJUSvSuHcvQCXFBAz8FY92hhvPKcX66jINXZ+4/\ nCmWAQ5YyhcRiow0Y91HvsS0bywoknX3q6kxBFodmyyCWFkgd5iMTADb1Lx0a27Y7\ njlS4Dl5gyiGmxUN2Ng24wWEAjE8ZNuI0lrtr5IZKp+s5IAi/rb5AG/mL7EzicE8c\ nmGP+QAa+nzwhAwNhFwVID230xen/ZcoL1d77hxeARNqJUxoR25gwJd6Ebg2y9pDW\ nVu6cbbzgdGUCfQYlMEoAamAkCswOsDpVDBXwQnt2A537n6Wq2bgYIKusHr9thtxP\ n/5ubQLUCgYEA4zYuBG2vtLHnvce26P8o2j1xcJS9K0ozkah9JFl3hqFN0sAqLlz7\ n/Fm1jA4kzHJS3d0UqP3AMDxY3HkIqCn4Be7lqeAAe2AfqkOZpt9MDNv4VwKe9sPb\ nViW1qjL3FxziLC/YWTRNSlpwRjqJJGhA+UQt8rOia1k/zXmrEs7bXLcCgYEAwPsu\ nK3j5QoAiziYVMYf5iCzWwAM9Ljpf9gw23lefTdIzhhfFtJplVRSyxRGU0UZ84GMI\ nTd5zmcIF/1KUfhqmeiQzz6NIPEYEReahjpQ/sOH/Gk5Rwr3QwYPrwAu5x+kk/SRi\ nKPkqw7APTR0sMQBcUq+ZYwGYLGPMdd1zUdLfb0sCgYBkuz11iydtxb3G/obSD2WO\ nM9VaIycmzRPFzNwGRH/gOR0mhTluKp0wyJjbSd34oeqpH/2r2ivddrOysxoqa8jg\ n4IQDZyLvj7MaKjQxrieqP89+y9Or9TMFo1xB46x2G8EN8/xHuA9YGnZSPFtWv72m\ nhRqV0hv82amWsA0vHnRUSwKBgDsKHXvrTMbNkNhkykMXCH5iyWiBFSyZa1ZJMlgf\ nknsqfdzeVPwF6E55QKAN2uuTlwzG/3ljPxahR1hvmUJjQN9JSBiUKbtW6GPCRVbr\ nf/jLi1Iu99COZdluVKeybqn8Z/aSNP24DR9FM8kxzZ1IMPaTBmhFypp6BclhcLBt \ nxTG1AoGAfcrkVbV1SOy7fECUtMpUECcw0yU4GWj3sR2RbII63C500RVYQlUpUaRR\ naANbASHTVR4myOKtGSxEUhAQHlxFDwsDL7W3gzAqTFbEDp1xAAUyT/nkOAhQjEm4\ nORFdDETeXLQG1KMUj+8AdnhfYp3JTdft6rmPpZEBUFiCAUMAvb0=\ n-END RSA PRIVATE KEY-\ n " "user_id": "f79791beca3c48159ac2553fff22e166", "name": "demo1", "fingerprint": "57:a7:a2:ed:5f:aa:e7:54:62:2e:bb:e7:92:22:cb:40"}}
2. Import the key.
(1) Information related to API
URI format: POST / v2.1 / {project_id} / os-keypairs
(2) request example
POST: https://{endpoint}/v2.1/74610f3a5ad941998e91f076297ecf27/os-keypairs
Body:
{"keypair": {"public_key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDY8wMTdBYiJgi62o6eShoOlSKx3CZ3cE6PHisDblfK3Y0Bg7EHV7iV9c74pqsrIhK0xuGUuO1NxDQWbkwLTPN4F9Iy5CIYohLuMIpbln6LDtfRPpdhEh4lxL8MM61gyfpKzeKkwkEpSFj27Rgh7zCyJgBpkA2A0HTP737UlitahL4faCWDIS+Vj6mbcfkWiMhuMCzTZgSKAZ4PfoG4B5HJhR52C6A4XLiQFT9heh9gnIsIG+uTogTKUbcJKuN7M6AraJpul6eHhV9YI4433sDmuiBF/njvreVPWwAHlAkgT9I8q1T/cfEFiwzXpdGbkK5O8NC7K+qNbbdKihlahONt Generated-by-Nova\ n", "type": "ssh", "name": "demo2", "user_id": "fake"}}
(3) response example
{"keypair": {"public_key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDY8wMTdBYiJgi62o6eShoOlSKx3CZ3cE6PHisDblfK3Y0Bg7EHV7iV9c74pqsrIhK0xuGUuO1NxDQWbkwLTPN4F9Iy5CIYohLuMIpbln6LDtfRPpdhEh4lxL8MM61gyfpKzeKkwkEpSFj27Rgh7zCyJgBpkA2A0HTP737UlitahL4faCWDIS+Vj6mbcfkWiMhuMCzTZgSKAZ4PfoG4B5HJhR52C6A4XLiQFT9heh9gnIsIG+uTogTKUbcJKuN7M6AraJpul6eHhV9YI4433sDmuiBF/njvreVPWwAHlAkgT9I8q1T/cfEFiwzXpdGbkK5O8NC7K+qNbbdKihlahONt Generated-by-Nova\ n", "user_id": "f79791beca3c48159ac2553fff22e166", "name": "demo2", "fingerprint": "dd:44:45:49:d9:f6:4f:c0:24:2d:81:aa:c4:4b:83:c2"}}
2. Record the name information in the response message body. As in this example, "demo2".
Step 6: create a key pair login authentication CVM.
(1) Information related to API
URI format: POST / v2.1 / {project_id} / servers
Description:
In this example, image is specified to create a CVM, so:
In ● block_device_mapping_v2.1, "source_type" needs to be set to "image", "uuid" to the selected mirror ID, "destination_type" to "volume", and "boot_index" to "0".
The ● "volume_size" should be greater than or equal to the minimum value specified in the mirror metadata.
(2) request example
POST: https://{endpoint}/v2.1/74610f3a5ad941998e91f076297ecf27/servers
Body:
{server: {"flavorRef": "c1.large", "name": "zttestvm1", "block_device_mapping_v2.1": [{"source_type": "image", "destination_type": "volume", "volume_type": "SATA", "volume_size": "40" "delete_on_termination": "true", "uuid": "11e8f727-d439-4ed1-b3b8-33f46c0379c4", "boot_index": "0"}], "networks": [{"uuid": "fb68519f-a7c0-476e-98d4-2e4cf6de6def"}], "key_name": "demo2" "availability_zone": "az_test_01"}}
(3) response example
{"server": {"security_groups": [{"name": "default"}], "OS-DCF:diskConfig": "MANUAL", "links": [{"rel": "self", "href": "https://None/v2.1/74610f3a5ad941998e91f076297ecf27/servers/6d311127-bce1-48db-bf0f-cac9f8f7f077"}" {"rel": "bookmark", "href": "https://None/74610f3a5ad941998e91f076297ecf27/servers/6d311127-bce1-48db-bf0f-cac9f8f7f077"}]," id ":" 6d311127-bce1-48db-bf0f-cac9f8f7f077 "," adminPass ":" WcC4QoVZPXpV "} step 7: set the password login method.
(1) when creating a CVM using a non-cloud-init image, both Windows and Linux systems use the "adminPass" parameter to implement password injection.
(2) when using cloud-init image to create a CVM:
For Linux systems, only "user_data" can be used for password injection. The length of the "user_data" string is less than 65535 and must be base64 encrypted.
For Windows systems, password injection can only be done through metadata "admin_pass".
Step 8: create an elastic CVM that logs in to authentication with a password.
Description:
This example specifies image to create an elastic CVM, so:
(1) in block_device_mapping_v2.1, "source_type" needs to be set to "image", "uuid" to the selected mirror ID, "destination_type" to "volume", and "boot_index" to "0".
(2) "volume_size" should be greater than or equal to the minimum value specified in the mirror metadata.
1. Create an elastic CVM with non-cloud-init image and password login authentication.
(1) Information related to API
URI format: POST / v2.1 / {project_id} / servers
(2) request example
POST: https://{endpoint}/v2.1/74610f3a5ad941998e91f076297ecf27/servers
Body:
{"server": {"flavorRef": "c1.large", "name": "zttestvm1", "adminPass": "NOVAGLANCEI@123", "block_device_mapping_v2.1": [{"source_type": "image", "destination_type": "volume", "volume_type": "SATA" "volume_size": "40", "delete_on_termination": "true", "uuid": "11e8f727-d439-4ed1-b3b8-33f46c0379c4", "boot_index": "0"}], "networks": [{"uuid": "fb68519f-a7c0-476e-98d4-2e4cf6de6def"}] "availability_zone": "az_test_01"}}
(3) response example
{"server": {"security_groups": [{"name": "default"}], "OS-DCF:diskConfig": "MANUAL", "links": [{"rel": "self", "href": "https://None/v2.1/74610f3a5ad941998e91f076297ecf27/servers/73991cff-37c6-491a-9a8a-377397729fce"}" {"rel": "bookmark", "href": "https://None/74610f3a5ad941998e91f076297ecf27/servers/73991cff-37c6-491a-9a8a-377397729fce"}]," id ":" 73991cff-37c6-491a-9a8a-377397729fce "," adminPass ":" NOVAGLANCEI@123 "}}
2. Create an cloud-init image (take Linux as an example) and log in to the authenticated elastic CVM with password.
(1) Information related to API
URI format: POST / v2.1 / {project_id} / servers
(2) request example
POST: https://{endpoint}/v2.1/74610f3a5ad941998e91f076297ecf27/servers
Body:
{"server": {"flavorRef": "c1.large", "name": "zttestvm2", "user_data": "IyEvYmluL2Jhc2gKZWNobyAncm9vdDokNiRuaERlcUIkajBkelVMbkFrbWo4bWlFREFzT0VONkVPdGg1RmdqWnQybUVWZVRocC5OVDJXelZVdzFuNzhnL3dNdDE0dVpSQ1V3LzhHS3VGdEViQ0lPQS5vN1BZQzEnIHwgY2hwYXNzd2QgLWU7", "block_device_mapping_v2.1": [{"source_type": "image", "destination_type": "volume", "volume_type": "SATA" "volume_size": "40", "delete_on_termination": "true", "uuid": "11e8f727-d439-4ed1-b3b8-33f46c0379c4", "boot_index": "0"}], "networks": [{"uuid": "fb68519f-a7c0-476e-98d4-2e4cf6de6def"}] "availability_zone": "az_test_01"}}
(3) response example
{"server": {"security_groups": [{"name": "default"}], "OS-DCF:diskConfig": "MANUAL", "links": [{"rel": "self", "href": "https://None/v2.1/74610f3a5ad941998e91f076297ecf27/servers/7c11f362-cc96-4306-85b6-b432a639ca5e"}" {"rel": "bookmark", "href": "https://None/74610f3a5ad941998e91f076297ecf27/servers/7c11f362-cc96-4306-85b6-b432a639ca5e"}]," id ":" 7c11f362-cc96-4306-85b6-b432a639ca5e "," admin_pass ":" J3xMSivHCuq5 "} step 9: confirm that the CVM has been created successfully.
(1) Information related to API
URI format: GET / v2.1 / {project_id} / servers/ {server_id}
(2) request example
GET: https://{endpoint}/v2.1/74610f3a5ad941998e91f076297ecf27/servers/0c71c0da-8852-4c56-a1d1-3a9b9bcb6da6
Where:
0c71c0da-8852-4c56-a1d1-3a9b9bcb6da6 is the UUID of the CVM created.
(3) response example
{"server": {"tenant_id": "74610f3a5ad941998e91f076297ecf27", "addresses": {"2a6f4aa6-d93e-45f5-a8cb-b030dbf8cd68": [{"OS-EXT-IPS-MAC:mac_addr": "fa:16:3e:88:01:1b", "OS-EXT-IPS:type": "fixed", "addr": "192.168.2.192" "version": 4}]}, "metadata": {}, "OS-EXT-STS:task_state": null, "OS-DCF:diskConfig": "MANUAL", "OS-EXT-AZ:availability_zone": "az_test_01", "links": [{"rel": "self" "href": "https://None/v2.1/74610f3a5ad941998e91f076297ecf27/servers/0c71c0da-8852-4c56-a1d1-3a9b9bcb6da6"}, {" rel ":" bookmark "," href ":" https://None/74610f3a5ad941998e91f076297ecf27/servers/0c71c0da-8852-4c56-a1d1-3a9b9bcb6da6"}], "OS-EXT-STS:power_state": 1, "id": "0c71c0da-8852-4c56-a1d1-3a9b9bcb6da6" "os-extended-volumes:volumes_attached": [{"id": "b551445a-e749-4d53-932a-638a455cb6c3"}], "OS-EXT-SRV-ATTR:host": "pod1_test_01", "image": {"links": [{"rel": "bookmark" "href": "https://None/74610f3a5ad941998e91f076297ecf27/images/11e8f727-d439-4ed1-b3b8-33f46c0379c4"}]," id ":" 11e8f727-d439-4ed1-b3b8-33f46c0379c4 "}," OS-SRV-USG:terminated_at ": null," accessIPv4 ":"," accessIPv6 ":"," created ":" 2018-05-25T01:47:11Z "," hostId ":" b2792bef989888d2df1f51bff81de5ac58a4117f4e9ec3059c1a0410 " "OS-EXT-SRV-ATTR:hypervisor_hostname": "nova001@36", "key_name": null, "flavor": {"links": [{"rel": "bookmark", "href": "https://None/74610f3a5ad941998e91f076297ecf27/flavors/c1.large"}]," id ":" c1.large "} "security_groups": [{"name": "default"}], "config_drive": "," OS-EXT-STS:vm_state ":" active "," OS-EXT-SRV-ATTR:instance_name ":" instance-001883cd "," user_id ":" f79791beca3c48159ac2553fff22e166 "," name ":" zttestvm1 "," progress ": 0 "OS-SRV-USG:launched_at": "2018-05-25T01:47:55.755922", "updated": "2018-05-25T01:47:55Z", "status": "ACTIVE"}} these are all the contents of the article "how to create a CVM through API" Thank you for reading! I believe we all have a certain understanding, hope to share the content to help you, if you want to learn more knowledge, welcome to follow the industry information channel!