3 \me"@sddlZddlZddlmZmZmZmZddlmZm Z ddl m Z ddl m Z ddlmZddlmZejeZGdd d ejZdd dZddZddZdS)N)distroshelperssubputil) PackageListnet_util) HostnameConf)Renderer)RendererNotFoundError) PER_INSTANCEcseZdZdZdZdgZdddddiZd d Zd*d d Ze dddZ e dfdd Z ddZ ddZddZddZddZddZd+d d!Zd"d#Zd$d%Zd,d&d'Zd(d)ZZS)-Distroz/etc/locale.genz /etc/netctlZ systemctlZnetplanz/etc/netplan/50-cloud-init.yamlz# generated by cloud-init T)Z netplan_pathZnetplan_headerZpostcmdscCs0tjj||||tj||_d|_d|d<dS)NZarchZsshdZ ssh_svcname)rr __init__rZRunners_runnerZosfamily)selfnameZcfgpathsr/usr/lib/python3.6/arch.pyr s zDistro.__init__NcCsj|dk r|dkrtjd|tjd|dg}tj|jdj|tjdgddtjd d |gdddS) Nz/etc/locale.confzFInvalid locale_configfile %s, only supported value is /etc/locale.confz%s UTF-8 z locale-genF)captureZ localectlz set-locale)LOGwarningrZ make_header write_file locale_gen_fnjoinr)rZlocaleZout_fnlinesrrr apply_locale)szDistro.apply_locale)pkglistcCs|j|jd|ddS)Nr)pkgs)update_package_sourcespackage_command)rrrrrinstall_packages<szDistro.install_packages)returncs8y tjStk r2}z t|WYdd}~XnXdS)N)super _get_rendererr NotImplementedError)re) __class__rrr%@s zDistro._get_renderercCs.tj|}tjd||t||j|j|jdS)Nz3Translated ubuntu style network settings %s into %s) resolv_confconf_dir enable_func)rZtranslate_networkrdebug_render_networkZresolve_conf_fnnetwork_conf_dir_enable_interface)rsettingsentriesrrr_write_networkGs zDistro._write_networkc Cs\dd|g}y(tj|\}}t|r0tjd||Wn$tjk rVtjtd|YnXdS)NnetctlZreenablez(Running %s resulted in stderr output: %sz#Running interface command %s failed)rlenrrProcessExecutionErrorrlogexc)r device_namecmd_outerrrrrr/Us zDistro._enable_interfacec Csjdd|g}tjd||y(tj|\}}t|r>tjd||dStjk rdtjtd|dSXdS)Nr3Zrestartz8Attempting to run bring up interface %s using command %sz(Running %s resulted in stderr output: %sTz#Running interface command %s failedF)rr,rr4rr5rr6)rr7r8r9r:rrr_bring_up_interface`s  zDistro._bring_up_interfacecCsrd}y|j|}Wn.tk r@tj|jdd}|r8ndSYnX|sNtd}|j|tj|t|ddddS)Ncreate_hostname_fileTrwi)Zomodemode) _read_hostname_confIOErrorrZget_cfg_option_boolZ_cfgrZ set_hostnamerstr)rhostnamefilenameconfr<rrr_write_hostnamers   zDistro._write_hostnamecCs|j|j}|j|fS)N)_read_hostnameZhostname_conf_fn)rZ sys_hostnamerrr_read_system_hostnames zDistro._read_system_hostnamecCsttj|}|j|S)N)rrZ load_fileparse)rrCrDrrrr?szDistro._read_hostname_confc Cs:d}y|j|}|j}Wntk r,YnX|s6|S|S)N)r?rBr@)rrCdefaultrBrDrrrrFs  zDistro._read_hostnamec CsLtjd|ytjddd|gWn$tjk rFtjtd|YnXdS)Nz2Non-persistently setting the system hostname to %sZ hostnamectlz --transientz set-hostnamez;Failed to non-persistently adjust the system hostname to %s)rr,rr5rr6)rrBrrr_apply_hostnameszDistro._apply_hostnamecCstj||j|ddS)N)tzZtz_file)rZset_etc_timezoneZ _find_tz_file)rrKrrr set_timezoneszDistro.set_timezonecCs|dkr g}ddddg}|r2t|tr2|j|n|rJt|trJ|j||dkrVd}|rd|j|tjd|}|j|tj|dd dS) NZpacmanz-Syz--quietz --noconfirmZupgradez-uz%s-%sF)r) isinstancerAappendlistextendrZexpand_package_listr)rZcommandargsrr8rrrrr!s      zDistro.package_commandcCs|jjd|jdgtddS)Nzupdate-sourcesz-y)Zfreq)rZrunr!r )rrrrr szDistro.update_package_sources)N)N)NN)__name__ __module__ __qualname__rr.Zinit_cmdZrenderer_configsr rrr"r r%r2r/r;rErGr?rFrJrLr!r __classcell__rr)r(rr s,      r / etc/netctletc/resolv.confc Csg}g}tj||}tj||}x|jD]\}}|dkrsz!convert_netctl..)z%s=%s )sortedrMtuplerOrrN)r0resultkeyvalrrrr_sr_cCs,d}t|tr(x|D]}|d|}qW|S)z4Returns a settings string formatted for resolv.conf.rznameserver %s )rMrO)r0rknsrrrr`s   r`)rVrWrXN)Zloggingr\Z cloudinitrrrrZcloudinit.distrosrrZ"cloudinit.distros.parsers.hostnamerZcloudinit.net.rendererr Zcloudinit.net.renderersr Zcloudinit.settingsr Z getLoggerrRrr r-r_r`rrrrs      7 $