{"id":49143,"date":"2023-12-07T18:23:20","date_gmt":"2023-11-21T04:40:12","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8ansible%ef%bc%8c%e5%9c%a8centos-7%e4%b8%8a%e5%ae%89%e8%a3%85terraform%e5%92%8cterraform-provider-openstack%e3%80%82\/"},"modified":"2024-05-04T12:33:31","modified_gmt":"2024-05-04T04:33:31","slug":"%e4%bd%bf%e7%94%a8ansible%ef%bc%8c%e5%9c%a8centos-7%e4%b8%8a%e5%ae%89%e8%a3%85terraform%e5%92%8cterraform-provider-openstack%e3%80%82","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8ansible%ef%bc%8c%e5%9c%a8centos-7%e4%b8%8a%e5%ae%89%e8%a3%85terraform%e5%92%8cterraform-provider-openstack%e3%80%82\/","title":{"rendered":"\u4f7f\u7528Ansible\uff0c\u5728CentOS 7\u4e0a\u5b89\u88c5Terraform\u548cterraform-provider-openstack"},"content":{"rendered":"<h1>\u4f7f\u7528Ansible\u5728CentOS 7\u4e0a\u5b89\u88c5Terraform\u548cterraform-provider-openstack\u3002<\/h1>\n<p>\u5982\u679c\u4f60\u5bf9Terraform\u8fd8\u4e0d\u592a\u4e86\u89e3\u7684\u8bdd\uff0c\u6211\u5efa\u8bae\u4f60\u9605\u8bfb\u4ee5\u4e0b\u5185\u5bb9\uff1a<br \/>\n&#8211; Terraform\u7b80\u4ecb<br \/>\n&#8211; \u5728AWS\u4e0a\u8fdb\u884cTerraform\u7b80\u6613\u6559\u7a0b<br \/>\n&#8211; Terraform\u5165\u95e8\u65e5\u8bed\u7ffb\u8bd1<\/p>\n<h2>\u4f5c\u51fa\u7684\u80cc\u666f<\/h2>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">Terraform\u3068terraform-provider-openstack\u3092\u624b\u52d5\u3067\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u306e\u304c\u9762\u5012\u306a\u306e\u3067\u3001\u81ea\u52d5\u5316\u3057\u305f\u304b\u3063\u305f\u305f\u3081\u3002<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">Terraform\u3092\u5b9f\u884c\u3059\u308b\u305f\u3081\u306b\u5fc5\u8981\u306a\u5404\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\/\u30d5\u30a1\u30a4\u30eb\u306e\u4f5c\u6210\u3092\u624b\u52d5\u3067\u884c\u3046\u306e\u304c\u9762\u5012\u3060\u3063\u305f\u305f\u3081\u3002<\/ul>\n<h2>\u91c7\u7528OpenStack\u7684\u539f\u56e0<\/h2>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">AWS\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u4f5c\u6210\u3057\u306a\u304f\u3066\u3082\u3088\u3044\u305f\u3081<\/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\">\u7121\u6599\u3067\u89e6\u308c\u308b\u305f\u3081<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\u89e6\u308a\u6163\u308c\u3066\u3044\u308b\u305f\u3081<\/ul>\n<p>\u5173\u4e8eOpenStack\u7684\u5b89\u88c5\u65b9\u6cd5\u8bf7\u53c2\u89c1\u672c\u6587\u7684\u6700\u540e\u90e8\u5206\u3002<\/p>\n<h2>\u76ee\u6807\u7fa4\u4f53<\/h2>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">CentOS 7 \u306b\u3001Terraform\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u305f\u3044\u65b9<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">OpenStack\u74b0\u5883\u3092\u4f7f\u7528\u3057\u3066\u3001Terraform \u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u3092\u3084\u3063\u3066\u307f\u305f\u3044\u65b9<\/ul>\n<h2>\u524d\u63d0\u6761\u4ef6<\/h2>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">Ansible\u3001OpenStack\u306f\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u6e08\u307f\u3067\u3042\u308b\u3068\u3059\u308b<\/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\">config\u3001inventory\u306e\u8a2d\u5b9a\u306f\u5b8c\u4e86\u6e08\u307f\u3067\u3042\u308b\u3068\u3059\u308b<\/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\">\u9375\u751f\u6210\u3001\u9375\u4ea4\u63db\u3001\u758e\u901a\u78ba\u8a8d\u306f\u5b8c\u4e86\u6e08\u307f\u3067\u3042\u308b\u3068\u3059\u308b<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">proxy\u74b0\u5883\u4e0b\u3067\u306f\u306a\u3044\u3082\u306e\u3068\u3059\u308b<\/ul>\n<h2>\u8fd0\u884c\u73af\u5883<\/h2>\n<pre class=\"post-pre\"><code># cat \/etc\/redhat-release \r\nCentOS Linux release 7.7.1908 (Core)\r\n# ansible --version\r\nansible 2.9.1\r\n  config file = \/etc\/ansible\/ansible.cfg\r\n  configured module search path = [u'\/root\/.ansible\/plugins\/modules', u'\/usr\/share\/ansible\/plugins\/modules']\r\n  ansible python module location = \/usr\/lib\/python2.7\/site-packages\/ansible\r\n  executable location = \/bin\/ansible\r\n  python version = 2.7.5 (default, Aug  7 2019, 00:51:29) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)]\r\n<\/code><\/pre>\n<h2>\u8fd9\u4efdplaybook\u6240\u6267\u884c\u7684\u5de5\u4f5c\u6982\u8981<\/h2>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">Terraform\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u306b\u5fc5\u8981\u306a\u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/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, terraform-provider-openstack\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/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\">\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u4f5c\u6210<\/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\">variables.tf\u30d5\u30a1\u30a4\u30eb\u306e\u4f5c\u6210<\/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\">config.tfvars\u30d5\u30a1\u30a4\u30eb\u306e\u4f5c\u6210<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">main.tf\u30d5\u30a1\u30a4\u30eb\u306e\u4f5c\u6210<\/ul>\n<h2>\u6709\u5173Terraform\u7684\u76ee\u5f55\u7ed3\u6784<\/h2>\n<pre class=\"post-pre\"><code>etc\r\n\u2517 terraform\r\n    \u2517 create_instance\r\n        \u2523 variables.tf    # \u5909\u6570\u306b\u3064\u3044\u3066\u8a18\u8ff0\u3057\u305f\u30d5\u30a1\u30a4\u30eb\r\n        \u2523 config.tfvars   # OpenStack\u74b0\u5883\u306b\u3064\u3044\u3066\u8a18\u8ff0\u3057\u305f\u30d5\u30a1\u30a4\u30eb\r\n        \u2517 main.tf         # \u5b9f\u969b\u306b\u8a2d\u5b9a\u3092\u6d41\u3057\u8fbc\u3080\u30d5\u30a1\u30a4\u30eb\r\n<\/code><\/pre>\n<h2>\u6536\u96c6\u521b\u5efaTerraform\u6587\u4ef6\u6240\u9700\u7684\u4fe1\u606f\u3002<\/h2>\n<p>\u5c06\u6240\u9700\u7684\u4fe1\u606f\u4e8b\u5148\u83b7\u53d6\u5230config.tfvars\u548cmain.tf\u6587\u4ef6\u4e2d\u3002\u9700\u8981\u4fe1\u606f\u7684\u9879\u76ee\u7531\u2605\u6807\u8bb0\u51fa\u6765\u3002<\/p>\n<pre class=\"post-pre\"><code>[root@localhost ~(keystone_admin)]# cat keystonerc_admin\r\nunset OS_SERVICE_TOKEN\r\n    export OS_USERNAME=admin                        \u2605\r\n    export OS_PASSWORD='XXXXXXXXXXXXXXXX'           \u2605\r\n    export OS_REGION_NAME=RegionOne                 \u2605\r\n    export OS_AUTH_URL=http:\/\/10.0.2.15:5000\/v3     \u2605\r\n    export PS1='[\\u@\\h \\W(keystone_admin)]\\$ '\r\n\r\nexport OS_PROJECT_NAME=admin                        \u2605\r\nexport OS_USER_DOMAIN_NAME=Default\r\nexport OS_PROJECT_DOMAIN_NAME=Default\r\nexport OS_IDENTITY_API_VERSION=3\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>[root@localhost playbook(keystone_admin)]# openstack image list\r\n+--------------------------------------+--------+--------+\r\n| ID                                   | Name   | Status |\r\n+--------------------------------------+--------+--------+\r\n| 3740fbf0-8a76-436c-b6c6-cd5911b075c0 | cirros | active |  \u2605\r\n+--------------------------------------+--------+--------+\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>[root@localhost playbook(keystone_admin)]# openstack flavor list\r\n+----+-----------+-------+------+-----------+-------+-----------+\r\n| ID | Name      |   RAM | Disk | Ephemeral | VCPUs | Is Public |\r\n+----+-----------+-------+------+-----------+-------+-----------+\r\n| 1  | m1.tiny   |   512 |    1 |         0 |     1 | True      |\r\n| 2  | m1.small  |  2048 |   20 |         0 |     1 | True      |\r\n| 3  | m1.medium |  4096 |   40 |         0 |     2 | True      |   \u2605\r\n| 4  | m1.large  |  8192 |   80 |         0 |     4 | True      |\r\n| 5  | m1.xlarge | 16384 |  160 |         0 |     8 | True      |\r\n+----+-----------+-------+------+-----------+-------+-----------+\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>[root@localhost playbook(keystone_admin)]# openstack network list\r\n+--------------------------------------+---------+--------------------------------------+\r\n| ID                                   | Name    | Subnets                              |\r\n+--------------------------------------+---------+--------------------------------------+\r\n| 0565b7af-e2df-4e4c-bc36-029644a7a264 | public  | 7ea01a72-a1ea-4d16-8f27-94b8cead354b |   \u2605\r\n| fbf715d6-1a9b-481d-8502-a47d4d14f972 | private | 024d5fda-15a0-401b-81ae-c4f2d5a6f012 |\r\n+--------------------------------------+---------+--------------------------------------+\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>[root@localhost playbook(keystone_admin)]# openstack security group list\r\n+--------------------------------------+---------+--------------------------------+----------------------------------+------+\r\n| ID                                   | Name    | Description                    | Project                          | Tags |\r\n+--------------------------------------+---------+--------------------------------+----------------------------------+------+\r\n| 108af9da-8362-404f-afe0-c7d9f104560f | default | \u30c7\u30d5\u30a9\u30eb\u30c8\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b0\u30eb\u30fc\u30d7    |                                  | []   |\r\n| 338f9c48-be68-4c2b-9b8d-6b71c8be8d65 | default | \u30c7\u30d5\u30a9\u30eb\u30c8\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b0\u30eb\u30fc\u30d7    | 7e5e37477f8d4eb89fec3676f387f576 | []   |\r\n| 65e22d65-11d1-48f8-87fb-3c51d191136c | default | \u30c7\u30d5\u30a9\u30eb\u30c8\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b0\u30eb\u30fc\u30d7    | 7cd74def839441039d70421318eddc7b | []   |\r\n+--------------------------------------+---------+--------------------------------+----------------------------------+------+\r\n<\/code><\/pre>\n<h2>\u521b\u5efa\u5267\u672c<\/h2>\n<p>\u6839\u636e\u6536\u96c6\u7684\u4fe1\u606f\uff0c\u4f7f\u7528blockinfile\u6a21\u5757\u6765\u521b\u5efa\u6587\u4ef6\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">Setup Terraform<\/span>\r\n  <span class=\"na\">hosts<\/span><span class=\"pi\">:<\/span> <span class=\"s\">localhost<\/span>\r\n  <span class=\"na\">vars<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"na\">download_files<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"pi\">-<\/span> <span class=\"s\">https:\/\/releases.hashicorp.com\/terraform\/0.11.13\/terraform_0.11.13_linux_amd64.zip<\/span>\r\n    <span class=\"pi\">-<\/span> <span class=\"s\">https:\/\/releases.hashicorp.com\/terraform-provider-openstack\/1.24.0\/terraform-provider-openstack_1.24.0_linux_amd64.zip<\/span>\r\n    <span class=\"na\">terraform_directory<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"pi\">-<\/span> <span class=\"s\">\/etc\/terraform<\/span>\r\n    <span class=\"pi\">-<\/span> <span class=\"s\">\/etc\/terraform\/create_instance<\/span>\r\n  <span class=\"na\">tasks<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">Install a list of packages<\/span>\r\n    <span class=\"na\">yum<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"na\">name<\/span><span class=\"pi\">:<\/span>\r\n        <span class=\"pi\">-<\/span> <span class=\"s\">wget<\/span>\r\n        <span class=\"pi\">-<\/span> <span class=\"s\">unzip<\/span>\r\n      <span class=\"na\">state<\/span><span class=\"pi\">:<\/span> <span class=\"s\">latest<\/span>\r\n\r\n  <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">Unarchive a file that needs to be downloaded<\/span>\r\n    <span class=\"na\">unarchive<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"na\">src<\/span><span class=\"pi\">:<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">{{<\/span> <span class=\"s\">item<\/span> <span class=\"s\">}}\"<\/span>\r\n      <span class=\"na\">dest<\/span><span class=\"pi\">:<\/span> <span class=\"s\">\/usr\/local\/bin<\/span>\r\n      <span class=\"na\">mode<\/span><span class=\"pi\">:<\/span> <span class=\"s1\">'<\/span><span class=\"s\">0755'<\/span>\r\n      <span class=\"na\">remote_src<\/span><span class=\"pi\">:<\/span> <span class=\"s\">yes<\/span>\r\n    <span class=\"na\">with_items<\/span><span class=\"pi\">:<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">{{<\/span> <span class=\"s\">download_files<\/span> <span class=\"s\">}}\"<\/span>\r\n\r\n  <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">Create a directory<\/span>\r\n    <span class=\"na\">file<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"na\">path<\/span><span class=\"pi\">:<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">{{<\/span> <span class=\"s\">item<\/span> <span class=\"s\">}}\"<\/span>\r\n      <span class=\"na\">owner<\/span><span class=\"pi\">:<\/span> <span class=\"s\">root<\/span>\r\n      <span class=\"na\">group<\/span><span class=\"pi\">:<\/span> <span class=\"s\">root<\/span>\r\n      <span class=\"na\">state<\/span><span class=\"pi\">:<\/span> <span class=\"s\">directory<\/span>\r\n    <span class=\"na\">with_items<\/span><span class=\"pi\">:<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">{{<\/span> <span class=\"s\">terraform_directory<\/span> <span class=\"s\">}}\"<\/span>\r\n\r\n  <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">Insert\/Update variables.tf in \/etc\/terraform\/create_instance<\/span>\r\n    <span class=\"na\">blockinfile<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"na\">path<\/span><span class=\"pi\">:<\/span> <span class=\"s\">\/etc\/terraform\/create_instance\/variables.tf<\/span>\r\n      <span class=\"na\">create<\/span><span class=\"pi\">:<\/span> <span class=\"s\">yes<\/span>\r\n      <span class=\"na\">marker<\/span><span class=\"pi\">:<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">\"<\/span>\r\n      <span class=\"na\">block<\/span><span class=\"pi\">:<\/span> <span class=\"pi\">|<\/span>\r\n        <span class=\"s\">variable \"openstack_project_name\" { description = \"Project Name\" }<\/span>\r\n        <span class=\"s\">variable \"openstack_user_name\" { description = \"OpenStack User Name\" }<\/span>\r\n        <span class=\"s\">variable \"openstack_password\" { description = \"OpenStack Password\" }<\/span>\r\n        <span class=\"s\">variable \"openstack_auth_url\" { description = \"Auth URL\" }<\/span>\r\n        <span class=\"s\">variable \"openstack_region\" { description = \"Region\" }<\/span>\r\n\r\n  <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">Insert\/Update config.tfvars in \/etc\/terraform\/create_instance<\/span>\r\n    <span class=\"na\">blockinfile<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"na\">path<\/span><span class=\"pi\">:<\/span> <span class=\"s\">\/etc\/terraform\/create_instance\/config.tfvars<\/span>\r\n      <span class=\"na\">create<\/span><span class=\"pi\">:<\/span> <span class=\"s\">yes<\/span>\r\n      <span class=\"na\">marker<\/span><span class=\"pi\">:<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">\"<\/span>\r\n      <span class=\"na\">block<\/span><span class=\"pi\">:<\/span> <span class=\"pi\">|<\/span>\r\n        <span class=\"s\">openstack_project_name = \"admin\"<\/span>\r\n        <span class=\"s\">openstack_user_name    = \"admin\"<\/span>\r\n        <span class=\"s\">openstack_password     = \"XXXXXXXXXXXXXXXX\"<\/span>\r\n        <span class=\"s\">openstack_auth_url     = \"http:\/\/10.0.2.15:5000\/v3\"<\/span>\r\n        <span class=\"s\">openstack_region       = \"RegionOne\"<\/span>\r\n\r\n  <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">Insert\/Update main.tf \/etc\/terraform\/create_instance<\/span>\r\n    <span class=\"na\">blockinfile<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"na\">path<\/span><span class=\"pi\">:<\/span> <span class=\"s\">\/etc\/terraform\/create_instance\/main.tf<\/span>\r\n      <span class=\"na\">create<\/span><span class=\"pi\">:<\/span> <span class=\"s\">yes<\/span>\r\n      <span class=\"na\">marker<\/span><span class=\"pi\">:<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">\"<\/span>\r\n      <span class=\"na\">block<\/span><span class=\"pi\">:<\/span> <span class=\"pi\">|<\/span>\r\n        <span class=\"s\">provider \"openstack\" {<\/span>\r\n          <span class=\"s\">tenant_name = \"${var.openstack_project_name}\"<\/span>\r\n          <span class=\"s\">user_name   = \"${var.openstack_user_name}\"<\/span>\r\n          <span class=\"s\">password    = \"${var.openstack_password}\"<\/span>\r\n          <span class=\"s\">auth_url    = \"${var.openstack_auth_url}\"<\/span>\r\n          <span class=\"s\">region      = \"${var.openstack_region}\"<\/span>\r\n        <span class=\"s\">}<\/span>\r\n\r\n        <span class=\"s\">resource \"openstack_compute_instance_v2\" \"tr-test-server\" {<\/span>\r\n          <span class=\"s\">name            = \"tf-test-server\"<\/span>\r\n          <span class=\"s\">image_id        = \"3740fbf0-8a76-436c-b6c6-cd5911b075c0\"<\/span>\r\n          <span class=\"s\">flavor_id       = \"3\"<\/span>\r\n          <span class=\"s\">key_pair        = \"\"<\/span>\r\n          <span class=\"s\">security_groups = [\"default\"]<\/span>\r\n          <span class=\"s\">network {<\/span>\r\n            <span class=\"s\">name = \"public\"<\/span>\r\n          <span class=\"s\">}<\/span>\r\n        <span class=\"s\">}<\/span>\r\n<\/code><\/pre>\n<h2>\u6267\u884cansible-playbook<\/h2>\n<pre class=\"post-pre\"><code>[root@localhost playbook(keystone_admin)]# ansible-playbook SetupTerraform.yml -v\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>Using \/etc\/ansible\/ansible.cfg as config file\r\n\r\nPLAY [Setup Terraform] ************************************************************************************************************\r\n\r\nTASK [Gathering Facts] ************************************************************************************************************\r\nok: [127.0.0.1]\r\n\r\nTASK [Install a list of packages] *************************************************************************************************\r\nok: [127.0.0.1] =&gt; changed=false \r\n  changes:\r\n    installed: []\r\n    updated: []\r\n  msg: ''\r\n  rc: 0\r\n  results:\r\n  - All packages providing wget are up to date\r\n  - All packages providing unzip are up to date\r\n  - ''\r\n\r\nTASK [Unarchive a file that needs to be downloaded] *******************************************************************************\r\nchanged: [127.0.0.1] =&gt; (item=https:\/\/releases.hashicorp.com\/terraform\/0.11.13\/terraform_0.11.13_linux_amd64.zip) =&gt; changed=true \r\n  ansible_loop_var: item\r\n  dest: \/usr\/local\/bin\r\n  extract_results:\r\n    cmd:\r\n    - \/usr\/bin\/unzip\r\n    - -o\r\n    - \/root\/.ansible\/tmp\/ansible-tmp-1574622972.18-110314242626059\/terraform_0.11.13_linux_amd64SUHBBn.zip\r\n    - -d\r\n    - \/usr\/local\/bin\r\n    err: ''\r\n    out: |-\r\n      Archive:  \/root\/.ansible\/tmp\/ansible-tmp-1574622972.18-110314242626059\/terraform_0.11.13_linux_amd64SUHBBn.zip\r\n        inflating: \/usr\/local\/bin\/terraform\r\n    rc: 0\r\n  gid: 0\r\n  group: root\r\n  handler: ZipArchive\r\n  item: https:\/\/releases.hashicorp.com\/terraform\/0.11.13\/terraform_0.11.13_linux_amd64.zip\r\n  mode: '0755'\r\n  owner: root\r\n  size: 23\r\n  src: \/root\/.ansible\/tmp\/ansible-tmp-1574622972.18-110314242626059\/terraform_0.11.13_linux_amd64SUHBBn.zip\r\n  state: directory\r\n  uid: 0\r\nchanged: [127.0.0.1] =&gt; (item=https:\/\/releases.hashicorp.com\/terraform-provider-openstack\/1.24.0\/terraform-provider-openstack_1.24.0_linux_amd64.zip) =&gt; changed=true \r\n  ansible_loop_var: item\r\n  dest: \/usr\/local\/bin\r\n  extract_results:\r\n    cmd:\r\n    - \/usr\/bin\/unzip\r\n    - -o\r\n    - \/root\/.ansible\/tmp\/ansible-tmp-1574622975.68-82254114753181\/terraform-provider-openstack_1.24.0_linux_amd64xWWjwL.zip\r\n    - -d\r\n    - \/usr\/local\/bin\r\n    err: ''\r\n    out: |-\r\n      Archive:  \/root\/.ansible\/tmp\/ansible-tmp-1574622975.68-82254114753181\/terraform-provider-openstack_1.24.0_linux_amd64xWWjwL.zip\r\n        inflating: \/usr\/local\/bin\/terraform-provider-openstack_v1.24.0_x4\r\n    rc: 0\r\n  gid: 0\r\n  group: root\r\n  handler: ZipArchive\r\n  item: https:\/\/releases.hashicorp.com\/terraform-provider-openstack\/1.24.0\/terraform-provider-openstack_1.24.0_linux_amd64.zip\r\n  mode: '0755'\r\n  owner: root\r\n  size: 70\r\n  src: \/root\/.ansible\/tmp\/ansible-tmp-1574622975.68-82254114753181\/terraform-provider-openstack_1.24.0_linux_amd64xWWjwL.zip\r\n  state: directory\r\n  uid: 0\r\n\r\nTASK [Create a directory] *********************************************************************************************************\r\nchanged: [127.0.0.1] =&gt; (item=\/etc\/terraform) =&gt; changed=true \r\n  ansible_loop_var: item\r\n  gid: 0\r\n  group: root\r\n  item: \/etc\/terraform\r\n  mode: '0755'\r\n  owner: root\r\n  path: \/etc\/terraform\r\n  size: 6\r\n  state: directory\r\n  uid: 0\r\nchanged: [127.0.0.1] =&gt; (item=\/etc\/terraform\/create_instance) =&gt; changed=true \r\n  ansible_loop_var: item\r\n  gid: 0\r\n  group: root\r\n  item: \/etc\/terraform\/create_instance\r\n  mode: '0755'\r\n  owner: root\r\n  path: \/etc\/terraform\/create_instance\r\n  size: 6\r\n  state: directory\r\n  uid: 0\r\n\r\nTASK [Insert\/Update variables.tf in \/etc\/terraform\/create_instance] ***************************************************************\r\nchanged: [127.0.0.1] =&gt; changed=true \r\n  msg: File created\r\n\r\nTASK [Insert\/Update config.tfvars in \/etc\/terraform\/create_instance] **************************************************************\r\nchanged: [127.0.0.1] =&gt; changed=true \r\n  msg: File created\r\n\r\nTASK [Insert\/Update main.tf \/etc\/terraform\/create_instance] ***********************************************************************\r\nchanged: [127.0.0.1] =&gt; changed=true \r\n  msg: File created\r\n\r\nPLAY RECAP ************************************************************************************************************************\r\n127.0.0.1                  : ok=7    changed=5    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   \r\n\r\n<\/code><\/pre>\n<p>\u8ba9\u6211\u4eec\u901a\u8fc7\u6267\u884cansible-playbook\u6765\u5b8c\u6210Terraform\u7684\u5b89\u88c5\u5e76\u521b\u5efa\u6267\u884cTerraform\u6240\u9700\u7684\u6587\u4ef6\u3002\u9996\u5148\uff0c\u6211\u4eec\u6765\u786e\u8ba4\u4e00\u4e0bTerraform\u7684\u7248\u672c\u3002<\/p>\n<h2>\u67e5\u770bTerraform\u7684\u7248\u672c<\/h2>\n<pre class=\"post-pre\"><code>[root@localhost playbook(keystone_admin)]# terraform -v\r\nTerraform v0.11.13\r\n\r\nYour version of Terraform is out of date! The latest version\r\nis 0.12.16. You can update by downloading from www.terraform.io\/downloads.html\r\n<\/code><\/pre>\n<p>\u786e\u8ba4\u5df2\u5b89\u88c5v0.11.13\u7248\u672c\u3002\u73b0\u5728\u8bf7\u5207\u6362\u76ee\u5f55\u5e76\u5c1d\u8bd5\u8fdb\u884cTerraform\u7684\u521d\u59cb\u5316\u3002<\/p>\n<h2>\u521d\u59cb\u5316Terraform<\/h2>\n<pre class=\"post-pre\"><code>[root@localhost playbook(keystone_admin)]# cd \/etc\/terraform\/create_instance\/\r\n[root@localhost create_instance(keystone_admin)]# ls\r\nconfig.tfvars  main.tf  variables.tf\r\n[root@localhost create_instance(keystone_admin)]# terraform init\r\n\r\nInitializing provider plugins...\r\n\r\nThe following providers do not have any version constraints in configuration,\r\nso the latest version was installed.\r\n\r\nTo prevent automatic upgrades to new major versions that may contain breaking\r\nchanges, it is recommended to add version = \"...\" constraints to the\r\ncorresponding provider blocks in configuration, with the constraint strings\r\nsuggested below.\r\n\r\n* provider.openstack: version = \"~&gt; 1.24\"\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>\u6210\u529f\u8fdb\u884c\u4e86\u521d\u59cb\u5316\u3002\u73b0\u5728\u6211\u4eec\u5c06\u4f7f\u7528 ansible-playbook \u521b\u5efa\u7684\u6587\u4ef6\u6765\u6267\u884c Terraform\uff0c\u5e76\u5728 OpenStack \u4e0a\u521b\u5efa\u4e00\u4e2a\u5b9e\u4f8b\u3002<\/p>\n<h2>\u6267\u884cTerraform<\/h2>\n<pre class=\"post-pre\"><code>[root@localhost create_instance(keystone_admin)]# terraform apply --var-file=config.tfvars\r\n\r\nAn execution plan has been generated and is shown below.\r\nResource 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.tr-test-server\r\n      id:                         &lt;computed&gt;\r\n      access_ip_v4:               &lt;computed&gt;\r\n      access_ip_v6:               &lt;computed&gt;\r\n      all_metadata.%:             &lt;computed&gt;\r\n      all_tags.#:                 &lt;computed&gt;\r\n      availability_zone:          &lt;computed&gt;\r\n      flavor_id:                  \"3\"\r\n      flavor_name:                &lt;computed&gt;\r\n      force_delete:               \"false\"\r\n      image_id:                   \"3740fbf0-8a76-436c-b6c6-cd5911b075c0\"\r\n      image_name:                 &lt;computed&gt;\r\n      name:                       \"tf-test-server\"\r\n      network.#:                  \"1\"\r\n      network.0.access_network:   \"false\"\r\n      network.0.fixed_ip_v4:      &lt;computed&gt;\r\n      network.0.fixed_ip_v6:      &lt;computed&gt;\r\n      network.0.floating_ip:      &lt;computed&gt;\r\n      network.0.mac:              &lt;computed&gt;\r\n      network.0.name:             \"public\"\r\n      network.0.port:             &lt;computed&gt;\r\n      network.0.uuid:             &lt;computed&gt;\r\n      power_state:                \"active\"\r\n      region:                     &lt;computed&gt;\r\n      security_groups.#:          \"1\"\r\n      security_groups.3814588639: \"default\"\r\n      stop_before_destroy:        \"false\"\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:\r\n<\/code><\/pre>\n<blockquote><p>\u8bf7\u8f93\u5165\u4e00\u4e2a\u503c\uff1a<\/p><\/blockquote>\n<p>\u5f53\u51fa\u73b0\u8be5\u663e\u793a\u65f6\uff0c\u8f93\u5165\u201c\u662f\u201d\u5e76\u6309\u4e0bEnter\u952e\u3002<\/p>\n<pre class=\"post-pre\"><code>  Enter a value: yes\r\n\r\nopenstack_compute_instance_v2.tr-test-server: Creating...\r\n  access_ip_v4:               \"\" =&gt; \"&lt;computed&gt;\"\r\n  access_ip_v6:               \"\" =&gt; \"&lt;computed&gt;\"\r\n  all_metadata.%:             \"\" =&gt; \"&lt;computed&gt;\"\r\n  all_tags.#:                 \"\" =&gt; \"&lt;computed&gt;\"\r\n  availability_zone:          \"\" =&gt; \"&lt;computed&gt;\"\r\n  flavor_id:                  \"\" =&gt; \"3\"\r\n  flavor_name:                \"\" =&gt; \"&lt;computed&gt;\"\r\n  force_delete:               \"\" =&gt; \"false\"\r\n  image_id:                   \"\" =&gt; \"3740fbf0-8a76-436c-b6c6-cd5911b075c0\"\r\n  image_name:                 \"\" =&gt; \"&lt;computed&gt;\"\r\n  name:                       \"\" =&gt; \"tf-test-server\"\r\n  network.#:                  \"\" =&gt; \"1\"\r\n  network.0.access_network:   \"\" =&gt; \"false\"\r\n  network.0.fixed_ip_v4:      \"\" =&gt; \"&lt;computed&gt;\"\r\n  network.0.fixed_ip_v6:      \"\" =&gt; \"&lt;computed&gt;\"\r\n  network.0.floating_ip:      \"\" =&gt; \"&lt;computed&gt;\"\r\n  network.0.mac:              \"\" =&gt; \"&lt;computed&gt;\"\r\n  network.0.name:             \"\" =&gt; \"public\"\r\n  network.0.port:             \"\" =&gt; \"&lt;computed&gt;\"\r\n  network.0.uuid:             \"\" =&gt; \"&lt;computed&gt;\"\r\n  power_state:                \"\" =&gt; \"active\"\r\n  region:                     \"\" =&gt; \"&lt;computed&gt;\"\r\n  security_groups.#:          \"\" =&gt; \"1\"\r\n  security_groups.3814588639: \"\" =&gt; \"default\"\r\n  stop_before_destroy:        \"\" =&gt; \"false\"\r\nopenstack_compute_instance_v2.tr-test-server: Still creating... (10s elapsed)\r\nopenstack_compute_instance_v2.tr-test-server: Still creating... (20s elapsed)\r\nopenstack_compute_instance_v2.tr-test-server: Still creating... (30s elapsed)\r\nopenstack_compute_instance_v2.tr-test-server: Still creating... (40s elapsed)\r\nopenstack_compute_instance_v2.tr-test-server: Still creating... (50s elapsed)\r\nopenstack_compute_instance_v2.tr-test-server: Creation complete after 54s (ID: 2da65d5d-f8ba-4e5a-88cf-43186e981661)\r\n\r\nApply complete! Resources: 1 added, 0 changed, 0 destroyed.\r\n<\/code><\/pre>\n<p>Terraform\u6267\u884c\u6210\u529f\u3002\u8ba9\u6211\u4eec\u53bb\u786e\u8ba4\u5b9e\u4f8b\u662f\u5426\u5df2\u7ecf\u521b\u5efa\u3002<\/p>\n<h2>\u68c0\u67e5Terraform\u7684\u72b6\u6001<\/h2>\n<pre class=\"post-pre\"><code>[root@localhost create_instance(keystone_admin)]# terraform show\r\nopenstack_compute_instance_v2.tr-test-server:\r\n  id = 2da65d5d-f8ba-4e5a-88cf-43186e981661\r\n  access_ip_v4 = 172.24.4.22\r\n  access_ip_v6 = \r\n  all_metadata.% = 0\r\n  all_tags.# = 0\r\n  availability_zone = nova\r\n  flavor_id = 3\r\n  flavor_name = m1.medium\r\n  force_delete = false\r\n  image_id = 3740fbf0-8a76-436c-b6c6-cd5911b075c0\r\n  image_name = cirros\r\n  key_pair = \r\n  name = tf-test-server\r\n  network.# = 1\r\n  network.0.access_network = false\r\n  network.0.fixed_ip_v4 = 172.24.4.22\r\n  network.0.fixed_ip_v6 = \r\n  network.0.floating_ip = \r\n  network.0.mac = fa:16:3e:95:9e:f7\r\n  network.0.name = public\r\n  network.0.port = \r\n  network.0.uuid = 0565b7af-e2df-4e4c-bc36-029644a7a264\r\n  power_state = active\r\n  region = RegionOne\r\n  security_groups.# = 1\r\n  security_groups.3814588639 = default\r\n  stop_before_destroy = false\r\n  tags.# = 0\r\n<\/code><\/pre>\n<h2>\u786e\u8ba4 Terraform \u521b\u5efa\u7684\u5b9e\u4f8b\u662f\u5426\u5b58\u5728<\/h2>\n<pre class=\"post-pre\"><code>[root@localhost create_instance(keystone_admin)]# openstack server list\r\n+--------------------------------------+----------------+--------+--------------------+--------+-----------+\r\n| ID                                   | Name           | Status | Networks           | Image  | Flavor    |\r\n+--------------------------------------+----------------+--------+--------------------+--------+-----------+\r\n| 2da65d5d-f8ba-4e5a-88cf-43186e981661 | tf-test-server | ACTIVE | public=172.24.4.22 | cirros | m1.medium |\r\n+--------------------------------------+----------------+--------+--------------------+--------+-----------+\r\n<\/code><\/pre>\n<p>\u786e\u8ba4\u5df2\u7ecf\u4f7f\u7528\u6307\u5b9a\u7684\u540d\u79f0\u3001\u7f51\u7edc\u3001\u955c\u50cf\u548c\u914d\u7f6e\u521b\u5efa\u4e86\u8be5\u5b9e\u4f8b\u3002\u65e2\u7136\u5df2\u7ecf\u786e\u8ba4\u4e86\uff0c\u8bf7\u5c1d\u8bd5\u5220\u9664\u8be5\u5b9e\u4f8b\u3002<\/p>\n<h2>\u5220\u9664\u7531Terraform\u521b\u5efa\u7684\u5b9e\u4f8b\u3002<\/h2>\n<pre class=\"post-pre\"><code>[root@localhost create_instance(keystone_admin)]# terraform destroy --var-file=config.tfvars\r\nopenstack_compute_instance_v2.tr-test-server: Refreshing state... (ID: 2da65d5d-f8ba-4e5a-88cf-43186e981661)\r\n\r\nAn execution plan has been generated and is shown below.\r\nResource 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.tr-test-server\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:\r\n<\/code><\/pre>\n<blockquote><p>\u8f93\u5165\u4e00\u4e2a\u503c\uff1a<\/p><\/blockquote>\n<p>\u5f53\u5c4f\u5e55\u663e\u793a\u6b64\u4fe1\u606f\u65f6\uff0c\u8bf7\u8f93\u5165\u201c\u662f\u201d\u5e76\u6309\u4e0bEnter\u952e\u3002<\/p>\n<pre class=\"post-pre\"><code>  Enter a value: yes\r\n\r\nopenstack_compute_instance_v2.tr-test-server: Destroying... (ID: 2da65d5d-f8ba-4e5a-88cf-43186e981661)\r\nopenstack_compute_instance_v2.tr-test-server: Still destroying... (ID: 2da65d5d-f8ba-4e5a-88cf-43186e981661, 10s elapsed)\r\nopenstack_compute_instance_v2.tr-test-server: Destruction complete after 11s\r\n\r\nDestroy complete! Resources: 1 destroyed.\r\n<\/code><\/pre>\n<h2>\u4f7f\u7528Terraform\u521b\u5efa\u7684\u5b9e\u4f8b\u662f\u5426\u5df2\u88ab\u5220\u9664\u3002<\/h2>\n<pre class=\"post-pre\"><code>[root@localhost create_instance(keystone_admin)]# openstack server list\r\n\r\n<\/code><\/pre>\n<p>\u786e\u8ba4\u5230\u4f7f\u7528terraform apply\u547d\u4ee4\u521b\u5efa\u7684\u5b9e\u4f8b\u5df2\u88ab\u5220\u9664\u3002<\/p>\n<h2>\u603b\u7ed3<\/h2>\n<p>\u501f\u52a9Ansible\uff0c\u6211\u6210\u529f\u5728CentOS 7\u4e0a\u5b89\u88c5\u4e86Terraform\u548cterraform-provider-openstack\uff0c\u5e76\u521b\u5efa\u4e86\u6240\u9700\u7684\u6bcf\u4e2a\u76ee\u5f55\/\u6587\u4ef6\uff0c\u4ee5\u4fbf\u6267\u884cTerraform\u3002\u8fd9\u4f7f\u5f97\u6211\u80fd\u591f\u7acb\u5373\u5f00\u59cb\u4f7f\u7528Terraform\u8fdb\u884c\u64cd\u4f5c\u3002\u73b0\u5728\uff0c\u6211\u60f3\u4f7f\u7528Terraform\u521b\u5efa\u7f51\u7edc\u3001\u5b50\u7f51\u548c\u8def\u7531\u5668\u3002<\/p>\n<h2>Ansible: \u7528\u4e8e\u672c\u6b21\u4f7f\u7528\u7684\u6a21\u5757\u3002<\/h2>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u3010doc.ansible.com\u3011yum \u2013 Manages packages with the yum package manager<\/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\">\u3010doc.ansible.com\u3011unarchive \u2013 Unpacks an archive after (optionally) copying it from the local machine<\/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\">\u3010doc.ansible.com\u3011file \u2013 Manage files and file properties<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\u3010doc.ansible.com\u3011blockinfile \u2013 Insert\/update\/remove a text block surrounded by marker lines<\/ul>\n<h2>Terraform\uff1a\u672c\u6b21\u4f7f\u7528\u7684\u6a21\u5757\u3002<\/h2>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">OpenStack Provider<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">openstack_compute_instance_v2<\/ul>\n<h2>\u8bf7\u53c2\u8003\u4ee5\u4e0b\u7f51\u5740<\/h2>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">Terraform &#8211; CentOS 7 \u306b Terraform \u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u3066 AWS \u3078\u63a5\u7d9a<\/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\u306eGetting Started\u3092\u3084\u3063\u3066\u307f\u305f\u3000\u301c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u304b\u3089\u4f5c\u6210\u3001\u5909\u66f4\u3001\u524a\u9664\u307e\u3067\u301c<\/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\">\u5317\u5927OpenStack\u74b0\u5883\u3067Terraform\u3092\u4f7f\u7528\u3057\u3066\u4eee\u60f3\u30de\u30b7\u30f3\u3092\u9ad8\u901f\u30c7\u30d7\u30ed\u30a4\u3059\u308b<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">OpenStack Rocky : Openstack Packstack<\/ul>\n<h2>\u53c2\u8003\uff1aOpenStack\u7684\u5b89\u88c5<\/h2>\n<p>\u8fd9\u6b21\u6211\u4eec\u4f7f\u7528packstack\u6765\u51c6\u5907OpenStack\u73af\u5883\u3002\u5982\u679c\u4f60\u6709\u5174\u8da3\u7684\u8bdd\uff0c\u4e5f\u53ef\u4ee5\u5c1d\u8bd5\u4f7f\u7528kolla-ansible\u7b49\u6765\u8fdb\u884c\u5b89\u88c5\u3002<\/p>\n<pre class=\"post-pre\"><code>[root@localhost ~]# getenforce\r\nDisabled\r\n[root@localhost ~]# yum -y install centos-release-openstack-rocky epel-release\r\n[root@localhost ~]# yum -y install openstack-packstack python-pip\r\n[root@localhost ~]# packstack --allinone\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>Welcome to the Packstack setup utility\r\n\r\nThe installation log file is available at: \/var\/tmp\/packstack\/20191124-231626-zUn1Gk\/openstack-setup.log\r\n\r\nInstalling:\r\nClean Up                                             [ DONE ]\r\nDiscovering ip protocol version                      [ DONE ]\r\nSetting up ssh keys                                  [ DONE ]\r\nPreparing servers                                    [ DONE ]\r\nPre installing Puppet and discovering hosts' details [ DONE ]\r\nPreparing pre-install entries                        [ DONE ]\r\nSetting up CACERT                                    [ DONE ]\r\nPreparing AMQP entries                               [ DONE ]\r\nPreparing MariaDB entries                            [ DONE ]\r\nFixing Keystone LDAP config parameters to be undef if empty[ DONE ]\r\nPreparing Keystone entries                           [ DONE ]\r\nPreparing Glance entries                             [ DONE ]\r\nChecking if the Cinder server has a cinder-volumes vg[ DONE ]\r\nPreparing Cinder entries                             [ DONE ]\r\nPreparing Nova API entries                           [ DONE ]\r\nCreating ssh keys for Nova migration                 [ DONE ]\r\nGathering ssh host keys for Nova migration           [ DONE ]\r\nPreparing Nova Compute entries                       [ DONE ]\r\nPreparing Nova Scheduler entries                     [ DONE ]\r\nPreparing Nova VNC Proxy entries                     [ DONE ]\r\nPreparing OpenStack Network-related Nova entries     [ DONE ]\r\nPreparing Nova Common entries                        [ DONE ]\r\nPreparing Neutron LBaaS Agent entries                [ DONE ]\r\nPreparing Neutron API entries                        [ DONE ]\r\nPreparing Neutron L3 entries                         [ DONE ]\r\nPreparing Neutron L2 Agent entries                   [ DONE ]\r\nPreparing Neutron DHCP Agent entries                 [ DONE ]\r\nPreparing Neutron Metering Agent entries             [ DONE ]\r\nChecking if NetworkManager is enabled and running    [ DONE ]\r\nPreparing OpenStack Client entries                   [ DONE ]\r\nPreparing Horizon entries                            [ DONE ]\r\nPreparing Swift builder entries                      [ DONE ]\r\nPreparing Swift proxy entries                        [ DONE ]\r\nPreparing Swift storage entries                      [ DONE ]\r\nPreparing Gnocchi entries                            [ DONE ]\r\nPreparing Redis entries                              [ DONE ]\r\nPreparing Ceilometer entries                         [ DONE ]\r\nPreparing Aodh entries                               [ DONE ]\r\nPreparing Puppet manifests                           [ DONE ]\r\nCopying Puppet modules and manifests                 [ DONE ]\r\nApplying 10.0.2.15_controller.pp\r\n10.0.2.15_controller.pp:                             [ DONE ]\r\nApplying 10.0.2.15_network.pp\r\n10.0.2.15_network.pp:                                [ DONE ]\r\nApplying 10.0.2.15_compute.pp\r\n10.0.2.15_compute.pp:                                [ DONE ]\r\nApplying Puppet manifests                            [ DONE ]\r\nFinalizing                                           [ DONE ]\r\n\r\n **** Installation completed successfully ******\r\n\r\nAdditional information:\r\n * A new answerfile was created in: \/root\/packstack-answers-20191124-231628.txt\r\n * Time synchronization installation was skipped. Please note that unsynchronized time on server instances might be problem for some OpenStack components.\r\n * Warning: NetworkManager is active on 10.0.2.15. OpenStack networking currently does not work on systems that have the Network Manager service enabled.\r\n * File \/root\/keystonerc_admin has been created on OpenStack client host 10.0.2.15. To use the command line tools you need to source the file.\r\n * To access the OpenStack Dashboard browse to http:\/\/10.0.2.15\/dashboard .\r\nPlease, find your login credentials stored in the keystonerc_admin in your home directory.\r\n * The installation log file is available at: \/var\/tmp\/packstack\/20191124-231626-zUn1Gk\/openstack-setup.log\r\n * The generated manifests are available at: \/var\/tmp\/packstack\/20191124-231626-zUn1Gk\/manifests\r\n[root@localhost ~]# source keystonerc_admin\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>[root@localhost ~(keystone_admin)]# openstack user list\r\n+----------------------------------+------------+\r\n| ID                               | Name       |\r\n+----------------------------------+------------+\r\n| 05b219f99b5341d5b6e2995308d83da7 | placement  |\r\n| 0ede6abc3efb4437a1f2e53c8b2abf4f | aodh       |\r\n| 45a6abb49b984fc1bb38f5466368f118 | glance     |\r\n| 4d7dd54aaa06433db9ba74a6e184dc93 | demo       |\r\n| bcc56f25cf4146f7a65acecc327fd89c | neutron    |\r\n| bceab0973bb14501b2e2a15ff8f4c911 | swift      |\r\n| be62b7fb449843eb86a2204dcb46c264 | nova       |\r\n| e066727688bc47d8a3cecaae1c50609e | cinder     |\r\n| f52801ef6d3c4ca18a92cdc6fbda84d2 | ceilometer |\r\n| f739ce72284b4410a2209ef6a0310371 | gnocchi    |\r\n| ffd9f6c03e264757b32a8db4fbfdac91 | admin      |\r\n+----------------------------------+------------+\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>[root@localhost ~(keystone_admin)]# openstack project list\r\n+----------------------------------+----------+\r\n| ID                               | Name     |\r\n+----------------------------------+----------+\r\n| 3a82ceafe38a4fbe86a1bc8c1f141e85 | services |\r\n| 7cd74def839441039d70421318eddc7b | demo     |\r\n| 7e5e37477f8d4eb89fec3676f387f576 | admin    |\r\n+----------------------------------+----------+\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>[root@localhost ~(keystone_admin)]# openstack service list\r\n+----------------------------------+------------+--------------+\r\n| ID                               | Name       | Type         |\r\n+----------------------------------+------------+--------------+\r\n| 09840a597b9f4c90ab7f882f8c296f36 | keystone   | identity     |\r\n| 0d18b82787414f04ae301c719e441940 | ceilometer | metering     |\r\n| 5b995c9d12b3484c99b942e935f8189b | glance     | image        |\r\n| 5e1224c01cf245588216469714dfbc58 | neutron    | network      |\r\n| 7e55ae3bdcd84e569354821b10786fff | placement  | placement    |\r\n| 7eff14d6b48141c79299f230817285c4 | nova       | compute      |\r\n| 8f5ac866191f4fe585a92228c11b3fcc | gnocchi    | metric       |\r\n| 9dc9e65c90ce42fdba014947f78418e3 | cinderv2   | volumev2     |\r\n| a34395df69184a22ac4b827b8c86f189 | aodh       | alarming     |\r\n| b73e3f17ae104775b9996e2bb1ccb7df | cinderv3   | volumev3     |\r\n| be888bebe047460ea95b7a7f9514e488 | swift      | object-store |\r\n| ddf3a36d27864bb891ba32f223c6df6a | cinder     | volume       |\r\n+----------------------------------+------------+--------------+\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>[root@localhost ~(keystone_admin)]# openstack catalog list\r\n+------------+--------------+----------------------------------------------------------------------------+\r\n| Name       | Type         | Endpoints                                                                  |\r\n+------------+--------------+----------------------------------------------------------------------------+\r\n| keystone   | identity     | RegionOne                                                                  |\r\n|            |              |   public: http:\/\/10.0.2.15:5000\/v3                                         |\r\n|            |              | RegionOne                                                                  |\r\n|            |              |   admin: http:\/\/10.0.2.15:35357\/v3                                         |\r\n|            |              | RegionOne                                                                  |\r\n|            |              |   internal: http:\/\/10.0.2.15:5000\/v3                                       |\r\n|            |              |                                                                            |\r\n| ceilometer | metering     | RegionOne                                                                  |\r\n|            |              |   internal: http:\/\/10.0.2.15:8777                                          |\r\n|            |              | RegionOne                                                                  |\r\n|            |              |   admin: http:\/\/10.0.2.15:8777                                             |\r\n|            |              | RegionOne                                                                  |\r\n|            |              |   public: http:\/\/10.0.2.15:8777                                            |\r\n|            |              |                                                                            |\r\n| glance     | image        | RegionOne                                                                  |\r\n|            |              |   internal: http:\/\/10.0.2.15:9292                                          |\r\n|            |              | RegionOne                                                                  |\r\n|            |              |   public: http:\/\/10.0.2.15:9292                                            |\r\n|            |              | RegionOne                                                                  |\r\n|            |              |   admin: http:\/\/10.0.2.15:9292                                             |\r\n|            |              |                                                                            |\r\n| neutron    | network      | RegionOne                                                                  |\r\n|            |              |   public: http:\/\/10.0.2.15:9696                                            |\r\n|            |              | RegionOne                                                                  |\r\n|            |              |   admin: http:\/\/10.0.2.15:9696                                             |\r\n|            |              | RegionOne                                                                  |\r\n|            |              |   internal: http:\/\/10.0.2.15:9696                                          |\r\n|            |              |                                                                            |\r\n| placement  | placement    | RegionOne                                                                  |\r\n|            |              |   internal: http:\/\/10.0.2.15:8778\/placement                                |\r\n|            |              | RegionOne                                                                  |\r\n|            |              |   admin: http:\/\/10.0.2.15:8778\/placement                                   |\r\n|            |              | RegionOne                                                                  |\r\n|            |              |   public: http:\/\/10.0.2.15:8778\/placement                                  |\r\n|            |              |                                                                            |\r\n| nova       | compute      | RegionOne                                                                  |\r\n|            |              |   public: http:\/\/10.0.2.15:8774\/v2.1\/7e5e37477f8d4eb89fec3676f387f576      |\r\n|            |              | RegionOne                                                                  |\r\n|            |              |   admin: http:\/\/10.0.2.15:8774\/v2.1\/7e5e37477f8d4eb89fec3676f387f576       |\r\n|            |              | RegionOne                                                                  |\r\n|            |              |   internal: http:\/\/10.0.2.15:8774\/v2.1\/7e5e37477f8d4eb89fec3676f387f576    |\r\n|            |              |                                                                            |\r\n| gnocchi    | metric       | RegionOne                                                                  |\r\n|            |              |   public: http:\/\/10.0.2.15:8041                                            |\r\n|            |              | RegionOne                                                                  |\r\n|            |              |   internal: http:\/\/10.0.2.15:8041                                          |\r\n|            |              | RegionOne                                                                  |\r\n|            |              |   admin: http:\/\/10.0.2.15:8041                                             |\r\n|            |              |                                                                            |\r\n| cinderv2   | volumev2     | RegionOne                                                                  |\r\n|            |              |   internal: http:\/\/10.0.2.15:8776\/v2\/7e5e37477f8d4eb89fec3676f387f576      |\r\n|            |              | RegionOne                                                                  |\r\n|            |              |   public: http:\/\/10.0.2.15:8776\/v2\/7e5e37477f8d4eb89fec3676f387f576        |\r\n|            |              | RegionOne                                                                  |\r\n|            |              |   admin: http:\/\/10.0.2.15:8776\/v2\/7e5e37477f8d4eb89fec3676f387f576         |\r\n|            |              |                                                                            |\r\n| aodh       | alarming     | RegionOne                                                                  |\r\n|            |              |   public: http:\/\/10.0.2.15:8042                                            |\r\n|            |              | RegionOne                                                                  |\r\n|            |              |   internal: http:\/\/10.0.2.15:8042                                          |\r\n|            |              | RegionOne                                                                  |\r\n|            |              |   admin: http:\/\/10.0.2.15:8042                                             |\r\n|            |              |                                                                            |\r\n| cinderv3   | volumev3     | RegionOne                                                                  |\r\n|            |              |   internal: http:\/\/10.0.2.15:8776\/v3\/7e5e37477f8d4eb89fec3676f387f576      |\r\n|            |              | RegionOne                                                                  |\r\n|            |              |   public: http:\/\/10.0.2.15:8776\/v3\/7e5e37477f8d4eb89fec3676f387f576        |\r\n|            |              | RegionOne                                                                  |\r\n|            |              |   admin: http:\/\/10.0.2.15:8776\/v3\/7e5e37477f8d4eb89fec3676f387f576         |\r\n|            |              |                                                                            |\r\n| swift      | object-store | RegionOne                                                                  |\r\n|            |              |   admin: http:\/\/10.0.2.15:8080\/v1\/AUTH_7e5e37477f8d4eb89fec3676f387f576    |\r\n|            |              | RegionOne                                                                  |\r\n|            |              |   internal: http:\/\/10.0.2.15:8080\/v1\/AUTH_7e5e37477f8d4eb89fec3676f387f576 |\r\n|            |              | RegionOne                                                                  |\r\n|            |              |   public: http:\/\/10.0.2.15:8080\/v1\/AUTH_7e5e37477f8d4eb89fec3676f387f576   |\r\n|            |              |                                                                            |\r\n| cinder     | volume       | RegionOne                                                                  |\r\n|            |              |   internal: http:\/\/10.0.2.15:8776\/v1\/7e5e37477f8d4eb89fec3676f387f576      |\r\n|            |              | RegionOne                                                                  |\r\n|            |              |   admin: http:\/\/10.0.2.15:8776\/v1\/7e5e37477f8d4eb89fec3676f387f576         |\r\n|            |              | RegionOne                                                                  |\r\n|            |              |   public: http:\/\/10.0.2.15:8776\/v1\/7e5e37477f8d4eb89fec3676f387f576        |\r\n|            |              |                                                                            |\r\n+------------+--------------+----------------------------------------------------------------------------+\r\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u4f7f\u7528Ansible\u5728CentOS 7\u4e0a\u5b89\u88c5Terraform\u548cterraform-provider-opens [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-49143","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\u7528Ansible\uff0c\u5728CentOS 7\u4e0a\u5b89\u88c5Terraform\u548cterraform-provider-openstack - 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\u7528ansible\uff0c\u5728centos-7\u4e0a\u5b89\u88c5terraform\u548cterraform-provider-openstack\u3002\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u4f7f\u7528Ansible\uff0c\u5728CentOS 7\u4e0a\u5b89\u88c5Terraform\u548cterraform-provider-openstack\" \/>\n<meta property=\"og:description\" content=\"\u4f7f\u7528Ansible\u5728CentOS 7\u4e0a\u5b89\u88c5Terraform\u548cterraform-provider-opens [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528ansible\uff0c\u5728centos-7\u4e0a\u5b89\u88c5terraform\u548cterraform-provider-openstack\u3002\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2023-11-21T04:40:12+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-05-04T04:33:31+00:00\" \/>\n<meta name=\"author\" content=\"\u79d1, \u96c5\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u79d1, \u96c5\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"16 \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%a8ansible%ef%bc%8c%e5%9c%a8centos-7%e4%b8%8a%e5%ae%89%e8%a3%85terraform%e5%92%8cterraform-provider-openstack%e3%80%82\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8ansible%ef%bc%8c%e5%9c%a8centos-7%e4%b8%8a%e5%ae%89%e8%a3%85terraform%e5%92%8cterraform-provider-openstack%e3%80%82\/\",\"name\":\"\u4f7f\u7528Ansible\uff0c\u5728CentOS 7\u4e0a\u5b89\u88c5Terraform\u548cterraform-provider-openstack - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2023-11-21T04:40:12+00:00\",\"dateModified\":\"2024-05-04T04:33:31+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/41e222757cdd2a3365361328bd79970a\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8ansible%ef%bc%8c%e5%9c%a8centos-7%e4%b8%8a%e5%ae%89%e8%a3%85terraform%e5%92%8cterraform-provider-openstack%e3%80%82\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8ansible%ef%bc%8c%e5%9c%a8centos-7%e4%b8%8a%e5%ae%89%e8%a3%85terraform%e5%92%8cterraform-provider-openstack%e3%80%82\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8ansible%ef%bc%8c%e5%9c%a8centos-7%e4%b8%8a%e5%ae%89%e8%a3%85terraform%e5%92%8cterraform-provider-openstack%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\u7528Ansible\uff0c\u5728CentOS 7\u4e0a\u5b89\u88c5Terraform\u548cterraform-provider-openstack\"}]},{\"@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\/41e222757cdd2a3365361328bd79970a\",\"name\":\"\u79d1, \u96c5\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/1b2d3e00a7df03689797ebd4af8c5827ba5af936849a71050ec331f4cf902c5d?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/1b2d3e00a7df03689797ebd4af8c5827ba5af936849a71050ec331f4cf902c5d?s=96&d=mm&r=g\",\"caption\":\"\u79d1, \u96c5\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/keya\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8ansible%ef%bc%8c%e5%9c%a8centos-7%e4%b8%8a%e5%ae%89%e8%a3%85terraform%e5%92%8cterraform-provider-openstack%e3%80%82\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u4f7f\u7528Ansible\uff0c\u5728CentOS 7\u4e0a\u5b89\u88c5Terraform\u548cterraform-provider-openstack - 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\u7528ansible\uff0c\u5728centos-7\u4e0a\u5b89\u88c5terraform\u548cterraform-provider-openstack\u3002\/","og_locale":"zh_CN","og_type":"article","og_title":"\u4f7f\u7528Ansible\uff0c\u5728CentOS 7\u4e0a\u5b89\u88c5Terraform\u548cterraform-provider-openstack","og_description":"\u4f7f\u7528Ansible\u5728CentOS 7\u4e0a\u5b89\u88c5Terraform\u548cterraform-provider-opens [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528ansible\uff0c\u5728centos-7\u4e0a\u5b89\u88c5terraform\u548cterraform-provider-openstack\u3002\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2023-11-21T04:40:12+00:00","article_modified_time":"2024-05-04T04:33:31+00:00","author":"\u79d1, \u96c5","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u79d1, \u96c5","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"16 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8ansible%ef%bc%8c%e5%9c%a8centos-7%e4%b8%8a%e5%ae%89%e8%a3%85terraform%e5%92%8cterraform-provider-openstack%e3%80%82\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8ansible%ef%bc%8c%e5%9c%a8centos-7%e4%b8%8a%e5%ae%89%e8%a3%85terraform%e5%92%8cterraform-provider-openstack%e3%80%82\/","name":"\u4f7f\u7528Ansible\uff0c\u5728CentOS 7\u4e0a\u5b89\u88c5Terraform\u548cterraform-provider-openstack - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2023-11-21T04:40:12+00:00","dateModified":"2024-05-04T04:33:31+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/41e222757cdd2a3365361328bd79970a"},"breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8ansible%ef%bc%8c%e5%9c%a8centos-7%e4%b8%8a%e5%ae%89%e8%a3%85terraform%e5%92%8cterraform-provider-openstack%e3%80%82\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8ansible%ef%bc%8c%e5%9c%a8centos-7%e4%b8%8a%e5%ae%89%e8%a3%85terraform%e5%92%8cterraform-provider-openstack%e3%80%82\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8ansible%ef%bc%8c%e5%9c%a8centos-7%e4%b8%8a%e5%ae%89%e8%a3%85terraform%e5%92%8cterraform-provider-openstack%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\u7528Ansible\uff0c\u5728CentOS 7\u4e0a\u5b89\u88c5Terraform\u548cterraform-provider-openstack"}]},{"@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\/41e222757cdd2a3365361328bd79970a","name":"\u79d1, \u96c5","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/1b2d3e00a7df03689797ebd4af8c5827ba5af936849a71050ec331f4cf902c5d?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1b2d3e00a7df03689797ebd4af8c5827ba5af936849a71050ec331f4cf902c5d?s=96&d=mm&r=g","caption":"\u79d1, \u96c5"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/keya\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8ansible%ef%bc%8c%e5%9c%a8centos-7%e4%b8%8a%e5%ae%89%e8%a3%85terraform%e5%92%8cterraform-provider-openstack%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\/49143","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\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=49143"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/49143\/revisions"}],"predecessor-version":[{"id":98343,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/49143\/revisions\/98343"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=49143"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=49143"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=49143"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}