o
    x[h­  ã                   @   st   d dl Z d dlmZmZmZmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZmZ e  e¡ZG dd„ dejƒZdS )	é    N)ÚdistrosÚhelpersÚsubpÚutil)ÚPackageList)ÚHostnameConf)ÚCLOUDINIT_NETPLAN_FILE)Ú
PER_ALWAYSÚPER_INSTANCEc                   @   s�   e Zd ZdZdgZdedddœiZdd„ Zd!d
d„Zde	fdd„Z
dd„ Zdd„ Zdd„ Zd!dd„Zdd„ Zdd„ Zd"dd„Zddœdd „Zd	S )#ÚDistroz/etc/locale.genÚ	systemctlÚnetplanz# generated by cloud-init
T)Únetplan_pathÚnetplan_headerÚpostcmdsc                 C   s0   t j | |||¡ t |¡| _d| _d|d< d S )NÚarchÚsshdÚssh_svcname)r   r   Ú__init__r   ÚRunnersÚ_runnerÚosfamily)ÚselfÚnameÚcfgÚpaths© r   ú8/usr/lib/python3/dist-packages/cloudinit/distros/arch.pyr      s   zDistro.__init__Nc                 C   sj   |d ur|dkrt  d|¡ t ¡ d| dg}t | jd |¡¡ tjdgdd� tjd	d
|gdd� d S )Nz/etc/locale.confzFInvalid locale_configfile %s, only supported value is /etc/locale.confz%s UTF-8Ú Ú
z
locale-genF©ÚcaptureÚ	localectlz
set-locale)ÚLOGÚwarningr   Úmake_headerÚ
write_fileÚlocale_gen_fnÚjoinr   )r   ÚlocaleÚout_fnÚlinesr   r   r   Úapply_locale&   s   ýüzDistro.apply_localeÚpkglistc                 C   s   |   ¡  | jd|d� d S )Nr   )Úpkgs)Úupdate_package_sourcesÚpackage_command)r   r-   r   r   r   Úinstall_packages9   s   zDistro.install_packagesc                 C   s|   d }z|   |¡}W n ty%   t | jdd¡}|rnt d¡ Y d S Y nw |s,tdƒ}| |¡ tj	|t
|ƒddd� d S )NÚcreate_hostname_fileTz8create_hostname_file is False; hostname file not createdr   Úwi¤  )ÚomodeÚmode)Ú_read_hostname_confÚIOErrorr   Úget_cfg_option_boolÚ_cfgr#   Úinfor   Úset_hostnamer&   Ústr)r   ÚhostnameÚfilenameÚconfr2   r   r   r   Ú_write_hostname=   s&   ÿÿûû
zDistro._write_hostnamec                 C   s   |   | j¡}| j|fS ©N)Ú_read_hostnameÚhostname_conf_fn)r   Úsys_hostnamer   r   r   Ú_read_system_hostnameS   s   
zDistro._read_system_hostnamec                 C   s   t t |¡ƒ}| ¡  |S rA   )r   r   Úload_text_fileÚparse)r   r>   r?   r   r   r   r6   W   s   zDistro._read_hostname_confc                 C   s8   d }z
|   |¡}|j}W n	 ty   Y nw |s|S |S rA   )r6   r=   r7   )r   r>   Údefaultr=   r?   r   r   r   rB   \   s   

ÿzDistro._read_hostnamec                 C   sJ   t  d|¡ zt ddd|g¡ W d S  tjy$   t t d|¡ Y d S w )Nz2Non-persistently setting the system hostname to %sÚhostnamectlz--transientzset-hostnamez;Failed to non-persistently adjust the system hostname to %s)r#   Údebugr   ÚProcessExecutionErrorr   Úlogexc)r   r=   r   r   r   Ú_apply_hostnamei   s   ÿ
ýÿzDistro._apply_hostnamec                 C   s   t j||  |¡d� d S )N)ÚtzÚtz_file)r   Úset_etc_timezoneÚ_find_tz_file)r   rN   r   r   r   Úset_timezonev   s   zDistro.set_timezonec                 C   sˆ   |d u rg }g d¢}|rt |tƒr| |¡ n|r#t |tƒr#| |¡ |dkr)d}|r0| |¡ t d|¡}| |¡ tj|dd� d S )N)Úpacmanz-Syz--quietz--noconfirmÚupgradez-uz%s-%sFr    )Ú
isinstancer<   ÚappendÚlistÚextendr   Úexpand_package_listr   )r   ÚcommandÚargsr.   Úcmdr-   r   r   r   r0   y   s   


zDistro.package_commandF)Úforcec                C   s$   | j jd| jdg|rtntd� d S )Nzupdate-sourcesz-y)Úfreq)r   Úrunr0   r	   r
   )r   r]   r   r   r   r/   �   s   

üzDistro.update_package_sourcesrA   )NN)Ú__name__Ú
__module__Ú__qualname__r'   Úinit_cmdr   Úrenderer_configsr   r,   r   r1   r@   rE   r6   rB   rM   rR   r0   r/   r   r   r   r   r      s(    ýÿ
	

r   )ÚloggingÚ	cloudinitr   r   r   r   Úcloudinit.distrosr   Ú"cloudinit.distros.parsers.hostnamer   Úcloudinit.net.netplanr   Úcloudinit.settingsr	   r
   Ú	getLoggerr`   r#   r   r   r   r   r   Ú<module>   s   
