{"id":5245,"date":"2017-09-01T09:25:54","date_gmt":"2017-09-01T07:25:54","guid":{"rendered":"https:\/\/new.cloudandheat.com\/manage-openstack-vms-with-ansible\/"},"modified":"2023-03-08T16:04:29","modified_gmt":"2023-03-08T15:04:29","slug":"manage-openstack-vms-with-ansible","status":"publish","type":"post","link":"https:\/\/www.cloudandheat.com\/en\/manage-openstack-vms-with-ansible\/","title":{"rendered":"Manage OpenStack VMs with Ansible"},"content":{"rendered":"<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"https:\/\/www.ansible.com\/\"><strong>Ansible<\/strong><\/a> is very simple orchestration tool that can turn hours of work on setting up an environment to seconds. In the <a href=\"https:\/\/www.cloudandheat.com\/orchestrating-openstack-with-ansible-2\/\">previous post<\/a>, we showed the basics of using Ansible with OpenStack VMs as hosts. In this post, we are going to show how to orchestrate OpenStack compute instances itself. That means, in particular, to <strong>boot new VMs<\/strong> of our preference to be able to <strong>perform tasks on them<\/strong> and <strong>delete them<\/strong>.<\/p>\n<h2>Prerequisites<\/h2>\n<p>To follow this tutorial, we expect that you have a basic experience with Ansible \u2014 you have an idea what playbooks, modules, and inventories are. If not, we recommend checking the <a href=\"https:\/\/www.cloudandheat.com\/orchestrating-openstack-with-ansible-2\/\">previous post<\/a> first to get started.<\/p>\n<p>Regarding software, you need:<\/p>\n<ul>\n<li><a href=\"http:\/\/docs.ansible.com\/ansible\/intro_installation.html\">Ansible<\/a> (<code>$ sudo pip install ansible<\/code>)<\/li>\n<li><a href=\"https:\/\/docs.openstack.org\/developer\/shade\/installation.html\">Shade<\/a> (<code>$ pip install shade<\/code>).<\/li>\n<\/ul>\n<p>Before executing the playbooks, make sure that your OS_ variables&nbsp;(<code>OS_AUTH_URL, OS_PROJECT_ID, OS_PROJECT_NAME, OS_USER_DOMAIN_NAME, OS_USERNAME, OS_PASSWORD, and OS_REGION_NAME<\/code>) are set to enable Absible the access to your project. The easiest way to do so is to source the <strong>openrc file<\/strong> (you can download it in Dashboard -&gt; Access &amp; Security -&gt; API Access -&gt; Download OpenStack RC File v3 and run <code>$ .\/your-project-openrc.sh<\/code> ).<\/p>\n<p>Finally, add one of the SSH keys available in the project to your SSH agent, create an empty folder, and add cd into that folder.<\/p>\n<h2>Ensure a running VM<\/h2>\n<p>To start off, let\u2019s automate booting an OpenStack VM from an image. We will create a playbook called deploy_one_vm_1.yaml that will do so. The easiest way is to use Ansible\u2019s <a href=\"https:\/\/docs.ansible.com\/ansible\/latest\/modules\/os_server_module.html\" target=\"_blank\" rel=\"noopener\"><code>os-server module<\/code><\/a>.<\/p>\n<p>&nbsp;<\/p>\n<pre><code>- name: Launch a compute instance\nhosts: localhost\ntasks:\n- name: Launch a VM\nos_server:\nimage: Ubuntu 14.04 LTS x64\nname: vm1\nkey_name: my_keypair_dd2d\navailability_zone: nova\nflavor: 22\nstate: present&gt;\nnetwork: floatingIPv4<\/code><\/pre>\n<p>&nbsp;<\/p>\n<p>The module os_server executes commands from your localhost (using the OS_ envs) to ensure the desired state of the specified VM. Thus, the host we apply the playbook on is localhost. Since localhost is always clearly defined, we do not need to create an inventory to specify the hosts there.<\/p>\n<p>The os_server module ensures presence or absence (based on the state parameter) of the specified VM. We can enter the specifics of the VM we want to boot as shown in the playbook above. There, we specified that the new VM\u2019s name will be vm1, it will be booted from image Ubuntu 14.04 in availability zone nova with keypair my_keypair_dd2d, flavor cloudcompute.s, and IP address allocated from network floatingIPv4.<\/p>\n<p>Since there is no hostfile necessary, we can execute the playbook right ahead and check the Dashboard to ensure that the VM is actually present.<\/p>\n<p>&nbsp;<\/p>\n<pre><code>$ ansible-playbook deploy_one_vm_1.yaml\n[WARNING]: provided hosts list is empty, only localhost is available\nPLAY [Launch a compute instance] ***********************************************\nTASK [setup] *******************************************************************\nok: [localhost]\nTASK [Launch a VM] *************************************************************\nchanged: [localhost]\nPLAY RECAP *********************************************************************\nlocalhost : ok=2 changed=1 unreachable=0 failed=0<\/code><\/pre>\n<h2>Add the VM to Inventory<\/h2>\n<p>Despite defining the parameters and the name of the VM, we have no automatic way to target the VM for performing subsequent tasks at the moment. This is caused by the fact that we do not choose the IP address that will be allocated for the VM \u2013 we only define the network for allocating the IP. Nevertheless, we are able to get the Floating IP of the newly created VM and to use it in upcoming playbooks. To do so, we need to do two things. The first one is to <strong>get the IP address<\/strong> where we can access the VM. The second one is to <strong>add that address to inventory<\/strong>.<\/p>\n<p>Now, we will expand the playbook for creating a VM and add another playbook to perform a follow-up task on the new VM using its inventory record. Create a file called <em>deploy_one_vm_2.yaml<\/em> with the following content:<\/p>\n<p>&nbsp;<\/p>\n<pre><code>- name: Launch a compute instance\nhosts: localhost\ntasks:\n- name: Launch a VM\nos_server:\nimage: Ubuntu 14.04 LTS x64\nname: vm2\nkey_name: my_keypair_dd2d\navailability_zone: nova\nflavor: 22\nstate: present\nnetwork: floatingIPv4\nregister: my_vm\n- name: Add VM to inventory\nadd_host:\nname: my_openstack_vm\ngroups: openstack_vms\nansible_host: \"{{ my_vm.server.public_v4 }}\"\n- name: Wait to be sure ssh is available\npause:\nseconds: 30<\/code><\/pre>\n<p>&nbsp;<\/p>\n<p>This playbook is similar to the previous one that boots a VM. The task Launch a VM has new parameter register that <strong>stores the results<\/strong> of the performed task to variable my_vm \u2014 in our case details concerning the specified VM, including its Floating IP that we will be used later, are present.<\/p>\n<p>The task Add VM to inventory uses the <a href=\"http:\/\/docs.ansible.com\/ansible\/add_host_module.html\"><strong>add_host<\/strong><\/a> module for <strong>adding hosts to a temporary inventory<\/strong> that is valid only during the execution of the playbook. Although it doesn\u2019t get stored, we can still reference it. The module will add new entry my_openstack_vm that belongs to group openstack_vms. The last parameter \u2014 ansible_host \u2014 is the most important one that specifies the URL that should be associated. We are using variable my_vm.server.public_v4 that represents the public IP of the VM. The variable was defined when registering the os_server output to variable my_vm.<\/p>\n<p>Finally, the last task is 30 seconds sleep with a use of <a href=\"http:\/\/docs.ansible.com\/ansible\/pause_module.html\">pause<\/a> module. Sleep is included as a simple solution to ensure that the SSH connection to the VM will be available for the subsequent tasks.<\/p>\n<p>To illustrate a possible upcoming task, let\u2019s use the \u201cInstall webserver\u201d (introduced <a href=\"https:\/\/www.cloudandheat.com\/orchestrating-openstack-with-ansible-2\/\">here<\/a>). Create a file <em>webserver.yaml<\/em>.<\/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>Finally, let\u2019s define a playbook to cover and connect tasks from both playbooks we just created and name it <em>vm_with_webserver.yaml<\/em>. As a whole, it will ensure a running VM (<em>deploy_one_vm_2.yaml<\/em>) with the latest version of Apache webserver (<em>webserver.yaml<\/em>).<\/p>\n<p>&nbsp;<\/p>\n<pre><code>- include: deploy_one_vm_2.yaml\n- include: webserver.yaml<\/code><\/pre>\n<p>&nbsp;<\/p>\n<p>The flow of the playbook we just defined now is the following:<\/p>\n<ol>\n<li>The VM gets booted (unless it already exists)<\/li>\n<li>Its IP gets added to the inventory<\/li>\n<li>The sleep is performed to ensure that the SSH connection to the VM is available<\/li>\n<li>Apache webserver gets installed (unless it is already present)<\/li>\n<li>Apache webserver gets restarted<\/li>\n<\/ol>\n<p>When an SSH connection is being established, the host identity is usually being checked. Since the host gets newly installed, its identity is unknown and might even collide with an already known identity (stored in <em>~\/.ssh\/known_hosts<\/em>) of a previous VM that was allocated the same Floating IP. In either case, the SSH agent requires confirmation of the new host by default. However, when automating the deployment, we want to omit the necessity of human input and therefore not to require that. This is also the case in our flow. Ansible enables to <strong>disable the <\/strong><a href=\"http:\/\/docs.ansible.com\/ansible\/intro_getting_started.html#host-key-checking\"><strong>host identity checking<\/strong><\/a> that leads to an automated flow.<\/p>\n<p>Let\u2019s run the Ansible playbook <em>vm_with_webserver.yaml<\/em> with disabled host checking for the new VM.<\/p>\n<p>&nbsp;<\/p>\n<pre><code>$ ANSIBLE_HOST_KEY_CHECKING=False ansible-playbook\nvm_with_webserver.yaml<\/code><\/pre>\n<p>&nbsp;<\/p>\n<p>Once the run finishes, we can check if the webserver is up and running. To do so, find the newly created VM vm2 in the Dashboard and open its Floating IP in your browser. You should see the <strong>Apache2 Ubuntu Default Page<\/strong>.<\/p>\n<h2>Destroy a VM<\/h2>\n<p>The module os_server has two use cases. It can be used either to ensure that the specified VM exists (which in most cases means to create it) or to ensure that the VM does not exist (typically to destroy it). Let\u2019s create a playbook destroy_vm.yaml that destroys the VM we just created:<\/p>\n<p>&nbsp;<\/p>\n<pre><code>- name: Destroy a compute instance\nhosts: localhost\ntasks:\n- name: Destroy a VM\nos_server:\nname: vm2\nstate: absent&lt;(code&gt;<\/code><\/pre>\n<p>&nbsp;<\/p>\n<p>And execute it:<\/p>\n<p>&nbsp;<\/p>\n<pre><code>$ ansible-playbook destroy_vm.yaml<\/code><\/pre>\n<h2>Automate for multiple hosts<\/h2>\n<p>Tasks we have shown in this tutorial always affect only one instance. However, there is also a simple way how to affect multiple instances at once. Let\u2019s make another extension of the initial playbook and call it <em>deploy_multiple_vms.yaml<\/em><\/p>\n<p>&nbsp;<\/p>\n<pre><code>- name: Launch a compute instance\nhosts: localhost\ntasks:\n- name: Launch a VM\nos_server:\nimage: Ubuntu 14.04 LTS x64\nname: \"{{ item.name }}\"\nkey_name: my_keypair_dd2d\navailability_zone: nova\nflavor: \"{{ item.flavor}}\"\nstate: present\nnetwork: floatingIPv4\nregister: my_vm\nwith_items:\n- { name: vm1, flavor: 22 }\n- { name: vm2, flavor: 22 }\n- { name: vm3, flavor: 23 }\n- name: Add VM to inventory\nadd_host:\nname: \"{{ item.server.name }}\"\ngroups: openstack_vms\nansible_host: \"{{ item.server.public_v4 }}\"\nwith_items: \"{{ my_vm.results }}\"\n- name: Wait to be sure ssh is available\npause:\nseconds: 30<\/code><\/pre>\n<p>&nbsp;<\/p>\n<p>This time, we updated parameters of modules os_server and add_host. In os_server, the <strong>VM name and its flavor are replaced by <\/strong><a href=\"http:\/\/jinja.pocoo.org\/docs\/2.9\/\"><strong>Jinja2<\/strong><\/a><strong> templating placeholders<\/strong>. The purpose of parametrising those values is that we can set them differently for each VM. It is obvious that we need to differentiate the VMs by their name, the flavor templating was added to demonstrate that we can parameterize multiple values and has no specific reason. The placeholders are substituted during the execution by values defined under parameter with_items. This parameter is in our case an array with 3 items where each item defines specific values for its run \u2014 that means that in this example the os_server will run three times, every time with different name and flavor parameter.<\/p>\n<p>The same method is used in the add_host module. This time, we fill the parameter with_items with the <strong>results registered during the run of <\/strong><strong>os_server<\/strong>. Those results include, besides many other pieces of information, the <strong>name<\/strong> of the VM and its <strong>public IP<\/strong> address. This data is used to specify the host access points in inventory as well as in the previous example.<\/p>\n<p>Now, let\u2019s create playbook <em>vm_with_webserver2.yaml<\/em> that would connect the creation of multiple VMs with starting Apache webserver on each of them as we did with the single VM creation.<\/p>\n<p>&nbsp;<\/p>\n<pre><code>- include: deploy_multiple_vms.yaml\n- include: webserver.yaml<\/code><\/pre>\n<p>&nbsp;<\/p>\n<p>And run that playbook:<\/p>\n<p>&nbsp;<\/p>\n<pre><code>$ ANSIBLE_HOST_KEY_CHECKING=False ansible-playbook vm_with_webserver2.yaml<\/code><\/pre>\n<p>&nbsp;<\/p>\n<p>When you check the VMs in the Dashboard and type their IP address in your browser, you will again see the Apache2 Ubuntu Default Page.<\/p>\n<h2>Conclusion<\/h2>\n<p>Throughout this post, we went through the common use cases of ensuring VMs\u2019 state. We can make sure that a VM (or a group of VMs) is running in our environment. Then, we showed how to further use those VMs without the need of manually retyping their IP addresses. Finally, we presented a simple way how to ensure that a certain VM is not running anymore.<br \/>\nUsing Ansible for management of VMs in your infrastructure is straightforward, can be easily repeated and therefore enables to ensure a constant state of the deployed infrastructure that can be further used either with subsequent Ansible playbooks or in any other way.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>How to use Ansible with OpenStack VMs as hosts<\/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-5245","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 | Manage OpenStack VMs 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 | Edge Infrastructures\" \/>\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\/manage-openstack-vms-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 | Manage OpenStack VMs 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 | Edge Infrastructures\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.cloudandheat.com\/en\/manage-openstack-vms-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-09-01T07:25:54+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-03-08T15:04:29+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\/manage-openstack-vms-with-ansible\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.cloudandheat.com\/manage-openstack-vms-with-ansible\/\"},\"author\":{\"name\":\"Clemens M\u00fcller\",\"@id\":\"https:\/\/www.cloudandheat.com\/#\/schema\/person\/ba09b0c184d05469ca875d2cb5ba730a\"},\"headline\":\"Manage OpenStack VMs with Ansible\",\"datePublished\":\"2017-09-01T07:25:54+00:00\",\"dateModified\":\"2023-03-08T15:04:29+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.cloudandheat.com\/manage-openstack-vms-with-ansible\/\"},\"wordCount\":1519,\"publisher\":{\"@id\":\"https:\/\/www.cloudandheat.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.cloudandheat.com\/manage-openstack-vms-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\/manage-openstack-vms-with-ansible\/\",\"url\":\"https:\/\/www.cloudandheat.com\/manage-openstack-vms-with-ansible\/\",\"name\":\"Cloud&Heat | Manage OpenStack VMs with Ansible\",\"isPartOf\":{\"@id\":\"https:\/\/www.cloudandheat.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.cloudandheat.com\/manage-openstack-vms-with-ansible\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.cloudandheat.com\/manage-openstack-vms-with-ansible\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.cloudandheat.com\/wp-content\/uploads\/2016\/02\/2023-Cloud-and-Heat-Website-Blog-Vorlage-Headerbild.png\",\"datePublished\":\"2017-09-01T07:25:54+00:00\",\"dateModified\":\"2023-03-08T15:04:29+00:00\",\"description\":\"Cloud&Heat Technologies makes sustainability and security the drivers of digital innovation. | Future of compute | Cloud Security | Edge Infrastructures\",\"breadcrumb\":{\"@id\":\"https:\/\/www.cloudandheat.com\/manage-openstack-vms-with-ansible\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.cloudandheat.com\/manage-openstack-vms-with-ansible\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\/\/www.cloudandheat.com\/manage-openstack-vms-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\/manage-openstack-vms-with-ansible\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Startseite\",\"item\":\"https:\/\/www.cloudandheat.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Manage OpenStack VMs 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 | Manage OpenStack VMs with Ansible","description":"Cloud&amp;Heat Technologies makes sustainability and security the drivers of digital innovation. | Future of compute | Cloud Security | Edge Infrastructures","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\/manage-openstack-vms-with-ansible\/","og_locale":"en_GB","og_type":"article","og_title":"Cloud&Heat | Manage OpenStack VMs with Ansible","og_description":"Cloud&Heat Technologies makes sustainability and security the drivers of digital innovation. | Future of compute | Cloud Security | Edge Infrastructures","og_url":"https:\/\/www.cloudandheat.com\/en\/manage-openstack-vms-with-ansible\/","og_site_name":"Cloud &amp; Heat","article_publisher":"https:\/\/www.facebook.com\/CloudandHeat","article_published_time":"2017-09-01T07:25:54+00:00","article_modified_time":"2023-03-08T15:04:29+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\/manage-openstack-vms-with-ansible\/#article","isPartOf":{"@id":"https:\/\/www.cloudandheat.com\/manage-openstack-vms-with-ansible\/"},"author":{"name":"Clemens M\u00fcller","@id":"https:\/\/www.cloudandheat.com\/#\/schema\/person\/ba09b0c184d05469ca875d2cb5ba730a"},"headline":"Manage OpenStack VMs with Ansible","datePublished":"2017-09-01T07:25:54+00:00","dateModified":"2023-03-08T15:04:29+00:00","mainEntityOfPage":{"@id":"https:\/\/www.cloudandheat.com\/manage-openstack-vms-with-ansible\/"},"wordCount":1519,"publisher":{"@id":"https:\/\/www.cloudandheat.com\/#organization"},"image":{"@id":"https:\/\/www.cloudandheat.com\/manage-openstack-vms-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\/manage-openstack-vms-with-ansible\/","url":"https:\/\/www.cloudandheat.com\/manage-openstack-vms-with-ansible\/","name":"Cloud&amp;Heat | Manage OpenStack VMs with Ansible","isPartOf":{"@id":"https:\/\/www.cloudandheat.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.cloudandheat.com\/manage-openstack-vms-with-ansible\/#primaryimage"},"image":{"@id":"https:\/\/www.cloudandheat.com\/manage-openstack-vms-with-ansible\/#primaryimage"},"thumbnailUrl":"https:\/\/www.cloudandheat.com\/wp-content\/uploads\/2016\/02\/2023-Cloud-and-Heat-Website-Blog-Vorlage-Headerbild.png","datePublished":"2017-09-01T07:25:54+00:00","dateModified":"2023-03-08T15:04:29+00:00","description":"Cloud&amp;Heat Technologies makes sustainability and security the drivers of digital innovation. | Future of compute | Cloud Security | Edge Infrastructures","breadcrumb":{"@id":"https:\/\/www.cloudandheat.com\/manage-openstack-vms-with-ansible\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.cloudandheat.com\/manage-openstack-vms-with-ansible\/"]}]},{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/www.cloudandheat.com\/manage-openstack-vms-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\/manage-openstack-vms-with-ansible\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Startseite","item":"https:\/\/www.cloudandheat.com\/"},{"@type":"ListItem","position":2,"name":"Manage OpenStack VMs 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\/5245","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=5245"}],"version-history":[{"count":0,"href":"https:\/\/www.cloudandheat.com\/en\/wp-json\/wp\/v2\/posts\/5245\/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=5245"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.cloudandheat.com\/en\/wp-json\/wp\/v2\/categories?post=5245"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.cloudandheat.com\/en\/wp-json\/wp\/v2\/tags?post=5245"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}