<div dir="ltr">Hi,<div><br></div><div>There are mainly two things you need to know when proposing a new Neutron Plugin (or even any Openstack feature):</div><div><br></div><div>- The process [0];</div><div>- The tools [1].</div><div><br></div><div>Although the above documents cover those two points pretty well, I can give you a high level overview of what the process looks like.</div><div>I'll not cover the "how to implement a plugin" part since it looks like you are already past that :)</div><div><br></div><div>In order to add a new plugin/feature to the neutron repo, you first need to propose it through our <b>specification process</b>.</div><div>The first step is to file a blueprint on launchpad [2] (register a blueprint), in which you very briefly explain what you are trying to attempt.</div><div>You can find many examples on how to write a blueprint in [2], but it'll more or less look like this:</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><i>name: ferryboat-l2-plugin<br></i><i>title: L2 Neutron Plugin for supporting Ferryboat framework</i> </blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><i><br></i><i>Summary:<br></i><i>This proposal tracks the implementation of a new Neutron core plugin which allows the user <br></i><i>to implement L2 networks on the Ferryboat technology. In its first release, the plugin will support:</i><i><br></i><i>- Port, Subnet, Network APIs;<br></i><i>- Router APIs;<br></i><i>- Floating IPs;</i><i><br></i><i>Security group support is planned for further iterations.</i></blockquote><div><br></div><div>Once you have filed the blueprint, you can publish your spec[3](look at "Spec + Blueprints lifecycle" section) in the spec repo[4].</div><div>To do that, follow the Gerrit Workflow ([1] for details). </div><div>In a nutshell, you need to: </div><div><br></div><div>- Clone the spec repository locally, </div><div>- Write a specification following the template, it should be targeted to Kilo (specs/kilo)</div><div>- Run "git review" so that it can be reviewed by the core dev team.</div><div><br></div><div>Once you do that, you spec will be published for review in the Openstack's review board [5], where it'll have to wait for some core reviewer's attention in order to </div><div>get approved.</div><div><br></div><div>Now to the actual patch:</div><div>When the specification gets approved (or even in parallel actually), you can publish you Ferryboat plugin code for review just like you did for the spec.</div><div>GerritWorkflow[1] will provide you a very clear understanding on how to configure/use git in order to be able to do that.</div><div>So, again, you'll have to clone the Neutron's repository, add your code in a local branch properly named, and then run "git review" so that it gets published in the </div><div>review board.</div><div>In order to get approved and finally merged in the main Neutron repo, your plugin needs to pass at least the following criteria:</div><div><br></div><div>- Pass all the unit tests;</div><div>- Its own unit tests have to be implemented! With as much code coverage as possible;</div><div>- The Spec discussed above have to be approved and properly targeted;</div><div>- A <b>Third party CI system [5] </b>needs to be in place and positively voting your patch;</div><div>- At least 2 core developers need to approve the patch based on its compliance in terms of functionalities and code quality.</div><div><br></div><div>For those who implement a Neutron plugin for the first time, the Third Party Ci system is usually the moment in which things get very hard!</div><div>The documentation pointed in [5][6], plus participating the weakly CI meetings, should be enough for you to understand what needs to be done.</div><div>Very rapidly, Neutron needs to make sure that your plugin actually works, and you want to make sure that no changes are trying to break your plugin! To reach the goal,</div><div>you'll need to setup a continuous integration system "at home" which votes a rightful amount of patches in review in order to validate that your implementation is not </div><div>broken. Without a CI in place you plugin won't be approved, and removed if already in tree.</div><div><br></div><div>The above should cover roughly 60% of the whole process, there are other small details like the commit format, unit testing, and other things that would be useless to overload here.</div><div>More than that, I suggest you to go on the IRC channels and look for help there. My IRC alias is ivar-lazzaro, feel free to contact me :)</div><div><br></div><div>Last but not least, the first push in Openstack (especially if it's something so big as a vendor plugin) is always tough! You'll go through a TON of review rounds and nasty issues.</div><div>But don't be discouraged! It gets way better once you grasp the whole process :)</div><div><br></div><div>Cheers,</div><div>Ivar.</div><div><br></div><div><span>[0] <a class="" href="https://wiki.openstack.org/wiki/NeutronDevelopment">https://wiki.openstack.org/wiki/NeutronDevelopment</a></span></div><div><span>[1] <a class="" href="https://wiki.openstack.org/wiki/Gerrit_Workflow">https://wiki.openstack.org/wiki/Gerrit_Workflow</a></span></div><div><span>[2] <a class="" href="https://launchpad.net/neutron">https://launchpad.net/neutron</a></span></div><div><span>[3] <a class="" href="https://wiki.openstack.org/wiki/Neutron/BlueprintTemplate">https://wiki.openstack.org/wiki/Neutron/BlueprintTemplate</a></span></div><div><span>[4] <a class="" href="https://github.com/openstack/neutron-specs">https://github.com/openstack/neutron-specs</a></span></div><div><span>[5] <a class="" href="https://review.openstack.org/#/q/status:open+project:openstack/neutron-specs,n,z">https://review.openstack.org/#/q/status:open+project:openstack/neutron-specs,n,z</a></span></div><div>[4] <a class="" href="https://github.com/openstack/neutron-specs">https://github.com/openstack/neutron</a><br></div><div><span>[5] <a class="" href="https://wiki.openstack.org/wiki/NeutronThirdPartyTesting">https://wiki.openstack.org/wiki/NeutronThirdPartyTesting</a></span></div><div><span>[6] <a class="" href="http://ci.openstack.org/third_party.html">http://ci.openstack.org/third_party.html</a></span></div><div><span>[7] <a class="linkclass" href="https://wiki.openstack.org/wiki/IRC">https://wiki.openstack.org/wiki/IRC</a> </span></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Sun, Oct 5, 2014 at 9:51 PM, thanh le giang <span dir="ltr"><<a href="mailto:legiangthanh@gmail.com" target="_blank">legiangthanh@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><p class="MsoNormal">Hi all</p><p class="MsoNormal"> </p><p class="MsoNormal">I want to add a plugin to the Public Neutron Repository. Although I have read the gerrit workflow and Neutron Development page (<a href="https://wiki.openstack.org/wiki/NeutronDevelopment" target="_blank">https://wiki.openstack.org/wiki/NeutronDevelopment</a>), I don't know clearly how we can add our plugin to neutron repository. Could you please share me the process?</p><p class="MsoNormal"> </p><p class="MsoNormal">Thanks and best regards,</p><span class="HOEnZb"><font color="#888888"><div><br></div>-- <br>L.G.Thanh<br><br>Email:<a href="mailto:legiangthanh@gmail.com" target="_blank"> legiangthan@gmail.com</a><br><a href="mailto:lgthanh@fit.hcmus.edu.vn" target="_blank">lgthanh@fit.hcmus.edu.vn</a><br>
</font></span></div>
<br>_______________________________________________<br>
OpenStack-dev mailing list<br>
<a href="mailto:OpenStack-dev@lists.openstack.org">OpenStack-dev@lists.openstack.org</a><br>
<a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" target="_blank">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><br>
<br></blockquote></div><br></div>