
    Vh                        d dl m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
 d dlmZmZ d dlmZ  G d d	e      Z G d
 de      Zy)    )annotationsN)to_text)HardwareHardwareCollector)timeout)get_file_contentget_mount_size)
get_sysctlc                  h    e Zd ZdZdZddZ ej                         d        Zd Zd Z	d Z
d	 Zd
 Zy)OpenBSDHardwareaV  
    OpenBSD-specific subclass of Hardware. Defines memory, CPU and device facts:
    - memfree_mb
    - memtotal_mb
    - swapfree_mb
    - swaptotal_mb
    - processor (a list)
    - processor_cores
    - processor_count
    - processor_speed
    - uptime_seconds

    In addition, it also defines number of DMI facts and device facts.
    OpenBSDNc                   i }t        | j                  dg      | _        |j                  | j	                                |j                  | j                                |j                  | j                                |j                  | j                                |j                  | j                                	 |j                  | j                                |S # t        j                  $ r Y |S w xY w)Nhw)r
   modulesysctlupdateget_processor_factsget_memory_factsget_device_factsget_dmi_factsget_uptime_factsget_mount_factsr   TimeoutError)selfcollected_factshardware_factss      [/home/dcms/DCMS/lib/python3.12/site-packages/ansible/module_utils/facts/hardware/openbsd.pypopulatezOpenBSDHardware.populate/   s     tf5d6689d3356d3356d0023d3356	!!$"6"6"89  ## 		s   ;C C32C3c                   i }g |d<   t        d      }|r|j                         D ]  }|j                  d      s|j                         dk(  r(t	        j
                  dd|      j                         }|d   dk(  s|d	   d
k(  r^t        |d         }|d   |d   |d   |d	   d}|j                  |       |d   j                  |        |S )Nmountsz
/etc/fstab# z\s+    none   xxr      )mountdevicefstypeoptions)
r   
splitlines
startswithstripresubsplitr	   r   append)r   mount_factsfstablinefieldsmount_statvfs_info
mount_infos          r   r   zOpenBSDHardware.get_mount_factsA   s     "H .((* 9??3'4::<2+=T288:!9&&)t*;%3F1I%>"'-ay(.q	(.q	)/4
 !!"45H%,,Z89     c                J   i }| j                   j                  d      \  }}}|dk(  rTt        |j                         d   j	                         d         dz  |d<   t        | j
                  d         dz  dz  |d<   | j                   j                  d	      \  }}}|dk(  rt        d
      d t        d      d t        d      d i}t        |d      j	                         }t        |d   j                  |            dz  |d<   t        |d   j                  |            dz  |d<   |S )Nz/usr/bin/vmstatr      i   
memfree_mbz
hw.physmemmemtotal_mbz/sbin/swapctl -skkmgsurrogate_or_strict)errorsswapfree_mbr$   swaptotal_mb)	r   run_commandintr-   r2   r   ordr   	translate)r   memory_factsrcouterr	swaptransdatas          r   r   z OpenBSDHardware.get_memory_factsW   s)   
 {{../@AC7),S^^-=b-A-G-G-I!-L)MQU)UL&*-dkk,.G*HD*PTX*XL' {{../BCC7TDTDTD*I 3'<=CCED*-d2h.@.@.K*LPT*TL'+.tAw/@/@/K+LPT+TL(r:   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_pathrH   r/   isdigitrI   time)r   
sysctl_cmdcmdrM   rN   rO   kern_boottimes          r   r   z OpenBSDHardware.get_uptime_factsq   s    [[--h7
I41{{..s3C7I		$$&I c$))+M0B"BC
 	
r:   c                    i }g }t        t        | j                  d               D ]   }|j                  | j                  d          " ||d<   | j                  d   |d<   | j                  d   |d<   |S )Nzhw.ncpuonlinezhw.model	processorprocessor_countprocessor_cores)rangerI   r   r3   )r   	cpu_factsr[   is       r   r   z#OpenBSDHardware.get_processor_facts   s    		s4;;789 	6AT[[45	6 "+	+ (,{{?'C	#$'+{{?'C	#$r:   c                r    i }g }|j                  | j                  d   j                  d             ||d<   |S )Nzhw.disknames,devices)extendr   r2   )r   device_factsrc   s      r   r   z OpenBSDHardware.get_device_facts   s<    t{{>288=>")Yr:   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
hw.productz
hw.versionzhw.uuidzhw.serialnoz	hw.vendor)r   )r   	dmi_factssysctl_to_dmimibs       r   r   zOpenBSDHardware.get_dmi_facts   s^    	 )+%+(
 ! 	ACdkk!04C0@	-,-	A r:   )N)__name__
__module____qualname____doc__platformr   r   r   r   r   r   r   r    r:   r   r   r      sI     H$ W__ *4
*&r:   r   c                      e Zd ZeZdZy)OpenBSDHardwareCollectorr   N)ro   rp   rq   r   _fact_class	_platformrt   r:   r   rv   rv      s    !KIr:   rv   )
__future__r   r0   rV   +ansible.module_utils.common.text.convertersr   (ansible.module_utils.facts.hardware.baser   r   ansible.module_utils.factsr    ansible.module_utils.facts.utilsr   r	   !ansible.module_utils.facts.sysctlr
   r   rv   rt   r:   r   <module>r      s;     # 	  ? P . M 8Wh Wt0 r:   