[pve-devel] pve-network : new proposal for apply/reload config

Alexandre DERUMIER aderumier at odiso.com
Tue May 7 07:59:13 CEST 2019


>>Inside pvestad, you can do a fork() to avoid blocking other things.
ok great


>>> for each vnet and vnet bridge-ports 
>>> compare running_config with /etc/network/interfaces.d/vnet 
>>> status: ok / error (vnet missing, or different config(vlan tag,...)) -> broadcast status 
>>> 

>>worth to try. Maybe simply write the result to a file on /etc/pve? 

I was a bit too optimist with ifquery -a -r (forget the -r for running config, 15s was to parse the file config), it's more around 2min for 2000vnets, I have debug it, it's looking about 
a lot of property in sysfs, but also calling command (brctl,...), and it's can slowdown things.

I think it should not be too difficult to implement a parser of sysfs, to get the running config (on a limited scope, related to the plugins && vnet option)
I can parse whole sysfs vnet in 2-3s (with 2000vnets + 2000 vxlans interfaces), so it should be faster.

But yes, we could store status in /etc/pve too without need to broadcast.



>>I thought we can apply pending changes when a node starts up? 
yes, I have also thinked about this, I just need to do it after /etc/pve retrieval.
(1) network start,  2) pmxcfs is starting 3) reload network configuration if changes are detected


----- Mail original -----
De: "dietmar" <dietmar at proxmox.com>
À: "pve-devel" <pve-devel at pve.proxmox.com>, "aderumier" <aderumier at odiso.com>
Envoyé: Mardi 7 Mai 2019 06:35:45
Objet: Re: [pve-devel] pve-network : new proposal for apply/reload config

comment inline ... 

> I have rethinked about reloading config, without extra daemon: 
> 
> 
> " 
> datacenter level: 
> -commit config : - mv /etc/pve/networks.cfg.new /etc/pve/networks.cfg 
> - call each (online) node reload api. 
> 
> 
> local node: 
> reload api: -> generate /etc/network/interfaces.d/vnet 
> merge pending /etc/network/interfaces.new to /etc/network/interfaces 
> ifreload -a (2minutes for 2000 vnets, but take 15s at boot ( ifup -a --perfmode) 
> ) 
> 
> 
> pvestatd: 
> 
> get running config : ifquery -a -r (15second for 2000vnets -> maybe make a cache(cron?otherdaemon?) to not block pvestatd ?) 

Inside pvestad, you can do a fork() to avoid blocking other things. 

> for each vnet and vnet bridge-ports 
> compare running_config with /etc/network/interfaces.d/vnet 
> status: ok / error (vnet missing, or different config(vlan tag,...)) -> broadcast status 
> 

worth to try. Maybe simply write the result to a file on /etc/pve? 

> (they are also a "ifquery -c <int>" to compare running and configuration, but it's interface by interface, and maybe more slower, 
> so it could be used to have an accurate detail on a specific vnet in the gui) 
> 
> Error should occur because a conflict with a local setting (already used vlan, missing uplink-id,...) 
> So user can easy see errors from pvestatd status for each vnet. (displayed in the tree ?). 
> then for fix error, user go the local network configuration, do local network fix changes, 
> and call reload api again. 
> 
> If the node was offline when we have commit network config, the vnets will also be displayed in error (different config, missing vnet,...), 

I thought we can apply pending changes when a node starts up? 

> so user can also reload it manually from local config. 
> 
> " 
> 
> 
> I think this give more control to user, and avoid to have a background daemon reloading networking. (More simpler to fix error, avoid reload loop,....) 
> 
> What do you think about this ? 

Sounds good. Now there is less magic, and the admin has more control ... 




More information about the pve-devel mailing list