はじめに(結論)
NetworkManagerをPythonから叩くためのpython-networkmanagerパッケージはメンテナンスが滞っているので使わない方がいい,というお話です。(2022/12現在)
経緯
Python経由でOS(Linux)のIPアドレスを変更しようとpython-networkmanagerを使ってみました。が,ubuntu22.04(NetworkManage1.36),OracleLinux8U7(NetworkManager1.40.0)など,幾つかの環境で試してみたところ,ことごとくエラーが出て動きません。
こんなエラーです。
File "ip.py", line 8, in <module>
connection = devices[1].ActiveConnection.Connection
File "/usr/local/lib/python3.6/site-packages/NetworkManager.py", line 169, in get_func
return fixups.to_python(klass, 'Get', name, data, attrib['type'])
File "/usr/local/lib/python3.6/site-packages/NetworkManager.py", line 578, in to_python
val = fixups.base_to_python(val)
File "/usr/local/lib/python3.6/site-packages/NetworkManager.py", line 648, in base_to_python
return globals()[classname](val)
File "/usr/local/lib/python3.6/site-packages/NetworkManager.py", line 304, in __init__
self.uuid = self.GetSettings()['connection']['uuid']
File "<string>", line 8, in GetSettings
File "/usr/local/lib/python3.6/site-packages/NetworkManager.py", line 619, in to_python
val['ipv4']['dns'] = [fixups.addr_to_python(addr,socket.AF_INET) for addr in val['ipv4']['dns']]
KeyError: 'dns'
>>> connection = devices[0].ActiveConnection.Connection
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python3.6/site-packages/NetworkManager.py", line 169, in get_func
return fixups.to_python(klass, 'Get', name, data, attrib['type'])
File "/usr/local/lib/python3.6/site-packages/NetworkManager.py", line 578, in to_python
val = fixups.base_to_python(val)
File "/usr/local/lib/python3.6/site-packages/NetworkManager.py", line 648, in base_to_python
return globals()[classname](val)
File "/usr/local/lib/python3.6/site-packages/NetworkManager.py", line 304, in __init__
self.uuid = self.GetSettings()['connection']['uuid']
File "<string>", line 8, in GetSettings
File "/usr/local/lib/python3.6/site-packages/NetworkManager.py", line 623, in to_python
val['ipv6']['dns'] = [fixups.addr_to_python(addr,socket.AF_INET6) for addr in val['ipv6']['dns']]
KeyError: 'dns'
python-networkmanagerのGithubを追いかけたところ,NetworkManager>=1.34で発生するバグらしく,プルリクがでていました。しかし,メンテナが「I've mostly abandoned this project(私はこのプロジェクトをほとんど放棄してます)」と発言しており,今後のメンテナンスは厳しそうです。
https://github.com/seveas/python-networkmanager/pull/94