{"id":48663,"date":"2023-12-12T08:08:01","date_gmt":"2023-02-07T20:16:17","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8terraform%e5%9c%a8openstack%e4%b8%8a%e9%83%a8%e7%bd%b2%e8%b5%84%e6%ba%90%e3%80%82\/"},"modified":"2024-01-15T12:40:44","modified_gmt":"2024-01-15T04:40:44","slug":"%e4%bd%bf%e7%94%a8terraform%e5%9c%a8openstack%e4%b8%8a%e9%83%a8%e7%bd%b2%e8%b5%84%e6%ba%90%e3%80%82","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8terraform%e5%9c%a8openstack%e4%b8%8a%e9%83%a8%e7%bd%b2%e8%b5%84%e6%ba%90%e3%80%82\/","title":{"rendered":"\u4f7f\u7528Terraform\u5728OpenStack\u4e0a\u90e8\u7f72\u8d44\u6e90"},"content":{"rendered":"<h1>\u9996\u5148<\/h1>\n<p>\u6211\u4e4b\u524d\u5728OpenStack\u4e0a\u90e8\u7f72\u5b9e\u4f8b\u7b49\u65f6\u4f7f\u7528\u4e86Heat\uff0c\u4f46\u51b3\u5b9a\u8bd5\u8bd5\u7528Terraform\u3002<\/p>\n<h1>\u73af\u5883<\/h1>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">Ubuntu 20.04.3<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">Terraform 1.0.6<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">OpenStack Queens<\/ul>\n<h1>\u4efb\u52a1\u65e5\u5fd7<\/h1>\n<h2>\u5b89\u88c5Terraform<\/h2>\n<p>\u8bf7\u6309\u7167\u4ee5\u4e0bUbuntu\/Debian\u7684\u6b65\u9aa4\u8fdb\u884c\u5b89\u88c5\u3002<br \/>\nhttps:\/\/learn.hashicorp.com\/tutorials\/terraform\/install-cli?in=terraform\/aws-get-started#install-terraform<\/p>\n<p>\u4f3c\u4e4e\u662fAWS\u76f8\u5173\u7684\u6b65\u9aa4\uff0c\u4f46\u6211\u770b\u4e0d\u51fa\u7279\u522b\u9488\u5bf9AWS\u7684\u6b65\u9aa4\uff0c\u6240\u4ee5\u53ef\u4ee5\u653e\u5fc3\u7ee7\u7eed\u8fdb\u884c\u3002<\/p>\n<p>\u7531\u4e8e\u73af\u5883\u9650\u5236\uff0c\u65e0\u6cd5\u8bbf\u95eeHashiCorp\u7684\u8f6f\u4ef6\u5e93\uff0c\u56e0\u6b64\u53ea\u80fd\u901a\u8fc7\u624b\u52a8\u5b89\u88c5\u6765\u8fdb\u884c\u5b89\u88c5\u3002<\/p>\n<p>\u8bf7\u4ece\u4ee5\u4e0b\u9875\u9762\u4e0b\u8f7dzip\u6587\u4ef6\u5e76\u89e3\u538b\u4ee5\u83b7\u53d6\u4e8c\u8fdb\u5236\u6587\u4ef6\uff1a<br \/>\nhttps:\/\/www.terraform.io\/downloads.html<\/p>\n<pre class=\"post-pre\"><code>$ wget https:\/\/releases.hashicorp.com\/terraform\/1.0.6\/terraform_1.0.6_linux_amd64.zip\r\n--2021-09-07 01:21:20--  https:\/\/releases.hashicorp.com\/terraform\/1.0.6\/terraform_1.0.6_linux_amd64.zip\r\nConnecting to 172.16.70.1:63128... connected.\r\nProxy request sent, awaiting response... 200 OK\r\nLength: 32677516 (31M) [application\/zip]\r\nSaving to: \u2018terraform_1.0.6_linux_amd64.zip\u2019\r\n\r\nterraform_1.0.6_linux_amd64.zip         100%[============================================================================&gt;]  31.16M  8.44MB\/s    in 3.9s    \r\n\r\n2021-09-07 01:21:24 (7.89 MB\/s) - \u2018terraform_1.0.6_linux_amd64.zip\u2019 saved [32677516\/32677516]\r\n$ unzip terraform_1.0.6_linux_amd64.zip \r\nArchive:  terraform_1.0.6_linux_amd64.zip\r\n  inflating: terraform\r\n$ ll terraform\r\n-rwxr-xr-x 1 ubuntu ubuntu 79350901 Sep  3 14:36 terraform*\r\n<\/code><\/pre>\n<p>\u5c06\u4e8c\u8fdb\u5236\u6587\u4ef6\u79fb\u52a8\u5230\u53ef\u901a\u8fc7\u8def\u5f84\u7684\u76ee\u5f55\u4e2d\u3002<\/p>\n<pre class=\"post-pre\"><code>$ sudo mv terraform \/usr\/local\/bin\/\r\n$ ll \/usr\/local\/bin\/terraform \r\n-rwxr-xr-x 1 ubuntu ubuntu 79350901 Sep  3 14:36 \/usr\/local\/bin\/terraform*\r\n<\/code><\/pre>\n<p>\u786e\u8ba4\u4e00\u4e0b\u80fd\u5426\u4f7f\u7528\u547d\u4ee4\u884c<\/p>\n<pre class=\"post-pre\"><code>$ terraform -v\r\nTerraform v1.0.6\r\non linux_amd64\r\n<\/code><\/pre>\n<p>\u547d\u4ee4\u8865\u5168\u8bbe\u7f6e<\/p>\n<pre class=\"post-pre\"><code>$ terraform -install-autocomplete\r\n$ cat ~\/.bashrc\r\n\r\n... snip ...\r\n\r\ncomplete -C \/usr\/local\/bin\/terraform terraform\r\n$ source ~\/.bashrc\r\n<\/code><\/pre>\n<h2>\u4f7f\u7528Terraform\u5728OpenStack\u4e0a\u90e8\u7f72\u8d44\u6e90\u3002<\/h2>\n<p>\u5f53\u4f7f\u7528terraform\u548copenstack\u5173\u952e\u5b57\u8fdb\u884c\u641c\u7d22\u65f6\uff0c\u4ee5\u4e0b\u9875\u9762\u6392\u5728\u9996\u4f4d\uff1a<br \/>\nhttps:\/\/registry.terraform.io\/providers\/terraform-provider-openstack\/openstack\/latest\/docs<\/p>\n<p>\u63d0\u4f9b\u8005\u7684\u5b9a\u4e49\u5982\u4e0b\u3002<\/p>\n<blockquote><p>Terraform \u4f9d\u8d56\u4e8e\u88ab\u79f0\u4e3a\u201c\u63d0\u4f9b\u8005\u201d\u7684\u63d2\u4ef6\u4e0e\u4e91\u670d\u52a1\u63d0\u4f9b\u5546\u3001SaaS\u63d0\u4f9b\u5546\u548c\u5176\u4ed6API\u8fdb\u884c\u4ea4\u4e92\u3002<\/p>\n<p>Terraform\u914d\u7f6e\u5fc5\u987b\u58f0\u660e\u6240\u9700\u7684\u63d0\u4f9b\u8005\uff0c\u4ee5\u4fbfTerraform\u53ef\u4ee5\u5b89\u88c5\u548c\u4f7f\u7528\u5b83\u4eec\u3002\u540c\u65f6\uff0c\u4e00\u4e9b\u63d0\u4f9b\u8005\u5728\u4f7f\u7528\u4e4b\u524d\u9700\u8981\u914d\u7f6e\uff08\u5982\u7ec8\u7aefURL\u6216\u4e91\u533a\u57df\uff09\u3002<\/p><\/blockquote>\n<p>\u8fd9\u662f\u4e00\u4e2a\u7528\u4e8e\u4e0e\u57fa\u7840\u8bbe\u65bd\uff08\u5982OpenStack\u6216AWS\u4e91\uff09\u8fdb\u884c\u534f\u4f5c\u7684\u6a21\u5757\uff0c\u5b83\u662fTerraform\u63d2\u4ef6\u7684\u4e00\u90e8\u5206\u3002<\/p>\n<p>\u9996\u5148\uff0c\u6309\u7167\u4f8b\u5b50\u521b\u5efa\u4e00\u4e2a\u5b9a\u4e49\u6587\u4ef6\uff08tf\u6587\u4ef6\uff09\u3002<\/p>\n<pre class=\"post-pre\"><code>$ mkdir openstack\r\n$ cd openstack\/\r\n$ vim main.tf\r\n<\/code><\/pre>\n<p>\u4ee5\u4e0b\u662f\u5df2\u521b\u5efa\u7684\u5b9a\u4e49\u6587\u4ef6\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"c1\"># Define required providers<\/span>\r\n<span class=\"k\">terraform<\/span> <span class=\"p\">{<\/span>\r\n<span class=\"nx\">required_version<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"&gt;= 0.14.0\"<\/span>\r\n  <span class=\"nx\">required_providers<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"nx\">openstack<\/span> <span class=\"p\">=<\/span> <span class=\"p\">{<\/span>\r\n      <span class=\"nx\">source<\/span>  <span class=\"p\">=<\/span> <span class=\"s2\">\"terraform-provider-openstack\/openstack\"<\/span>\r\n      <span class=\"nx\">version<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"~&gt; 1.35.0\"<\/span>\r\n    <span class=\"p\">}<\/span>\r\n  <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<span class=\"c1\"># Configure the OpenStack Provider<\/span>\r\n<span class=\"k\">provider<\/span> <span class=\"s2\">\"openstack\"<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nx\">user_name<\/span>   <span class=\"p\">=<\/span> <span class=\"s2\">\"user01\"<\/span>\r\n  <span class=\"nx\">tenant_name<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"prj01\"<\/span>\r\n  <span class=\"nx\">password<\/span>    <span class=\"p\">=<\/span> <span class=\"s2\">\"p@<\/span><span class=\"err\">$$<\/span><span class=\"s2\">w0rd\"<\/span>\r\n  <span class=\"nx\">auth_url<\/span>    <span class=\"p\">=<\/span> <span class=\"s2\">\"https:\/\/172.16.71.80:5000\/\"<\/span>\r\n  <span class=\"nx\">region<\/span>      <span class=\"p\">=<\/span> <span class=\"s2\">\"RegionOne\"<\/span>\r\n  <span class=\"nx\">cacert_file<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"\/etc\/ssl\/certs\/openstack-ca-certificates.crt\"<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<span class=\"c1\"># Create a web server<\/span>\r\n<span class=\"k\">resource<\/span> <span class=\"s2\">\"openstack_compute_instance_v2\"<\/span> <span class=\"s2\">\"test-server\"<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nx\">name<\/span>      <span class=\"p\">=<\/span> <span class=\"s2\">\"my_instance\"<\/span>\r\n  <span class=\"nx\">image_id<\/span>  <span class=\"p\">=<\/span> <span class=\"s2\">\"4128a986-1f77-4201-9bbf-90de4037dee1\"<\/span>\r\n  <span class=\"nx\">flavor_id<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"2ce31fef-68b6-4953-81bc-b1c79d22f1b0 \"<\/span>\r\n  <span class=\"nx\">key_pair<\/span>  <span class=\"p\">=<\/span> <span class=\"s2\">\"user01key\"<\/span>\r\n\r\n  <span class=\"nx\">network<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"nx\">uuid<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"b1bec6fb-a3af-4280-befc-decb376ac5ef\"<\/span>\r\n  <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<h3>\u521d\u59cb\u5316terraform<\/h3>\n<p>\u9996\u5148\uff0c\u521d\u59cb\u5316\u5de5\u4f5c\u7a7a\u95f4\u3002<\/p>\n<pre class=\"post-pre\"><code>$ terraform init\r\n\r\nInitializing the backend...\r\n\r\nInitializing provider plugins...\r\n- Finding terraform-provider-openstack\/openstack versions matching \"~&gt; 1.35.0\"...\r\n- Installing terraform-provider-openstack\/openstack v1.35.0...\r\n- Installed terraform-provider-openstack\/openstack v1.35.0 (self-signed, key ID 4F80527A391BEFD2)\r\n\r\nPartner and community providers are signed by their developers.\r\nIf you'd like to know more about provider signing, you can read about it here:\r\nhttps:\/\/www.terraform.io\/docs\/cli\/plugins\/signing.html\r\n\r\nTerraform has created a lock file .terraform.lock.hcl to record the provider\r\nselections it made above. Include this file in your version control repository\r\nso that Terraform can guarantee to make the same selections by default when\r\nyou run \"terraform init\" in the future.\r\n\r\nTerraform has been successfully initialized!\r\n\r\nYou may now begin working with Terraform. Try running \"terraform plan\" to see\r\nany changes that are required for your infrastructure. All Terraform commands\r\nshould now work.\r\n\r\nIf you ever set or change modules or backend configuration for Terraform,\r\nrerun this command to reinitialize your working directory. If you forget, other\r\ncommands will detect it and remind you to do so if necessary.\r\n<\/code><\/pre>\n<p>\u5728\u6267\u884cterraform init\u547d\u4ee4\u65f6\uff0c\u4f1a\u8fdb\u884c\u63d2\u4ef6\u7684\u4e0b\u8f7d\u7b49\u64cd\u4f5c\u3002<\/p>\n<h3>terraform\u8ba1\u5212<\/h3>\n<p>\u786e\u8ba4 Terraform \u6267\u884c\u540e\u4f1a\u6709\u54ea\u4e9b\u66f4\u6539\u5185\u5bb9\u3002<\/p>\n<pre class=\"post-pre\"><code>$ terraform plan\r\n\r\nTerraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:\r\n  + create\r\n\r\nTerraform will perform the following actions:\r\n\r\n  # openstack_compute_instance_v2.test-server will be created\r\n  + resource \"openstack_compute_instance_v2\" \"test-server\" {\r\n      + access_ip_v4        = (known after apply)\r\n      + access_ip_v6        = (known after apply)\r\n      + all_metadata        = (known after apply)\r\n      + all_tags            = (known after apply)\r\n      + availability_zone   = (known after apply)\r\n      + flavor_id           = \"2ce31fef-68b6-4953-81bc-b1c79d22f1b0 \"\r\n      + flavor_name         = (known after apply)\r\n      + force_delete        = false\r\n      + id                  = (known after apply)\r\n      + image_id            = \"4128a986-1f77-4201-9bbf-90de4037dee1\"\r\n      + image_name          = (known after apply)\r\n      + key_pair            = \"user01key\"\r\n      + name                = \"my_instance\"\r\n      + power_state         = \"active\"\r\n      + region              = (known after apply)\r\n      + security_groups     = (known after apply)\r\n      + stop_before_destroy = false\r\n\r\n      + network {\r\n          + access_network = false\r\n          + fixed_ip_v4    = (known after apply)\r\n          + fixed_ip_v6    = (known after apply)\r\n          + floating_ip    = (known after apply)\r\n          + mac            = (known after apply)\r\n          + name           = (known after apply)\r\n          + port           = (known after apply)\r\n          + uuid           = \"b1bec6fb-a3af-4280-befc-decb376ac5ef\"\r\n        }\r\n    }\r\n\r\nPlan: 1 to add, 0 to change, 0 to destroy.\r\n\r\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\nNote: You didn't use the -out option to save this plan, so Terraform can't guarantee to take exactly these actions if you run \"terraform apply\" now.\r\n<\/code><\/pre>\n<h3>\u4f7f\u7528terraform\u6267\u884c<\/h3>\n<p>\u5982\u679c\u5728tf\u6587\u4ef6\u4e2d\u5b9a\u4e49\u7684\u8d44\u6e90\u88ab\u521b\u5efa\uff0c\u5219\u6267\u884c\u3002\u5728terraform plan\u786e\u8ba4\u65e0\u95ee\u9898\u540e\u6267\u884c\u3002<\/p>\n<pre class=\"post-pre\"><code>ubuntu@terraform:~\/terraform$ terraform apply \r\n\r\nTerraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:\r\n  + create\r\n\r\nTerraform will perform the following actions:\r\n\r\n  # openstack_compute_instance_v2.test-server will be created\r\n  + resource \"openstack_compute_instance_v2\" \"test-server\" {\r\n      + access_ip_v4        = (known after apply)\r\n      + access_ip_v6        = (known after apply)\r\n      + all_metadata        = (known after apply)\r\n      + all_tags            = (known after apply)\r\n      + availability_zone   = (known after apply)\r\n      + flavor_id           = \"2ce31fef-68b6-4953-81bc-b1c79d22f1b0 \"\r\n      + flavor_name         = (known after apply)\r\n      + force_delete        = false\r\n      + id                  = (known after apply)\r\n      + image_id            = \"4128a986-1f77-4201-9bbf-90de4037dee1\"\r\n      + image_name          = (known after apply)\r\n      + key_pair            = \"user01key\"\r\n      + name                = \"my_instance\"\r\n      + power_state         = \"active\"\r\n      + region              = (known after apply)\r\n      + security_groups     = (known after apply)\r\n      + stop_before_destroy = false\r\n\r\n      + network {\r\n          + access_network = false\r\n          + fixed_ip_v4    = (known after apply)\r\n          + fixed_ip_v6    = (known after apply)\r\n          + floating_ip    = (known after apply)\r\n          + mac            = (known after apply)\r\n          + name           = (known after apply)\r\n          + port           = (known after apply)\r\n          + uuid           = \"b1bec6fb-a3af-4280-befc-decb376ac5ef\"\r\n        }\r\n    }\r\n\r\nPlan: 1 to add, 0 to change, 0 to destroy.\r\n\r\nDo you want to perform these actions?\r\n  Terraform will perform the actions described above.\r\n  Only 'yes' will be accepted to approve.\r\n\r\n  Enter a value: yes\r\n\r\nopenstack_compute_instance_v2.test-server: Creating...\r\nopenstack_compute_instance_v2.test-server: Still creating... [10s elapsed]\r\nopenstack_compute_instance_v2.test-server: Still creating... [20s elapsed]\r\nopenstack_compute_instance_v2.test-server: Creation complete after 25s [id=8d1715e9-e276-4480-bf03-7b0776ea7bfa]\r\n\r\nApply complete! Resources: 1 added, 0 changed, 0 destroyed.\r\n<\/code><\/pre>\n<p>\u786e\u8ba4\u8d44\u6e90\u5df2\u7ecf\u521b\u5efa\u3002<\/p>\n<pre class=\"post-pre\"><code>$ openstack server show 8d1715e9-e276-4480-bf03-7b0776ea7bfa\r\n+-------------------------------------+----------------------------------------------------------+\r\n| Field                               | Value                                                    |\r\n+-------------------------------------+----------------------------------------------------------+\r\n| OS-DCF:diskConfig                   | MANUAL                                                   |\r\n| OS-EXT-AZ:availability_zone         | nova                                                     |\r\n| OS-EXT-SRV-ATTR:host                | cmp001                                                   |\r\n| OS-EXT-SRV-ATTR:hypervisor_hostname | cmp001.mcp-smmr18.fujitsu.local                          |\r\n| OS-EXT-SRV-ATTR:instance_name       | instance-0000334a                                        |\r\n| OS-EXT-STS:power_state              | Running                                                  |\r\n| OS-EXT-STS:task_state               | None                                                     |\r\n| OS-EXT-STS:vm_state                 | active                                                   |\r\n| OS-SRV-USG:launched_at              | 2021-09-21T02:58:41.000000                               |\r\n| OS-SRV-USG:terminated_at            | None                                                     |\r\n| accessIPv4                          |                                                          |\r\n| accessIPv6                          |                                                          |\r\n| addresses                           | maintenance-net=10.0.0.16                                |\r\n| config_drive                        | True                                                     |\r\n| created                             | 2021-09-21T02:58:22Z                                     |\r\n| flavor                              | m1.medium (2ce31fef-68b6-4953-81bc-b1c79d22f1b0)         |\r\n| hostId                              | ee90af4ebb1eb84986019854bb9618db381c570845f36a65ecc891cd |\r\n| id                                  | 8d1715e9-e276-4480-bf03-7b0776ea7bfa                     |\r\n| image                               | ubuntu_20.04.3 (4128a986-1f77-4201-9bbf-90de4037dee1)    |\r\n| key_name                            | user01key                                                |\r\n| name                                | my_instance                                              |\r\n| progress                            | 0                                                        |\r\n| project_id                          | cfeb198dbfa2414e8b32534ac0511d52                         |\r\n| properties                          |                                                          |\r\n| security_groups                     | name='default'                                           |\r\n| status                              | ACTIVE                                                   |\r\n| updated                             | 2021-09-21T02:58:41Z                                     |\r\n| user_id                             | a430f45e0f6c4290863b869593cdae6e                         |\r\n| volumes_attached                    |                                                          |\r\n+-------------------------------------+----------------------------------------------------------+\r\n<\/code><\/pre>\n<p>\u6211\u80fd\u591f\u786e\u8ba4\u5df2\u521b\u5efa\u4e86\u5728tf\u6587\u4ef6\u4e2d\u5b9a\u4e49\u7684\u5b9e\u4f8b\u3002<\/p>\n<h2>\u5220\u9664\u8d44\u6e90<\/h2>\n<h3>terraform\u8ba1\u5212 -\u9500\u6bc1<\/h3>\n<p>\u786e\u8ba4\u8981\u5220\u9664\u7684\u8d44\u6e90<\/p>\n<pre class=\"post-pre\"><code>$ terraform plan -destroy\r\nopenstack_compute_instance_v2.test-server: Refreshing state... [id=8d1715e9-e276-4480-bf03-7b0776ea7bfa]\r\n\r\nNote: Objects have changed outside of Terraform\r\n\r\nTerraform detected the following changes made outside of Terraform since the last \"terraform apply\":\r\n\r\n  # openstack_compute_instance_v2.test-server has been changed\r\n  ~ resource \"openstack_compute_instance_v2\" \"test-server\" {\r\n        id                  = \"8d1715e9-e276-4480-bf03-7b0776ea7bfa\"\r\n        name                = \"my_instance\"\r\n      + tags                = []\r\n        # (14 unchanged attributes hidden)\r\n\r\n        # (1 unchanged block hidden)\r\n    }\r\n\r\nUnless you have made equivalent changes to your configuration, or ignored the relevant attributes using ignore_changes, the following plan may include\r\nactions to undo or respond to these changes.\r\n\r\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\nTerraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:\r\n  - destroy\r\n\r\nTerraform will perform the following actions:\r\n\r\n  # openstack_compute_instance_v2.test-server will be destroyed\r\n  - resource \"openstack_compute_instance_v2\" \"test-server\" {\r\n      - access_ip_v4        = \"10.0.0.16\" -&gt; null\r\n      - all_metadata        = {} -&gt; null\r\n      - all_tags            = [] -&gt; null\r\n      - availability_zone   = \"nova\" -&gt; null\r\n      - flavor_id           = \"2ce31fef-68b6-4953-81bc-b1c79d22f1b0\" -&gt; null\r\n      - flavor_name         = \"m1.medium\" -&gt; null\r\n      - force_delete        = false -&gt; null\r\n      - id                  = \"8d1715e9-e276-4480-bf03-7b0776ea7bfa\" -&gt; null\r\n      - image_id            = \"4128a986-1f77-4201-9bbf-90de4037dee1\" -&gt; null\r\n      - image_name          = \"ubuntu_20.04.3\" -&gt; null\r\n      - key_pair            = \"user01key\" -&gt; null\r\n      - name                = \"my_instance\" -&gt; null\r\n      - power_state         = \"active\" -&gt; null\r\n      - region              = \"RegionOne\" -&gt; null\r\n      - security_groups     = [\r\n          - \"default\",\r\n        ] -&gt; null\r\n      - stop_before_destroy = false -&gt; null\r\n      - tags                = [] -&gt; null\r\n\r\n      - network {\r\n          - access_network = false -&gt; null\r\n          - fixed_ip_v4    = \"10.0.0.16\" -&gt; null\r\n          - mac            = \"fa:16:3e:c2:41:5f\" -&gt; null\r\n          - name           = \"maintenance-net\" -&gt; null\r\n          - uuid           = \"b1bec6fb-a3af-4280-befc-decb376ac5ef\" -&gt; null\r\n        }\r\n    }\r\n\r\nPlan: 0 to add, 0 to change, 1 to destroy.\r\n\r\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\nNote: You didn't use the -out option to save this plan, so Terraform can't guarantee to take exactly these actions if you run \"terraform apply\" now.\r\n<\/code><\/pre>\n<h3>\u9500\u6bc1\u57fa\u7840\u8bbe\u65bd<\/h3>\n<p>\u5982\u679c\u4f7f\u7528 &#8220;terraform plan -destroy&#8221; \u547d\u4ee4\u786e\u8ba4\u5220\u9664\u76ee\u6807\u8d44\u6e90\u6ca1\u6709\u95ee\u9898\uff0c\u5c31\u6267\u884c\u5220\u9664\u64cd\u4f5c\u3002<\/p>\n<pre class=\"post-pre\"><code>$ terraform destroy\r\nopenstack_compute_instance_v2.test-server: Refreshing state... [id=8d1715e9-e276-4480-bf03-7b0776ea7bfa]\r\n\r\nNote: Objects have changed outside of Terraform\r\n\r\nTerraform detected the following changes made outside of Terraform since the last \"terraform apply\":\r\n\r\n  # openstack_compute_instance_v2.test-server has been changed\r\n  ~ resource \"openstack_compute_instance_v2\" \"test-server\" {\r\n        id                  = \"8d1715e9-e276-4480-bf03-7b0776ea7bfa\"\r\n        name                = \"my_instance\"\r\n      + tags                = []\r\n        # (14 unchanged attributes hidden)\r\n\r\n        # (1 unchanged block hidden)\r\n    }\r\n\r\nUnless you have made equivalent changes to your configuration, or ignored the relevant attributes using ignore_changes, the following plan may include\r\nactions to undo or respond to these changes.\r\n\r\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\nTerraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:\r\n  - destroy\r\n\r\nTerraform will perform the following actions:\r\n\r\n  # openstack_compute_instance_v2.test-server will be destroyed\r\n  - resource \"openstack_compute_instance_v2\" \"test-server\" {\r\n      - access_ip_v4        = \"10.0.0.16\" -&gt; null\r\n      - all_metadata        = {} -&gt; null\r\n      - all_tags            = [] -&gt; null\r\n      - availability_zone   = \"nova\" -&gt; null\r\n      - flavor_id           = \"2ce31fef-68b6-4953-81bc-b1c79d22f1b0\" -&gt; null\r\n      - flavor_name         = \"m1.medium\" -&gt; null\r\n      - force_delete        = false -&gt; null\r\n      - id                  = \"8d1715e9-e276-4480-bf03-7b0776ea7bfa\" -&gt; null\r\n      - image_id            = \"4128a986-1f77-4201-9bbf-90de4037dee1\" -&gt; null\r\n      - image_name          = \"ubuntu_20.04.3\" -&gt; null\r\n      - key_pair            = \"user01key\" -&gt; null\r\n      - name                = \"my_instance\" -&gt; null\r\n      - power_state         = \"active\" -&gt; null\r\n      - region              = \"RegionOne\" -&gt; null\r\n      - security_groups     = [\r\n          - \"default\",\r\n        ] -&gt; null\r\n      - stop_before_destroy = false -&gt; null\r\n      - tags                = [] -&gt; null\r\n\r\n      - network {\r\n          - access_network = false -&gt; null\r\n          - fixed_ip_v4    = \"10.0.0.16\" -&gt; null\r\n          - mac            = \"fa:16:3e:c2:41:5f\" -&gt; null\r\n          - name           = \"maintenance-net\" -&gt; null\r\n          - uuid           = \"b1bec6fb-a3af-4280-befc-decb376ac5ef\" -&gt; null\r\n        }\r\n    }\r\n\r\nPlan: 0 to add, 0 to change, 1 to destroy.\r\n\r\nDo you really want to destroy all resources?\r\n  Terraform will destroy all your managed infrastructure, as shown above.\r\n  There is no undo. Only 'yes' will be accepted to confirm.\r\n\r\n  Enter a value: yes\r\n\r\nopenstack_compute_instance_v2.test-server: Destroying... [id=8d1715e9-e276-4480-bf03-7b0776ea7bfa]\r\nopenstack_compute_instance_v2.test-server: Still destroying... [id=8d1715e9-e276-4480-bf03-7b0776ea7bfa, 10s elapsed]\r\nopenstack_compute_instance_v2.test-server: Destruction complete after 10s\r\n\r\nDestroy complete! Resources: 1 destroyed.\r\n<\/code><\/pre>\n<p>\u786e\u8ba4\u5728OpenStack\u4e0a\u5df2\u88ab\u5220\u9664\u3002<\/p>\n<pre class=\"post-pre\"><code>$ openstack server show 8d1715e9-e276-4480-bf03-7b0776ea7bfa\r\nNo server with a name or ID of '8d1715e9-e276-4480-bf03-7b0776ea7bfa' exists.\r\n<\/code><\/pre>\n<p>\u6211\u786e\u8ba4\u5220\u9664\u4e86\u3002<\/p>\n<p>\u8fd9\u7bc7\u6587\u7ae0\u7684\u5185\u5bb9\u5230\u6b64\u4e3a\u6b62\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u9996\u5148 \u6211\u4e4b\u524d\u5728OpenStack\u4e0a\u90e8\u7f72\u5b9e\u4f8b\u7b49\u65f6\u4f7f\u7528\u4e86Heat\uff0c\u4f46\u51b3\u5b9a\u8bd5\u8bd5\u7528Terraform\u3002 \u73af\u5883 Ubun [&hellip;]<\/p>\n","protected":false},"author":10,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-48663","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u4f7f\u7528Terraform\u5728OpenStack\u4e0a\u90e8\u7f72\u8d44\u6e90 - Blog - Silicon Cloud<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528terraform\u5728openstack\u4e0a\u90e8\u7f72\u8d44\u6e90\u3002\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u4f7f\u7528Terraform\u5728OpenStack\u4e0a\u90e8\u7f72\u8d44\u6e90\" \/>\n<meta property=\"og:description\" content=\"\u9996\u5148 \u6211\u4e4b\u524d\u5728OpenStack\u4e0a\u90e8\u7f72\u5b9e\u4f8b\u7b49\u65f6\u4f7f\u7528\u4e86Heat\uff0c\u4f46\u51b3\u5b9a\u8bd5\u8bd5\u7528Terraform\u3002 \u73af\u5883 Ubun [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528terraform\u5728openstack\u4e0a\u90e8\u7f72\u8d44\u6e90\u3002\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2023-02-07T20:16:17+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-01-15T04:40:44+00:00\" \/>\n<meta name=\"author\" content=\"\u5b87, \u534e\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u5b87, \u534e\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8terraform%e5%9c%a8openstack%e4%b8%8a%e9%83%a8%e7%bd%b2%e8%b5%84%e6%ba%90%e3%80%82\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8terraform%e5%9c%a8openstack%e4%b8%8a%e9%83%a8%e7%bd%b2%e8%b5%84%e6%ba%90%e3%80%82\/\",\"name\":\"\u4f7f\u7528Terraform\u5728OpenStack\u4e0a\u90e8\u7f72\u8d44\u6e90 - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2023-02-07T20:16:17+00:00\",\"dateModified\":\"2024-01-15T04:40:44+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/513018e4e121d3add1b7c5de8be21458\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8terraform%e5%9c%a8openstack%e4%b8%8a%e9%83%a8%e7%bd%b2%e8%b5%84%e6%ba%90%e3%80%82\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8terraform%e5%9c%a8openstack%e4%b8%8a%e9%83%a8%e7%bd%b2%e8%b5%84%e6%ba%90%e3%80%82\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8terraform%e5%9c%a8openstack%e4%b8%8a%e9%83%a8%e7%bd%b2%e8%b5%84%e6%ba%90%e3%80%82\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u4f7f\u7528Terraform\u5728OpenStack\u4e0a\u90e8\u7f72\u8d44\u6e90\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/\",\"name\":\"Blog - Silicon Cloud\",\"description\":\"\",\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/513018e4e121d3add1b7c5de8be21458\",\"name\":\"\u5b87, \u534e\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/63cd45cbc05a35fc4ff7637a163c83c4962ef58d27472726c3a3e0c9c5194f0f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/63cd45cbc05a35fc4ff7637a163c83c4962ef58d27472726c3a3e0c9c5194f0f?s=96&d=mm&r=g\",\"caption\":\"\u5b87, \u534e\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/yuhua\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8terraform%e5%9c%a8openstack%e4%b8%8a%e9%83%a8%e7%bd%b2%e8%b5%84%e6%ba%90%e3%80%82\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u4f7f\u7528Terraform\u5728OpenStack\u4e0a\u90e8\u7f72\u8d44\u6e90 - Blog - Silicon Cloud","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528terraform\u5728openstack\u4e0a\u90e8\u7f72\u8d44\u6e90\u3002\/","og_locale":"zh_CN","og_type":"article","og_title":"\u4f7f\u7528Terraform\u5728OpenStack\u4e0a\u90e8\u7f72\u8d44\u6e90","og_description":"\u9996\u5148 \u6211\u4e4b\u524d\u5728OpenStack\u4e0a\u90e8\u7f72\u5b9e\u4f8b\u7b49\u65f6\u4f7f\u7528\u4e86Heat\uff0c\u4f46\u51b3\u5b9a\u8bd5\u8bd5\u7528Terraform\u3002 \u73af\u5883 Ubun [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528terraform\u5728openstack\u4e0a\u90e8\u7f72\u8d44\u6e90\u3002\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2023-02-07T20:16:17+00:00","article_modified_time":"2024-01-15T04:40:44+00:00","author":"\u5b87, \u534e","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u5b87, \u534e","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"10 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8terraform%e5%9c%a8openstack%e4%b8%8a%e9%83%a8%e7%bd%b2%e8%b5%84%e6%ba%90%e3%80%82\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8terraform%e5%9c%a8openstack%e4%b8%8a%e9%83%a8%e7%bd%b2%e8%b5%84%e6%ba%90%e3%80%82\/","name":"\u4f7f\u7528Terraform\u5728OpenStack\u4e0a\u90e8\u7f72\u8d44\u6e90 - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2023-02-07T20:16:17+00:00","dateModified":"2024-01-15T04:40:44+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/513018e4e121d3add1b7c5de8be21458"},"breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8terraform%e5%9c%a8openstack%e4%b8%8a%e9%83%a8%e7%bd%b2%e8%b5%84%e6%ba%90%e3%80%82\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8terraform%e5%9c%a8openstack%e4%b8%8a%e9%83%a8%e7%bd%b2%e8%b5%84%e6%ba%90%e3%80%82\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8terraform%e5%9c%a8openstack%e4%b8%8a%e9%83%a8%e7%bd%b2%e8%b5%84%e6%ba%90%e3%80%82\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"\u4f7f\u7528Terraform\u5728OpenStack\u4e0a\u90e8\u7f72\u8d44\u6e90"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website","url":"https:\/\/www.silicloud.com\/zh\/blog\/","name":"Blog - Silicon Cloud","description":"","inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/513018e4e121d3add1b7c5de8be21458","name":"\u5b87, \u534e","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/63cd45cbc05a35fc4ff7637a163c83c4962ef58d27472726c3a3e0c9c5194f0f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/63cd45cbc05a35fc4ff7637a163c83c4962ef58d27472726c3a3e0c9c5194f0f?s=96&d=mm&r=g","caption":"\u5b87, \u534e"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/yuhua\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8terraform%e5%9c%a8openstack%e4%b8%8a%e9%83%a8%e7%bd%b2%e8%b5%84%e6%ba%90%e3%80%82\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/48663","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/users\/10"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=48663"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/48663\/revisions"}],"predecessor-version":[{"id":59553,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/48663\/revisions\/59553"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=48663"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=48663"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=48663"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}