{"id":7318,"date":"2015-01-23T17:31:59","date_gmt":"2015-01-23T15:31:59","guid":{"rendered":"http:\/\/blog.zhaw.ch\/icclab\/?p=7318"},"modified":"2015-01-23T23:02:23","modified_gmt":"2015-01-23T21:02:23","slug":"smartdatacenter-apis-turning-up-the-heat","status":"publish","type":"post","link":"https:\/\/blog.zhaw.ch\/icclab\/smartdatacenter-apis-turning-up-the-heat\/","title":{"rendered":"SmartDataCenter APIs &#8211; turning up the Heat"},"content":{"rendered":"<p>As mentioned in the first <a title=\"Introduction to SmartDataCenter\" href=\"http:\/\/blog.zhaw.ch\/icclab\/introduction-to-smartdatacenter\/\">post<\/a> about SmartDataCenter, it features various APIs. In this post we will have a look at them. Further I\u00a0would like to present sdcadmin &amp; sdc-heat, two small Python projects I have been working on. The former is a Python client library for SDCs admin APIs. The latter is an OpenStack Heat plugin that allows provisioning of SmartMachines and KVM VMs on SDC.<\/p>\n<p><!--more--><\/p>\n<p>For the customers, there is a public facing REST API called the cloudapi. It is the only API that a customer reaches and is also used for the <a href=\"https:\/\/www.joyent.com\/public-cloud\">Joyent public cloud<\/a>. The full\u00a0documentation can be\u00a0found <a href=\"https:\/\/apidocs.joyent.com\/cloudapi\/\">here<\/a>. It allows\u00a0management of various resources, ranging from VMs to sub-users of your account. A small example for SSH keys associated with a\u00a0login:<br \/>\n<code>GET \/:login\/keys<\/code> will return\u00a0a list of all SSH keys for the specified <code>:login<\/code>, while <code>POST \/:login\/keys<\/code> with the correct data sent will register\u00a0a new one.<\/p>\n<p>For authorization, the cloudapi uses something rather special: every HTTP request must be signed with a registered\u00a0SSH private key. The <code>Authorization<\/code> field should look like this:<\/p>\n<pre>Authorization: Signature keyId=\"\/loginname\/keys\/my-key\",algorithm=\"rsa-sha256\" &lt;Base64(rsa(sha256($Date)))&gt;<\/pre>\n<p>Where\u00a0<code>\/loginname\/keys\/my-key<\/code> corresponds to <code>\/:login\/keys\/:key-name<\/code> and <code>Base64(rsa(sha256($Date)))&gt;<\/code> to the Base64-encoded RSA digital signature of the date of the header, created with the mentioned key. Details are found <a href=\"https:\/\/www.joyent.com\/blog\/a-bit-more-about-the-new-joyent-cloud-api\/\">here<\/a>\u00a0and <a href=\"https:\/\/github.com\/joyent\/node-http-signature\/blob\/master\/http_signing.md\">here<\/a>.<\/p>\n<p>To interact with the cloudapi, Joyent provides the\u00a0node.js package <a href=\"https:\/\/www.npmjs.com\/package\/smartdc\">smartdc<\/a> which doubles as a CLI as well for the use in your own programs. There is also a version for <a href=\"https:\/\/pypi.python.org\/pypi\/smartdc\/0.2.0\">Python<\/a> by <a href=\"http:\/\/cloud.telefonica.com\/\">Telef\u00f3nica<\/a>.<\/p>\n<hr \/>\n<p>To accomplish the actual tasks, the cloudapi talks to the internal APIs on the admin network. In the following pictures a simplified version of SDCs services and their connectivity to the admin and external network is shown. A full overview is found <a href=\"https:\/\/github.com\/joyent\/sdc\/blob\/master\/docs\/developer-guide\/architecture.md\">here<\/a>.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-7358\" src=\"http:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/SDC-Services-1024x500.png\" alt=\"SDC - Services\" width=\"584\" height=\"285\" srcset=\"https:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/SDC-Services-1024x500.png 1024w, https:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/SDC-Services-300x146.png 300w, https:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/SDC-Services-500x244.png 500w, https:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/SDC-Services.png 1997w\" sizes=\"auto, (max-width: 584px) 100vw, 584px\" \/><\/p>\n<p>Following a service oriented architecture, SDC divides the responsibilities for various resources\u00a0in compact, easy-to-understand API-components. Most of the APIs have a somewhat speaking name. In the table below you find an overview of the core APIs, what they cover and the equivalent project in OpenStack.<\/p>\n\n<table id=\"tablepress-4\" class=\"tablepress tablepress-id-4\">\n<thead>\n<tr class=\"row-1\">\n\t<th class=\"column-1\">Service Name<\/th><th class=\"column-2\">Description<\/th><th class=\"column-3\">OpenStack equivalent<\/th>\n<\/tr>\n<\/thead>\n<tbody class=\"row-striping row-hover\">\n<tr class=\"row-2\">\n\t<td class=\"column-1\"><a href=\"https:\/\/github.com\/joyent\/sdc-amon\">amon<\/a><\/td><td class=\"column-2\">alarming and monitoring<\/td><td class=\"column-3\"><a href=\"https:\/\/wiki.openstack.org\/wiki\/Monasca\">Monasca<\/a><\/td>\n<\/tr>\n<tr class=\"row-3\">\n\t<td class=\"column-1\"><a href=\"https:\/\/github.com\/joyent\/sdc-cloud-analytics\">cloud-analytics<\/a><\/td><td class=\"column-2\">performance metrics<\/td><td class=\"column-3\"><a href=\"https:\/\/wiki.openstack.org\/wiki\/Ceilometer\">Ceilometer<\/a><\/td>\n<\/tr>\n<tr class=\"row-4\">\n\t<td class=\"column-1\"><a href=\"https:\/\/github.com\/joyent\/sdc-cnapi\">cnapi<\/a><\/td><td class=\"column-2\">compute node api<\/td><td class=\"column-3\"><a href=\"https:\/\/wiki.openstack.org\/wiki\/Nova\">Nova<\/a><\/td>\n<\/tr>\n<tr class=\"row-5\">\n\t<td class=\"column-1\"><a href=\"https:\/\/github.com\/joyent\/sdc-fwapi\">fwapi<\/a><\/td><td class=\"column-2\">firewall api<\/td><td class=\"column-3\"><a href=\"https:\/\/wiki.openstack.org\/wiki\/Neutron\">Neutron<\/a><\/td>\n<\/tr>\n<tr class=\"row-6\">\n\t<td class=\"column-1\"><a href=\"https:\/\/github.com\/joyent\/sdc-imgapi\">imgapi<\/a><\/td><td class=\"column-2\">image api<\/td><td class=\"column-3\"><a href=\"https:\/\/wiki.openstack.org\/wiki\/Glance\">Glance<\/a><\/td>\n<\/tr>\n<tr class=\"row-7\">\n\t<td class=\"column-1\"><a href=\"https:\/\/github.com\/joyent\/sdc-napi\">napi<\/a><\/td><td class=\"column-2\">network api<\/td><td class=\"column-3\"><a href=\"https:\/\/wiki.openstack.org\/wiki\/Neutron\">Neutron<\/a><\/td>\n<\/tr>\n<tr class=\"row-8\">\n\t<td class=\"column-1\"><a href=\"https:\/\/github.com\/joyent\/sdc-papi\">papi<\/a><\/td><td class=\"column-2\">package api<\/td><td class=\"column-3\">Flavors in <a href=\"https:\/\/wiki.openstack.org\/wiki\/Nova\">Nova<\/a><\/td>\n<\/tr>\n<tr class=\"row-9\">\n\t<td class=\"column-1\"><a href=\"https:\/\/github.com\/joyent\/sdc-sapi\">sapi<\/a><\/td><td class=\"column-2\">service api<\/td><td class=\"column-3\">Services in <a href=\"https:\/\/wiki.openstack.org\/wiki\/Keystone\">Keystone<\/a><\/td>\n<\/tr>\n<tr class=\"row-10\">\n\t<td class=\"column-1\"><a href=\"https:\/\/github.com\/joyent\/sdc-vmapi\">vmapi<\/a><\/td><td class=\"column-2\">virtual machine api<\/td><td class=\"column-3\">Servers in <a href=\"https:\/\/wiki.openstack.org\/wiki\/Nova\">Nova<\/a><\/td>\n<\/tr>\n<tr class=\"row-11\">\n\t<td class=\"column-1\"><a href=\"https:\/\/github.com\/joyent\/sdc-workflow\">workflow<\/a><\/td><td class=\"column-2\">job runner, orchestrator<\/td><td class=\"column-3\"><a href=\"https:\/\/wiki.openstack.org\/wiki\/Heat\">Heat<\/a><\/td>\n<\/tr>\n<tr class=\"row-12\">\n\t<td class=\"column-1\"><a href=\"https:\/\/github.com\/joyent\/sdc-ufds\">ufds<\/a><\/td><td class=\"column-2\">users, accounts, roles (ldap)<\/td><td class=\"column-3\"><a href=\"https:\/\/wiki.openstack.org\/wiki\/Keystone\">Keystone<\/a><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<!-- #tablepress-4 from cache -->\n<p>As these APIs are only available on the protected internal admin network. To interact with the various APIs, Joyent provides again a node.js <a href=\"https:\/\/github.com\/joyent\/node-sdc-clients\">package<\/a>.<\/p>\n<h1>sdcadmin &#8211; a Python client library for admin network APIs<\/h1>\n<p>I have been working on a client library for the SDC admin APIs called sdcadmin. It aims to let the Python user interact with SDC in an easy way. To create a VM, all you need to do is:<\/p>\n<pre>from sdcadmin.datacenter import DataCenter\r\ndc = DataCenter(sapi=sapi_ip)\r\nall_smart_machines = dc.list_smart_machines()\r\nmy_machine = dc.create_smart_machine(owner=user_uuid, \r\n                                     networks=[network_uuid],\r\n                                     package=package_small, \r\n                                     image=smartmachine_image,\r\n                                     alias='my_first_smart_machine')<\/pre>\n<p>The DataCenter object manages the discovery of the required APIs using the service API\u00a0(sapi),\u00a0handles the HTTP requests and provides <code>list_*<\/code>, <code>get_*<\/code> and <code>create_*<\/code> functions. Returned machines (both SmartMachines and KVM) provide functions to control their lifecycle:<\/p>\n<pre>my_machine = dc.create_smart_machine(...)\r\nmy_machine.poll_until(status=dc.STATE_RUNNING)\r\nmy_machine.status() # =&gt; 'running'\r\nmy_machine.stop()\r\nmy_machine.poll_until(status=dc.STATE_STOPPED)\r\nmy_machine.is_stopped() # =&gt; True\r\nmy_machine.delete()\r\n<\/pre>\n<p>State changes such as <code>start()<\/code>, <code>stop()<\/code>, <code>destroy()<\/code> and\u00a0complementary blocking operations such as <code>poll_until(...)<\/code> and <code>poll_while(...)<\/code> are available. The documentation is still incomplete, but will be improved as the project grows.<\/p>\n<p>It&#8217;s open source, the source is available\u00a0on <a href=\"https:\/\/github.com\/icclab\/sdcadmin\" target=\"_blank\">Github<\/a>. The package is also available on the <a href=\"https:\/\/pypi.python.org\/pypi\/sdcadmin\/0.1\" target=\"_blank\">Python Package Index<\/a>\u00a0for easy installation via pip (<code>pip install sdcadmin<\/code>). Pull requests are more than welcome! Having issues? Post them directly on <a href=\"https:\/\/github.com\/icclab\/sdcadmin\/issues\" target=\"_blank\">Github<\/a>.<\/p>\n<h1>Turning up the Heat<\/h1>\n<p>Using sdcadmin I\u00a0created a <a href=\"https:\/\/github.com\/icclab\/sdc-heat\" target=\"_blank\">plugin<\/a> for OpenStacks Orchestrator Heat. In its current version, it allows to provision SmartMachines and KVM VMs(<code>SDC::Compute::SmartMachine &amp;\u00a0SDC::Compute::KVM<\/code>).<\/p>\n<p>Initially I intended to use the <a href=\"https:\/\/apidocs.joyent.com\/cloudapi\/\" target=\"_blank\">cloudapi<\/a> for the plugin. Quickly I realised that not all required resources (networks) are available and the above mentioned authorization required put me off. The use of the admin network API on the other hand requires Heat to be on the admin network itself.<\/p>\n<p><a href=\"http:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/SDC-Services_with_heat.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-7415\" src=\"http:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/SDC-Services_with_heat-1024x500.png\" alt=\"SDC - Services_with_heat\" width=\"584\" height=\"285\" srcset=\"https:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/SDC-Services_with_heat-1024x500.png 1024w, https:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/SDC-Services_with_heat-300x146.png 300w, https:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/SDC-Services_with_heat-500x244.png 500w, https:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/SDC-Services_with_heat.png 1997w\" sizes=\"auto, (max-width: 584px) 100vw, 584px\" \/><\/a><\/p>\n<p>Installation instructions for a minimal KVM VM only running Heat and Keystone are found in the README\u00a0on <a href=\"https:\/\/github.com\/icclab\/sdc-heat\" target=\"_blank\">Github<\/a>. Some templates for <a href=\"https:\/\/github.com\/icclab\/sdc-heat\/blob\/master\/sdc_template_sm.yaml\" target=\"_blank\">SmartMachines<\/a> and <a href=\"https:\/\/github.com\/icclab\/sdc-heat\/blob\/master\/sdc_template_kvm.yaml\" target=\"_blank\">KVM VMs<\/a>\u00a0are also included. As with sdcadmin, <a href=\"https:\/\/github.com\/icclab\/sdc-heat\/pulls?q=is%3Aopen+is%3Apr\" target=\"_blank\">pull requests<\/a> are welcome! Any issues? Post them directly on <a href=\"https:\/\/github.com\/icclab\/sdc-heat\/issues\" target=\"_blank\">Github<\/a>.<\/p>\n<div class=\"pt-sm\">Schlagw\u00f6rter: <a href=\"https:\/\/blog.zhaw.ch\/icclab\/tag\/opensource\/\">opensource<\/a>, <a href=\"https:\/\/blog.zhaw.ch\/icclab\/tag\/python\/\">Python<\/a>, <a href=\"https:\/\/blog.zhaw.ch\/icclab\/tag\/sdc\/\">sdc<\/a>, <a href=\"https:\/\/blog.zhaw.ch\/icclab\/tag\/smartos-2\/\">smartos<\/a><br><\/div>","protected":false},"excerpt":{"rendered":"<p>As mentioned in the first post about SmartDataCenter, it features various APIs. In this post we will have a look at them. Further I\u00a0would like to present sdcadmin &amp; sdc-heat, two small Python projects I have been working on. The former is a Python client library for SDCs admin APIs. The latter is an OpenStack [&hellip;]<\/p>\n","protected":false},"author":163,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[5,20],"tags":[239,273,549,301],"features":[],"class_list":["post-7318","post","type-post","status-publish","format-standard","hentry","category-articles","category-open-source","tag-opensource","tag-python","tag-sdc","tag-smartos-2"],"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>SmartDataCenter APIs - turning up the Heat - 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\/smartdatacenter-apis-turning-up-the-heat\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"SmartDataCenter APIs - turning up the Heat\" \/>\n<meta property=\"og:description\" content=\"As mentioned in the first post about SmartDataCenter, it features various APIs. In this post we will have a look at them. Further I\u00a0would like to present sdcadmin &amp; sdc-heat, two small Python projects I have been working on. The former is a Python client library for SDCs admin APIs. The latter is an OpenStack [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.zhaw.ch\/icclab\/smartdatacenter-apis-turning-up-the-heat\/\" \/>\n<meta property=\"og:site_name\" content=\"Service Engineering (ICCLab &amp; SPLab)\" \/>\n<meta property=\"article:published_time\" content=\"2015-01-23T15:31:59+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2015-01-23T21:02:23+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/SDC-Services-1024x500.png\" \/>\n<meta name=\"author\" content=\"Michael Erne\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Michael Erne\" \/>\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\/smartdatacenter-apis-turning-up-the-heat\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/smartdatacenter-apis-turning-up-the-heat\/\"},\"author\":{\"name\":\"Michael Erne\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/df902139508f138bb44a5cdc7641e762\"},\"headline\":\"SmartDataCenter APIs &#8211; turning up the Heat\",\"datePublished\":\"2015-01-23T15:31:59+00:00\",\"dateModified\":\"2015-01-23T21:02:23+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/smartdatacenter-apis-turning-up-the-heat\/\"},\"wordCount\":632,\"commentCount\":1,\"image\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/smartdatacenter-apis-turning-up-the-heat\/#primaryimage\"},\"thumbnailUrl\":\"http:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/SDC-Services-1024x500.png\",\"keywords\":[\"opensource\",\"Python\",\"sdc\",\"smartos\"],\"articleSection\":[\"Articles\",\"Open Source\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/blog.zhaw.ch\/icclab\/smartdatacenter-apis-turning-up-the-heat\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/smartdatacenter-apis-turning-up-the-heat\/\",\"url\":\"https:\/\/blog.zhaw.ch\/icclab\/smartdatacenter-apis-turning-up-the-heat\/\",\"name\":\"SmartDataCenter APIs - turning up the Heat - Service Engineering (ICCLab &amp; SPLab)\",\"isPartOf\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/smartdatacenter-apis-turning-up-the-heat\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/smartdatacenter-apis-turning-up-the-heat\/#primaryimage\"},\"thumbnailUrl\":\"http:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/SDC-Services-1024x500.png\",\"datePublished\":\"2015-01-23T15:31:59+00:00\",\"dateModified\":\"2015-01-23T21:02:23+00:00\",\"author\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/df902139508f138bb44a5cdc7641e762\"},\"breadcrumb\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/smartdatacenter-apis-turning-up-the-heat\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.zhaw.ch\/icclab\/smartdatacenter-apis-turning-up-the-heat\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/smartdatacenter-apis-turning-up-the-heat\/#primaryimage\",\"url\":\"https:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/SDC-Services.png\",\"contentUrl\":\"https:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/SDC-Services.png\",\"width\":1997,\"height\":975,\"caption\":\"SDC - Services\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/smartdatacenter-apis-turning-up-the-heat\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Startseite\",\"item\":\"https:\/\/blog.zhaw.ch\/icclab\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"SmartDataCenter APIs &#8211; turning up the Heat\"}]},{\"@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\/df902139508f138bb44a5cdc7641e762\",\"name\":\"Michael Erne\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/d5302c9f51c99673b7fce48118450863055aa694b7035caa1b7df5e6399eabd7?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/d5302c9f51c99673b7fce48118450863055aa694b7035caa1b7df5e6399eabd7?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/d5302c9f51c99673b7fce48118450863055aa694b7035caa1b7df5e6399eabd7?s=96&d=mm&r=g\",\"caption\":\"Michael Erne\"},\"url\":\"https:\/\/blog.zhaw.ch\/icclab\/author\/ernm\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"SmartDataCenter APIs - turning up the Heat - 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\/smartdatacenter-apis-turning-up-the-heat\/","og_locale":"en_US","og_type":"article","og_title":"SmartDataCenter APIs - turning up the Heat","og_description":"As mentioned in the first post about SmartDataCenter, it features various APIs. In this post we will have a look at them. Further I\u00a0would like to present sdcadmin &amp; sdc-heat, two small Python projects I have been working on. The former is a Python client library for SDCs admin APIs. The latter is an OpenStack [&hellip;]","og_url":"https:\/\/blog.zhaw.ch\/icclab\/smartdatacenter-apis-turning-up-the-heat\/","og_site_name":"Service Engineering (ICCLab &amp; SPLab)","article_published_time":"2015-01-23T15:31:59+00:00","article_modified_time":"2015-01-23T21:02:23+00:00","og_image":[{"url":"http:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/SDC-Services-1024x500.png","type":"","width":"","height":""}],"author":"Michael Erne","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Michael Erne","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blog.zhaw.ch\/icclab\/smartdatacenter-apis-turning-up-the-heat\/#article","isPartOf":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/smartdatacenter-apis-turning-up-the-heat\/"},"author":{"name":"Michael Erne","@id":"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/df902139508f138bb44a5cdc7641e762"},"headline":"SmartDataCenter APIs &#8211; turning up the Heat","datePublished":"2015-01-23T15:31:59+00:00","dateModified":"2015-01-23T21:02:23+00:00","mainEntityOfPage":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/smartdatacenter-apis-turning-up-the-heat\/"},"wordCount":632,"commentCount":1,"image":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/smartdatacenter-apis-turning-up-the-heat\/#primaryimage"},"thumbnailUrl":"http:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/SDC-Services-1024x500.png","keywords":["opensource","Python","sdc","smartos"],"articleSection":["Articles","Open Source"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blog.zhaw.ch\/icclab\/smartdatacenter-apis-turning-up-the-heat\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blog.zhaw.ch\/icclab\/smartdatacenter-apis-turning-up-the-heat\/","url":"https:\/\/blog.zhaw.ch\/icclab\/smartdatacenter-apis-turning-up-the-heat\/","name":"SmartDataCenter APIs - turning up the Heat - Service Engineering (ICCLab &amp; SPLab)","isPartOf":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/smartdatacenter-apis-turning-up-the-heat\/#primaryimage"},"image":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/smartdatacenter-apis-turning-up-the-heat\/#primaryimage"},"thumbnailUrl":"http:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/SDC-Services-1024x500.png","datePublished":"2015-01-23T15:31:59+00:00","dateModified":"2015-01-23T21:02:23+00:00","author":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/df902139508f138bb44a5cdc7641e762"},"breadcrumb":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/smartdatacenter-apis-turning-up-the-heat\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.zhaw.ch\/icclab\/smartdatacenter-apis-turning-up-the-heat\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blog.zhaw.ch\/icclab\/smartdatacenter-apis-turning-up-the-heat\/#primaryimage","url":"https:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/SDC-Services.png","contentUrl":"https:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/SDC-Services.png","width":1997,"height":975,"caption":"SDC - Services"},{"@type":"BreadcrumbList","@id":"https:\/\/blog.zhaw.ch\/icclab\/smartdatacenter-apis-turning-up-the-heat\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Startseite","item":"https:\/\/blog.zhaw.ch\/icclab\/"},{"@type":"ListItem","position":2,"name":"SmartDataCenter APIs &#8211; turning up the Heat"}]},{"@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\/df902139508f138bb44a5cdc7641e762","name":"Michael Erne","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/d5302c9f51c99673b7fce48118450863055aa694b7035caa1b7df5e6399eabd7?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/d5302c9f51c99673b7fce48118450863055aa694b7035caa1b7df5e6399eabd7?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d5302c9f51c99673b7fce48118450863055aa694b7035caa1b7df5e6399eabd7?s=96&d=mm&r=g","caption":"Michael Erne"},"url":"https:\/\/blog.zhaw.ch\/icclab\/author\/ernm\/"}]}},"_links":{"self":[{"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/posts\/7318","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\/163"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/comments?post=7318"}],"version-history":[{"count":58,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/posts\/7318\/revisions"}],"predecessor-version":[{"id":7429,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/posts\/7318\/revisions\/7429"}],"wp:attachment":[{"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/media?parent=7318"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/categories?post=7318"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/tags?post=7318"},{"taxonomy":"features","embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/features?post=7318"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}