<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Tue, Nov 18, 2014 at 2:31 AM, Pasquale Porreca <span dir="ltr"><<a href="mailto:pasquale.porreca@dektech.com.au" target="_blank">pasquale.porreca@dektech.com.au</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Thank you very much Christopher<span class=""><br>
<br>
On 11/17/14 12:15, Christopher Yeoh wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Yes, sorry documentation has been on our todo list for too long. Could I get you to submit a bug report about the lack of developer documentation for api plugins? It might hurry us up :-)<br>
</blockquote>
<br></span>
I reported as a bug and subscribed you to it. <a href="https://bugs.launchpad.net/nova/+bug/1393455" target="_blank">https://bugs.launchpad.net/<u></u>nova/+bug/1393455</a><span class=""><br>
<br></span></blockquote><div><br></div><div>Thanks!<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
In the meantime, off the top of my head..... you'll need to create or modify the following files in a typical plugin:<br>
<br>
setup.cfg - add an entry in at least the nova.api.v3.extensions section<br>
<br>
etc/nova/policy.json - an entry for the permissions for you plugin, perhaps one per api method for maximum flexibility. Also will need a discoverable entry (lots of examples in this file)<br>
<br>
nova/tests/unit/fake_policy.<u></u>json (similar to policy.json)<br>
</blockquote>
<br></span>
I wish I had asked about this before, I found yet these files, but I confess it took quite a bit of time to guess I had to modify them (I actually didn't modify yet fake_policy, but my tests are still not completed).<br>
What about nova/nova.egg-info/entry_<u></u>points.txt I mentioned earlier?<span class=""><br>
<br></span></blockquote><div><br></div><div>The entry points file is automatically updated based on setup.cfg<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
nova/api/openstack/compute/<u></u>plugins/v3/<your_plugin.py> - please make the alias name something os-scheduler-hints rather than OS-SCH-HNTS. No skimping on vowels. Probably the easiest way at this stage without more doco is look for for a plugin in that directory that does the sort of the thing you want to do.<br>
</blockquote>
<br></span>
Following the path of other plugins, I created a module nova/api/openstack/compute/<u></u>plugins/v3/node_uuid.py, while the class is NodeUuid(extensions.<u></u>V3APIExtensionBase) the alias is os-node-uuid and the actual json parameter is node_uuid. I hope this is correct...<span class=""><br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
nova/tests/unit/nova/api/<u></u>openstack/compute/contrib/<u></u>test_your_plugin.py - we have been combining the v2 and v2.1(v3) unittests to share as much as possible, so please do the same here for new tests as the v3 directory will be eventually removed. There's quite a few examples now in that directory of sharing unittests between v2.1 and v2 but with a new extension the customisation between the two should be pretty minimal (just a bit of inheritance to call the right controller)<br>
<br>
</blockquote>
<br></span>
Very good to know. I put my test in nova/tests/unit/api/openstack/<u></u>plugins/v3 , but I was getting confused by the fact only few tests were in this folder while the tests in nova/tests/unit/api/openstack/<u></u>compute/contrib/ covered both v2 and v2.1 cases.<br>
So should I move my test in nova/tests/unit/api/openstack/<u></u>compute/contrib/ folder, right?<span class=""><br></span></blockquote><div><br></div><div>Yes<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
nova/tests/unit/integrated/v3/<u></u>test_your_plugin.py<br>
nova/tests/unit/integrated/<u></u>test_api_samples.py<br>
<br>
Sorry the api samples tests are not unified yet. So you'll need to create two. All of the v2 api sample tests are in one directory, whilst the the v2.1 are separated into different files by plugin.<br>
<br>
There's some rather old documentation on how to generate the api samples themselves (hint: directories aren't made automatically) here:<br>
<br>
<a href="https://blueprints.launchpad.net/nova/+spec/nova-api-samples" target="_blank">https://blueprints.launchpad.<u></u>net/nova/+spec/nova-api-<u></u>samples</a><br>
<br>
Personally I wouldn't bother with any xml support if you do decide to support v2 as its deprecated anyway.<br>
</blockquote>
<br></span>
After reading your answer I understood I have to work more on this part :)<span class=""><br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Hope this helps. Feel free to add me as a reviewer for the api parts of your changesets.<br>
</blockquote>
<br></span>
It helps a lot! I will add you for sure as soon as I will upload my code. For now the specification has still to be approved, so I think I have to wait before to upload it, is that correct?<br>
<br>
This is the blueprint link anyway: <a href="https://blueprints.launchpad.net/nova/+spec/use-uuid-v1" target="_blank">https://blueprints.launchpad.<u></u>net/nova/+spec/use-uuid-v1</a><br>
<br></blockquote><div><br></div><div>So it won't hurt to upload the code before the spec is approved if you're looking for some early feedback, but I'd recommend setting it to Work in Progress otherwise it's likely to get -2'd pending spec approval<br></div><div><br></div><div>Regards,<br><br>Chris<br></div></div></div></div>