{"id":6873,"date":"2015-07-01T22:58:46","date_gmt":"2015-07-02T03:58:46","guid":{"rendered":"http:\/\/www.openstack.org\/blog\/?p=6873"},"modified":"2015-07-02T21:57:39","modified_gmt":"2015-07-03T02:57:39","slug":"writing-your-first-openstack-application","status":"publish","type":"post","link":"https:\/\/www.openstack.org\/blog\/writing-your-first-openstack-application\/","title":{"rendered":"Writing Your First OpenStack Application"},"content":{"rendered":"<p class=\"lead\">Ever thought about what it takes to write a scalable cloud application using an OpenStack SDK? Thanks to a small team&#8217;s heroic effort, there&#8217;s <a href=\"http:\/\/developer.openstack.org\/firstapp-libcloud\/getting_started.html\">now a guide for that<\/a>!<\/p>\n<p>Christian Berendt (<a href=\"https:\/\/www.b1-systems.de\/\" target=\"_blank\">B1 Systems<\/a>), Sean Collins (<a href=\"https:\/\/www.mirantis.com\/\" target=\"_blank\">Mirantis<\/a>), James Dempsey (<a href=\"http:\/\/cloud.catalyst.net.nz\" target=\"_blank\">Catalyst IT<\/a>) and Tom Fifield gathered in Taipei, with Nick Chase live via video link, to produce &#8220;Writing Your First OpenStack Application&#8221; in just five days. The sprint was organised by the <a href=\"https:\/\/wiki.openstack.org\/wiki\/Application_Ecosystem_Working_Group\">Application Ecosystem Working Group<\/a>, with the financial support of the OpenStack Foundation.<\/p>\n<p>The new work is aimed at software developers who want to build applications on OpenStack clouds and also shares some best practices for cloud application development.<\/p>\n<p>Inspired by Django&#8217;s first app tutorial, where a simple polling app is used to explore the basics of working with Django, &#8220;Writing Your First OpenStack Application&#8221; uses an app that generates beautiful <a href=\"http:\/\/en.wikipedia.org\/wiki\/Fractal\">fractal images<\/a> as a teaching tool to run through areas like:<\/p>\n<ul>\n<li>Creating and destroying compute resources.<\/li>\n<li>Scaling available resources up and down.<\/li>\n<li>Using Object and Block storage for file and database persistence.<\/li>\n<li>Customizing networking for better performance and segregation.<\/li>\n<li>Making cloud-related architecture decisions such as turning functions into micro-services and modularizing them.<\/li>\n<\/ul>\n<p>The guide has been written with a strong preference for the most common API calls, so it will work across a broad spectrum of OpenStack versions. In addition, the authors have paid special attention that the first few sections should work almost regardless of OpenStack cloud configuration.<\/p>\n<p>A core part of the guide&#8217;s design is support for multiple SDKs. The initial version was written and tested with the libcloud SDK, but work is underway for <a href=\"https:\/\/review.openstack.org\/#\/c\/180877\/\">python-openstacksdk<\/a>, <a href=\"https:\/\/review.openstack.org\/#\/c\/196537\/\">pkgcloud<\/a> and fog which will re-use the text with new code samples.<\/p>\n<p>So, check out &#8220;<a class=\"link\" href=\"http:\/\/developer.openstack.org\/firstapp-libcloud\/getting_started.html\" target=\"_top\">Writing your First OpenStack Application&#8221;<\/a> for libcloud, watch the <a href=\"https:\/\/www.youtube.com\/watch?v=o1GAlv1lmjY\">introductory presentation<\/a> from the summit, or consider helping complete the <a href=\"https:\/\/github.com\/openstack\/api-site\/tree\/master\/firstapp\">samples<\/a> for other languages.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<div id=\"attachment_6877\" style=\"width: 178px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/www.openstack.org\/blog\/wp-content\/uploads\/2015\/05\/11146336_10202912562493804_7591702871240574350_o.jpg\"><img aria-describedby=\"caption-attachment-6877\" loading=\"lazy\" class=\"wp-image-6877 size-medium\" src=\"https:\/\/www.openstack.org\/blog\/wp-content\/uploads\/2015\/05\/11146336_10202912562493804_7591702871240574350_o-168x300.jpg\" alt=\"Taipei 101 (c) James Dempsey\" width=\"168\" height=\"300\" srcset=\"https:\/\/www.openstack.org\/blog\/wp-content\/uploads\/2015\/05\/11146336_10202912562493804_7591702871240574350_o-168x300.jpg 168w, https:\/\/www.openstack.org\/blog\/wp-content\/uploads\/2015\/05\/11146336_10202912562493804_7591702871240574350_o-768x1375.jpg 768w, https:\/\/www.openstack.org\/blog\/wp-content\/uploads\/2015\/05\/11146336_10202912562493804_7591702871240574350_o-572x1024.jpg 572w, https:\/\/www.openstack.org\/blog\/wp-content\/uploads\/2015\/05\/11146336_10202912562493804_7591702871240574350_o.jpg 1117w\" sizes=\"(max-width: 168px) 100vw, 168px\" \/><\/a><p id=\"caption-attachment-6877\" class=\"wp-caption-text\">Taipei 101 (c) James Dempsey<\/p><\/div>\n<div id=\"attachment_6878\" style=\"width: 209px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/www.openstack.org\/blog\/wp-content\/uploads\/2015\/05\/DSC_0028.jpg\"><img aria-describedby=\"caption-attachment-6878\" loading=\"lazy\" class=\"wp-image-6878 size-medium\" src=\"https:\/\/www.openstack.org\/blog\/wp-content\/uploads\/2015\/05\/DSC_0028-e1431333744524-199x300.jpg\" alt=\"Each post-it note represents an area that had to be written.\" width=\"199\" height=\"300\" srcset=\"https:\/\/www.openstack.org\/blog\/wp-content\/uploads\/2015\/05\/DSC_0028-e1431333744524-199x300.jpg 199w, https:\/\/www.openstack.org\/blog\/wp-content\/uploads\/2015\/05\/DSC_0028-e1431333744524-768x1155.jpg 768w, https:\/\/www.openstack.org\/blog\/wp-content\/uploads\/2015\/05\/DSC_0028-e1431333744524-681x1024.jpg 681w, https:\/\/www.openstack.org\/blog\/wp-content\/uploads\/2015\/05\/DSC_0028-e1431333744524.jpg 2000w\" sizes=\"(max-width: 199px) 100vw, 199px\" \/><\/a><p id=\"caption-attachment-6878\" class=\"wp-caption-text\">Each post-it note represents an area that had to be written.<\/p><\/div>\n<div id=\"attachment_6876\" style=\"width: 310px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/www.openstack.org\/blog\/wp-content\/uploads\/2015\/05\/facebook_IMG_0831.jpg\"><img aria-describedby=\"caption-attachment-6876\" loading=\"lazy\" class=\"wp-image-6876 size-medium\" src=\"https:\/\/www.openstack.org\/blog\/wp-content\/uploads\/2015\/05\/facebook_IMG_0831-300x176.jpg\" alt=\"Enjoying local Taiwanese food after a hard day's writing.\" width=\"300\" height=\"176\" srcset=\"https:\/\/www.openstack.org\/blog\/wp-content\/uploads\/2015\/05\/facebook_IMG_0831-300x176.jpg 300w, https:\/\/www.openstack.org\/blog\/wp-content\/uploads\/2015\/05\/facebook_IMG_0831-768x449.jpg 768w, https:\/\/www.openstack.org\/blog\/wp-content\/uploads\/2015\/05\/facebook_IMG_0831-1024x599.jpg 1024w, https:\/\/www.openstack.org\/blog\/wp-content\/uploads\/2015\/05\/facebook_IMG_0831.jpg 2000w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-6876\" class=\"wp-caption-text\">Enjoying local Taiwanese food after a hard day&#8217;s writing.<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Ever thought about what it takes to write a scalable cloud application using an OpenStack SDK? Thanks to a small team&#8217;s heroic effort, there&#8217;s now a guide for that! Christian Berendt (B1 Systems), Sean Collins (Mirantis), James Dempsey (Catalyst IT) and Tom Fifield gathered in Taipei, with Nick Chase live via video link, to produce&#8230;  <a href=\"https:\/\/www.openstack.org\/blog\/writing-your-first-openstack-application\/\" class=\"more-link\" title=\"Read Writing Your First OpenStack Application\">Read more &raquo;<\/a><\/p>\n","protected":false},"author":51,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[],"_links":{"self":[{"href":"https:\/\/www.openstack.org\/blog\/wp-json\/wp\/v2\/posts\/6873"}],"collection":[{"href":"https:\/\/www.openstack.org\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.openstack.org\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.openstack.org\/blog\/wp-json\/wp\/v2\/users\/51"}],"replies":[{"embeddable":true,"href":"https:\/\/www.openstack.org\/blog\/wp-json\/wp\/v2\/comments?post=6873"}],"version-history":[{"count":16,"href":"https:\/\/www.openstack.org\/blog\/wp-json\/wp\/v2\/posts\/6873\/revisions"}],"predecessor-version":[{"id":6997,"href":"https:\/\/www.openstack.org\/blog\/wp-json\/wp\/v2\/posts\/6873\/revisions\/6997"}],"wp:attachment":[{"href":"https:\/\/www.openstack.org\/blog\/wp-json\/wp\/v2\/media?parent=6873"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.openstack.org\/blog\/wp-json\/wp\/v2\/categories?post=6873"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.openstack.org\/blog\/wp-json\/wp\/v2\/tags?post=6873"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}