[openstack-dev] [TripleO] Network Configuration in TripleO UI
Ben Nemec
openstack at nemebean.com
Thu Dec 15 21:46:05 UTC 2016
On 12/08/2016 08:05 AM, Jiri Tomasek wrote:
> Hi all,
>
> I've been investigating how to implement TripleO network configuration
> in TripleO UI. Based on my findings I'd like to propose a solution.
>
> tl;dr proposal: Slightly refactor Network environment files to match GUI
> usage, Use Jinja Templating to generate dynamic parts of the
> templates/environments
>
>
> # Overview
>
> I've used Ben Nemec's amazing Network template generator as a reference
> to help me understand how the network configuration works [1]. In
> general the process of configuring the network in TripleO is:
>
> Define which Networks we intend to use -> Assign Roles to the Networks
> (+ Assign Role Services to the Network) -> Generate NIC config templates
> based on previous information
>
>
[snip]
> # The proposal
>
> So having described previous, here is the approach I think we should use
> to achieve network configuration using TripleO UI:
>
> 1. Put networks definitions into separate environment for each network:
> - this way GUI can provide a list of networks available to use and let
> user select which of them he wants to use. These environments are not
> dynamic and if user wants to add a new network, he does so by creating
> new templates and environment for it. UI also provides means to
> configure parameters for each network at this point (if needed).
>
> For example the environment for a Storage Network looks like this:
>
> resource_registry:
> OS::TripleO::Network::Storage: ../network/storage.yaml
> OS::TripleO::Network::Ports::StorageVipPort:
> ../network/ports/storage.yaml
This seems like an obvious improvement, and is essentially how my tool
works too except that it munges all of the individual environments back
together at the end.
Definite +1 from me.
>
> 2. Assign Roles to Networks
> Having the Networks selected as well as Roles defined, TripleO UI
> provides user with means to assign Roles to Networks. This step involves
> generating the network-environment.yaml file. So TripleO UI sends the
> mapping of roles to network in json format to tripleo-common which in
> turn uses network-isolation.j2.yaml Jinja template to generate the
> environment file. I expect that pre-defined network-isolation.yaml will
> be included in default plan so the user does not need to start from
> scratch. Tripleo-common also provides an action to fetch network-roles
> assignment data by parsing the network-isolation.yaml
>
> In addition, user is able to assign individual Role Services to a
> Network. ServiceNetMap parameter is currently used for this. GUI needs
> to make sure that it represents Services-Networks assignment grouped by
> Role so it is ensured that user assigns Services to only networks where
> their Role is assigned.
This sounds reasonable to me, but I do want to note that assigning roles
to networks feels a little backwards to me. I tend to think of a role
as kind of the top level thing here, to which we assign other things
(services and networks, for example). So my mental model kind of looks
like:
roles:
Controller:
networks:
- provision
- external
- internal
...
Compute:
networks:
-provision
...
as opposed to what I think you're describing, which is
networks:
Provision:
roles:
- controller
- compute
External:
roles:
- controller
...
Maybe there are benefits to modeling it as the latter, but I think the
former fits better with the composable roles architecture.
>
> 3. Generate NIC Config templates
> TripleO UI provides means to configure NICS, Bonds etc. for each Role,
> using the information from previous steps. It sends the data in json
> format to tripleo-common which then generates nic config templates for
> each Role based on network/config/nic-configs/role.j2.yaml Jinja
> template and generates network-environment.yaml based on
> network-environment.j2.yaml which references those templates.
>
> Note that network-environment.j2.yaml probably can't be combined with
> network-isolation.j2.yaml as every time that environment would need to
> get updated, all data the template needs would need to be provided.
>
> There are wireframes made by Liz Blanchard currently available [5],
> althought they are not exactly up to date to this proposal. Ideally
> whole network configuration would happen on a screen based on the
> graphical representation of network [6].
>
>
> Any comments to this proposal are very welcome, please note that I am
> not a networking expert so I might be missing something.
>
> There is a spec [7] in progress aimed for Ocata, but the feature will
> highly probably not land in Ocata, so we'll need to update the spec and
> move it to next cycle.
>
>
> [1]
> http://blog.nemebean.com/content/tripleo-network-isolation-template-generator
>
> [2] https://github.com/openstack/tripleo-heat-templates
> [3]
> https://github.com/openstack/tripleo-heat-templates/blob/master/environments/network-environment.yaml
>
> [4]
> https://github.com/openstack/tripleo-heat-templates/blob/master/environments/network-isolation.yaml
>
> [5] https://openstack.invisionapp.com/share/UM87J4NBQ#/screens/179046668
> [6] https://openstack.invisionapp.com/share/UM87J4NBQ#/screens/179046679
> [7] https://review.openstack.org/#/c/396383/
>
> Thanks
> Jirka
>
>
> __________________________________________________________________________
> OpenStack Development Mailing List (not for usage questions)
> Unsubscribe: OpenStack-dev-request at lists.openstack.org?subject:unsubscribe
> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
More information about the OpenStack-dev
mailing list