o ed@shdZddlZddlZddlZddlZddlZddlmZddlm Z Gddde Z Gddde Z dS) znetplan configuration managerN)Optional) libnetplanc@seZdZdifddZddZeddZedd Zdd d Zd dZ dddZ ddZ ddZ ddZ ddZdddZd S) ConfigManager/cCsP||_tjdd|_tj|jd|_tj|jd|_||_ t |_ d|_ dS)Nnetplan_)prefixetcrun) rtempfilemkdtemptempdirospathjointemp_etctemp_run extra_filessetnew_interfacesnp_state)selfrrr+/usr/share/netplan/netplan/configmanager.py__init__ s zConfigManager.__init__cCs|jdus Jdt|j|SNz.Must call parse() before accessing the config.)rgetattr)rattrrrr __getattr__)s zConfigManager.__getattr__cCsD|jdus Jdi}||jj||jj||jj|Sr)rupdate ethernetsmodemswifisr interfacesrrrphysical_interfaces-s z!ConfigManager.physical_interfacescCs`|jdus Jdi}||jj||jj||jj||jj||jj|Sr)rrbridgesbondstunnelsvlansvrfsr"rrrvirtual_interfaces6sz ConfigManager.virtual_interfacesNc Cs~t}z |j|jd|r|D]}||qt|_|j|Wntjy6}zt |j d}~ww|j |jS)z Parse all our config files to return an object that describes the system's entire configuration, so that it can later be interrogated. Returns a libnetplan State wrapper )rootdirN) rParserload_yaml_hierarchyr load_yamlStaterimport_parser_resultsLibNetplanExceptionConfigurationErrorargs dump_to_logs)r extra_configparserferrrparseBs     zConfigManager.parsecCs0|D] }||||q|j|d|_dSN) _copy_filerrr)r config_dict config_filerrradd[s  zConfigManager.addTcCs|r|tj|jdtj|jd|jtj|jdtj|jdddd|jtj|jdtj|jd d dddS) Nz etc/netplannetplan%run/NetworkManager/system-connectionsNetworkManagerzsystem-connectionsT) missing_okrun/systemd/networksystemdnetwork) _copy_treer rrrrr)rbackup_config_dirrrrbackupcs zConfigManager.backupc Cs z`t|jD]}t|j||j|=qd|j}d|j}tj|r>t tj |j d| |tj |j dtj|r^t tj |j d| |tj |j dWdSWdSt y}ztd|tdtdWYd}~dSd}~ww)Nz${}/NetworkManager/system-connectionsz{}/systemd/networkr@rCz8Something really bad happened while reverting config: {}zZYou should verify the netplan YAML in /etc/netplan and probably run 'netplan apply' again.)dictrr unlinkformatrrexistsshutilrmtreerrrF Exceptionloggingerrorsysexit)r extra_file temp_nm_pathtemp_networkd_pathr8rrrrevertns.       zConfigManager.revertcCst|jdSr:)rNrOr rrrrcleanupzConfigManager.cleanupcCs$z|WdStyYdSwr:)rZFileNotFoundErrorrYrrr__del__s  zConfigManager.__del__cCst||dSr:)rNcopy)rsrcdstrrrr;r[zConfigManager._copy_fileFcCs.z t||WdSty|rYdSwr:)rNcopytreer\)rr_r`rBrrrrFs zConfigManager._copy_treer:)T)F)__name__ __module__ __qualname__rrpropertyr$r*r9r>rHrXrZr]r;rFrrrrrs      rc@seZdZdZdS)r2zL Configuration could not be parsed or has otherwise failed to apply N)rbrcrd__doc__rrrrr2sr2)rfrQr rNrSr typingrr?robjectrrPr2rrrrs