
    쑛h              
       (   U d dl Z d dlmZ d dlmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZ  e j                  e      ZdZd	Zd
ZddddddZdZdZddgeegdZe
ed<   deddfdZdefdZdeeef   dededdfdZdededdfd Zd!ededed"eddf
d#Z y)$    N)Union)subp)Cloud)Config)
MetaSchema)PER_INSTANCErpi
interfacesenable_rpi_connectdo_spido_i2c	do_serial
do_onewiredo_rgpio)spii2cserialonewireremote_gpiodo_serial_consdo_serial_hwcc_raspberry_pizraspberry-pi-os)iddistros	frequencyactivate_by_schema_keysmetaenablereturnc                     t         j                  d|        | rdnd}	 t        j                  ddt        |      g       y # t        j                  $ r }t         j                  d|       Y d }~y d }~ww xY w)NzConfiguring rpi-connect: %sr      /usr/bin/raspi-configdo_rpi_connectz#Failed to configure rpi-connect: %s)LOGdebugr   strProcessExecutionErrorerror)r   numes      B/usr/lib/python3/dist-packages/cloudinit/config/cc_raspberry_pi.pyconfigure_rpi_connectr,   &   s`    II+V4!1C<		*,<c#hGH%% <		7;;<s   !A   A3A..A3c                  f    	 t        j                   g d       y# t         j                  $ r Y yw xY w)N)r"   nonint	is_pifiveTF)r   r'        r+   r/   r/   1   s/    		BC%% s    00cfginstCfgcloudc                    ddt         dt        fd}d}d}t        | t               r || d      } || d      }nt        | t              r| }t	               s|rd}	 t        j
                  dd	t        t        |rd
nd      g       	 t        j
                  dd	t        t        |rd
nd      g       |j                  j                  ddd      }t        j
                  |       y # t
        j                  $ r }t        j                  d|       Y d }~bd }~ww xY w# t
        j                  $ r }t        j                  d|       Y d }~y d }~ww xY w)NFcfg_dictnamec                     | j                  ||      }t        |t              st        j	                  dt
        ||       |S |S )Nz"Invalid value for %s.serial.%s: %s)get
isinstanceboolr$   warningRPI_INTERFACES_KEY)r6   r7   defaultvals       r+   get_bool_fieldz2configure_serial_interface.<locals>.get_bool_field<   s@    ll4)#t$KK4"	 N
r1   consolehardwareTr"   r.   r   r!   z'Failed to configure serial hardware: %srebootnowz)Rebooting to apply serial console changes)modedelaymessagez&Failed to configure serial console: %s)F)dictr&   r:   r;   r/   r   RASPI_CONFIG_SERIAL_CONS_FNRASPI_CONFIG_SERIAL_HW_FNr'   r$   r(   distroshutdown_command)r2   r3   r4   r@   enable_console	enable_hwr*   cmds           r+   configure_serial_interfacerP   9   s?   
 
S 
 NI#t'Y7"3
3		C	 ;> 	?		'+AQ/		

	DII+-YA.	 ll++? , 

 			# )) 	DII?CC	D %% ?		:A>>?sB   *D *C# /3D #D6DD DD E,EEifacec                    | t         j                         v r| dk7  s
J d|         	 t        j                  ddt         |    t        |rdnd      g       y # t        j                  $ r!}t
        j                  d| |       Y d }~y d }~ww xY w)Nr   zUnsupported interface: r"   r.   r   r!   zFailed to configure %s: %s)SUPPORTED_INTERFACESkeysr   r&   r'   r$   r(   )rQ   r   r*   s      r+   configure_interfacerU   {   s    %**,,(1B)	 ()B
:		'$U+AQ'		
 %% :		.q99:s   -A B	(BB	r7   argsc                    t         |vry t        |t            t              s#t        j	                  dt         |t                   y |t            st        j                  dt                y |t            D ]  }|t        k(  rD|t            |   }t        |t              rt        |       nt        j	                  dt        |       Q|t        k(  rt        |t            |   t              s't        j	                  dt         |t            |           y |t            |   st        j                  d|        y t        |t            |   j                               }d|v r/|j                  |j                  |j                  d                   |D ]  }|t        j                         vrt        j	                  dt        |       5|t            |   |   }|dk(  rAt        |t        t        f      st        j	                  dt        ||       nt!        |||       t        |t              rt#        ||       t        j	                  dt        ||        t        j	                  d|        y )NzInvalid value for %s: %szEmpty value for %s. Skipping...r   zInvalid key for %s: %szInvalid value for %s.%s: %szUnsupported key: %s)RPI_BASE_KEYr:   rH   r$   r<   r%   ENABLE_RPI_CONNECT_KEYr;   r,   r=   listrT   appendpopindexrS   rP   rU   )r7   r2   r4   rV   keyr   subkeyssubkeys           r+   handlera      s   3L)40&	

 			3\B<  =((&s+F&$'%f-.0F &&c,/4d;. %c*
 &s+		;SA3|,S16689G7"w{{7==+BCD " !5!:!:!<<KK02Df \*3/7X%%ftTl;9.""	 363Ffd+'7KK5*	1> KK-s3{=r1   )!loggingtypingr   	cloudinitr   cloudinit.cloudr   cloudinit.configr   cloudinit.config.schemar   cloudinit.settingsr   	getLogger__name__r$   rX   r=   rY   rS   rI   rJ   r   __annotations__r;   r,   r/   rH   rP   r&   rU   rZ   ra   r0   r1   r+   <module>rl      s      ! # . +g!! -   / *  !" ,~	j <$ <4 <4 ??	tTz	??%+??49??	??D:s :D :T :$K K6 K% Kt K Kr1   