
    Vhq)                        d dl mZ d dlZd dlZd dlm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 d dlmZ  G d	 d
e      Z G d de      Zy)    )annotationsN)get_best_parsable_locale)bytes_to_human)get_file_contentget_mount_size)HardwareHardwareCollector)timeout)reducec                  j    e Zd ZdZdZddZddZd Z ej                         d        Z	d Z
d	 Zd
 Zy)SunOSHardwarez
    In addition to the generic memory and cpu facts, this also sets
    swap_reserved_mb and swap_allocated_mb that is available from *swap -s*.
    SunOSNc                "   i }t        | j                        }|||d| j                  _        | j                         }| j	                         }| j                         }| j                         }| j                         }i }		 | j                         }	|j                  |       |j                  |       |j                  |       |j                  |       |j                  |       |j                  |	       |S # t        j                  $ r Y }w xY w)N)LANGLC_ALL
LC_NUMERIC)r   modulerun_command_environ_updateget_cpu_factsget_memory_factsget_dmi_factsget_device_factsget_uptime_factsget_mount_factsr
   TimeoutErrorupdate)
selfcollected_factshardware_factslocale	cpu_factsmemory_facts	dmi_factsdevice_factsuptime_factsmount_factss
             Y/home/dcms/DCMS/lib/python3.12/site-packages/ansible/module_utils/facts/hardware/sunos.pypopulatezSunOSHardware.populate$   s    
 *$++6:@Fbh1i.&&(	,,.&&(	,,.,,.	..0K 	i(l+i(l+l+k* ## 		s    C8 8DDc                "   d}i }i }|xs i }| j                   j                  d      \  }}}g |d<   |j                         D ]  }t        |      dk  r|j	                  d d      }	|	d   j                         }
|
dk(  rd}?|
dk(  r|	d   j                         }X|
dk(  r|	d   j                         }q|
d	k(  rTxs |	d   j                         }|j                  d
      dk7  r|dz   dz   z  }d|vrg |d<   |d   j                  |       |
dk(  s|	d   j                         }||vrd||<   ||xx   dz  cc<    t        |      dkD  r.t        |      |d<   t        d |j                               |d<   |S d|d<   t        |d         |d<   |S )Nr   z/usr/bin/kstat cpu_info	processor   zmodule: brand	clock_MHzimplementationansible_machinei86pcz @ MHzansible_processorchip_idprocessor_countc                    | |z   S N )xys     r'   <lambda>z-SunOSHardware.get_cpu_facts.<locals>.<lambda>r   s
    q1u     processor_coresNA)
r   run_command
splitlineslensplitstripgetappendr   values)r   r   physidsocketsr!   rcouterrlinedatakeyr-   	clock_mhzr*   s                 r'   r   zSunOSHardware.get_cpu_factsB   s   	)/R{{../HIC!#	+NN$ 	)D4y1}::dA&Dq'--/C iQ# GMMO	((!4T!W]]_	 #&&'89WD!2U!::I&o=-/Ik*+&--i8	!a(&'GFOFOq(O9	)F w<!+.w<I'(+12DgnnFV+WI'(
  ,0I'(+.y/E+FI'(r<   c                8   i }| j                   j                  dg      \  }}}|j                         D ]&  }d|v st        |j	                         d         |d<   ( | j                   j                  d      \  }}}t        |j	                         d   d d       }t        |j	                         d   d d       }t        |j	                         d	   d d       }t        |j	                         d
   d d       }	|	dz  |d<   |	|z   dz  |d<   |dz  |d<   |dz  |d<   |S )Nz/usr/sbin/prtconfzMemory size   memtotal_mbz/usr/sbin/swap -sr+         
   i   swapfree_mbswaptotal_mbswap_allocated_mbswap_reserved_mb)r   r?   r@   intrB   )
r   r"   rI   rJ   rK   rL   	allocatedreservedusedfrees
             r'   r   zSunOSHardware.get_memory_factsy   s.   {{..0C/DECNN$ 	CD$.1$**,q/.B]+	C {{../BCC		As+,	syy{1~cr*+399;q>#2&'399;r?3B'(&*dl]#(,t'<^$,5,=()+3t+;'(r<   c                   i }g |d<   t        d      }|rp|j                         D ]]  }|j                  d      }t        |d         }|d   |d   |d   |d   |d   d	}|j	                  |       |d   j                  |       _ |S )
Nmountsz/etc/mnttab	r+   r   rQ         )mountdevicefstypeoptionstime)r   r@   rB   r   r   rE   )r   r&   fstabrL   fieldsmount_statvfs_info
mount_infos          r'   r   zSunOSHardware.get_mount_facts   s     "H !/((* 	9D)%3F1I%>"'-ay(.q	(.q	)/&,Qi	1

 !!"45H%,,Z8	9 r<   c                   i }| j                   j                  d      \  }}}d|j                         z   dz   }| j                   j                  d|g      }||S | j                   j                  |      \  }}}|r|j	                  d      d   }g d}	d	j                  t        t        j                  |	            }
d
|
z   dz   dz   dz   }t        j                  ||      }|r(|j                  d      |d<   |j                  d      |d<   |S )Nz/usr/bin/uname -iz/usr/platform/z/sbinprtdiag)opt_dirs
r   )FujitsuzOracle CorporationQEMUzSun MicrosystemszVMware, Inc.|zSystem Configuration:\s+(z)\s+z(?:sun\w+\s+)?z(.+)r+   system_vendorrQ   product_name)r   r?   rstripget_bin_pathrB   joinmapreescapematchgroup)r   r#   rI   platformrK   platform_sbinprtdiag_pathrJ   system_confvendorsvendor_regexpsystem_conf_regexpfounds                r'   r   zSunOSHardware.get_dmi_facts   s&   	 !KK334GHHc(8??+<<wF{{//#_ 0 
 {{..|<C))D/!,KG  HHSG%<=M#)+8#9;B#C$5#6 %,#,
 HH/=E-2[[^	/*,1KKN	.)r<   c                \   i }i |d<   dddddddd	d
ddd}ddg}|D ]  }|j                  d|z          i }| j                  j                  |      \  }}}|dk7  r|S t        d |j	                  d      D              }	|	D ]  fd|j	                  d      D        }
|
D ]x  }|j	                  d      \  }}|j	                  d      d   }|dk(  r't        t        |            ||j                  |      <   W|j                         ||j                  |      <   z dz   }||d   |<   i } |S )Ndevicesproductrevisionserialsizevendorhard_errorssoft_errorstransport_errorsmedia_errorspredictive_failure_analysisillegal_request)ProductRevisionz	Serial NoSizeVendorzHard ErrorszSoft ErrorszTransport ErrorszMedia ErrorzPredictive Failure AnalysiszIllegal Requestz/usr/bin/kstatz-pz
sderr:::%sr   c              3  h   K   | ]*  }|j                  d       s|j                  d      d    , yw)sderr:r+   N)
startswithrB   ).0rL   s     r'   	<genexpr>z1SunOSHardware.get_device_facts.<locals>.<genexpr>   s,      lSWSbSbcjSkC!3 ls   22rq   c              3  \   K   | ]#  }d |v s|j                  d       d   k(  s | % yw)r   r+   N)rB   )r   rL   instances     r'   r   z1SunOSHardware.get_device_facts.<locals>.<genexpr>   s.     hdTWYZI[_gIgThs   	,,,rb   r   rc   r   sd)	rE   r   r?   	frozensetrB   r   floatrD   rw   )r   r$   
disk_statscmddsdrI   rJ   rK   sd_instanceslinesrL   textvaluestatdisknamer   s                   @r'   r   zSunOSHardware.get_device_facts   sg     "$Y !"!(( 2)+H0

  & 	*BJJ|b()	* {{..s3C7  l		$ ll$ 	HhciiohE ="jj.ezz#q)6>.<U5\.JAjnnT*+.3llnAjnnT*+= hH01L#H-A	 r<   c                    i }| j                   j                  d      \  }}}|dk7  ry t        t        j                         t        |j	                  d      d         z
        |d<   |S )Nz./usr/bin/kstat -p unix:0:system_misc:boot_timer   rb   r+   uptime_seconds)r   r?   r[   ri   rB   )r   r%   rI   rJ   rK   s        r'   r   zSunOSHardware.get_uptime_facts  sc     {{../_`C7 *-TYY[3syyq?Q;R-R)S%&r<   r7   )__name__
__module____qualname____doc__r   r(   r   r   r
   r   r   r   r   r8   r<   r'   r   r      sL     H<5n. W__ ,(T;zr<   r   c                  &    e Zd ZeZdZ edg      Zy)SunOSHardwareCollectorr   r   N)r   r   r   r   _fact_class	_platformsetrequired_factsr8   r<   r'   r   r     s    KI*&Nr<   r   )
__future__r   r{   ri   "ansible.module_utils.common.localer   +ansible.module_utils.common.text.formattersr    ansible.module_utils.facts.utilsr   r   (ansible.module_utils.facts.hardware.baser   r	   ansible.module_utils.factsr
   ansible.module_utils.six.movesr   r   r   r8   r<   r'   <module>r      s>     # 	  G F M P . 1}H }@'. 'r<   