
    Rg                     z    S r SSKrSSKrSSKrSSKrSSKrSSKrSSKJr   " S S\	5      r
S	S jr " S S\5      rg)
znetplan configuration manager    N)Optionalc                       \ rS rSrS0 4S jrS r\S 5       r\S 5       rSS jr	S	 r
SS
 jrS rS rS rS rSS jrSrg)ConfigManager   /c                 6   Xl         [        R                  " SS9U l        [        R
                  R                  U R                  S5      U l        [        R
                  R                  U R                  S5      U l        X l	        [        5       U l        S U l        g )Nnetplan_)prefixetcrun)r
   tempfilemkdtemptempdirospathjointemp_etctemp_runextra_filessetnew_interfacesnp_state)selfr
   r   s      //usr/share/netplan/netplan_cli/configmanager.py__init__ConfigManager.__init__   sd    ''z:T\\59T\\59&!e15    c                 V    U R                   c   S5       e[        U R                   U5      $ Nz.Must call parse() before accessing the config.)r   getattr)r   attrs     r   __getattr__ConfigManager.__getattr__(   s)    }}(Z*ZZ(t}}d++r   c                    U R                   c   S5       e0 nUR                  U R                   R                  5        UR                  U R                   R                  5        UR                  U R                   R                  5        U$ r   )r   update	ethernetsmodemswifisr   
interfacess     r   physical_interfaces!ConfigManager.physical_interfaces,   sk    }}(Z*ZZ(
$--112$--../$----.r   c                 8   U R                   c   S5       e0 nUR                  U R                   R                  5        UR                  U R                   R                  5        UR                  U R                   R                  5        UR                  U R                   R
                  5        UR                  U R                   R                  5        UR                  U R                   R                  5        UR                  U R                   R                  5        U$ r   )	r   r%   bridgesbondsdummy_devicestunnelsvirtual_ethernetsvlansvrfsr)   s     r   virtual_interfaces ConfigManager.virtual_interfaces5   s    }}(Z*ZZ(
$--//0$----.$--556$--//0$--99:$----.$--,,-r   Nc                    [         R                  " 5       n UR                  U R                  S9  U(       a  U H  nUR	                  U5        M     [         R
                  " 5       U l        U R                  R                  U5        [        R                  " 5        nU R                  R                  US9  [        R                  " SR!                  UR#                  5       5      5        SSS5        U R                  $ ! [         R                   a  n[        [        U5      5      eSnAff = f! , (       d  f       U R                  $ = f)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)output_filezMerged config:
{})netplanParserload_yaml_hierarchyr
   	load_yamlStater   import_parser_resultsNetplanExceptionConfigurationErrorstrr   TemporaryFile
_dump_yamlloggingdebugformatread)r   extra_configparserfetmps         r   parseConfigManager.parseC   s     !
	-&&t{{&;%A$$Q' & $MMODMMM//7
 ##%MM$$$5MM.55chhjAB & }} '' 	-$SV,,	- &% }}s%   A/C< AD,<D)D$$D),
Ec                     U H  nU R                  X!U   5        M     U R                  R                  U5        S U l        g N)
_copy_filer   r%   r   )r   config_dictconfig_files      r   addConfigManager.add`   s:    &KOOK[)AB ', r   c                 ^   U(       ab  U R                  [        R                  R                  U R                  S5      [        R                  R                  U R
                  S5      5        U R                  [        R                  R                  U R                  S5      [        R                  R                  U R                  SS5      SS9  U R                  [        R                  R                  U R                  S5      [        R                  R                  U R                  S	S
5      SS9  g )Nzetc/netplanr:   %run/NetworkManager/system-connectionsNetworkManagerzsystem-connectionsT)
missing_okrun/systemd/networksystemdnetwork)
_copy_treer   r   r   r
   r   r   )r   backup_config_dirs     r   backupConfigManager.backuph   s    OOBGGLLmDGGLL	BDT[[2YZT]]4DFZ[#' 	 	) 	T[[2GHT]]IyI#' 	 	)r   c                 L    [        U R                  5       H3  n[        R                  " U R                  U   5        U R                  U	 M5     SR	                  U R
                  5      nSR	                  U R
                  5      n[        R                  R                  U5      (       ax  [        R                  " [        R                  R                  U R                  S5      5        U R                  U[        R                  R                  U R                  S5      5        [        R                  R                  U5      (       ay  [        R                  " [        R                  R                  U R                  S5      5        U R                  U[        R                  R                  U R                  S5      5        g g ! [         a[  n[        R                  " SR	                  U5      5        [        R                  " S5        [         R"                  " S5         S nAg S nAff = f)Nz${}/NetworkManager/system-connectionsz{}/systemd/networkrX   r[   z8Something really bad happened while reverting config: {}zZYou should verify the netplan YAML in /etc/netplan and probably run 'netplan apply' again.)dictr   r   unlinkrG   r   r   existsshutilrmtreer   r
   r^   	ExceptionrE   errorsysexit)r   
extra_filetemp_nm_pathtemp_networkd_pathrL   s        r   revertConfigManager.reverts   sm   	"4#3#34
		$**:67$$Z0 5 BHHWL!5!<!<T]]!Kww~~l++bggll4;;8_`a "T[[:a bdww~~011bggll4;;8MNO 2 "T[[:O PR 2  		 MMT[[\]^_MMvwHHRLL		s   F:F> >
H#AHH#c                 D    [         R                  " U R                  5        g rQ   )rg   rh   r   r   s    r   cleanupConfigManager.cleanup   s    dll#r   c                 F     U R                  5         g ! [         a     g f = frQ   )rt   FileNotFoundErrorrs   s    r   __del__ConfigManager.__del__   s"    	LLN  		s    
  c                 0    [         R                  " X5        g rQ   )rg   copy)r   srcdsts      r   rR   ConfigManager._copy_file   s    Cr   c                 h     [         R                  " X[        S9  g ! [         a    U(       a   g e f = f)N)copy_function)rg   copytreecopy_with_ownershiprw   )r   r|   r}   rZ   s       r   r^   ConfigManager._copy_tree   s.    	OOC4GH  			s    11)r   r   r   r
   r   r   r   rQ   T)F)__name__
__module____qualname____firstlineno__r   r"   propertyr+   r5   rN   rU   r`   rp   rt   rx   rR   r^   __static_attributes__ r   r   r   r      sa    !r 6,    :	)4$r   r   c                     [         R                  " XUS9  [        R                  " XS9n[        R                  " XR
                  UR                  US9  g )N)follow_symlinks)rg   copy2r   statchownst_uidst_gid)r|   r}   r   r   s       r   r   r      s6    
LL?;7738DHHS++t{{OLr   c                       \ rS rSrSrSrg)rA      zD
Configuration could not be parsed or has otherwise failed to apply
r   N)r   r   r   r   __doc__r   r   r   r   rA   rA      s     	r   rA   r   )r   rE   r:   r   rg   rk   r   typingr   objectr   r   ri   rA   r   r   r   <module>r      s@   $ $   	  
  CF CLM	 	r   