----- Original Message ----- > From: "Thomas Haller" <thal...@redhat.com> > To: "Petr Horacek" <phora...@redhat.com> > Cc: "Yegor Yefremov" <yegorsli...@googlemail.com>, "networkmanager." > <networkmanager-list@gnome.org> > Sent: Tuesday, March 3, 2015 4:42:59 PM > Subject: Re: D-bus create device, tutorials, resources > > On Tue, 2015-03-03 at 06:28 -0500, Petr Horacek wrote: > > > > ----- Original Message ----- > > > From: "Thomas Haller" <thal...@redhat.com> > > > To: "Yegor Yefremov" <yegorsli...@googlemail.com> > > > Cc: "Petr Horacek" <phora...@redhat.com>, "networkmanager." > > > <networkmanager-list@gnome.org> > > > Sent: Tuesday, March 3, 2015 12:03:43 PM > > > Subject: Re: D-bus create device, tutorials, resources > > > > > > On Tue, 2015-03-03 at 10:28 +0100, Yegor Yefremov wrote: > > > > On Tue, Mar 3, 2015 at 10:03 AM, Petr Horacek <phora...@redhat.com> > > > > wrote: > > > > > Hello folks, > > > > > > > > > > I'm new to NetworkManager, getting familiar with D-bus interface etc. > > > > > I'd like to create a high level Python interface for nm, but I have > > > > > trouble > > > > > with insufficient documentation resources (or my Google skills). > > > > > > > > > > Is there any tutorial or D-bus code example for e.g. creating a bond > > > > > device > > > > > with defined IP? I've found plenty of 'list devices' but nothing like > > > > > this. > > > > > > > > What's wrong with this project > > > > https://github.com/seveas/python-networkmanager ? > > (Copying from another response:) > > I know this lib, "problem" is, that you still have to handle NetworkManager > > with > > some strings, dictionaries etc. I would like to do it more Pythonic way, > > like: > > > > add_bond(name, slaves), or even better with some context managers and > > stuff. > > > > > > > > > > > See also, > > > http://cgit.freedesktop.org/NetworkManager/NetworkManager/tree/examples/python/dbus > > > which are examples for using Python to access the D-Bus interface > > > directly. > > > > > > > > > then there is also > > > http://cgit.freedesktop.org/NetworkManager/NetworkManager/tree/examples/python/gi > > > which uses libnm via gobject introspection. If you want something quick, > > > this might be better. If you want to implement the best possible python > > > NM library, you might don't want to use it. > > > > > > Note that libnm will always be installed together with NetworkManager, > > > so the additional dependency is not that cumbersome. > > > But libnm was only introduced with nm-1-0, so if you want to support > > > older NM (too), you must use the now deprecated libnm-utils library. > > > http://cgit.freedesktop.org/NetworkManager/NetworkManager/tree/examples/python/gi?h=nm-0-9-10 > > > The deprecated library libnm-utils also works with NM 1.0 and newer, but > > > it is... deprecated. > > > > > > > > > The D-Bus API for NM is quite stable, so if you are using D-Bus > > > directly, you should easily be able to support various version of > > > NetworkManager. > > > > > > > > > > > > I didn't look at python-networkmanager, but that might be worth using > > > (and improving) instead of adding yet another wrapper. > > > > > > > > > > > > > > > Thomas > > > > > > > I would love to use D-Bus API, but I don't know what strings should I use > > for for > > example adding bond and stuff like that. Thanks for links, but I think, i > > read them all. > > NetworkManager is all about connections (i.e. profiles, which basically > are a bunch of key-value dictionaries). > > see: > http://cgit.freedesktop.org/NetworkManager/NetworkManager/tree/examples/python/dbus/add-connection.py > > > To create a bond setting, populate the dictionary accordingly, most > notably with a different connection.type='bond' entry. > > To know which properties are supported, see `man nm-settings`. > Look also what nmcli does, i.e. create a connection there, and see how > it turns out. You can do that for example using d-feet and looking at > the (D-Bus) GetSettings() method. > > > For example > $ $ nmcli connection add type bond > > afterwards, GetSettings() returns: > > {'bond': {'interface-name': 'nm-bond', 'options': {'mode': 'balance-rr'}}, > 'connection': {'id': 'bond', > 'interface-name': 'nm-bond', > 'permissions': [], > 'secondaries': [], > 'type': 'bond', > 'uuid': '38ac844a-670d-4efe-b9a0-a2b53b1abaee'}, > 'ipv4': {'address-data': [], > 'addresses': [], > 'dns': [], > 'dns-search': [], > 'method': 'auto', > 'route-data': [], > 'routes': []}, > 'ipv6': {'address-data': [], > 'addresses': [], > 'dns': [], > 'dns-search': [], > 'method': 'auto', > 'route-data': [], > 'routes': []}} > > The 'bond' dictionary is special, because it contains yet another > dictionary 'options', so you would have to know which options are > supported. > > > > Improving python-networkmanager could be fine, but i would like to do more > > higher interface, as I mentioned in response to Yegor. Something like > > Python nmcli. > > sure! > > > good luck > Thomas >
Thanks a lot! This is really helpful, everything I was looking for :) Best regards, Petr _______________________________________________ networkmanager-list mailing list networkmanager-list@gnome.org https://mail.gnome.org/mailman/listinfo/networkmanager-list