o
    f                     @   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   
