
    VhZ                        d dl mZ d dlZd dlZd dlZd dlmZ d dlmZm	Z	 d dl
mZmZ d dlmZmZmZ d dlmZ  G d d	e      Z G d
 de	      Zy)    )annotationsN)reduce)HardwareHardwareCollector)TimeoutErrortimeout)get_file_contentget_file_linesget_mount_size)
get_sysctlc                  V    e Zd ZdZdZg dZddZd Zd Z e	       d        Z
d	 Zd
 Zy)NetBSDHardwarez
    NetBSD-specific subclass of Hardware.  Defines memory and CPU facts:
    - memfree_mb
    - memtotal_mb
    - swapfree_mb
    - swaptotal_mb
    - processor (a list)
    - processor_cores
    - processor_count
    - devices
    - uptime_seconds
    NetBSD)MemTotal	SwapTotalMemFreeSwapFreeNc                   i }t        | j                  dg      | _        | j                         }| j	                         }i }	 | j                         }| j                         }| j                         }|j                  |       |j                  |       |j                  |       |j                  |       |j                  |       |S # t        $ r Y w xY w)Nmachdep)
r   modulesysctlget_cpu_factsget_memory_factsget_mount_factsr   get_dmi_factsget_uptime_factsupdate)selfcollected_factshardware_facts	cpu_factsmemory_factsmount_facts	dmi_factsuptime_factss           Z/home/dcms/DCMS/lib/python3.12/site-packages/ansible/module_utils/facts/hardware/netbsd.pypopulatezNetBSDHardware.populate/   s     yk:&&(	,,.	..0K &&(	,,.i(l+k*i(l+  		s   C	 		CCc                n   i }d}d}i }t        j                  dt         j                        s|S g |d<   t        d      D ]  }|j	                  dd      }|d   j                         }|dk(  s|dk(  r4d|vrg |d<   |d   j                  |d   j                                |dz  }f|dk(  r|d   j                         }||vsd||<   |d	k(  st        |d   j                               ||<    t        |      dkD  r.t        |      |d
<   t        d |j                               |d<   |S ||d
<   d|d<   |S )Nr   z/proc/cpuinfo	processor:   z
model name	Processorzphysical idz	cpu coresprocessor_countc                    | |z   S N )xys     r&   <lambda>z.NetBSDHardware.get_cpu_facts.<locals>.<lambda>a   s
    q1u     processor_coresNA)osaccessR_OKr
   splitstripappendintlenr   values)r   r!   iphysidsocketslinedatakeys           r&   r   zNetBSDHardware.get_cpu_factsF   sY   	yy"''2!#	+"?3 	7D::c1%Dq'--/C l"c[&8i/-/Ik*+&--d1gmmo>Q%a(&'GFO#"%d1gmmo"6	7  w<!+.w<I'(+12DgnnFV+WI'(
  ,-I'(+/I'(r4   c                X   i }t        j                  dt         j                        s|S t        d      D ]s  }|j	                  dd      }|d   }|t
        j                  v s-|d   j                         j	                  d      d   }t        |      dz  |d|j                         z  <   u |S )Nz/proc/meminfor*   r+   r    i   z%s_mb)
r7   r8   r9   r
   r:   r   MEMORY_FACTSr;   r=   lower)r   r"   rC   rD   rE   vals         r&   r   zNetBSDHardware.get_memory_factsh   s    yy"''2"?3 	GD::c1%Dq'Cn1111gmmo++C0369#h$6FWsyy{23	G r4   c                |   i }g |d<   t        d      }|s|S |j                         D ]  }|j                  d      s|j                         dk(  r(t	        j
                  dd|      j                         }t        |d         }|d   |d   |d	   |d
   d}|j                  |       |d   j                  |        |S )Nmountsz
/etc/fstab# z\s+rG   r+   r         )mountdevicefstypeoptions)
r	   
splitlines
startswithr;   resubr:   r   r   r<   )r   r#   fstabrC   fieldsmount_statvfs_info
mount_infos          r&   r   zNetBSDHardware.get_mount_factsu   s     "H .$$& 
	5Ds#tzz|r'9VVFC.446F!/q	!:#)!9$*1I$*1I%+AY0J 01!((4
	5 r4   c                p    i }dddddd}|D ]&  }|| j                   v s| j                   |   |||   <   ( |S )Nproduct_nameproduct_versionproduct_uuidproduct_serialsystem_vendor)zmachdep.dmi.system-productzmachdep.dmi.system-versionzmachdep.dmi.system-uuidzmachdep.dmi.system-serialzmachdep.dmi.system-vendor)r   )r   r$   sysctl_to_dmimibs       r&   r   zNetBSDHardware.get_dmi_facts   s^    	 +9*;'5)9)8
 ! 	ACdkk!04C0@	-,-	A r4   c                0   | j                   j                  d      }|i S |ddg}| j                   j                  |      \  }}}|dk7  ri S |j                         }|j	                         si S dt        t        j                         t        |      z
        iS )Nr   z-nzkern.boottimer   uptime_seconds)r   get_bin_pathrun_commandr;   isdigitr=   time)r   
sysctl_cmdcmdrcouterrkern_boottimes          r&   r   zNetBSDHardware.get_uptime_facts   s    [[--h7
I41{{..s3C7I		$$&I c$))+M0B"BC
 	
r4   r/   )__name__
__module____qualname____doc__platformrH   r'   r   r   r   r   r   r   r0   r4   r&   r   r      sC     HCL. D Y ,,
r4   r   c                      e Zd ZeZdZy)NetBSDHardwareCollectorr   N)rq   rr   rs   r   _fact_class	_platformr0   r4   r&   rw   rw      s     KIr4   rw   )
__future__r   r7   rW   rj   ansible.module_utils.six.movesr   (ansible.module_utils.facts.hardware.baser   r   "ansible.module_utils.facts.timeoutr   r    ansible.module_utils.facts.utilsr	   r
   r   !ansible.module_utils.facts.sysctlr   r   rw   r0   r4   r&   <module>r      sA     # 	 	  1 P D ] ] 8V
X V
r/ r4   