<div dir="ltr">Hi, all<div><br></div><div>Full support for network configuration is one of the main goals for TripleO UI for Rocky cycle as it is missing part which still requires user to manually prepare templates and provide them to deployment plan.</div><div><br></div><div><b>Step 1. Network Isolation</b></div><div><br></div><div>In Queens cycle we've started working on adding roles and networks management Mistral workflows  [1], [2] which allows GUI to provide composable roles and networks features. Roles management workflows are landed, networks management work has most of the patches up for a review.</div><div><br></div><div>Both roles and networks management is based on a similar concept of having roles/networks directory in deployment plan which consists of roles/networks definitions available to be used for deployment. The list of selected roles/networks which are actually used for deployment as well as it's configuration is stored in roles_data.yaml and network_data.yaml which are then used for populating jinja templates/environments. TripleO-common then provides Mistral workflows for listing available roles/networks, listing currently selected roles/networks, updating roles/networks and selecting roles/networks.</div><div><br></div><div>This functionality allows us to:</div><div>Select roles for deployment and configure them</div><div>Select networks used for deployment and configure them</div><div>Assign networks to roles</div><div><br></div><div>Result of this is network-isolation.yaml environment file with correct templates configured in resource_registry and parameters set according to information in networks_data.yaml and roles_data.yaml</div><div><br></div><div>Work needed to finish:</div><div>[tripleo-heat-templates]</div><div>Add networks directory <a href="https://review.openstack.org/#/c/520634/" target="_blank">https:/<wbr>/review.openstack.org/#/c/<wbr>520634/</a></div><div><br></div><div>[tripleo-common]</div><div>Update Networks <a href="https://blueprints.launchpad.net/tripleo/+spec/update-networks-action">https://blueprints.launchpad.net/tripleo/+spec/update-networks-action</a></div><div>Get Available Networks <a href="https://blueprints.launchpad.net/tripleo/+spec/get-networks-action">https://blueprints.launchpad.net/tripleo/+spec/get-networks-action</a></div><div>Select Networks <blueprint needs to be created> (will be pretty much the same as <a href="https://blueprints.launchpad.net/tripleo/+spec/tripleo-common-select-roles-workflow">https://blueprints.launchpad.net/tripleo/+spec/tripleo-common-select-roles-workflow</a>)</div><div><br></div><div>[tripleo-ui] <blueprints to be done>, Wireframes [6]</div><div>Create Network configuration step in deployment plan page</div><div>Create network configuration wizard view</div><div>Create dialog to select networks used for deployment<br></div><div><div>Create dialog to configure networks</div></div><div>Create dialog to assign networks to roles <a href="https://blueprints.launchpad.net/tripleo/+spec/networks-roles-assignment-ui">https://blueprints.launchpad.net/tripleo/+spec/networks-roles-assignment-ui</a></div><div><br></div><div>Up to here the direction is pretty well defined.</div><div><br></div><div><b>Step 2. network-environment -> NIC configs</b></div><div><br></div><div>Second step of network configuration is NIC config. For this network-environment.yaml is used which references NIC config templates which define network_config in their resources section. User is currently required to configure these templates manually. We would like to provide interactive view which would allow user to setup these templates using TripleO UI. A good example is a standalone tool created by Ben Nemec [3].</div><div><br></div><div>There is currently work aimed for Pike to introduce jinja templating for network environments and templates [4] (single-nic-with-vlans, bond-with-vlans) to support composable networks and roles (integrate data from roles_data.yaml and network_data.yaml) It would be great if we could move this one step further by using these samples as a starting point and let user specify full NIC configuration.</div><div><br></div><div>Available information at this point:</div><div>- list of roles and networks as well as which networks need to be configured at which role's NIC Config template</div><div>- os-net-config schema which defines NIC configuration elements and relationships [5]</div><div>- jinja templated sample NIC templates</div><div><br></div><div>Requirements:</div><div>- provide feedback to the user about networks assigned to role and have not been configured in NIC config yet</div><div>- let user construct network_config section of NIC config templates for each role (brigdes/bonds/vlans/interfaces...)</div><div>- provide means to assign network to vlans/interfaces and automatically construct network_config section parameter references</div><div>- populate parameter definitions in NIC config templates based on role/networks assignment</div><div>- populate parameter definitions in NIC config templates based on specific elements which use them e.g. BondInterfaceOvsOptions in case when ovs_bond is used</div><div>- store NIC config templates in deployment plan and reference them from network-environment.yaml</div><div><br></div><div>Problems to solve:</div><div>As a biggest problem to solve I see defining logic which would automatically handle assigning parameters to elements in network_config based on Network which user assigns to the element. For example: Using GUI, user is creating network_config for compute role based on network/config/multiple-nics/compute.yaml, user adds an interface and assigns the interface to Tenant network. Resulting template should then automatically populate addresses/ip_netmask: get_param: TenantIpSubnet. Question is whether all this logic should live in GUI or should GUI pass simplified format to Mistral workflow which will convert it to proper network_config format and populates the template with it.</div><div><br></div><div>I'd really like to hear some ideas or feedback on this so we can figure out how to define a mechanism for configuring NICs. I bet Ben can provide a valuable info since he's implemented similar logic in his tool. [3]</div><div><br></div><div><br></div><div>[1] <a href="https://blueprints.launchpad.net/tripleo/+spec/roles-management" target="_blank">https://blueprints.<wbr>launchpad.net/tripleo/+spec/<wbr>roles-management</a></div><div>[2] <a href="https://blueprints.launchpad.net/tripleo/+spec/networks-management" target="_blank">https://blueprints.<wbr>launchpad.net/tripleo/+spec/<wbr>networks-management</a></div><div>[3] <a href="https://www.youtube.com/watch?v=k2ZBkkHdeEM" target="_blank">https://www.youtube.com/<wbr>watch?v=k2ZBkkHdeEM</a></div><div>[4] <a href="https://bugs.launchpad.net/tripleo/+bug/1737041" target="_blank">https://bugs.launchpad.<wbr>net/tripleo/+bug/1737041</a></div><div>[5] <a href="http://git.openstack.org/cgit/openstack/os-net-config/tree/os_net_config/schema.yaml" target="_blank">http://git.openstack.org/<wbr>cgit/openstack/os-net-config/<wbr>tree/os_net_config/schema.yaml</a></div><div>[6] <a href="https://lizsurette.github.io/OpenStack-Design/tripleo-ui/3-tripleo-ui-edge-cases/7.advancednetworkconfigurationandtopology">https://lizsurette.github.io/OpenStack-Design/tripleo-ui/3-tripleo-ui-edge-cases/7.advancednetworkconfigurationandtopology</a></div><div><br></div><div><div>Thanks</div><div>-- Jirka</div></div><div><br></div></div>