<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=us-ascii"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
{font-family:Wingdings;
panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0in;
margin-bottom:.0001pt;
font-size:11.0pt;
font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
{mso-style-priority:99;
color:#0563C1;
text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
{mso-style-priority:99;
color:#954F72;
text-decoration:underline;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
{mso-style-priority:34;
margin-top:0in;
margin-right:0in;
margin-bottom:0in;
margin-left:.5in;
margin-bottom:.0001pt;
font-size:11.0pt;
font-family:"Calibri",sans-serif;}
span.EmailStyle17
{mso-style-type:personal-compose;
font-family:"Calibri",sans-serif;
color:windowtext;}
.MsoChpDefault
{mso-style-type:export-only;
font-family:"Calibri",sans-serif;}
@page WordSection1
{size:8.5in 11.0in;
margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
{page:WordSection1;}
/* List Definitions */
@list l0
{mso-list-id:1106660445;
mso-list-type:hybrid;
mso-list-template-ids:-78361222 1206003406 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l0:level1
{mso-level-start-at:0;
mso-level-number-format:bullet;
mso-level-text:-;
mso-level-tab-stop:none;
mso-level-number-position:left;
margin-left:20.25pt;
text-indent:-.25in;
font-family:"Calibri",sans-serif;
mso-fareast-font-family:Calibri;}
@list l0:level2
{mso-level-number-format:bullet;
mso-level-text:o;
mso-level-tab-stop:none;
mso-level-number-position:left;
margin-left:56.25pt;
text-indent:-.25in;
font-family:"Courier New";}
@list l0:level3
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:none;
mso-level-number-position:left;
margin-left:92.25pt;
text-indent:-.25in;
font-family:Wingdings;}
@list l0:level4
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:none;
mso-level-number-position:left;
margin-left:128.25pt;
text-indent:-.25in;
font-family:Symbol;}
@list l0:level5
{mso-level-number-format:bullet;
mso-level-text:o;
mso-level-tab-stop:none;
mso-level-number-position:left;
margin-left:164.25pt;
text-indent:-.25in;
font-family:"Courier New";}
@list l0:level6
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:none;
mso-level-number-position:left;
margin-left:200.25pt;
text-indent:-.25in;
font-family:Wingdings;}
@list l0:level7
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:none;
mso-level-number-position:left;
margin-left:236.25pt;
text-indent:-.25in;
font-family:Symbol;}
@list l0:level8
{mso-level-number-format:bullet;
mso-level-text:o;
mso-level-tab-stop:none;
mso-level-number-position:left;
margin-left:272.25pt;
text-indent:-.25in;
font-family:"Courier New";}
@list l0:level9
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:none;
mso-level-number-position:left;
margin-left:308.25pt;
text-indent:-.25in;
font-family:Wingdings;}
ol
{margin-bottom:0in;}
ul
{margin-bottom:0in;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-US link="#0563C1" vlink="#954F72"><div class=WordSection1><p class=MsoNormal>This email is to summarize the contents of several impromptu discussions at the summit last week for those who weren’t present. Obviously anything anybody writes is going to include their own perspective, but hopefully I’ve talked about this in enough detail to enough people that I can do a reasonably fair job of summarizing.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>It can be argued that Gluon represents an alternative to Neutron, but that’s not the intent and the Gluon team doesn’t want that to be the case. My preferred description is that Gluon is a proof of concept that starts from several different primary design goals and that the best, most cooperative path forward is to combine the key Gluon ideas and benefits with the existing strengths of Neutron.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>There are three main parts of the Gluon project:<o:p></o:p></p><ul style='margin-top:0in' type=disc><li class=MsoListParagraph style='margin-left:-15.75pt;mso-list:l0 level1 lfo1'>Gluon itself – Gluon is a core plugin to Neutron derived as a subclass of ML2 so that it can provide all ML2 functionality, plus a bit extra when a VLAN-esque layer 2 broadcast domain is not the correct semantic, or at least not the cleanest semantic<o:p></o:p></li><li class=MsoListParagraph style='margin-left:-15.75pt;mso-list:l0 level1 lfo1'>Proton Server – A server similar to if the Neutron server only ran service plugins without running a core plugin and where each service plugin is defined in domain specific modeling language rather than as Python code<o:p></o:p></li><li class=MsoListParagraph style='margin-left:-15.75pt;mso-list:l0 level1 lfo1'>Particle Generator – A sort of “compiler” for the YAML DSL in which “Protons” are written in order to load the API models into the Proton server<o:p></o:p></li></ul><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The direction which we would like to take is to begin incorporating these elements of Gluon into the Neutron project and complying with all of the Neutron Stadium guidelines.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>We will start by positioning the Gluon component itself as an available choice of Neutron core plugin. I view this a little bit like how Neutron offers a choice of linuxbridge and OvS drivers. The ML2 and Gluon core plugins are closely related with Gluon just adding a little extra functionality. Deployers can continue to use ML2 if they don’t care about the few extra bits that Gluon adds. This is similar to deployers who find OvS too complicated and want to deploy the simpler linuxbridge to get most, but not all, of the same functionality. A key goal will be that anything that works using ML2 as the core plugin should also work when using Gluon as the core plugin.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The second thing we will do is position Particle Generator as a sort of “Neutron Service Plugin Generator” which will make the Proton Server unnecessary since the Neutron Server will act as the host for the service plugins.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>We’ll need to work on improving documentation, but the goal will be to offer current and future Neutron Service Plugin authors the option of using the YAML DSL to define new Neutron Service Plugins. This doesn’t force any change, but if the DSL proves easy to use it will offer a possibly faster way of writing Service Plugins<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The YAML models which are parsed by the Particle Generator are similar to the API definitions in neutron-lib[1] but in YAML rather than a dictionary in Python syntax. My hope is that we will continue to add to Particle Generator outputs and in the end state it could produce all of the following as basically output to “compiling” a YAML model of an API:<o:p></o:p></p><ul style='margin-top:0in' type=disc><li class=MsoListParagraph style='margin-left:-15.75pt;mso-list:l0 level1 lfo1'>Neutron Service Plugin<o:p></o:p></li><li class=MsoListParagraph style='margin-left:-15.75pt;mso-list:l0 level1 lfo1'>Database model and expand/contract migrations<o:p></o:p></li><li class=MsoListParagraph style='margin-left:-15.75pt;mso-list:l0 level1 lfo1'>API documentation – i.e. end user readable content for [2]<o:p></o:p></li><li class=MsoListParagraph style='margin-left:-15.75pt;mso-list:l0 level1 lfo1'>OpenStack CLI extension (and neutronclient extension if worthwhile, but perhaps not since it’s deprecated)<o:p></o:p></li><li class=MsoListParagraph style='margin-left:-15.75pt;mso-list:l0 level1 lfo1'>Heat resources<o:p></o:p></li><li class=MsoListParagraph style='margin-left:-15.75pt;mso-list:l0 level1 lfo1'>Stretch Goal: Horizon GUI panels if a standard structure can be devised to map the model to a GUI layout<o:p></o:p></li></ul><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The fourth part of the Gluon project that doesn’t quite fit inside of the Gluon project is the “shim layers” that map APIs onto specific SDN controllers. Following the Neutron Service Plugin model, these should live in the various networking-* repos such as networking-odl, networking-ovn, etc, including the newly created networking-opencontrail.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>[1] <a href="https://github.com/openstack/neutron-lib/tree/master/neutron_lib/api/definitions">https://github.com/openstack/neutron-lib/tree/master/neutron_lib/api/definitions</a><o:p></o:p></p><p class=MsoNormal>[2] https://developer.openstack.org/api-ref/networking/v2/<o:p></o:p></p></div></body></html>