{"id":5233,"date":"2017-04-12T08:03:50","date_gmt":"2017-04-12T06:03:50","guid":{"rendered":"https:\/\/new.cloudandheat.com\/orchestraing-openstack-with-ansible\/"},"modified":"2023-03-08T16:04:33","modified_gmt":"2023-03-08T15:04:33","slug":"orchestraing-openstack-with-ansible","status":"publish","type":"post","link":"https:\/\/www.cloudandheat.com\/en\/orchestraing-openstack-with-ansible\/","title":{"rendered":"Orchestrating OpenStack with Ansible"},"content":{"rendered":"<p>&nbsp;<\/p>\n<p><a href=\"https:\/\/www.ansible.com\/\"><strong>Ansible<\/strong><\/a><strong> is an automation engine that offers a simple client-less solution for managing server configuration and application deployment<\/strong>&nbsp;using an SSH connection. With Ansible, one is able to automate repetitive tasks in the OpenStack based Cloud and, thus, save time and increase the quality and reliability of the service. This tutorial will present a <strong>step-by-step guide<\/strong> on how to begin configuring your OpenStack VMs with Ansible. Throughout this tutorial, we will provide a hands-on experience of the fundamental parts of Ansible and show how to automate the configuration of Apache webserver and the transfer of template files.<\/p>\n<h2>Prerequisites<\/h2>\n<p>To follow this tutorial, we expect you to have installed <strong>Ansible<\/strong>. If you&nbsp; have not done it yet, you can find the install guide <a href=\"http:\/\/docs.ansible.com\/ansible\/intro_installation.html\">here<\/a> or install Ansible with the following command:<\/p>\n<p>&nbsp;<\/p>\n<pre><code>$ sudo pip install ansible<\/code><\/pre>\n<p>&nbsp;<\/p>\n<p>Moreover, please launch <strong>two Ubuntu 16.04 instances<\/strong> and attach Floating IPs to them. In this article, one VM will be called&nbsp;dev, the other one prod. The VMs should have the SSH(22) and HTTP(80) ports opened via <a href=\"https:\/\/docs.openstack.org\/user-guide\/configure-access-and-security-for-instances.html\">Security Groups<\/a> and besides, the SSH keys to this VMs should be added to enable the communication via SSH. Finally, make sure that python 2.7 is present on the VMs (usually in <em>\/usr\/bin)<\/em> or install it with the following commands on both VMs:<\/p>\n<p>&nbsp;<\/p>\n<pre><code>$ ssh ubuntu@ip_addr\n$ sudo apt-get install python<\/code><\/pre>\n<p>&nbsp;<\/p>\n<p><span style=\"font-size: 11.0pt; font-family: Montserrat;\">First steps with Ansible<\/span><\/p>\n<p><span style=\"font-size: 11.0pt; font-family: Montserrat;\">Inventory<\/span><\/p>\n<p><span style=\"font-size: 11.0pt; font-family: Montserrat;\">To begin orchestrating with Ansible, let\u2019s first define the servers which we want to orchestrate. We can do so in <\/span><a href=\"https:\/\/docs.ansible.com\/ansible\/intro_inventory.html\" target=\"_blank\" rel=\"noopener\"><strong><span style=\"font-size: 11.0pt; font-family: Montserrat; color: blue;\">Inventories<\/span><\/strong><\/a><span style=\"font-size: 11.0pt; font-family: Montserrat;\">. Let\u2019s create an inventory file called <em><span style=\"font-family: Montserrat;\">hosts<\/span><\/em>&nbsp;in your projects\u2019 folder where we specify the access to our VMs:<\/span><\/p>\n<p>&nbsp;<\/p>\n<pre><code>[dev]\n87.190.237.31\n[prod]\n87.190.237.17<\/code><\/pre>\n<p>&nbsp;<\/p>\n<p>The inventory file defines two groups \u2014 dev and prod \u2014 containing VMs defined by their Floating IP addresses. The IP address serves both as a name of the host in Ansible and as an address of the actual host server. This inventory file presents an elementary set-up of the hosts. With such a content, we can target hosts in each group&nbsp;\u2014 that is often all we expect.<\/p>\n<p>Besides the IP address where to access the host, there are other options to specify more details concerning the servers. The SSH connection is targeting the TCP port 22 by default, but we can also specify the port ourselves with ansible_port=. To specify the user to connect to, we can use ansible_user=. Otherwise, we would have to specify it when running the Ansible commands. By using the presented variables, let\u2019s update the <em>hosts<\/em> file and set-up the same hosts in a more descriptive form:<\/p>\n<p>&nbsp;<\/p>\n<pre><code>[dev]<\/code><code>\nmy_host_dev ansible_port=22 ansible_host=87.190.237.31 ansible_user=ubuntu\n[prod]\nmy_host_prod ansible_port=22 ansible_host=87.190.237.17 ansible_user=ubuntu<\/code><\/pre>\n<p>&nbsp;<\/p>\n<h3>Ad-Hoc Commands<\/h3>\n<p>The fastest and easiest way of how to begin with Ansible are the <strong>Ad-Hoc commands<\/strong> via the <a href=\"http:\/\/docs.ansible.com\/ansible\/intro_adhoc.html\">ansible CLI<\/a>. Nevertheless, before starting with Ansible commands, make sure that the SSH keys to the VMs are added to your SSH agent (or add them by typing $ ssh-add \/path\/to\/ssh_key). To try out the Ad-Hoc commands and also to ensure that the hosts specified in the Inventory are responding, let\u2019s ping them:<\/p>\n<p>&nbsp;<\/p>\n<pre><code>$ ansible all -i hosts -u ubuntu -m ping\nmy_host_dev | SUCCESS =&gt; {\n\"changed\": false,\n\"ping\": \"pong\"\n}\nmy_host_prod | SUCCESS =&gt; {\n\"changed\": false,\n\"ping\": \"pong\"\n}<\/code><\/pre>\n<p>&nbsp;<\/p>\n<p>Now have a look at the ansible command we just executed. The all specifies the target group \u2014 all groups of hosts (prod and dev). The -i hosts specifies the inventory file name \u2014 <em>hosts<\/em> in the current working directory. The -u ubuntu specifies the user for the SSH connection. It can also be omitted here because it is already defined in the inventory file. Finally, -m ping defines the module (<a href=\"http:\/\/docs.ansible.com\/ansible\/ping_module.html\"><em>ping<\/em><\/a>) to be executed. The output shows that both hosts \u2014 my_host_dev and my_host_prod \u2014 are responding to the ping over Ansible.<\/p>\n<p>Although the <strong>Ansible Ad-Hoc commands enable an easy way to execute the Ansible modules<\/strong>, it lacks the advantage of Playbooks \u2014 repeatability. Since it is performed in bash, the commands do not get stored and therefore it is mainly used for one-time use or playing around, not for the usual configuration management.<\/p>\n<h2>Playbooks<\/h2>\n<h3>Set up Apache Webserver<\/h3>\n<p>Now, after we found out that the hosts are responding, let\u2019s automate <strong>installing Apache webserver<\/strong> on the VMs. To do that, we will use <a href=\"http:\/\/docs.ansible.com\/ansible\/playbooks_intro.html\">Playbooks<\/a>. They are written in <strong>YAML<\/strong>(YAML Ain\u2019t Markup Language) which is a data serialization language used for defining the configuration of the hosts. To define the Playbook, create a file called <em>webserver.yaml <\/em>with the following content:<\/p>\n<p>&nbsp;<\/p>\n<pre><code>- hosts: all\nuser: ubuntu\nbecome: true\ntasks:\n- name: Install the latest version of Apache\napt:\nname: apache2\nstate: latest\nupdate_cache: yes\n- name: Restart Apache webserver\nservice:\nname: apache2\nstate: restarted<\/code><\/pre>\n<p>&nbsp;<\/p>\n<p>The file defines the target group to all hosts of the inventory file. The user for the SSH connection is <em>ubuntu<\/em> and the tasks specified further will be performed as root (become: true). There are two tasks to be performed \u2014 installing the latest version of and restarting the apache2 webserver. The installation part defines the apt package (apache2) to be installed in the latest version and also includes updating the apt cache. The restarting part ensures that the service called apache2 will be restarted.<\/p>\n<p>Now, let\u2019s apply the Playbook <em>webserver.yaml<\/em> on the Inventory <em>hosts<\/em>. We can do so with the ansible-playbook command:<\/p>\n<p>&nbsp;<\/p>\n<pre><code>$ ansible-playbook -i hosts webserver.yaml\nPLAY [all] *********************************************************************\nTASK [setup] *******************************************************************\nok: [my_host_dev]\nok: [my_host_prod]\nTASK [Install the latest version of Apache] ************************************\nok: [my_host_dev]\nok: [my_host_prod]\nTASK [Restart Apache webserver] ************************************************\nchanged: [my_host_dev]\nchanged: [my_host_prod]\nPLAY RECAP *********************************************************************\nmy_host_dev&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : ok=3&nbsp;&nbsp;&nbsp; changed=2&nbsp;&nbsp;&nbsp; unreachable=0&nbsp;&nbsp;&nbsp; failed=0\nmy_host_prod &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : ok=3&nbsp;&nbsp;&nbsp; changed=2&nbsp;&nbsp;&nbsp; unreachable=0&nbsp;&nbsp;&nbsp; failed=0<\/code><\/pre>\n<p>&nbsp;<\/p>\n<p>The ansible-playbook applied the Playbook <em>webserver.yaml<\/em> to Inventory <em>hosts<\/em> containing the two hosts we defined in groups dev and prod. In the output, we can see the performed tasks as defined in the Playbook and its state for the particular hosts. After performing those tasks, the Apache webserver should be running. Let\u2019s check it by typing the IP to the browser.<\/p>\n<p>&nbsp;<\/p>\n<p><img fetchpriority=\"high\" decoding=\"async\" class=\"size-full wp-image-2153\" src=\"https:\/\/www.cloudandheat.com\/wp-content\/uploads\/2023\/01\/Domains-in-OpenStack.png\" alt=\"Cloud and Heat | Blog | Domains | OpenStack | Green Computing | Edge Cloud\" width=\"768\" height=\"480\"><\/p>\n<p>&nbsp;<\/p>\n<h3>Place our own customized index.html<\/h3>\n<p>Of course, the default <em>index.html<\/em> is rarely a content we want to expose. To automate replacing the original Apache2 welcome page with our own content, we have to be able to automate transferring files to the VMs. Therefore, the next Playbook will ensure exposing our own <em>index.html<\/em> on the server. The transfer will be done with the help of <a href=\"http:\/\/docs.ansible.com\/ansible\/template_module.html\">template module<\/a> that manages uploading of the chosen file and enables <a href=\"http:\/\/jinja.pocoo.org\/\">Jinja2<\/a> templating on top of that. Jinja2 enables simple templating to dynamically generate custom content out of templates.<\/p>\n<p>Before writing the Playbook itself, let\u2019s specify the new index.html page template. We can write something fairly simple enabling us to see the replaced index page with our content:<\/p>\n<p>&nbsp;<\/p>\n<pre><code>&lt;html&gt;\n&lt;title&gt;\nCreated with Ansible template module\n&lt;\/title&gt;\n&lt;body&gt;\n&lt;h3&gt;This is a welcome page on my OpenStack VM \"{{ ansible_hostname }}\" created from a Jinja template!&lt;\/h3&gt;\n&lt;\/body&gt;\n&lt;\/html&gt;<\/code><\/pre>\n<p>&nbsp;<\/p>\n<p>The template is a standard HTML file with a placeholder for the hostname that should be replaced by the Jinja2 templating system. To transfer the template from your harddrive to the VM, create a Playbook <em>copy_file.yaml<\/em>:<\/p>\n<p>&nbsp;<\/p>\n<pre><code>- hosts: all\nname: Transfer index.html to the Webserver\nuser: ubuntu\nbecome: true&nbsp; #for writing to \/var\/www\ntasks:\n- template:\nsrc: path\/to\/index.html\ndest: \/var\/www\/html\/index.html\nowner: root\ngroup: root\nmode: 0644\nbackup: yes<\/code><\/pre>\n<p>&nbsp;<\/p>\n<p>The task template specifies the source path to copy from and the destination on the host. Moreover, you can specify the owner, group and access rights for the newly created file on the VM. The last line determines that a backup file will be created if a file already exists at the given location so that the original file will not be lost.<\/p>\n<p>Now let\u2019s execute this Playbook:<\/p>\n<p>&nbsp;<\/p>\n<pre><code>$ ansible-playbook -i hosts copy_file.yaml<\/code><\/pre>\n<p>&nbsp;<\/p>\n<p>Once the execution has finished, type the IP addresses of both VMs to your browser again and you will see the new <em>index.html<\/em> pages generated from the template we uploaded. Depending on the VM, the template exposes content such as \u201c<strong>This is a welcome page on my OpenStack VM \u201cdev\u201d created from a Jinja template!<\/strong>\u201d for dev VM.<\/p>\n<p>Should you prefer to <strong>only copy the files<\/strong> and not applying the Jinja2 templating system, there is also a module called <a href=\"http:\/\/docs.ansible.com\/ansible\/copy_module.html\">copy<\/a> that works on a similar basis but only copies the specified files.<\/p>\n<h2>Sum it all up<\/h2>\n<p>So far, we have managed to ensure a <strong>running webserver<\/strong> on our VMs and to <strong>upload the <\/strong><strong>index.html<\/strong><strong> template file<\/strong> to the VMs. We can perform both (or possibly more) steps <strong>in one command<\/strong>. That will be ensured by a new Playbook <em>webserver_with_index_html.yaml<\/em>:<\/p>\n<p>&nbsp;<\/p>\n<pre><code>- include: webserver.yaml\n- include: copy_file.yaml<\/code><\/pre>\n<p>&nbsp;<\/p>\n<p>The Playbook specifies that the Playbooks we have defined before (<em>webserver.yaml<\/em> and <em>copy_file.yaml<\/em>) will be executed. Now run that Playbook:<\/p>\n<p>&nbsp;<\/p>\n<pre><code>$ ansible-playbook -i hosts webserver_with_index_html.yaml\nPLAY [all] *********************************************************************\nTASK [setup] *******************************************************************\nok: [my_host_dev]\nok: [my_host_prod]\nTASK [Install the latest version of Apache] ************************************\nok: [my_host_dev]\nok: [my_host_prod]\nTASK [Restart Apache webserver] ************************************************\nchanged: [my_host_dev]\nchanged: [my_host_prod]\nPLAY [Transfer index.html to the Webserver] ************************************\nTASK [setup] *******************************************************************\nok: [my_host_prod]\nok: [my_host_dev]\nTASK [template] ****************************************************************\nok: [my_host_prod]\nok: [my_host_dev]\nPLAY RECAP *********************************************************************\nmy_host_dev&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : ok=5&nbsp;&nbsp;&nbsp; changed=1&nbsp;&nbsp;&nbsp; unreachable=0&nbsp;&nbsp;&nbsp; failed=0\nmy_host_prod&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : ok=5&nbsp;&nbsp;&nbsp; changed=1&nbsp;&nbsp;&nbsp; unreachable=0&nbsp;&nbsp;&nbsp; failed=0<\/code><\/pre>\n<p>&nbsp;<\/p>\n<p>The output shows the particular subtasks performed one after another. In the one single command, we installed Apache2 webserver and replaced the original <em>index.html<\/em> page with the most recent version of a template that was stored on our harddisk. In other words, this command turns a plain VM into a running webserver that leverages dynamic content specified by ourselves.<\/p>\n<p>The commands presented in this tutorial use a simple syntax and make use of Ansibles\u2019&nbsp;<a href=\"http:\/\/docs.ansible.com\/ansible\/modules.html\">modules<\/a>. Modules capsule a wide variety of common tasks and can turn a long and error-prone manual set-up process into triggering just one command. Ansible is very easy to set up and&nbsp;allows us to manage the usual configuration tasks of VMs in a very short time.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A how-to for configuring your OpenStack VMs with Ansible.<\/p>","protected":false},"author":2,"featured_media":6046,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_relevanssi_hide_post":"","_relevanssi_hide_content":"","_relevanssi_pin_for_all":"","_relevanssi_pin_keywords":"","_relevanssi_unpin_keywords":"","_relevanssi_related_keywords":"","_relevanssi_related_include_ids":"","_relevanssi_related_exclude_ids":"","_relevanssi_related_no_append":"","_relevanssi_related_not_related":"","_relevanssi_related_posts":"","_relevanssi_noindex_reason":"","inline_featured_image":false,"footnotes":""},"categories":[83,81],"tags":[],"class_list":["post-5233","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cloud-services","category-openstack"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Cloud&amp;Heat | Orchestrating OpenStack with Ansible<\/title>\n<meta name=\"description\" content=\"Cloud&amp;Heat Technologies makes sustainability and security the drivers of digital innovation. | Future of compute | Cloud Security | OpenStack with Ansible\" \/>\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.cloudandheat.com\/en\/orchestraing-openstack-with-ansible\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Cloud&amp;Heat | Orchestrating OpenStack with Ansible\" \/>\n<meta property=\"og:description\" content=\"Cloud&amp;Heat Technologies makes sustainability and security the drivers of digital innovation. | Future of compute | Cloud Security | OpenStack with Ansible\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.cloudandheat.com\/en\/orchestraing-openstack-with-ansible\/\" \/>\n<meta property=\"og:site_name\" content=\"Cloud &amp; Heat\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/CloudandHeat\" \/>\n<meta property=\"article:published_time\" content=\"2017-04-12T06:03:50+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-03-08T15:04:33+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.cloudandheat.com\/wp-content\/uploads\/2016\/02\/2023-Cloud-and-Heat-Website-Blog-Vorlage-Headerbild.png\" \/>\n\t<meta property=\"og:image:width\" content=\"2292\" \/>\n\t<meta property=\"og:image:height\" content=\"1201\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Clemens M\u00fcller\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@cloudandheat\" \/>\n<meta name=\"twitter:site\" content=\"@cloudandheat\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Clemens M\u00fcller\" \/>\n\t<meta name=\"twitter:label2\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.cloudandheat.com\/orchestraing-openstack-with-ansible\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.cloudandheat.com\/orchestraing-openstack-with-ansible\/\"},\"author\":{\"name\":\"Clemens M\u00fcller\",\"@id\":\"https:\/\/www.cloudandheat.com\/#\/schema\/person\/ba09b0c184d05469ca875d2cb5ba730a\"},\"headline\":\"Orchestrating OpenStack with Ansible\",\"datePublished\":\"2017-04-12T06:03:50+00:00\",\"dateModified\":\"2023-03-08T15:04:33+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.cloudandheat.com\/orchestraing-openstack-with-ansible\/\"},\"wordCount\":1426,\"publisher\":{\"@id\":\"https:\/\/www.cloudandheat.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.cloudandheat.com\/orchestraing-openstack-with-ansible\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.cloudandheat.com\/wp-content\/uploads\/2016\/02\/2023-Cloud-and-Heat-Website-Blog-Vorlage-Headerbild.png\",\"articleSection\":[\"Cloud Services\",\"OpenStack\"],\"inLanguage\":\"en-GB\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.cloudandheat.com\/orchestraing-openstack-with-ansible\/\",\"url\":\"https:\/\/www.cloudandheat.com\/orchestraing-openstack-with-ansible\/\",\"name\":\"Cloud&Heat | Orchestrating OpenStack with Ansible\",\"isPartOf\":{\"@id\":\"https:\/\/www.cloudandheat.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.cloudandheat.com\/orchestraing-openstack-with-ansible\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.cloudandheat.com\/orchestraing-openstack-with-ansible\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.cloudandheat.com\/wp-content\/uploads\/2016\/02\/2023-Cloud-and-Heat-Website-Blog-Vorlage-Headerbild.png\",\"datePublished\":\"2017-04-12T06:03:50+00:00\",\"dateModified\":\"2023-03-08T15:04:33+00:00\",\"description\":\"Cloud&Heat Technologies makes sustainability and security the drivers of digital innovation. | Future of compute | Cloud Security | OpenStack with Ansible\",\"breadcrumb\":{\"@id\":\"https:\/\/www.cloudandheat.com\/orchestraing-openstack-with-ansible\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.cloudandheat.com\/orchestraing-openstack-with-ansible\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\/\/www.cloudandheat.com\/orchestraing-openstack-with-ansible\/#primaryimage\",\"url\":\"https:\/\/www.cloudandheat.com\/wp-content\/uploads\/2016\/02\/2023-Cloud-and-Heat-Website-Blog-Vorlage-Headerbild.png\",\"contentUrl\":\"https:\/\/www.cloudandheat.com\/wp-content\/uploads\/2016\/02\/2023-Cloud-and-Heat-Website-Blog-Vorlage-Headerbild.png\",\"width\":2292,\"height\":1201},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.cloudandheat.com\/orchestraing-openstack-with-ansible\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Startseite\",\"item\":\"https:\/\/www.cloudandheat.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Orchestrating OpenStack with Ansible\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.cloudandheat.com\/#website\",\"url\":\"https:\/\/www.cloudandheat.com\/\",\"name\":\"Cloud & Heat Technolgies GmbH\",\"description\":\"Cloud-Service- und Cloud-Technologie-Provider\",\"publisher\":{\"@id\":\"https:\/\/www.cloudandheat.com\/#organization\"},\"alternateName\":\"Cloud and Heat Technologies GmbH\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.cloudandheat.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.cloudandheat.com\/#organization\",\"name\":\"Cloud&Heat Technologies GmbH\",\"url\":\"https:\/\/www.cloudandheat.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\/\/www.cloudandheat.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.cloudandheat.com\/wp-content\/uploads\/2022\/08\/logo.svg\",\"contentUrl\":\"https:\/\/www.cloudandheat.com\/wp-content\/uploads\/2022\/08\/logo.svg\",\"width\":907,\"height\":1782,\"caption\":\"Cloud&Heat Technologies GmbH\"},\"image\":{\"@id\":\"https:\/\/www.cloudandheat.com\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/CloudandHeat\",\"https:\/\/x.com\/cloudandheat\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.cloudandheat.com\/#\/schema\/person\/ba09b0c184d05469ca875d2cb5ba730a\",\"name\":\"Clemens M\u00fcller\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\/\/www.cloudandheat.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/350f97f507a0c231669ebf507b516e705ead54569fde6f8537dee0acc251ee2d?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/350f97f507a0c231669ebf507b516e705ead54569fde6f8537dee0acc251ee2d?s=96&d=mm&r=g\",\"caption\":\"Clemens M\u00fcller\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Cloud&amp;Heat | Orchestrating OpenStack with Ansible","description":"Cloud&amp;Heat Technologies makes sustainability and security the drivers of digital innovation. | Future of compute | Cloud Security | OpenStack with Ansible","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.cloudandheat.com\/en\/orchestraing-openstack-with-ansible\/","og_locale":"en_GB","og_type":"article","og_title":"Cloud&Heat | Orchestrating OpenStack with Ansible","og_description":"Cloud&Heat Technologies makes sustainability and security the drivers of digital innovation. | Future of compute | Cloud Security | OpenStack with Ansible","og_url":"https:\/\/www.cloudandheat.com\/en\/orchestraing-openstack-with-ansible\/","og_site_name":"Cloud &amp; Heat","article_publisher":"https:\/\/www.facebook.com\/CloudandHeat","article_published_time":"2017-04-12T06:03:50+00:00","article_modified_time":"2023-03-08T15:04:33+00:00","og_image":[{"width":2292,"height":1201,"url":"https:\/\/www.cloudandheat.com\/wp-content\/uploads\/2016\/02\/2023-Cloud-and-Heat-Website-Blog-Vorlage-Headerbild.png","type":"image\/png"}],"author":"Clemens M\u00fcller","twitter_card":"summary_large_image","twitter_creator":"@cloudandheat","twitter_site":"@cloudandheat","twitter_misc":{"Written by":"Clemens M\u00fcller","Estimated reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.cloudandheat.com\/orchestraing-openstack-with-ansible\/#article","isPartOf":{"@id":"https:\/\/www.cloudandheat.com\/orchestraing-openstack-with-ansible\/"},"author":{"name":"Clemens M\u00fcller","@id":"https:\/\/www.cloudandheat.com\/#\/schema\/person\/ba09b0c184d05469ca875d2cb5ba730a"},"headline":"Orchestrating OpenStack with Ansible","datePublished":"2017-04-12T06:03:50+00:00","dateModified":"2023-03-08T15:04:33+00:00","mainEntityOfPage":{"@id":"https:\/\/www.cloudandheat.com\/orchestraing-openstack-with-ansible\/"},"wordCount":1426,"publisher":{"@id":"https:\/\/www.cloudandheat.com\/#organization"},"image":{"@id":"https:\/\/www.cloudandheat.com\/orchestraing-openstack-with-ansible\/#primaryimage"},"thumbnailUrl":"https:\/\/www.cloudandheat.com\/wp-content\/uploads\/2016\/02\/2023-Cloud-and-Heat-Website-Blog-Vorlage-Headerbild.png","articleSection":["Cloud Services","OpenStack"],"inLanguage":"en-GB"},{"@type":"WebPage","@id":"https:\/\/www.cloudandheat.com\/orchestraing-openstack-with-ansible\/","url":"https:\/\/www.cloudandheat.com\/orchestraing-openstack-with-ansible\/","name":"Cloud&amp;Heat | Orchestrating OpenStack with Ansible","isPartOf":{"@id":"https:\/\/www.cloudandheat.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.cloudandheat.com\/orchestraing-openstack-with-ansible\/#primaryimage"},"image":{"@id":"https:\/\/www.cloudandheat.com\/orchestraing-openstack-with-ansible\/#primaryimage"},"thumbnailUrl":"https:\/\/www.cloudandheat.com\/wp-content\/uploads\/2016\/02\/2023-Cloud-and-Heat-Website-Blog-Vorlage-Headerbild.png","datePublished":"2017-04-12T06:03:50+00:00","dateModified":"2023-03-08T15:04:33+00:00","description":"Cloud&amp;Heat Technologies makes sustainability and security the drivers of digital innovation. | Future of compute | Cloud Security | OpenStack with Ansible","breadcrumb":{"@id":"https:\/\/www.cloudandheat.com\/orchestraing-openstack-with-ansible\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.cloudandheat.com\/orchestraing-openstack-with-ansible\/"]}]},{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/www.cloudandheat.com\/orchestraing-openstack-with-ansible\/#primaryimage","url":"https:\/\/www.cloudandheat.com\/wp-content\/uploads\/2016\/02\/2023-Cloud-and-Heat-Website-Blog-Vorlage-Headerbild.png","contentUrl":"https:\/\/www.cloudandheat.com\/wp-content\/uploads\/2016\/02\/2023-Cloud-and-Heat-Website-Blog-Vorlage-Headerbild.png","width":2292,"height":1201},{"@type":"BreadcrumbList","@id":"https:\/\/www.cloudandheat.com\/orchestraing-openstack-with-ansible\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Startseite","item":"https:\/\/www.cloudandheat.com\/"},{"@type":"ListItem","position":2,"name":"Orchestrating OpenStack with Ansible"}]},{"@type":"WebSite","@id":"https:\/\/www.cloudandheat.com\/#website","url":"https:\/\/www.cloudandheat.com\/","name":"Cloud &amp; Heat Technolgies GmbH","description":"Cloud service and cloud technology providers","publisher":{"@id":"https:\/\/www.cloudandheat.com\/#organization"},"alternateName":"Cloud and Heat Technologies GmbH","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.cloudandheat.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":"Organization","@id":"https:\/\/www.cloudandheat.com\/#organization","name":"Cloud&amp;Heat Technologies GmbH","url":"https:\/\/www.cloudandheat.com\/","logo":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/www.cloudandheat.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.cloudandheat.com\/wp-content\/uploads\/2022\/08\/logo.svg","contentUrl":"https:\/\/www.cloudandheat.com\/wp-content\/uploads\/2022\/08\/logo.svg","width":907,"height":1782,"caption":"Cloud&Heat Technologies GmbH"},"image":{"@id":"https:\/\/www.cloudandheat.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/CloudandHeat","https:\/\/x.com\/cloudandheat"]},{"@type":"Person","@id":"https:\/\/www.cloudandheat.com\/#\/schema\/person\/ba09b0c184d05469ca875d2cb5ba730a","name":"Clemens M\u00fcller","image":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/www.cloudandheat.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/350f97f507a0c231669ebf507b516e705ead54569fde6f8537dee0acc251ee2d?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/350f97f507a0c231669ebf507b516e705ead54569fde6f8537dee0acc251ee2d?s=96&d=mm&r=g","caption":"Clemens M\u00fcller"}}]}},"_links":{"self":[{"href":"https:\/\/www.cloudandheat.com\/en\/wp-json\/wp\/v2\/posts\/5233","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.cloudandheat.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.cloudandheat.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.cloudandheat.com\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.cloudandheat.com\/en\/wp-json\/wp\/v2\/comments?post=5233"}],"version-history":[{"count":0,"href":"https:\/\/www.cloudandheat.com\/en\/wp-json\/wp\/v2\/posts\/5233\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.cloudandheat.com\/en\/wp-json\/wp\/v2\/media\/6046"}],"wp:attachment":[{"href":"https:\/\/www.cloudandheat.com\/en\/wp-json\/wp\/v2\/media?parent=5233"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.cloudandheat.com\/en\/wp-json\/wp\/v2\/categories?post=5233"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.cloudandheat.com\/en\/wp-json\/wp\/v2\/tags?post=5233"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}