-
Notifications
You must be signed in to change notification settings - Fork 54
Use Ansible networking #993
Comments
For posterity, the relevant bit from the summary email after the meeting that I got (was not there myself):
I'm given to understand that not much detail was discussed. Let's start grounding the exploration with actual requirements, be clear about what we're getting out of this etc. Questions:
I'm going to link to this issue from the mailing list thread, so we can get the technical discussion/work rolling in the usual channels. |
Let me add few points here from what I gathered by talking to Red Hat folks informally during the day.
Related to comments made by @zenhack:
I hope this helps. |
That's how I felt like too.
We should still have visibility and an understanding of those modules if we'll be relying for network isolation on Ansible Networking drivers.
To add to this, they also have platform agnostic modules. Other than the points @SahilTikale mentioned, we also get to build a community around HIL. I think the main thing that's blocking us right now is finding the roles and modules of some switch and then we can start working with it. |
Ok. I'm not necessarily opposed to replacing the driver infrastructure whole-sale, but I have a couple concerns:
What I think definitely makes sense is to re-use/collaborate on the python code for the switches. But I wonder if an architecture like this makes more sense:
I'm actually really not a huge fan of how our driver infrastructure is set up right now, and wouldn't mind swapping it out for something else. But I'm not convinced going through ansible proper actually makes technical sense. A lot of this depends on what the existing modules look like. I'm going to ping the email thread about this, in case the folks who know where the code is aren't reading this. |
Actually, I think I found them: https://github.com/ansible/ansible/tree/devel/lib/ansible/modules/network |
And, for reference, here is the role documentation: http://docs.ansible.com/ansible/latest/modules/list_of_network_modules.html Picking through it may provide some more insight into the interfaces we're looking at. |
@zenhack I will try to fill in some of the blanks here. One of the advantages of using Ansible is that we can completely decouple the orchestration interface from the low level driver. Ansible affords us the opportunity to define the API contract between HIL and Ansible and then Ansible can invoke the appropriate device specific implementation. Because the device specific implementation is essentially Ansible tasks, we are not restricted to having to build device drivers that have to conform to a specific super class. In fact, device "drivers" don't even have to be written in Python since Ansible can execute modules written in any language. (In all fairness though, Python by far is the most common and quickest way to get started). Additionally, Ansible is able to map the input data structure to any output, meaning that connection to the device can be easily changed out without having to modify anything upstream. So moving from cli to netconf to grpc (or whatever path may be chosen) becomes a routine exercise. And since we are invoking tasks through the modules, "drivers" can be developed and updated independently and provided easily by vendors that may or may not ever have an understanding of the particular application they are being used for. With regards to fact collection, there is a significant amount of flexibility here that can be used to optimize the implementation. Facts try to run with a sane set of defaults but there is quite a bit of room for optimizing (or even eliminating) that process if needed. I would amend your call graph slightly to follow this paradigm:
I think the key is the role usage and the benefits it brings. All this said, I think the right starting point is not looking at the modules available but to start with what is the functions that Ansible needs to provide and what is the data structures that will be provided as input to perfrom said functions. From there the path can be determined as to the right next steps. |
From questions posed by @zenhack:
Getting to back to this to answer the more specific questions. All modules that ship with Ansible are available in the
This is a bit of an "it depends" answer. There is, currently, a general slant to modules being platform (or vendor if you will) specific. However, as the transition moved from 2.5 development to the current set of sprints, much of the platform specific code has been push "down the stack" into plugins that allow for building platform agnostic instantiations of modules. To put that in a more real world use case, instead of having things like
I cannot offer much here yet as I'm still digging into the HIL architecture and code base to understand it better. I will have more thoughts to offer once I finish going through the architecture in more detail. |
This was briefly raised on the email thread, but we didn't really end up following up on it this week: @privateip suggested a more synchronous discussion (maybe via IRC; we could use |
yeah, afternoons work for me too given a bit of a notice. |
Agreed lets pin something down. I will toss out Thur 2pm EDT as an option |
Works for me. |
Works for me too. |
Confirmed then, Thurs 2pm EDT #moc on Freenode... see you there |
Cool, see you all there.
Quoting Peter Sprygada (2018-04-22 23:29:56)
… Confirmed then, Thurs 2pm EDT #moc on Freenode... see you there
|
Channel logs from the meeting, for posterity:
|
We are still POCing the code for the ML2 driver. Here's where we've gotten to: This is the ironic BMaas stuff referenced above |
This was discussed during the RedHat roundtable meeting. This seems like a good idea as this will allow us to support more switches quickly. Though, we should investigate this in detail before moving forward.
It's kinda difficult to find the code related to Ansible networking. Here's what I found for the dell switches:
https://github.com/Dell-Networking/ansible-role-dellos-vlan but I still haven't found the code for the modules themselves.
The text was updated successfully, but these errors were encountered: