Hi Guys, PR https://github.com/nmstate/nmstate/pull/354 has express a initial layout. I want to expand that to discuss of how we reorganize our code:
* `InterfaecBasic` contains IPv4, IPv6 and other stuff shared between
interfaces.
* Specific interface type will have their own class like: Ethernet,
OVS, VLAN, LinuxBridge,
* All interface class will contains:
* Constants for default values, key names.
* canonicalize(iface_state, full_state)
Do pre-apply check(raise exception) and tidy up(fill missing
values).
Passing full_state allows checking and fixing slaves.
* self.verify(desire_iface_state, cur_iface_state)
Do validation.
* self.to_dict()
Return the state of interface as dictionary
* self.slaves()
Return a list of slaves interface names.
* IfaceClass.get(iface_name)
Retrieve current status of this interface after canonicalize().
* self.merge(current_iface_state)
Merge settings from current state. If nothing special, use common
merge function.
* Each interface will have their own python file where it invoke
backend calls.
* The `netinfo.show()` should return a `NmstateState` object rather
than a dictionary. This allows us to change the API without breaking
backward compatibility. It contains:
* self.to_dict()
Just call interface.to_dict() and merge them.
* self.to_json()
Just dump dict as jon.
* self.to_yaml()
Just dump dict as yaml.
* libnmstate.State.from_dict()
* Merge with current state
* Run canonicalize() on each interface objects.
* libnmstate.State.from_json()
* libnmstate.State.from_yaml()
* self.get_iface_state(iface_name)
Return iface state for certain interface. This is wildly use in
integration test, so adding to public interface might helps.
* libnmstate.State.get(iface_name=None, config_only=False)
* Return a State object.
* Internal steps:
* Get a list of interface names and their type.
* for iface_name, iface_type in ifaces_name_type:
base_iface_state = InterfaecBasic.get(iface_name)
specific_iface_state = iface_class_map[iface_type].get(
iface_name)
iface_state = _merge_dict(base_iface_state,
specific_iface_state)
states.ifaces[iface_name] = iface_state
* states.route = Route.get()
* states.dns = DNS.get()
* self.apply(timeout=30, manual_commit=True)
* Apply and verify if required.
* self._verify(current_state)
* Invoke interface.verify() for each interface object.
* Invoke route.verify()
* Invoke dns.verify()
--
Gris Ge
signature.asc
Description: PGP signature
_______________________________________________ networkmanager-list mailing list [email protected] https://mail.gnome.org/mailman/listinfo/networkmanager-list
