a 'Dg'@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 edddZd0ddZddZdddd Zd1d!d"Zd#d$Zd%d&Zd'd(Zd)d*Zd+d,Zed-d.ZdS)2Distroz/etc/sysconfig/clockz /etc/HOSTNAMEZservicez/etc/sysconfig/languagez/etc/sysconfig/network/configz /etc/hostnamez/etc/locale.confz/etc/localtimeZ 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)Zipv4Zipv6)ZcontrolZflavorZiface_templatesZ netrules_pathZroute_templatescCsTtj||||t||_d|_d|_d|_d|d<| rPdg|_ d|d<dS)Nr FZsshdZ ssh_svcnameZ systemctlz sshd.service) rr __init__rZRunners_runnerZosfamily update_methodread_only_root uses_systemdinit_cmd)selfnameZcfgpathsr>/usr/lib/python3.9/site-packages/cloudinit/distros/opensuse.pyr /s zDistro.__init__NcCs>|r|s|j}d|i}n|s&|j}d|i}t||dS)NLANGZRC_LANG)rsystemd_locale_conf_fnlocale_conf_fnrhutilupdate_sysconfig_file)rlocaleZout_fnZ locale_cfgrrr apply_locale:s zDistro.apply_locale)pkglistcCs|jdd|ddS)Ninstallz--auto-agree-with-licenses)argspkgs)package_command)rrrrrinstall_packagesEszDistro.install_packagescCs|dur g}||jr2|jdks2tddS|jdkrFddg}ngd}|dkrZd}|s||jdkr||dkr|d}gd }|d krddg}|||rt|tr||n|rt|tr| |t d |}| |t j |d d |jdkrt ddS)N transactionalzUPackage operation requested but read only root without btrfs and transactional-updatazypper--non-interactive)transactional-updater'--drop-if-no-changepkgZupgradeupdateZup)r(r'r)refreshz%s-%sF)Zcapturez8To use/activate the installed packages reboot the system)_set_update_methodrrLOGerrorappend isinstancestrlistextendrZexpand_package_listrinfo)rZcommandr!r"cmdrrrrr#JsF        zDistro.package_commandcCsZ||}|r.t|jt||jn(dt|i}t|j |t ||jdS)NZTIMEZONE) Z _find_tz_filerrZdel_file tz_local_fnZsym_linkr2rr clock_conf_fncopy)rZtzZtz_fileZ clock_cfgrrr set_timezones  zDistro.set_timezoneF)forcecCs$|jjd|jdg|rtntddS)Nzupdate-sourcesr,)Zfreq)rrunr#r r )rr;rrrupdate_package_sourcess  zDistro.update_package_sourcescCs|r |dr t|S|rJtdg\}}t|rD|S|Sn4z||}|j}Wnt ypYn0|sz|S|SdS)N/previous-hostnamehostname) rendswithrload_text_filestriprlen_read_hostname_confr?IOError)rfilenamedefaultoutZ_errconfr?rrr_read_hostnames   zDistro._read_hostnamecCsdS)Nz 127.0.1.1r)rrrr_get_localhost_ipszDistro._get_localhost_ipcCstt|}||SN)rrrAparse)rrFrIrrrrDszDistro._read_hostname_confcCs$|r|j}n|j}|||fSrL)rsystemd_hostname_conf_fnhostname_conf_fnrJ)rZhost_fnrrr_read_system_hostnameszDistro._read_system_hostnamecCs|jdurtd}d}|r|\}}}tdd}|D]8}||r:|}|d|kr^q:|dd|_qtq:|d krtj d rd |_qd |_nt d d |_dS)z7Decide if we want to use transactional-update or zypperN/z /proc/mounts roZbtrfsz/usr/sbin/transactional-updater%r&z7Could not determine filesystem type of '/' using zypper) rrZget_mount_inforAsplit startswithrlowerospathexistsr.r5)rresultZfs_typeZdevpthZ mount_pointZmountsZmountZ mount_inforrrr-s,     zDistro._set_update_methodcCst|jdd}|r0|dr0t||n|rj|rRtddt|gqtdddt|gndd}z||}Wn(t y|rnt dYdSYn0|st d}| |t|t|d dS) Ncreate_hostname_fileTr>Z hostnamectlz set-hostnamez --transientz7create_hostname_file is False; hostname file notcreatedrRi)rZget_cfg_option_boolZ_cfgrr@Z write_filerr2rDrEr.r5rZ set_hostname)rr?rFr^rIrrr_write_hostnames:    zDistro._write_hostnamecCst|jsntd}|d}t|ddd}|dkr@d|vsX|dkrdd|vrd|dkrdgd|_n gd |_|jS) z5The preferred ntp client is dependent on the version.ZdistrrT.ZopenSUSE*)chronysystemd-timesyncdntp)rerdrc)Z_preferred_ntp_clientsrZ system_infointrW)rZ distro_inforZ major_verrrrpreferred_ntp_clientss   zDistro.preferred_ntp_clients)N)NN)N)__name__ __module__ __qualname__r8rOrrZnetwork_conf_fnrNrr7Zrenderer_configsr rrr$r#r:r=rJrKrDrPr-r_propertyrgrrrrr s@  = &r )ZloggingrZZ cloudinitrrrrZcloudinit.distrosrrrZ"cloudinit.distros.parsers.hostnamerZcloudinit.settingsr r Z getLoggerrhr.r rrrr s