<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
</head>
<body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; color: rgb(0, 0, 0); font-size: 14px; font-family: Calibri, sans-serif;">
<div>Sure, I understand how this could make it harder.</div>
<div><br>
</div>
<div>Its a hard question to answer, which one is more worth it, creating a bunch of DSL's that u now have to implement correctly in a runtime that is actually pretty hard to isolate/control the execution of, or should people bite the bullet and move to something
that actually has a runtime that provides these features. Since it appears the DSL's that are being created are nearly turing complete it appears inevitable that said runtime will be needed (but of course I'm all for being proven wrong). </div>
<div><br>
</div>
<div>-Josh</div>
<div><br>
</div>
<span id="OLK_SRC_BODY_SECTION">
<div style="font-family:Calibri; font-size:11pt; text-align:left; color:black; BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BORDER-TOP: #b5c4df 1pt solid; BORDER-RIGHT: medium none; PADDING-TOP: 3pt">
<span style="font-weight:bold">From: </span>Zane Bitter <<a href="mailto:zbitter@redhat.com">zbitter@redhat.com</a>><br>
<span style="font-weight:bold">Organization: </span>Red Hat<br>
<span style="font-weight:bold">Reply-To: </span>"OpenStack Development Mailing List (not for usage questions)" <<a href="mailto:openstack-dev@lists.openstack.org">openstack-dev@lists.openstack.org</a>><br>
<span style="font-weight:bold">Date: </span>Tuesday, March 18, 2014 at 9:36 AM<br>
<span style="font-weight:bold">To: </span>"<a href="mailto:openstack-dev@lists.openstack.org">openstack-dev@lists.openstack.org</a>" <<a href="mailto:openstack-dev@lists.openstack.org">openstack-dev@lists.openstack.org</a>><br>
<span style="font-weight:bold">Subject: </span>Re: [openstack-dev] MuranoPL questions?<br>
</div>
<div><br>
</div>
<blockquote id="MAC_OUTLOOK_ATTRIBUTION_BLOCKQUOTE" style="BORDER-LEFT: #b5c4df 5 solid; PADDING:0 0 0 5; MARGIN:0 0 0 5;">
<div>
<div>
<div>On 18/03/14 08:01, Ruslan Kamaldinov wrote:</div>
<blockquote id="MAC_OUTLOOK_ATTRIBUTION_BLOCKQUOTE" style="BORDER-LEFT: #b5c4df 5 solid; PADDING:0 0 0 5; MARGIN:0 0 0 5;">
<div>Joshua, Clint,</div>
<div><br>
</div>
<div>The only platform I'm aware about which fully supports true isolation and which</div>
<div>has been used in production for this purpose is Java VM. I know people who</div>
<div>developed systems for online programming competitions and really smart kids</div>
<div>tried to break it without any luck :)</div>
<div><br>
</div>
<div>Since we're speaking about Heat, Mistral and Murano DSLs and all of them need an</div>
<div>execution engine. Do you think that JVM could become a host for that engine?</div>
</blockquote>
<div><br>
</div>
<div>-2. Deploying OpenStack is hard enough already.</div>
<div><br>
</div>
<blockquote id="MAC_OUTLOOK_ATTRIBUTION_BLOCKQUOTE" style="BORDER-LEFT: #b5c4df 5 solid; PADDING:0 0 0 5; MARGIN:0 0 0 5;">
<div>JVM has a lot of potential:</div>
<div>- it allows to fine-tune security manager to allow/disallow specific actions</div>
<div>- it can execute a lot of programming languages - Python, Ruby, JS, etc</div>
<div>- it has been used in production for this specific purpose for years</div>
<div><br>
</div>
<div>But it also introduces another layer of complexity:</div>
<div>- it's another component to deploy, configure and monitor</div>
<div>- it's non-python, which means it should be supported by infra</div>
<div>- we will need to run java service and potentially have some java code to</div>
<div> accept and process user code</div>
<div><br>
</div>
<div><br>
</div>
<div>Thanks,</div>
<div>Ruslan</div>
<div><br>
</div>
<div>On Mon, Mar 17, 2014 at 10:40 PM, Joshua Harlow <<a href="mailto:harlowja@yahoo-inc.com">harlowja@yahoo-inc.com</a>> wrote:</div>
<blockquote id="MAC_OUTLOOK_ATTRIBUTION_BLOCKQUOTE" style="BORDER-LEFT: #b5c4df 5 solid; PADDING:0 0 0 5; MARGIN:0 0 0 5;">
<div>So I guess this is similar to the other thread.</div>
<div><br>
</div>
<div><a href="http://lists.openstack.org/pipermail/openstack-dev/2014-March/030185.html">http://lists.openstack.org/pipermail/openstack-dev/2014-March/030185.html</a></div>
<div><br>
</div>
<div>I know that the way YQL has provided it could be a good example; where the</div>
<div>core DSL (the select queries and such) are augmented by the addition and</div>
<div>usage of JS, for example</div>
<div><a href="http://developer.yahoo.com/yql/guide/yql-execute-examples.html#yql-execute-example-helloworld">http://developer.yahoo.com/yql/guide/yql-execute-examples.html#yql-execute-example-helloworld</a></div>
<div>(ignore that its XML, haha). Such usage already provides rate-limits and</div>
<div>execution-limits</div>
<div>(<a href="http://developer.yahoo.com/yql/guide/yql-execute-intro-ratelimits.html">http://developer.yahoo.com/yql/guide/yql-execute-intro-ratelimits.html</a>) and</div>
<div>afaik if something like what YQL is doing then u don't need to recreate</div>
<div>simialr features in your DSL (and then u also don't need to teach people</div>
<div>about a new language and syntax and ...)</div>
<div><br>
</div>
<div>Just an idea (I believe lua offers similar controls/limits.., although its</div>
<div>not as popular of course as JS).</div>
<div><br>
</div>
<div>From: Stan Lagun <<a href="mailto:slagun@mirantis.com">slagun@mirantis.com</a>></div>
<div><br>
</div>
<div>Reply-To: "OpenStack Development Mailing List (not for usage questions)"</div>
<div><<a href="mailto:openstack-dev@lists.openstack.org">openstack-dev@lists.openstack.org</a>></div>
<div>Date: Monday, March 17, 2014 at 3:59 AM</div>
<div><br>
</div>
<div>To: "OpenStack Development Mailing List (not for usage questions)"</div>
<div><<a href="mailto:openstack-dev@lists.openstack.org">openstack-dev@lists.openstack.org</a>></div>
<div>Subject: Re: [openstack-dev] MuranoPL questions?</div>
<div><br>
</div>
<div>Joshua,</div>
<div><br>
</div>
<div>Completely agree with you. We wouldn't be writing another language if we</div>
<div>knew how any of existing languages can be used for this particular purpose.</div>
<div>If anyone suggest such language and show how it can be used to solve those</div>
<div>issues DSL was designed to solve we will consider dropping MuranoPL. np</div>
<div><br>
</div>
<div>Surely DSL hasn't stood the test of time. It just hasn't had a chance yet.</div>
<div>100% of successful programming languages were in such position once.</div>
<div><br>
</div>
<div>Anyway it is the best time to come with your suggestions. If you know how</div>
<div>exactly DSL can be replaced or improved we would like you to share</div>
<div><br>
</div>
<div><br>
</div>
<div>On Wed, Mar 12, 2014 at 2:05 AM, Joshua Harlow <<a href="mailto:harlowja@yahoo-inc.com">harlowja@yahoo-inc.com</a>></div>
<div>wrote:</div>
<blockquote id="MAC_OUTLOOK_ATTRIBUTION_BLOCKQUOTE" style="BORDER-LEFT: #b5c4df 5 solid; PADDING:0 0 0 5; MARGIN:0 0 0 5;">
<div><br>
</div>
<div>I guess I might be a bit biased to programming; so maybe I'm not the</div>
<div>target audience.</div>
<div><br>
</div>
<div>I'm not exactly against DSL's, I just think that DSL's need to be really</div>
<div>really proven to become useful (in general this applies to any language that</div>
<div>'joe' comp-sci student can create). Its not that hard to just make one, but</div>
<div>the real hard part is making one that people actually like and use and</div>
<div>survives the test of time. That's why I think its just nicer to use</div>
<div>languages that have stood the test of time already (if we can), creating a</div>
<div>new DSL (muranoPL seems to be slightly more than a DSL imho) means creating</div>
<div>a new language that has not stood the test of time (in terms of lifetime,</div>
<div>battle tested, supported over years) so that's just the concern I have.</div>
<div><br>
</div>
<div>Of course we have to accept innovation and I hope that the DSL/s makes it</div>
<div>easier/simpler, I just tend to be a bit more pragmatic maybe in this area.</div>
<div><br>
</div>
<div>Here's hoping for the best! :-)</div>
<div><br>
</div>
<div>-Josh</div>
<div><br>
</div>
<div>From: Renat Akhmerov <<a href="mailto:rakhmerov@mirantis.com">rakhmerov@mirantis.com</a>></div>
<div>Reply-To: "OpenStack Development Mailing List (not for usage questions)"</div>
<div><<a href="mailto:openstack-dev@lists.openstack.org">openstack-dev@lists.openstack.org</a>></div>
<div>Date: Monday, March 10, 2014 at 8:36 PM</div>
<div>To: "OpenStack Development Mailing List (not for usage questions)"</div>
<div><<a href="mailto:openstack-dev@lists.openstack.org">openstack-dev@lists.openstack.org</a>></div>
<div>Subject: Re: [openstack-dev] MuranoPL questions?</div>
<div><br>
</div>
<div>Although being a little bit verbose it makes a lot of sense to me.</div>
<div><br>
</div>
<div>@Joshua,</div>
<div><br>
</div>
<div>Even assuming Python could be sandboxed and whatever else that's needed to</div>
<div>be able to use it as DSL (for something like Mistral, Murano or Heat) is</div>
<div>done why do you think Python would be a better alternative for people who</div>
<div>don't know neither these new DSLs nor Python itself. Especially, given the</div>
<div>fact that Python has A LOT of things that they'd never use. I know many</div>
<div>people who have been programming in Python for a while and they admit they</div>
<div>don't know all the nuances of Python and actually use 30-40% of all of its</div>
<div>capabilities. Even not in domain specific development. So narrowing a</div>
<div>feature set that a language provides and limiting it to a certain domain</div>
<div>vocabulary is what helps people solve tasks of that specific domain much</div>
<div>easier and in the most expressive natural way. Without having to learn tons</div>
<div>and tons of details that a general purpose language (GPL, hah :) ) provides</div>
<div>(btw, the reason to write thick books).</div>
<div><br>
</div>
<div>I agree with Stan, if you begin to use a technology you'll have to learn</div>
<div>something anyway, be it TaskFlow API and principles or DSL. Well-designed</div>
<div>DSL just encapsulates essential principles of a system it is used for. By</div>
<div>learning DSL you're leaning the system itself, as simple as that.</div>
<div><br>
</div>
<div>Renat Akhmerov</div>
<div>@ Mirantis Inc.</div>
<div><br>
</div>
<div><br>
</div>
<div><br>
</div>
<div>On 10 Mar 2014, at 05:35, Stan Lagun <<a href="mailto:slagun@mirantis.com">slagun@mirantis.com</a>> wrote:</div>
<div><br>
</div>
<blockquote id="MAC_OUTLOOK_ATTRIBUTION_BLOCKQUOTE" style="BORDER-LEFT: #b5c4df 5 solid; PADDING:0 0 0 5; MARGIN:0 0 0 5;">
<div>I'd be very interested in knowing the resource controls u plan to add.</div>
<div>Memory, CPU...</div>
</blockquote>
<div>We haven't discussed it yet. Any suggestions are welcomed</div>
<div><br>
</div>
<blockquote id="MAC_OUTLOOK_ATTRIBUTION_BLOCKQUOTE" style="BORDER-LEFT: #b5c4df 5 solid; PADDING:0 0 0 5; MARGIN:0 0 0 5;">
<div>I'm still trying to figure out where something like</div>
<div><a href="https://github.com/istalker2/MuranoDsl/blob/master/meta/com.mirantis.murano.demoApp.DemoInstance/manifest.yaml">https://github.com/istalker2/MuranoDsl/blob/master/meta/com.mirantis.murano.demoApp.DemoInstance/manifest.yaml</a></div>
<div>would be beneficial, why not > just spend effort sand boxing lua, python...</div>
<div>Instead of spending effort on creating a new language and then having to</div>
<div>sandbox it as well... Especially if u picked languages that are made to be</div>
<div>sandboxed from the start (not python)...</div>
</blockquote>
<div><br>
</div>
<div>1. See my detailed answer in Mistral thread why haven't we used any of</div>
<div>those languages. There are many reasons besides sandboxing.</div>
<div><br>
</div>
<div>2. You don't need to sandbox MuranoPL. Sandboxing is restricting some</div>
<div>operations. In MuranoPL ALL operations (including operators in expressions,</div>
<div>functions, methods etc.) are just those that you explicitly provided. So</div>
<div>there is nothing to restrict. There are no builtins that throw</div>
<div>AccessViolationError</div>
<div><br>
</div>
<div>3. Most of the value of MuranoPL comes not form the workflow code but from</div>
<div>class declarations. In all OOP languages classes are just a convenient to</div>
<div>organize your code. There are classes that represent real-life objects and</div>
<div>classes that are nothing more than data-structures, DTOs etc. In Murano</div>
<div>classes in MuranoPL are deployable entities like Heat resources application</div>
<div>components, services etc. In dashboard UI user works with those entities. He</div>
<div>(in UI!) creates instances of those classes, fills their property values,</div>
<div>binds objects together (assigns on object to a property of another). And</div>
<div>this is done without even a single MuranoPL line being executed! That is</div>
<div>possible because everything in MuranoPL is a subject to declaration and</div>
<div>because it is just plain YAML anyone can easily extract those declarations</div>
<div>from MuranoPL classes.</div>
<div>Now suppose it was Python instead of MuranoPL. Then you would have to</div>
<div>parse *.py files to get list of declared classes (without executing</div>
<div>anything). Suppose that you managed to solve this somehow. Probably you</div>
<div>wrote regexp that finds all class declarations it text files. Are you done?</div>
<div>No! There are no properties (attributes) declarations in Python. You cannot</div>
<div>infer all possible class attributes just from class declaration. You can try</div>
<div>to parse __init__ method to find attribute initialization code but then you</div>
<div>find that you cannot infer property types. You would not know what values</div>
<div>does class expect in those attributes, what are constraints etc. Besides</div>
<div>there are plenty of ways to fool such naive algorithms. Classes can be</div>
<div>created using type() built-in function without declarations at all.</div>
<div>Attributes may be initialized anywhere. Everything can be made in runtime.</div>
<div>As you can see Python is not good for the task. Ans all this true for all</div>
<div>of the languages you mentioned. The reason is fundamental - all of those</div>
<div>languages are dynamic.</div>
<div>So maybe you can take some statically-typed language like C++ or Java to</div>
<div>do the job? Again, no! There are other problems with those type of</div>
<div>languages. Have you ever seen statically-typed embeddable language? Those</div>
<div>language require compilation and linker, binary distribution of classes,</div>
<div>handling of versioning problems, dependencies on 3-rd party libraries etc.</div>
<div>This is the hell you don't want to step in. But even in statically typed</div>
<div>languages there are no contracts. You know the list of properties and their</div>
<div>types. But knowing that class foo has property bar of type int doesn't give</div>
<div>a clue if value if 10 is okay for that property.</div>
<div><br>
</div>
<div>Now I admit that we could probably spend a year of development and try to</div>
<div>implement this on type Java with custom wrapping and heavy usage of</div>
<div>decorators, embed somehow JVM into python process, do all possible</div>
<div>sandboxing and then get a Frankenstein that nobody in OpenStack community</div>
<div>would like or accept.</div>
<div><br>
</div>
<div>My point here is that there is no language in the world that was designed</div>
<div>for external object composition that is in Murano. No language in the world</div>
<div>was design so that there would be huge repository of classes but no single</div>
<div>control point, no main project, no trust between different classes. There is</div>
<div>no language with tree-like heap organization (each object has single owner</div>
<div>object). This what makes MuranoPL domain-specific and not deployments. There</div>
<div>are no such languages not because nobody that smart to create them but</div>
<div>because nobody needed to do so. Because MuranoPL is domain-specific unlike</div>
<div>Python or Java.</div>
<div><br>
</div>
<div>MuranoPL does contain many constructs that can be found in general-purpose</div>
<div>languages but that doesn't make it general-purpose!</div>
<div><br>
</div>
<div><br>
</div>
<blockquote id="MAC_OUTLOOK_ATTRIBUTION_BLOCKQUOTE" style="BORDER-LEFT: #b5c4df 5 solid; PADDING:0 0 0 5; MARGIN:0 0 0 5;">
<div>Who is going to train people on muranoPL, write language books and</div>
<div>tutorials when the same amount of work has already been done for 10+ years</div>
<div>for other languages....</div>
</blockquote>
<div>Let me say that most of MuranoPL audience are bash-developers that know</div>
<div>Lua to the same level they know MuranoPL :)</div>
<div><br>
</div>
<div>In Mirantis we deed interesting experiment. We asked several deployment</div>
<div>engineers that were not involved in MuranoPL creation and knew nothing about</div>
<div>it beforehand to write some application manifests using MuranoPL. We gave</div>
<div>them 10-minute introduction, link to DSL documentation blueprint and</div>
<div>examples in my github repository (you've seen both of them). The link above</div>
<div>to DemoInstance manifest points to the class that was created by one of</div>
<div>those guys. It took them several days to get used to it. But they never even</div>
<div>used Python before! And the feedback was very positive.</div>
<div><br>
</div>
<div>I don't really see a problem writing tutorials or even a book. Learning</div>
<div>new framework like TaskFlow is nowhere easier than learning DSL. Anyway you</div>
<div>need to learn something to start using new technology. There are hundreds of</div>
<div>DSL languages that are used in production and I don't feel like having one</div>
<div>more language is really a problem</div>
<div><br>
</div>
<div><br>
</div>
<div><br>
</div>
<div><br>
</div>
<div>On Mon, Mar 10, 2014 at 12:26 AM, Joshua Harlow <<a href="mailto:harlowja@yahoo-inc.com">harlowja@yahoo-inc.com</a>></div>
<div>wrote:</div>
<blockquote id="MAC_OUTLOOK_ATTRIBUTION_BLOCKQUOTE" style="BORDER-LEFT: #b5c4df 5 solid; PADDING:0 0 0 5; MARGIN:0 0 0 5;">
<div><br>
</div>
<div>I'd be very interested in knowing the resource controls u plan to add.</div>
<div>Memory, CPU...</div>
<div><br>
</div>
<div>I'm still trying to figure out where something like</div>
<div><a href="https://github.com/istalker2/MuranoDsl/blob/master/meta/com.mirantis.murano.demoApp.DemoInstance/manifest.yaml">https://github.com/istalker2/MuranoDsl/blob/master/meta/com.mirantis.murano.demoApp.DemoInstance/manifest.yaml</a></div>
<div>would be beneficial, why not just spend effort sand boxing lua, python...</div>
<div>Instead of spending effort on creating a new language and then having to</div>
<div>sandbox it as well... Especially if u picked languages that are made to be</div>
<div>sandboxed from the start (not python)...</div>
<div><br>
</div>
<div>Who is going to train people on muranoPL, write language books and</div>
<div>tutorials when the same amount of work has already been done for 10+ years</div>
<div>for other languages....</div>
<div><br>
</div>
<div>I fail to see where muranoPL is a DSL when it contains a full language</div>
<div>already with functions, objects, namespaces, conditionals... (what is the</div>
<div>domain of it?), maybe I'm just confused though (quite possible, haha).</div>
<div><br>
</div>
<div>Does this not seem awkward to anyone else??</div>
<div><br>
</div>
<div>Sent from my really tiny device...</div>
<div><br>
</div>
<div>On Mar 8, 2014, at 10:44 PM, "Stan Lagun" <<a href="mailto:slagun@mirantis.com">slagun@mirantis.com</a>> wrote:</div>
<div><br>
</div>
<div>First of all MuranoPL is not a host but hosted language. It never</div>
<div>intended to replace Python and if Python can do the job it is probably</div>
<div>better than MuranoPL for that job.</div>
<div>The problem with Python is that you cannot have Python code as a part of</div>
<div>your DSL if you need to evaluate that DSL on server-side. Using Python's</div>
<div>eval() is not secure. And you don't have enough control on what evaled code</div>
<div>is allowed to do. MuranoPL on the contrary are fully sandboxed. You have</div>
<div>absolute control over what functions/methods/APIs are exposed to DSL and DSL</div>
<div>code can do nothing except for what it allowed to do. Besides you typically</div>
<div>do want your DSL to be domain-specific so general-purpose language like</div>
<div>Python can be suboptimal.</div>
<div><br>
</div>
<div>I don't say MuranoPL is good for all projects. It has many</div>
<div>Murano-specific things after all. In most cases you don't need all those OOP</div>
<div>features that MuranoPL has. But the code organization, how it uses YAML,</div>
<div>block structures and especially YAQL expressions can be of a great value to</div>
<div>many projects</div>
<div><br>
</div>
<div>For examples of MuranoPL classes you can browse</div>
<div><a href="https://github.com/istalker2/MuranoDsl/tree/master/meta">https://github.com/istalker2/MuranoDsl/tree/master/meta</a> folder. This is my</div>
<div>private repository that I was using to develop PoC for MuranoPL engine. We</div>
<div>are on the way to create production-quality implementation with unit-tests</div>
<div>etc. in regular Murano repositories on stackforge</div>
<div><br>
</div>
<div><br>
</div>
<div>On Sun, Mar 9, 2014 at 7:33 AM, Joshua Harlow <<a href="mailto:harlowja@yahoo-inc.com">harlowja@yahoo-inc.com</a>></div>
<div>wrote:</div>
<blockquote id="MAC_OUTLOOK_ATTRIBUTION_BLOCKQUOTE" style="BORDER-LEFT: #b5c4df 5 solid; PADDING:0 0 0 5; MARGIN:0 0 0 5;">
<div><br>
</div>
<div>To continue from other thread....</div>
<div><br>
</div>
<div>"""</div>
<div>Personally I believe that YAQL-based DSLs similar (but probably simlet</div>
<div>than) MuranoPL can be of a great value for many OpenStack projects that have</div>
<div>DSLs of different kind. Murano for App Catatalog, Mistral for workflows,</div>
<div>Heat for HOT templates, Ceilometer for alarms & counter aggregation rules,</div>
<div>Nova for customizable resource scheduling and probably many more.</div>
<div>"""</div>
<div><br>
</div>
<div>Isn't python a better host language for said DSLs than muranoPL? I am</div>
<div>still pretty weary of a DSL that starts to grow so many features to</div>
<div>encompass other DSLs since then it's not really a DSL but a non-DSL, and we</div>
<div>already have one that everyone is familiar with (python).</div>
<div><br>
</div>
<div>Are there any good examples if muranoPL that I can look at that take</div>
<div>advantage of muranoPL classes, functions, namespaces which can be compared</div>
<div>to there python equivalents. Has such an analysis/evaluation been done?</div>
<div><br>
</div>
<div>Sent from my really tiny device...</div>
<div>_______________________________________________</div>
<div>OpenStack-dev mailing list</div>
<div><a href="mailto:OpenStack-dev@lists.openstack.org">OpenStack-dev@lists.openstack.org</a></div>
<div><a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a></div>
</blockquote>
<div><br>
</div>
<div><br>
</div>
<div><br>
</div>
<div><br>
</div>
<div>--</div>
<div>Sincerely yours</div>
<div>Stanislav (Stan) Lagun</div>
<div>Senior Developer</div>
<div>Mirantis</div>
<div>35b/3, Vorontsovskaya St.</div>
<div>Moscow, Russia</div>
<div>Skype: stanlagun</div>
<div>www.mirantis.com</div>
<div><a href="mailto:slagun@mirantis.com">slagun@mirantis.com</a></div>
<div><br>
</div>
<div>_______________________________________________</div>
<div>OpenStack-dev mailing list</div>
<div><a href="mailto:OpenStack-dev@lists.openstack.org">OpenStack-dev@lists.openstack.org</a></div>
<div><a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a></div>
<div><br>
</div>
<div><br>
</div>
<div>_______________________________________________</div>
<div>OpenStack-dev mailing list</div>
<div><a href="mailto:OpenStack-dev@lists.openstack.org">OpenStack-dev@lists.openstack.org</a></div>
<div><a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a></div>
<div><br>
</div>
</blockquote>
<div><br>
</div>
<div><br>
</div>
<div><br>
</div>
<div>--</div>
<div>Sincerely yours</div>
<div>Stanislav (Stan) Lagun</div>
<div>Senior Developer</div>
<div>Mirantis</div>
<div>35b/3, Vorontsovskaya St.</div>
<div>Moscow, Russia</div>
<div>Skype: stanlagun</div>
<div>www.mirantis.com</div>
<div><a href="mailto:slagun@mirantis.com">slagun@mirantis.com</a></div>
<div>_______________________________________________</div>
<div>OpenStack-dev mailing list</div>
<div><a href="mailto:OpenStack-dev@lists.openstack.org">OpenStack-dev@lists.openstack.org</a></div>
<div><a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a></div>
<div><br>
</div>
<div><br>
</div>
<div><br>
</div>
<div>_______________________________________________</div>
<div>OpenStack-dev mailing list</div>
<div><a href="mailto:OpenStack-dev@lists.openstack.org">OpenStack-dev@lists.openstack.org</a></div>
<div><a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a></div>
<div><br>
</div>
</blockquote>
<div><br>
</div>
<div><br>
</div>
<div><br>
</div>
<div>--</div>
<div>Sincerely yours</div>
<div>Stanislav (Stan) Lagun</div>
<div>Senior Developer</div>
<div>Mirantis</div>
<div>35b/3, Vorontsovskaya St.</div>
<div>Moscow, Russia</div>
<div>Skype: stanlagun</div>
<div>www.mirantis.com</div>
<div><a href="mailto:slagun@mirantis.com">slagun@mirantis.com</a></div>
<div><br>
</div>
<div><br>
</div>
<div>_______________________________________________</div>
<div>OpenStack-dev mailing list</div>
<div><a href="mailto:OpenStack-dev@lists.openstack.org">OpenStack-dev@lists.openstack.org</a></div>
<div><a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a></div>
<div><br>
</div>
</blockquote>
<div><br>
</div>
<div>_______________________________________________</div>
<div>OpenStack-dev mailing list</div>
<div><a href="mailto:OpenStack-dev@lists.openstack.org">OpenStack-dev@lists.openstack.org</a></div>
<div><a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a></div>
<div><br>
</div>
</blockquote>
<div><br>
</div>
<div><br>
</div>
<div>_______________________________________________</div>
<div>OpenStack-dev mailing list</div>
<div><a href="mailto:OpenStack-dev@lists.openstack.org">OpenStack-dev@lists.openstack.org</a></div>
<div><a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a></div>
<div><br>
</div>
</div>
</div>
</blockquote>
</span>
</body>
</html>