o x[hZ@sddlZddlZddlZddlmZmZddlmmm Z ddl m Z m Z mZm Z mZddlmZmZddlmZeeZGddde jZdS)N)ListOptional)distroshelpersnetsubputil) PackageList bsd_utils) BSDNetworkingcsfeZdZUeZdZdZdZdZddddZ gZ e e e d<gZe e e d <gZe e e d <d Zee e e d <d Zee e e d <ejZfddZdedd ffdd ZddZd7ddZddZddZd7ddZddZd efd!d"Z d#d$Z!d8d%d&Z"d'd(Z#d7d)d*Z$d+e%d,e&fd-d.Z'e(d/d0Z)e(d1e dee fd2d3Z*e(d4e de+fd5d6Z,Z-S)9BSD /etc/rc.confz/etc/master.passwdz root:wheelz-H-pz-r)haltpoweroffrebootgroup_add_cmd_prefixpkg_cmd_install_prefixpkg_cmd_remove_prefixNpkg_cmd_update_prefixpkg_cmd_upgrade_prefixcsLt|||t||_d|d<d|d<t|_t j |_ d|_ dS)Nsshd ssh_svcnamersyslogdrsyslog_svcnameF) super__init__rRunners_runnerplatformsystemlowerosfamily bsd_netops BsdNetOpsnet_opsis_linux)selfnamecfgpaths __class__7/usr/lib/python3/dist-packages/cloudinit/distros/bsd.pyr"s  z BSD.__init__ci_pkl_versionreturncst|d|_dS)NF)r _unpickler&)r'r/r+r-r.r1.s  z BSD._unpicklecCs||j}|j|fSN)_read_hostnamehostname_conf_fn)r' sys_hostnamer-r-r._read_system_hostname4s  zBSD._read_system_hostnamecCs tdS)Nhostname)r get_rc_config_value)r'filenamedefaultr-r-r.r38s zBSD._read_hostnamecCtd)Nz&Return list cmd to add member to groupNotImplementedError)r' member_name group_namer-r-r._get_add_member_to_group_cmd;sz BSD._get_add_member_to_group_cmdcCstjd|dddS)Nr7r )fn)r set_rc_config_value)r'r7r9r-r-r._write_hostname>szBSD._write_hostnamec Cst|r td|n$|j|g}z t|td|Wnty/ttd|Ynw|s4g}|D]2}t |sEtd||q6zt| ||td||Wq6tyhttd||Yq6wdS)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') ris_groupLOGwarningrrinfo Exceptionlogexcis_userr@)r'r(members group_add_cmdmemberr-r-r. create_groupAs8      zBSD.create_groupcCsBgdd}tD]\}}|dd||ddigdq |S)N)configversionrPphysicaltypedhcp)rSr( mac_addresssubnets)rget_interfaces_by_macitemsappend)r'nconfmacr(r-r-r.generate_fallback_config_s zBSD.generate_fallback_configpkglistcCs||jd|ddS)Ninstall)pkgs)update_package_sourcespackage_command)r'r]r-r-r.install_packageslszBSD.install_packagescCr;)z?Return environment vars used in *BSD package_command operationsz(BSD subclasses return a dict of env varsr<)r'r-r-r._get_pkg_cmd_environpszBSD._get_pkg_cmd_environcCs|durg}|dkr|j}n$|dkr|j}n|dkr#|jsdS|j}n|dkr0|js,dS|j}ng}|r?t|tr?||n |rKt|trK||t d|}||t j || dddS)Nr^removeupdateupgradez%s-%sF) update_envcapture) rrrr isinstancestrrYlistextendrexpand_package_listrrc)r'commandargsr_cmdr]r-r-r.rats,    zBSD.package_commandcCstj|||ddS)N)tztz_file)rset_etc_timezone _find_tz_file)r'rqr-r-r. set_timezoneszBSD.set_timezonecCstddS)NzCannot set the locale.)rEdebug)r'localeout_fnr-r-r. apply_localeszBSD.apply_localeplist_inhashedcCs"|D] \}}|j|||dqdS)N)r{) set_passwd)r'rzr{r(passwordr-r-r.chpasswds z BSD.chpasswdcCs&tdddt|g\}}t|S)zC Return the parent pid of a process by checking ps psz-oppid=r)rrjintstrip)pidppid_r-r-r. get_proc_ppids zBSD.get_proc_ppidblockdevcCsdSr2r-)rr-r-r.get_mapped_deviceszBSD.get_mapped_devicedevpathcCsHt|}|rd|}td|}|r|d|dfStd|d)Nz/dev/z/^(?P/dev/.+)[sp](?P\d+[a-z]*)$dev part_slicezInvalid value for devpath: '')rfind_freebsd_partresearch ValueError)rpartfpartmr-r-r.device_part_infos  zBSD.device_part_infor2)NN).__name__ __module__ __qualname__r networking_clsr4 rc_conf_fn shadow_fn default_ownershutdown_options_maprrrj__annotations__rrrrrr#r$r%rrr1r6r3r@rCrNr\r rbrcraruryrkboolr~ staticmethodrrtupler __classcell__r-r-r+r.r sB          r )loggingrrtypingrrcloudinit.net.netops.bsd_netopsrnetopsr# cloudinitrrrrcloudinit.distrosr r cloudinit.distros.networkingr getLoggerrrEDistror r-r-r-r.s