a '¡DgÙ'ã@s|ddlZddlZddlmZmZmZmZddlmZddlm Z ddl m Z ddl mZmZe e¡ZGdd„dejƒZdS) éN)ÚdistrosÚhelpersÚsubpÚutil)Ú PackageList)Ú rhel_util)Ú HostnameConf)Ú PER_ALWAYSÚ PER_INSTANCEc@sÆeZdZdZdZdgZdZdZdZdZ dZ d d d d d dddœdœiZ dd„Z d/dd„Z edœdd„Zd0dd„Zdd„Zddœdd „Zd1d!d"„Zd#d$„Zd%d&„Zd'd(„Zd)d*„Zd+d,„Zed-d.„ƒZdS)2ÚDistroz/etc/sysconfig/clockz /etc/HOSTNAMEZservicez/etc/sysconfig/languagez/etc/sysconfig/network/configz /etc/hostnamez/etc/locale.confz/etc/localtimeZ sysconfigzetc/sysconfig/network/configÚsusez%(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_methodÚread_only_rootÚ uses_systemdÚinit_cmd)ÚselfÚnameZcfgÚpaths©rú>/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)NÚLANGZRC_LANG)rÚsystemd_locale_conf_fnÚlocale_conf_fnÚrhutilÚupdate_sysconfig_file)rÚlocaleZout_fnZ locale_cfgrrrÚ apply_locale:s zDistro.apply_locale)ÚpkglistcCs|jdd|d�dS)NÚinstallz--auto-agree-with-licenses)ÚargsÚpkgs)Úpackage_command)rrrrrÚinstall_packagesEsÿzDistro.install_packagescCs|dur g}| ¡|jr2|jdks2t d¡dS|jdkrFddg}ngd¢}|dkrZd}|s||jdkr||dkr|d}gd ¢}|d krŒddg}| |¡|r°t|tƒr°| |¡n|rÈt|tƒrÈ|  |¡t   d |¡}|  |¡t j |d d �|jdk�rt  d¡dS)NÚ transactionalzUPackage operation requested but read only root without btrfs and transactional-updataÚzypperú--non-interactive)útransactional-updater'ú--drop-if-no-changeÚpkgZupgradeÚupdateZup)r(r'r)Úrefreshz%s-%sF)Zcapturez8To use/activate the installed packages reboot the system)Ú_set_update_methodrrÚLOGÚerrorÚappendÚ isinstanceÚstrÚlistÚextendrZexpand_package_listrÚinfo)rZcommandr!r"Úcmdrrrrr#JsFÿ  ÿþý      ÿzDistro.package_commandcCsZ| |¡}| ¡r.t |j¡t ||j¡n(dt|ƒi}t |j |¡t  ||j¡dS)NZTIMEZONE) Z _find_tz_filerrZdel_fileÚ tz_local_fnZsym_linkr2rrÚ clock_conf_fnÚcopy)rZtzZtz_fileZ clock_cfgrrrÚ set_timezone‡s  ÿzDistro.set_timezoneF)ÚforcecCs$|jjd|jdg|rtntd�dS)Nzupdate-sourcesr,)Zfreq)rÚrunr#r r )rr;rrrÚupdate_package_sources—s  üzDistro.update_package_sourcescCs‚| ¡r | d¡r t |¡ ¡S| ¡rJt dg¡\}}t|ƒrD|S|Sn4z| |¡}|j}Wnt ypYn0|sz|S|SdS)Nú/previous-hostnameÚhostname) rÚendswithrÚload_text_fileÚstriprÚlenÚ_read_hostname_confr?ÚIOError)rÚfilenameÚdefaultÚoutZ_errÚconfr?rrrÚ_read_hostnameŸs   zDistro._read_hostnamecCsdS)Nz 127.0.1.1r)rrrrÚ_get_localhost_ip²szDistro._get_localhost_ipcCstt |¡ƒ}| ¡|S©N)rrrAÚparse)rrFrIrrrrDµszDistro._read_hostname_confcCs$| ¡r|j}n|j}|| |¡fSrL)rÚsystemd_hostname_conf_fnÚhostname_conf_fnrJ)rZhost_fnrrrÚ_read_system_hostnameºszDistro._read_system_hostnamecCs°|jdur¬t d¡}d}|rœ|\}}}t d¡ d¡}|D]8}| |¡r:| ¡}|d|kr^q:|d d¡|_qtq:| ¡d kr”tj   d ¡r”d |_q¬d |_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_inforAÚsplitÚ startswithrÚlowerÚosÚpathÚexistsr.r5)rÚresultZfs_typeZdevpthZ mount_pointZmountsZmountZ mount_inforrrr-Ás,     ÿÿzDistro._set_update_methodcCsÒt |jdd¡}| ¡r0| d¡r0t ||¡nž| ¡rj|rRt ddt|ƒg¡qÎt dddt|ƒg¡ndd}z| |¡}Wn(t y¤|r�nt   d¡YdSYn0|s²t dƒ}|  |¡t |t|ƒd ¡dS) NÚcreate_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_hostnameÝs:ÿüÿ  ÿ  zDistro._write_hostnamecCst|jsnt ¡d}|d}t|d d¡dƒ}|dkr@d|vsX|dkrdd|vrd|dkrdgd¢|_n gd ¢|_|jS) z5The preferred ntp client is dependent on the version.ZdistrrTÚ.éZopenSUSEé*)Úchronyúsystemd-timesyncdÚntp)rerdrc)Z_preferred_ntp_clientsrZ system_infoÚintrW)rZ distro_inforZ major_verrrrÚpreferred_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