{"id":8431,"date":"2015-07-06T11:59:35","date_gmt":"2015-07-06T09:59:35","guid":{"rendered":"http:\/\/blog.zhaw.ch\/icclab\/?p=8431"},"modified":"2015-07-07T10:33:16","modified_gmt":"2015-07-07T08:33:16","slug":"extending-the-openstack-dashboard-to-support-delay-tolerant-workload","status":"publish","type":"post","link":"https:\/\/blog.zhaw.ch\/icclab\/extending-the-openstack-dashboard-to-support-delay-tolerant-workload\/","title":{"rendered":"Extending the Openstack Dashboard to support Delay Tolerant Workload"},"content":{"rendered":"<p><em>[This post was originally published on the <a href=\"http:\/\/www.geyser-project.eu\/index.php?option=com_content&amp;view=article&amp;id=90:extending-the-openstack-dashboard-to-support-delay-tolerant-workload&amp;catid=7&amp;Itemid=233\">GEYSER blog<\/a>. ICCLab is a partner in GEYSER and is responsible for\u00a0developing workload migration mechanisms\u00a0and other activities.]<\/em><\/p>\n<p>Scheduling workload in the cloud is an important capability which can be used to realize energy savings and it is the focus of some of our activities within the <a href=\"http:\/\/www.geyser-project.eu\/\">GEYSER<\/a> project. The most prominent open source cloud stack &#8211; Openstack &#8211; provides little support for more flexible scheduling of workload, particularly pertaining to delay-tolerant work. The existing Openstack scheduler, within the <a href=\"http:\/\/www.openstack.org\/software\/openstack-compute\/\">nova<\/a> component, launches every request in a sequential fashion &#8211; first-come-first-served &#8211; and consequently does not offer the required flexibility. Of course there is more intelligence in the scheduler such that certain hosts can be given higher priority with weightings, or filters can be used to prevent work from operating on other hosts, but it does not give the freedom to choose the time a VM\/workload should be started. So, we developed a basic \u00b5service which enables work to be scheduled for specific future points in time &#8211; the system is well integrated with the Openstack dashboard and we describe it here.<\/p>\n<p><!--more-->Currently, the system supports scheduling of work (in the form of VMs) at some specific time in the future: a user can indicate that they want a specific VM &#8211; including the image type, the flavour type, etc &#8211; to be started at a specific time. The request is retained in a queue until this time and then the Openstack APIs will be used to start the work. The work can be scheduled either directly via the Openstack Horizon dashboard (with our extensions) or using the service interface to the \u00b5service. The system also supports removal of work from the queue if required.<\/p>\n<p>The implementation comprises of three basic components &#8211; the API, the scheduling logic and a database to store information relating to the queued work. The basic architecture is illustrated below. Note that as the implementation involved modifications to the <a href=\"http:\/\/www.openstack.org\/software\/openstack-dashboard\/\">Horizon dashboard<\/a>, there is not a clear separation between the cloud stack and the new functionality; however, in principal, there is no reason why this capability could not be applied to another cloud stack.<\/p>\n<p><a href=\"http:\/\/blog.zhaw.ch\/icclab\/files\/2015\/07\/Scheduler-Architecture.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\" size-medium wp-image-8432 aligncenter\" src=\"http:\/\/blog.zhaw.ch\/icclab\/files\/2015\/07\/Scheduler-Architecture-300x278.jpg\" alt=\"Scheduler-Architecture\" width=\"300\" height=\"278\" srcset=\"https:\/\/blog.zhaw.ch\/icclab\/files\/2015\/07\/Scheduler-Architecture-300x278.jpg 300w, https:\/\/blog.zhaw.ch\/icclab\/files\/2015\/07\/Scheduler-Architecture-323x300.jpg 323w, https:\/\/blog.zhaw.ch\/icclab\/files\/2015\/07\/Scheduler-Architecture.jpg 525w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<ul>\n<li><b><b>API:<\/b><\/b> Receive requests from horizon dashboard and cloud users, the request then is redirected to Scheduler and persisted into the DB. The current api calls supported are shown below.<\/li>\n<\/ul>\n<hr \/>\n<p style=\"text-align: left\"><strong>GET<\/strong> \u00a0\/scheduler \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<b>List Delay Tolerant Workloads<\/b><\/p>\n<p style=\"text-align: right\">List Name, Description, Image Name, Status and Deadline.<\/p>\n<hr \/>\n<p style=\"text-align: left\"><strong>POST<\/strong> \u00a0\/scheduler \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\u00a0<b>Create Delay Tolerant Workload <\/b><\/p>\n<p style=\"text-align: right\">Creates a delay tolerant workload.<\/p>\n<hr \/>\n<p style=\"text-align: left\"><strong>GET<\/strong> \/scheduler\/{id} \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<b>Get Delay Tolerant Workload Details<\/b><\/p>\n<p style=\"text-align: right\">List details of a specific delay tolerant workload.<\/p>\n<hr \/>\n<p style=\"text-align: left\"><strong>PUT<\/strong> \u00a0\/scheduler\/{id} \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\u00a0<b>Update Delay Tolerant Workload Details<\/b><\/p>\n<p style=\"text-align: right\">Update attributes of the specific delay tolerant workload.<\/p>\n<hr \/>\n<p style=\"text-align: left\"><strong>DELETE<\/strong> \u00a0\/scheduler\/{id} \u00a0\u00a0 \u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<b>Remove Delay Tolerant Workload<\/b> <strong>Details<\/strong><\/p>\n<p style=\"text-align: right\">Removes a specific delay tolerant workload.<br \/>\n<b>\u00a0\u00a0\u00a0 <\/b><\/p>\n<ul>\n<li><b><b>Scheduler: <\/b><\/b>Core feature of the \u00b5service, queue requests according to user input &#8211; the queue is updated in every request sorting itself \u00a0in an ascendent fashion.<\/li>\n<\/ul>\n<ul>\n<li><b><b>DB: <\/b><\/b>Persists data in case system breaks, data is retrieved from scheduler and horizon.<\/li>\n<\/ul>\n<p>Extending the horizon dashboard was relatively straightforward and there are many good quality sources available explaining how to do so (see <a href=\"http:\/\/keithtenzer.com\/2015\/02\/16\/building-custom-dashboards-in-openstack-horizon\/\">here<\/a>, <a href=\"http:\/\/docs.openstack.org\/developer\/horizon\/topics\/customizing.html\">here<\/a> or <a href=\"http:\/\/docs.openstack.org\/developer\/horizon\/topics\/tutorial.html\">here<\/a>.) In general, we found that it did not require so many modifications to horizon, although there are some subtleties around the assumed directory structure and the code. Although the system is implemented in Django, it is not necessary to understand it in detail to make changes. Finally, for developing enhancements such as this, it is useful to add a second dashboard to your existing cloud infrastructure &#8211; this can work entirely independently from the main\/production dashboard.<\/p>\n<p>The system was implemented in python and the code will be published online soon.<\/p>\n<p>The video below shows a demo of our \u00b5service running in an experimental Openstack deployment.<\/p>\n<div class=\"lyte-wrapper\" title=\"Geyser - Delay Tolerant Workload\" style=\"width:640px;max-width:100%;margin:5px;\"><div class=\"lyMe\" id=\"WYL_5JGD4uGrxU8\"><div id=\"lyte_5JGD4uGrxU8\" data-src=\"https:\/\/blog.zhaw.ch\/icclab\/wp-content\/plugins\/wp-youtube-lyte\/lyteCache.php?origThumbUrl=https%3A%2F%2Fi.ytimg.com%2Fvi%2F5JGD4uGrxU8%2Fhqdefault.jpg\" class=\"pL\"><div class=\"tC\"><div class=\"tT\">Geyser - Delay Tolerant Workload<\/div><\/div><div class=\"play\"><\/div><div class=\"ctrl\"><div class=\"Lctrl\"><\/div><div class=\"Rctrl\"><\/div><\/div><\/div><noscript><a href=\"https:\/\/youtu.be\/5JGD4uGrxU8\" rel=\"nofollow\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.zhaw.ch\/icclab\/wp-content\/plugins\/wp-youtube-lyte\/lyteCache.php?origThumbUrl=https%3A%2F%2Fi.ytimg.com%2Fvi%2F5JGD4uGrxU8%2F0.jpg\" alt=\"Geyser - Delay Tolerant Workload\" width=\"640\" height=\"340\" \/><br \/>Watch this video on YouTube<\/a><\/noscript><\/div><\/div><div class=\"lL\" style=\"max-width:100%;width:640px;margin:5px;\"><br\/><span class=\"lyte_disclaimer\">Defaulttext aus wp-youtube-lyte.php<\/span><\/div><\/p>\n<p>This initial variant has somewhat limited capabilities. new functionalities are in the pipe to provide \u00a0better \u00a0support for Openstack services (<a href=\"http:\/\/www.openstack.org\/software\/openstack-networking\/\">Neutron<\/a>, <a href=\"http:\/\/www.openstack.org\/software\/openstack-storage\/\">Cinder<\/a> and other projects) as well as greater \u00a0intelligence to the \u00b5service. Ultimately, this will be combined with server energy consumption information to \u00a0determine the scheduling that can result in the greatest energy efficiency bearing in mind the deadline provided by the user.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>[This post was originally published on the GEYSER blog. ICCLab is a partner in GEYSER and is responsible for\u00a0developing workload migration mechanisms\u00a0and other activities.] Scheduling workload in the cloud is an important capability which can be used to realize energy savings and it is the focus of some of our activities within the GEYSER project. [&hellip;]<\/p>\n","protected":false},"author":101,"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-8431","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>Extending the Openstack Dashboard to support Delay Tolerant Workload - 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\/extending-the-openstack-dashboard-to-support-delay-tolerant-workload\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Extending the Openstack Dashboard to support Delay Tolerant Workload\" \/>\n<meta property=\"og:description\" content=\"[This post was originally published on the GEYSER blog. ICCLab is a partner in GEYSER and is responsible for\u00a0developing workload migration mechanisms\u00a0and other activities.] Scheduling workload in the cloud is an important capability which can be used to realize energy savings and it is the focus of some of our activities within the GEYSER project. [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.zhaw.ch\/icclab\/extending-the-openstack-dashboard-to-support-delay-tolerant-workload\/\" \/>\n<meta property=\"og:site_name\" content=\"Service Engineering (ICCLab &amp; SPLab)\" \/>\n<meta property=\"article:published_time\" content=\"2015-07-06T09:59:35+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2015-07-07T08:33:16+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/blog.zhaw.ch\/icclab\/files\/2015\/07\/Scheduler-Architecture-300x278.jpg\" \/>\n<meta name=\"author\" content=\"Bruno Grazioli\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Bruno Grazioli\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/extending-the-openstack-dashboard-to-support-delay-tolerant-workload\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/extending-the-openstack-dashboard-to-support-delay-tolerant-workload\/\"},\"author\":{\"name\":\"Bruno Grazioli\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/769a2455bfa3cbcc87857218f19abeba\"},\"headline\":\"Extending the Openstack Dashboard to support Delay Tolerant Workload\",\"datePublished\":\"2015-07-06T09:59:35+00:00\",\"dateModified\":\"2015-07-07T08:33:16+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/extending-the-openstack-dashboard-to-support-delay-tolerant-workload\/\"},\"wordCount\":715,\"commentCount\":0,\"image\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/extending-the-openstack-dashboard-to-support-delay-tolerant-workload\/#primaryimage\"},\"thumbnailUrl\":\"http:\/\/blog.zhaw.ch\/icclab\/files\/2015\/07\/Scheduler-Architecture-300x278.jpg\",\"articleSection\":[\"*.*\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/blog.zhaw.ch\/icclab\/extending-the-openstack-dashboard-to-support-delay-tolerant-workload\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/extending-the-openstack-dashboard-to-support-delay-tolerant-workload\/\",\"url\":\"https:\/\/blog.zhaw.ch\/icclab\/extending-the-openstack-dashboard-to-support-delay-tolerant-workload\/\",\"name\":\"Extending the Openstack Dashboard to support Delay Tolerant Workload - Service Engineering (ICCLab &amp; SPLab)\",\"isPartOf\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/extending-the-openstack-dashboard-to-support-delay-tolerant-workload\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/extending-the-openstack-dashboard-to-support-delay-tolerant-workload\/#primaryimage\"},\"thumbnailUrl\":\"http:\/\/blog.zhaw.ch\/icclab\/files\/2015\/07\/Scheduler-Architecture-300x278.jpg\",\"datePublished\":\"2015-07-06T09:59:35+00:00\",\"dateModified\":\"2015-07-07T08:33:16+00:00\",\"author\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/769a2455bfa3cbcc87857218f19abeba\"},\"breadcrumb\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/extending-the-openstack-dashboard-to-support-delay-tolerant-workload\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.zhaw.ch\/icclab\/extending-the-openstack-dashboard-to-support-delay-tolerant-workload\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/extending-the-openstack-dashboard-to-support-delay-tolerant-workload\/#primaryimage\",\"url\":\"https:\/\/blog.zhaw.ch\/icclab\/files\/2015\/07\/Scheduler-Architecture.jpg\",\"contentUrl\":\"https:\/\/blog.zhaw.ch\/icclab\/files\/2015\/07\/Scheduler-Architecture.jpg\",\"width\":525,\"height\":487},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/extending-the-openstack-dashboard-to-support-delay-tolerant-workload\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Startseite\",\"item\":\"https:\/\/blog.zhaw.ch\/icclab\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Extending the Openstack Dashboard to support Delay Tolerant Workload\"}]},{\"@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\/769a2455bfa3cbcc87857218f19abeba\",\"name\":\"Bruno Grazioli\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/07d475be0415d5914aa49599b3295e4d972f971e46f5d7ab89d474327ab7b5f0?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/07d475be0415d5914aa49599b3295e4d972f971e46f5d7ab89d474327ab7b5f0?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/07d475be0415d5914aa49599b3295e4d972f971e46f5d7ab89d474327ab7b5f0?s=96&d=mm&r=g\",\"caption\":\"Bruno Grazioli\"},\"url\":\"https:\/\/blog.zhaw.ch\/icclab\/author\/gaea\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Extending the Openstack Dashboard to support Delay Tolerant Workload - 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\/extending-the-openstack-dashboard-to-support-delay-tolerant-workload\/","og_locale":"en_US","og_type":"article","og_title":"Extending the Openstack Dashboard to support Delay Tolerant Workload","og_description":"[This post was originally published on the GEYSER blog. ICCLab is a partner in GEYSER and is responsible for\u00a0developing workload migration mechanisms\u00a0and other activities.] Scheduling workload in the cloud is an important capability which can be used to realize energy savings and it is the focus of some of our activities within the GEYSER project. [&hellip;]","og_url":"https:\/\/blog.zhaw.ch\/icclab\/extending-the-openstack-dashboard-to-support-delay-tolerant-workload\/","og_site_name":"Service Engineering (ICCLab &amp; SPLab)","article_published_time":"2015-07-06T09:59:35+00:00","article_modified_time":"2015-07-07T08:33:16+00:00","og_image":[{"url":"http:\/\/blog.zhaw.ch\/icclab\/files\/2015\/07\/Scheduler-Architecture-300x278.jpg","type":"","width":"","height":""}],"author":"Bruno Grazioli","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Bruno Grazioli","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blog.zhaw.ch\/icclab\/extending-the-openstack-dashboard-to-support-delay-tolerant-workload\/#article","isPartOf":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/extending-the-openstack-dashboard-to-support-delay-tolerant-workload\/"},"author":{"name":"Bruno Grazioli","@id":"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/769a2455bfa3cbcc87857218f19abeba"},"headline":"Extending the Openstack Dashboard to support Delay Tolerant Workload","datePublished":"2015-07-06T09:59:35+00:00","dateModified":"2015-07-07T08:33:16+00:00","mainEntityOfPage":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/extending-the-openstack-dashboard-to-support-delay-tolerant-workload\/"},"wordCount":715,"commentCount":0,"image":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/extending-the-openstack-dashboard-to-support-delay-tolerant-workload\/#primaryimage"},"thumbnailUrl":"http:\/\/blog.zhaw.ch\/icclab\/files\/2015\/07\/Scheduler-Architecture-300x278.jpg","articleSection":["*.*"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blog.zhaw.ch\/icclab\/extending-the-openstack-dashboard-to-support-delay-tolerant-workload\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blog.zhaw.ch\/icclab\/extending-the-openstack-dashboard-to-support-delay-tolerant-workload\/","url":"https:\/\/blog.zhaw.ch\/icclab\/extending-the-openstack-dashboard-to-support-delay-tolerant-workload\/","name":"Extending the Openstack Dashboard to support Delay Tolerant Workload - Service Engineering (ICCLab &amp; SPLab)","isPartOf":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/extending-the-openstack-dashboard-to-support-delay-tolerant-workload\/#primaryimage"},"image":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/extending-the-openstack-dashboard-to-support-delay-tolerant-workload\/#primaryimage"},"thumbnailUrl":"http:\/\/blog.zhaw.ch\/icclab\/files\/2015\/07\/Scheduler-Architecture-300x278.jpg","datePublished":"2015-07-06T09:59:35+00:00","dateModified":"2015-07-07T08:33:16+00:00","author":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/769a2455bfa3cbcc87857218f19abeba"},"breadcrumb":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/extending-the-openstack-dashboard-to-support-delay-tolerant-workload\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.zhaw.ch\/icclab\/extending-the-openstack-dashboard-to-support-delay-tolerant-workload\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blog.zhaw.ch\/icclab\/extending-the-openstack-dashboard-to-support-delay-tolerant-workload\/#primaryimage","url":"https:\/\/blog.zhaw.ch\/icclab\/files\/2015\/07\/Scheduler-Architecture.jpg","contentUrl":"https:\/\/blog.zhaw.ch\/icclab\/files\/2015\/07\/Scheduler-Architecture.jpg","width":525,"height":487},{"@type":"BreadcrumbList","@id":"https:\/\/blog.zhaw.ch\/icclab\/extending-the-openstack-dashboard-to-support-delay-tolerant-workload\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Startseite","item":"https:\/\/blog.zhaw.ch\/icclab\/"},{"@type":"ListItem","position":2,"name":"Extending the Openstack Dashboard to support Delay Tolerant Workload"}]},{"@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\/769a2455bfa3cbcc87857218f19abeba","name":"Bruno Grazioli","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/07d475be0415d5914aa49599b3295e4d972f971e46f5d7ab89d474327ab7b5f0?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/07d475be0415d5914aa49599b3295e4d972f971e46f5d7ab89d474327ab7b5f0?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/07d475be0415d5914aa49599b3295e4d972f971e46f5d7ab89d474327ab7b5f0?s=96&d=mm&r=g","caption":"Bruno Grazioli"},"url":"https:\/\/blog.zhaw.ch\/icclab\/author\/gaea\/"}]}},"_links":{"self":[{"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/posts\/8431","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\/101"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/comments?post=8431"}],"version-history":[{"count":12,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/posts\/8431\/revisions"}],"predecessor-version":[{"id":8443,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/posts\/8431\/revisions\/8443"}],"wp:attachment":[{"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/media?parent=8431"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/categories?post=8431"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/tags?post=8431"},{"taxonomy":"features","embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/features?post=8431"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}