a '¡DgZã@s˜ddlZddlZddlZddlmZmZddlmmm Z ddl m Z m Z mZm Z mZddlmZmZddlmZe e¡ZGdd„de jƒZdS)éN)ÚListÚOptional)ÚdistrosÚhelpersÚnetÚsubpÚutil)Ú PackageListÚ bsd_utils)Ú BSDNetworkingcs^eZdZUeZdZdZdZdZddddœZ gZ e e e d<gZe e e d <gZe e e d <d Zee e e d <d Zee e e d <ejZ‡fdd„Zed dœ‡fdd„ Zdd„Zd5dd„Zdd„Zdd„Zd6dd„Zdd„Zedœd d!„Z d"d#„Z!d7d$d%„Z"d&d'„Z#d8d(d)„Z$e%e&d*œd+d,„Z'e(d-d.„ƒZ)e(e ee d/œd0d1„ƒZ*e(e e+d2œd3d4„ƒZ,‡Z-S)9ÚBSDú /etc/rc.confz/etc/master.passwdz root:wheelz-Hú-pz-r)ZhaltZpoweroffZrebootÚgroup_add_cmd_prefixÚpkg_cmd_install_prefixÚpkg_cmd_remove_prefixNÚpkg_cmd_update_prefixÚpkg_cmd_upgrade_prefixcsLtƒ |||¡t |¡|_d|d<d|d<t ¡ ¡|_t j |_ d|_ dS)NZsshdZ ssh_svcnameZrsyslogdZrsyslog_svcnameF) ÚsuperÚ__init__rZRunnersZ_runnerÚplatformÚsystemÚlowerZosfamilyÚ bsd_netopsÚ BsdNetOpsÚnet_opsÚis_linux)ÚselfÚnameZcfgÚpaths©Ú __class__©ú9/usr/lib/python3.9/site-packages/cloudinit/distros/bsd.pyr"s z BSD.__init__)Úci_pkl_versionÚreturncstƒ |¡d|_dS)NF)rÚ _unpickler)rr$r r"r#r&.s z BSD._unpicklecCs| |j¡}|j|fS©N)Ú_read_hostnameÚhostname_conf_fn)rZ sys_hostnamer"r"r#Ú_read_system_hostname4s zBSD._read_system_hostnamecCs t d¡S)NÚhostname)r Zget_rc_config_value)rÚfilenameÚdefaultr"r"r#r(8szBSD._read_hostnamecCs tdƒ‚dS)Nz&Return list cmd to add member to group©ÚNotImplementedError)rÚ member_nameZ group_namer"r"r#Ú_get_add_member_to_group_cmd;sz BSD._get_add_member_to_group_cmdcCstjd|dddS)Nr+r )Úfn)r Zset_rc_config_value)rr+r,r"r"r#Ú_write_hostname>szBSD._write_hostnamec CsØt |¡rt d|¡nH|j|g}zt |¡t d|¡Wn ty^t td|¡Yn0|shg}|D]f}t  |¡sŠt d||¡qlz$t |  ||¡¡t d||¡WqltyÐt td||¡Yql0qldS)Nz(Skipping creation of existing group '%s'zCreated new group %szFailed to create group %szCUnable to add group member '%s' to group '%s'; user does not exist.zAdded user '%s' to group '%s'z%Failed to add user '%s' to group '%s') rZis_groupÚLOGZwarningrrÚinfoÚ ExceptionZlogexcZis_userr1)rrÚmembersZ group_add_cmdÚmemberr"r"r#Ú create_groupAs2     ü ÿzBSD.create_groupcCsBgddœ}t ¡ ¡D]&\}}|d d||ddigdœ¡q|S)Né)ÚconfigÚversionr;ZphysicalÚtypeZdhcp)r=rZ mac_addressÚsubnets)rZget_interfaces_by_macÚitemsÚappend)rZnconfZmacrr"r"r#Úgenerate_fallback_config_s üÿzBSD.generate_fallback_config)ÚpkglistcCs| ¡|jd|ddS)NÚinstall)Úpkgs)Zupdate_package_sourcesÚpackage_command)rrBr"r"r#Úinstall_packageslszBSD.install_packagescCs tdƒ‚dS)z?Return environment vars used in *BSD package_command operationsz(BSD subclasses return a dict of env varsNr.)rr"r"r#Ú_get_pkg_cmd_environpszBSD._get_pkg_cmd_environcCsÄ|dur g}|dkr|j}nH|dkr,|j}n8|dkrF|js>dS|j}n|dkr`|jsXdS|j}ng}|r~t|tƒr~| |¡n|r–t|tƒr–| |¡t   d|¡}| |¡t j ||  ¡dddS)NrCÚremoveÚupdateZupgradez%s-%sF)Z update_envZcapture) rrrrÚ isinstanceÚstrr@ÚlistÚextendrZexpand_package_listrrG)rZcommandÚargsrDÚcmdrBr"r"r#rEts,    zBSD.package_commandcCstj|| |¡ddS)N)ÚtzZtz_file)rZset_etc_timezoneZ _find_tz_file)rrPr"r"r#Ú set_timezone’szBSD.set_timezonecCst d¡dS)NzCannot set the locale.)r4Údebug)rÚlocaleZout_fnr"r"r#Ú apply_locale•szBSD.apply_locale)Úplist_inÚhashedcCs"|D]\}}|j|||dqdS)N)rV)Z set_passwd)rrUrVrÚpasswordr"r"r#Úchpasswd˜s z BSD.chpasswdcCs&t dddt|ƒg¡\}}t| ¡ƒS)zC Return the parent pid of a process by checking ps Zpsz-oppid=r)rrKÚintÚstrip)ÚpidZppidÚ_r"r"r#Ú get_proc_ppidœszBSD.get_proc_ppid)Úblockdevr%cCsdSr'r")r^r"r"r#Úget_mapped_device¤szBSD.get_mapped_device)Údevpathr%cCsLt |¡}|r8d|›}t d|¡}|r8|d|dfStd|›dƒ‚dS)Nz/dev/z/^(?P/dev/.+)[sp](?P\d+[a-z]*)$ÚdevZ part_slicezInvalid value for devpath: 'ú')rZfind_freebsd_partÚreÚsearchÚ ValueError)r`ÚpartZfpartÚmr"r"r#Údevice_part_info¨s  ÿzBSD.device_part_info)N)N)NN)N).Ú__name__Ú __module__Ú __qualname__r Znetworking_clsr)Z rc_conf_fnZ shadow_fnZ default_ownerZshutdown_options_maprrrKÚ__annotations__rrrrrrrrrrYr&r*r(r1r3r9rAr rFrGrErQrTrLÚboolrXÚ staticmethodr]r_ÚtuplerhÚ __classcell__r"r"r r#r s@         r )ZloggingrrcÚtypingrrZcloudinit.net.netops.bsd_netopsrZnetopsrZ cloudinitrrrrZcloudinit.distrosr r Zcloudinit.distros.networkingr Z getLoggerrir4ZDistror r"r"r"r#Ús