{"id":8453,"date":"2015-07-29T17:07:15","date_gmt":"2015-07-29T15:07:15","guid":{"rendered":"http:\/\/blog.zhaw.ch\/icclab\/?p=8453"},"modified":"2015-07-29T17:07:15","modified_gmt":"2015-07-29T15:07:15","slug":"provisioning-openstack-with-foreman-and-packstack","status":"publish","type":"post","link":"https:\/\/blog.zhaw.ch\/icclab\/provisioning-openstack-with-foreman-and-packstack\/","title":{"rendered":"Provisioning Openstack with Foreman and Packstack"},"content":{"rendered":"<p>This post will describe how to set up <a href=\"http:\/\/theforeman.org\/\">Foreman<\/a> and provision an OpenStack environment via <a href=\"https:\/\/github.com\/stackforge\/packstack\">PackStack<\/a>. We demonstrate this through\u00a0OpenStack installation on two Nodes. Foreman 1.8\u00a0is\u00a0used to install the Host System on the Nodes and PackStack to provision OpenStack.<\/p>\n<h1>Installing Foreman<\/h1>\n<p>First thing we do is installing Foreman on the management host inside a VM and we use <a href=\"https:\/\/www.vagrantup.com\/\">Vagrant<\/a>\u00a0to have the installation part of Foreman already automated in case of redeployment. The requirements include:\u00a0<a>Vagrant<\/a> and <a href=\"https:\/\/www.virtualbox.org\/wiki\/Downloads\">VirtualBox<\/a> installed, as well as having the &#8220;Ubuntu\/Trusty64&#8221; box added to Vagrant.<\/p>\n<p><!--more--><\/p>\n<p>Execute the &#8220;vagrant init&#8221; command and open the Vagrant file with a text editor of your choice. After the\u00a0Vagrant file configuration, forward the port 443 to a port on the host and specify the private network; link the\u00a0script that will be run after the Ubuntu installation.<\/p>\n<pre><code>\r\n  config.vm.network \"forwarded_port\", guest: 443, host: 8080\r\n  config.vm.network \"private_network\", ip: \"192.168.33.10\"\r\n\r\n  config.vm.provision \"shell\", inline: &lt; \"files\/script.sh\"  \r\nend\r\n<\/code><\/pre>\n<p>The\u00a0script should automatically set the hostname as well as install the Foreman-installer. Make sure that it is placed at the location you point at in your Vagrant file.<\/p>\n<pre><code>\r\n#!\/bin\/bash\r\n    #Correcting the hostname\r\n    echo 127.0.0.1 localhost &gt; \/etc\/hosts\r\n    echo 10.0.2.15 foreman18.loc.local foreman18 &gt;&gt; \/etc\/hosts\r\n    \r\n    apt-get update\r\n    apt-get upgrade -y\r\n\r\n    #Download and Installation of Puppet:\r\n    apt-get -y install ca-certificates\r\n    wget https:\/\/apt.puppetlabs.com\/puppetlabs-release-utopic.deb\r\n    sudo dpkg -i puppetlabs-release-utopic.deb\r\n    #Download and Installation of the Foreman-Installer to install Foreman:\r\n    echo \"deb http:\/\/deb.theforeman.org\/ trusty 1.8\" &gt; \/etc\/apt\/sources.list.d\/foreman.list\r\n    echo \"deb http:\/\/deb.theforeman.org\/ plugins 1.8\" &gt;&gt; \/etc\/apt\/sources.list.d\/foreman.list\r\n    wget -q http:\/\/deb.theforeman.org\/pubkey.gpg -O- | apt-key add -\r\n    apt-get update &amp;&amp; apt-get -y install foreman-installer\r\n    reboot\r\nexit 0;\r\n<\/code><\/pre>\n<p>&nbsp;<\/p>\n<p>After creating the script.sh file, bring the Vagrant box up and ssh into the machine.<br \/>\nOne of the parameters to pass to the command that installs Foreman, is the\u00a0<a href=\"http:\/\/theforeman.org\/plugins\/foreman_discovery\/2.0\/\">Foreman Discovery Plugin<\/a> that enables Foreman to do automatic bare-metal discovery of unknown nodes on the provisioning network.<\/p>\n<pre><code>\r\n~$ sudo foreman-installer --enable-foreman-plugin-discovery --foreman-plugin-discovery-install-images=true\r\n<\/code><\/pre>\n<p>&nbsp;<\/p>\n<p>Write down the login credentials and then reboot the system. After the reboot you should be able to access Foreman under this address: <a>https:\/\/localhost:8080<\/a><\/p>\n<h1>Configuration of Foreman<\/h1>\n<p>Next step is the Provisioning Setup. Log into Foreman, then go to Infrastructure&#8211;&gt; Provisioning Setup and fill in the needed Information. You should fix a gateway for the network otherwise you would get problems when provisioning the machines.<br \/>\nIn our example we will use Foreman as DNS, DHCP, and GW. Our settings:<\/p>\n<p>Name: prov-network Network address*: 192.168.33.0 Network mask*: 255.255.255.0 Gateway: 192.168.33.10 (foreman) Primary DNS: (foreman) IPAM: DHCP Boot mode DHCP<\/p>\n<p>Submit and copy the displayed script that into the Terminal. After this step continue to the next window and select the Ubuntu Mirror under &#8220;Existing Medium&#8221; before submitting again. Now everything is done to provision the hosts.<\/p>\n<h1>Provisioning Hosts<\/h1>\n<p>The next task is to boot the hosts over the network (with PXE). Make sure that they are listed under hosts.<\/p>\n<p>If the error message &#8220;ip already given&#8221; pops up during the provisioning process, you have to ACK it and under Network settings, press &#8220;Suggest new one&#8221;. Repeat this step for each host.<\/p>\n<p>After the provision you need to change the name of the interfaces. It is important that all the interfaces are mapped the same way on all of the hosts.<\/p>\n<p>For example:<\/p>\n<pre><code>\r\ncontroller-node:\r\neth0 --&gt; private\r\neth1 --&gt; public\r\n\r\ncompute:\r\neth0 --&gt; private\r\n<\/code><\/pre>\n<p>The following commands need to be executed on each host.<\/p>\n<p>First add to &#8220;\/etc\/default\/grub&#8221; the :<\/p>\n<pre><code>\r\nsudo vi \/etc\/default\/grub\r\n\r\nnet.ifnames=0\r\nGRUB_CMDLINE_LINUX=\"rd.lvm.lv=centos_somename-controller\/root splash=quiet nofb crashkernel=auto rd.lvm.lv=centos_somename-controller\/swap net.ifnames=0 rhgb quiet\"\r\n<\/code><\/pre>\n<p>This line is needed to assign the same name to the\u00a0network interfaces &#8211;\u00a0a requirement from OpenStack.<\/p>\n<p>Afterwards execute the following command and reboot the machine:<\/p>\n<pre><code>\r\nsudo grub2-mkconfig -o \/boot\/grub2\/grub.cfg\r\n<\/code><\/pre>\n<p>When the machine has finished rebooting you need to add the following line to &#8220;\/etc\/udev\/rules.d\/70-persistent-net.rules&#8221;:<\/p>\n<pre><code>\r\nsudo vi \/etc\/udev\/rules.d\/70-persistent-net.rules\r\n\r\nSUBSYSTEM==\"net\", ACTION==\"add\", DRIVERS==\"?*\", ATTR{address}==\"b0:83:fe:5e:f1:ec\", ATTR{type}==\"1\", KERNEL==\"eth*\", NAME=\"eth0\"\r\n<\/code><\/pre>\n<p>Remember that you have to do the steps above for each of the hosts.<\/p>\n<h2>Preparation of the Nodes for the OpenStack installation<\/h2>\n<p>We now prepare the Nodes for the next step, the OpenStack installation.<\/p>\n<p>First, disable firewalld:<\/p>\n<pre><code>\r\nsystemctl stop firewalld\r\nsystemctl disable firewalld\r\n<\/code><\/pre>\n<p>Than, set SELINUX\u00a0to permissive:<\/p>\n<pre><code>\r\nsetenforce 0\r\nvim \/etc\/sysconfig\/selinux\r\n\r\nSELINUX=permissive \r\n<\/code><\/pre>\n<p>Afterwards, disable the Network Manager and migrate to &#8220;network&#8221; before rebooting the machines:<\/p>\n<pre><code>\r\nsystemctl disable NetworkManager\r\nsystemctl stop NetworkManager\r\nsystemctl enable network\r\n<\/code><\/pre>\n<p>When the reboot has finished check if all the &#8220;ifcfg-*&#8221; files look sane under &#8220;\/etc\/sysconfig\/network-scripts\/&#8221;. If they are sane they will look similar to this:<\/p>\n<pre><code>\r\nNM_CONTROLLED=no\r\nBOOTPROTO=none\r\nONBOOT=yes\r\nIPADDR=192.168.56.53\r\nNETMASK=255.255.255.0\r\nDEVICE=enp0s8\r\n<\/code><\/pre>\n<h2>Controller node interface configuration<\/h2>\n<p>Now we will configure the interface of the OpenStack controller node.<\/p>\n<pre><code>\r\ncat \/etc\/sysconfig\/network-scripts\/ifcfg-p4p2\r\n\r\n# Generated by dracut initrd\r\nNAME=\"p4p2\"\r\nNM_CONTROLLED=no\r\nDEVICE=\"p4p2\"\r\nONBOOT=yes\r\nNETBOOT=yes\r\nUUID=\"e5177752-e509-4d8c-b88d-a98ce263a06a\"\r\nBOOTPROTO=none\r\nIPADDR=10.20.0.104\r\nNETMASK=255.255.255.0\r\nTYPE=Ethernet\r\n<\/code><\/pre>\n<p>Also set the gateway in &#8220;\/etc\/sysconfig\/network&#8221;.<\/p>\n<pre><code>\r\nvim \/etc\/sysconfig\/network\r\n\r\n# Created by anaconda\r\nGATEWAY=10.90.0.244\r\n<\/code><\/pre>\n<p>The next step is to install PackStack and let it create the OpenStack environment, by passing it a so called &#8220;answer file&#8221; you previously create. It is very important that you configure your own answer file as it is tightly coupled to the particular environment. The process may take you several re-runs of the answer file until you fully eliminate any error and finish the process successfully.<\/p>\n<h2>PackStack<\/h2>\n<p>To install PackStack execute the following commands:<\/p>\n<pre><code>\r\nsudo yum update -y\r\nsudo yum install -y https:\/\/rdoproject.org\/repos\/rdo-release.rpm\r\nsudo yum install -y openstack-packstack\r\n<\/code><\/pre>\n<p>&nbsp;<\/p>\n<p>Finally, to\u00a0let PackStack set up the OpenStack environment, we pass it the &#8220;answer_file_name&#8221; file we created.<\/p>\n<pre><code>\r\npackstack --anwser-file=[answer_file_name]\r\n<\/code><\/pre>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This post will describe how to set up Foreman and provision an OpenStack environment via PackStack. We demonstrate this through\u00a0OpenStack installation on two Nodes. Foreman 1.8\u00a0is\u00a0used to install the Host System on the Nodes and PackStack to provision OpenStack. Installing Foreman First thing we do is installing Foreman on the management host inside a VM [&hellip;]<\/p>\n","protected":false},"author":152,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[1],"tags":[],"features":[],"class_list":["post-8453","post","type-post","status-publish","format-standard","hentry","category-allgemein"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.2) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Provisioning Openstack with Foreman and Packstack - Service Engineering (ICCLab &amp; SPLab)<\/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:\/\/blog.zhaw.ch\/icclab\/provisioning-openstack-with-foreman-and-packstack\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Provisioning Openstack with Foreman and Packstack\" \/>\n<meta property=\"og:description\" content=\"This post will describe how to set up Foreman and provision an OpenStack environment via PackStack. We demonstrate this through\u00a0OpenStack installation on two Nodes. Foreman 1.8\u00a0is\u00a0used to install the Host System on the Nodes and PackStack to provision OpenStack. Installing Foreman First thing we do is installing Foreman on the management host inside a VM [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.zhaw.ch\/icclab\/provisioning-openstack-with-foreman-and-packstack\/\" \/>\n<meta property=\"og:site_name\" content=\"Service Engineering (ICCLab &amp; SPLab)\" \/>\n<meta property=\"article:published_time\" content=\"2015-07-29T15:07:15+00:00\" \/>\n<meta name=\"author\" content=\"itte\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"itte\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/provisioning-openstack-with-foreman-and-packstack\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/provisioning-openstack-with-foreman-and-packstack\/\"},\"author\":{\"name\":\"itte\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/d53ccb0b9594b0ffc89870b0e97dfb38\"},\"headline\":\"Provisioning Openstack with Foreman and Packstack\",\"datePublished\":\"2015-07-29T15:07:15+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/provisioning-openstack-with-foreman-and-packstack\/\"},\"wordCount\":709,\"commentCount\":0,\"articleSection\":[\"*.*\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/blog.zhaw.ch\/icclab\/provisioning-openstack-with-foreman-and-packstack\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/provisioning-openstack-with-foreman-and-packstack\/\",\"url\":\"https:\/\/blog.zhaw.ch\/icclab\/provisioning-openstack-with-foreman-and-packstack\/\",\"name\":\"Provisioning Openstack with Foreman and Packstack - Service Engineering (ICCLab &amp; SPLab)\",\"isPartOf\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#website\"},\"datePublished\":\"2015-07-29T15:07:15+00:00\",\"author\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/d53ccb0b9594b0ffc89870b0e97dfb38\"},\"breadcrumb\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/provisioning-openstack-with-foreman-and-packstack\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.zhaw.ch\/icclab\/provisioning-openstack-with-foreman-and-packstack\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/provisioning-openstack-with-foreman-and-packstack\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Startseite\",\"item\":\"https:\/\/blog.zhaw.ch\/icclab\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Provisioning Openstack with Foreman and Packstack\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#website\",\"url\":\"https:\/\/blog.zhaw.ch\/icclab\/\",\"name\":\"Service Engineering (ICCLab &amp; SPLab)\",\"description\":\"A Blog of the ZHAW Zurich University of Applied Sciences\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blog.zhaw.ch\/icclab\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/d53ccb0b9594b0ffc89870b0e97dfb38\",\"name\":\"itte\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/e7b1851b222e3654d4c9868ef7e1a40c53657fc5e52d544da24db6c1d7d3c829?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/e7b1851b222e3654d4c9868ef7e1a40c53657fc5e52d544da24db6c1d7d3c829?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/e7b1851b222e3654d4c9868ef7e1a40c53657fc5e52d544da24db6c1d7d3c829?s=96&d=mm&r=g\",\"caption\":\"itte\"},\"url\":\"https:\/\/blog.zhaw.ch\/icclab\/author\/itte\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Provisioning Openstack with Foreman and Packstack - Service Engineering (ICCLab &amp; SPLab)","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:\/\/blog.zhaw.ch\/icclab\/provisioning-openstack-with-foreman-and-packstack\/","og_locale":"en_US","og_type":"article","og_title":"Provisioning Openstack with Foreman and Packstack","og_description":"This post will describe how to set up Foreman and provision an OpenStack environment via PackStack. We demonstrate this through\u00a0OpenStack installation on two Nodes. Foreman 1.8\u00a0is\u00a0used to install the Host System on the Nodes and PackStack to provision OpenStack. Installing Foreman First thing we do is installing Foreman on the management host inside a VM [&hellip;]","og_url":"https:\/\/blog.zhaw.ch\/icclab\/provisioning-openstack-with-foreman-and-packstack\/","og_site_name":"Service Engineering (ICCLab &amp; SPLab)","article_published_time":"2015-07-29T15:07:15+00:00","author":"itte","twitter_card":"summary_large_image","twitter_misc":{"Written by":"itte","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blog.zhaw.ch\/icclab\/provisioning-openstack-with-foreman-and-packstack\/#article","isPartOf":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/provisioning-openstack-with-foreman-and-packstack\/"},"author":{"name":"itte","@id":"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/d53ccb0b9594b0ffc89870b0e97dfb38"},"headline":"Provisioning Openstack with Foreman and Packstack","datePublished":"2015-07-29T15:07:15+00:00","mainEntityOfPage":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/provisioning-openstack-with-foreman-and-packstack\/"},"wordCount":709,"commentCount":0,"articleSection":["*.*"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blog.zhaw.ch\/icclab\/provisioning-openstack-with-foreman-and-packstack\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blog.zhaw.ch\/icclab\/provisioning-openstack-with-foreman-and-packstack\/","url":"https:\/\/blog.zhaw.ch\/icclab\/provisioning-openstack-with-foreman-and-packstack\/","name":"Provisioning Openstack with Foreman and Packstack - Service Engineering (ICCLab &amp; SPLab)","isPartOf":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/#website"},"datePublished":"2015-07-29T15:07:15+00:00","author":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/d53ccb0b9594b0ffc89870b0e97dfb38"},"breadcrumb":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/provisioning-openstack-with-foreman-and-packstack\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.zhaw.ch\/icclab\/provisioning-openstack-with-foreman-and-packstack\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/blog.zhaw.ch\/icclab\/provisioning-openstack-with-foreman-and-packstack\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Startseite","item":"https:\/\/blog.zhaw.ch\/icclab\/"},{"@type":"ListItem","position":2,"name":"Provisioning Openstack with Foreman and Packstack"}]},{"@type":"WebSite","@id":"https:\/\/blog.zhaw.ch\/icclab\/#website","url":"https:\/\/blog.zhaw.ch\/icclab\/","name":"Service Engineering (ICCLab &amp; SPLab)","description":"A Blog of the ZHAW Zurich University of Applied Sciences","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.zhaw.ch\/icclab\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/d53ccb0b9594b0ffc89870b0e97dfb38","name":"itte","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/e7b1851b222e3654d4c9868ef7e1a40c53657fc5e52d544da24db6c1d7d3c829?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/e7b1851b222e3654d4c9868ef7e1a40c53657fc5e52d544da24db6c1d7d3c829?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/e7b1851b222e3654d4c9868ef7e1a40c53657fc5e52d544da24db6c1d7d3c829?s=96&d=mm&r=g","caption":"itte"},"url":"https:\/\/blog.zhaw.ch\/icclab\/author\/itte\/"}]}},"_links":{"self":[{"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/posts\/8453","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/users\/152"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/comments?post=8453"}],"version-history":[{"count":16,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/posts\/8453\/revisions"}],"predecessor-version":[{"id":8496,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/posts\/8453\/revisions\/8496"}],"wp:attachment":[{"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/media?parent=8453"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/categories?post=8453"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/tags?post=8453"},{"taxonomy":"features","embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/features?post=8453"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}