o x[h'@s|ddlZddlZddlmZmZmZmZddlmZddlm Z ddl m Z ddl mZmZeeZGdddejZdS) N)distroshelperssubputil) PackageList) rhel_util) HostnameConf) PER_ALWAYS PER_INSTANCEc@seZdZdZdZdgZdZdZdZdZ dZ d d d d d ddddiZ ddZ d/ddZ defddZd0ddZddZdddd Zd/d!d"Zd#d$Zd%d&Zd'd(Zd)d*Zd+d,Zed-d.ZdS)1Distroz/etc/sysconfig/clockz /etc/HOSTNAMEservicez/etc/sysconfig/languagez/etc/sysconfig/network/configz /etc/hostnamez/etc/locale.confz/etc/localtime sysconfigzetc/sysconfig/network/configsusez%(base)s/network/ifcfg-%(name)sz3etc/udev/rules.d/85-persistent-net-cloud-init.rulesz!%(base)s/network/ifroute-%(name)s)ipv4ipv6)controlflavoriface_templates netrules_pathroute_templatescCsXtj||||t||_d|_d|_d|_d|d<| r*dg|_ d|d<dSdS)NrFsshd ssh_svcname systemctlz sshd.service) rr __init__rRunners_runnerosfamily update_methodread_only_root uses_systemdinit_cmd)selfnamecfgpathsr%|r|s |j}d|i}n |s|j}d|i}t||dS)NLANGRC_LANG)rsystemd_locale_conf_fnlocale_conf_fnrhutilupdate_sysconfig_file)r!localeout_fn locale_cfgr%r%r& apply_locale:s zDistro.apply_localepkglistcCs|jdd|ddS)Ninstallz--auto-agree-with-licenses)argspkgs)package_command)r!r1r%r%r&install_packagesEs zDistro.install_packagescCs|durg}||jr|jdkstddS|jdkr#ddg}ngd}|dkr-d}|s>|jdkr>|dkr>d}gd }|d krFddg}|||rXt|trX||n |rdt|trd| |t d |}| |t j |d d |jdkrt ddSdS)N transactionalzUPackage operation requested but read only root without btrfs and transactional-updatazypper--non-interactive)transactional-updater9--drop-if-no-changepkgupgradeupdateup)r:r9r;refreshz%s-%sF)capturez8To use/activate the installed packages reboot the system)_set_update_methodrrLOGerrorappend isinstancestrlistextendrexpand_package_listrinfo)r!commandr3r4cmdr1r%r%r&r5JsD         zDistro.package_commandcCs\||}|rt|jt||jdSdt|i}t|j |t ||jdS)NTIMEZONE) _find_tz_filerrdel_file tz_local_fnsym_linkrGr+r, clock_conf_fncopy)r!tztz_file clock_cfgr%r%r& set_timezones  zDistro.set_timezoneF)forcecCs$|jjd|jdg|r tntddS)Nzupdate-sourcesr@)freq)rrunr5r r )r!rYr%r%r&update_package_sourcess   zDistro.update_package_sourcescCs||r|drt|S|r$tdg\}}t|r"|S|Sz ||}|j}Wn t y7Ynw|s<|S|S)N/previous-hostnamehostname) rendswithrload_text_filestriprlen_read_hostname_confr^IOError)r!filenamedefaultout_errconfr^r%r%r&_read_hostnames    zDistro._read_hostnamecCsdS)Nz 127.0.1.1r%)r!r%r%r&_get_localhost_ipszDistro._get_localhost_ipcCstt|}||SN)rrr`parse)r!rerir%r%r&rcszDistro._read_hostname_confcCs$|r|j}n|j}|||fSrl)rsystemd_hostname_conf_fnhostname_conf_fnrj)r!host_fnr%r%r&_read_system_hostnameszDistro._read_system_hostnamecCs|jdurZtd}d}|rP|\}}}tdd}|D]}||r9|}|d|kr/q|dd|_nq|d krKtj d rKd |_dSd |_dSt d d |_dSdS)z7Decide if we want to use transactional-update or zypperN/z /proc/mounts robtrfsz/usr/sbin/transactional-updater7r8z7Could not determine filesystem type of '/' using zypper) rrget_mount_infor`split startswithrlowerospathexistsrCrK)r!resultfs_typedevpth mount_pointmountsmount mount_infor%r%r&rBs0        zDistro._set_update_methodcCst|jdd}|r|drt||dS|r8|r+tddt|gdStdddt|gdSd}z||}Wnt yU|rKnt dYdSYnw|s\t d}| |t|t|d dS) Ncreate_hostname_fileTr] hostnamectlz set-hostnamez --transientz7create_hostname_file is False; hostname file notcreatedrsi)rget_cfg_option_bool_cfgrr_ write_filerrGrcrdrCrKr set_hostname)r!r^rerrir%r%r&_write_hostnames>    zDistro._write_hostnamecCsx|js9td}|d}t|ddd}|dkr d|vs,|dkr4d|vr4|dkr4gd|_|jSgd |_|jS) z5The preferred ntp client is dependent on the version.distrru.openSUSE*)chronysystemd-timesyncdntp)rrr)_preferred_ntp_clientsr system_infointrz)r! distro_infor" major_verr%r%r&preferred_ntp_clientss   zDistro.preferred_ntp_clientsrl)NN)__name__ __module__ __qualname__rSror r*network_conf_fnrnr)rQrenderer_configsrr0rr6r5rXr\rjrkrcrqrBrpropertyrr%r%r%r&r sB  = &r )loggingr} cloudinitrrrrcloudinit.distrosrrr+"cloudinit.distros.parsers.hostnamercloudinit.settingsr r getLoggerrrCr r%r%r%r&s