
    Vh)                    `    d dl mZ d dl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)HardwareHardwareCollector)get_mount_sizec                  @    e Zd ZdZdZddZd Zd Zd Zd Z	d	 Z
d
 Zy)AIXHardwarea  
    AIX-specific subclass of Hardware.  Defines memory and CPU facts:
    - memfree_mb
    - memtotal_mb
    - swapfree_mb
    - swaptotal_mb
    - processor (a list)
    - processor_count
    - processor_cores
    - processor_threads_per_core
    - processor_vcpus
    AIXNc                   i }| j                         }| j                         }| j                         }| j                         }| j	                         }| j                         }|j                  |       |j                  |       |j                  |       |j                  |       |j                  |       |j                  |       |S N)get_cpu_factsget_memory_factsget_dmi_factsget_vgs_factsget_mount_factsget_device_factsupdate)	selfcollected_factshardware_facts	cpu_factsmemory_facts	dmi_facts	vgs_factsmount_factsdevices_factss	            W/home/dcms/DCMS/lib/python3.12/site-packages/ansible/module_utils/facts/hardware/aix.pypopulatezAIXHardware.populate'   s    &&(	,,.&&(	&&(	**,--/i(l+i(i(k*m,    c                *   i }g |d<   d|d<   | j                   j                  d      \  }}}|rd}|j                         D ]'  }d|v s|dk(  r|j                  d      }|d   }|dz  }) t	        |      |d<   | j                   j                  d	z   d
z         \  }}}|j                  d      }|d   g|d<   d|d<   | j                   j                  d	|z   dz         \  }}}|r"|j                  d      }t	        |d         |d<   |d   |d   z  |d<   |S )N	processor   processor_countz/usr/sbin/lsdev -Cc processorr   	Available processor_coresz/usr/sbin/lsattr -El z -a typeprocessor_threads_per_corez -a smt_threadsprocessor_vcpus)modulerun_command
splitlinessplitint)	r   r   rcouterrilinedatacpudevs	            r   r   zAIXHardware.get_cpu_facts:   s_   	!#	+ ()	#${{..+
C A( $&Av#zz#!%aFA ,/q6I'(;;22'&0:=LBS 99S>D&*1gYIk"67I23;;22'&03DDLBS yy~:=d1g,	67+,y9U/VV '( r   c                L   i }d}| j                   j                  d      \  }}}|j                         D ]7  }|j                         }d|v rt	        |d         }d|v s*t	        |d         }	9 |z  dz  dz  |d<   |	z  dz  dz  |d<   | j                   j                  d	      \  }}}|ry|j                         }
|
d
   j                         }t	        |d   j                  d            }t	        |d
   j                  d            }||d<   t	        |d|z
  z  dz        |d<   |S )Ni   z/usr/bin/vmstat -vzmemory pagesr   z
free pagesi   memtotal_mb
memfree_mbz/usr/sbin/lsps -sr!   MB%swaptotal_mbd   swapfree_mb)r(   r)   r*   r+   r,   rstrip)r   r   pagesizer-   r.   r/   r1   r2   	pagecount	freecountlinesr9   percuseds                r   r   zAIXHardware.get_memory_factsc   s>   {{../CDCNN$ 	)D::<D%QL	t#QL		) '/&:d&Bd&J]#%-	%9T%AT%I\"
 {{../BCCNN$E8>>#DtAw~~d34L47>>#./H+7L(*-lcHn.MPS.S*TL'r   c                   i }| j                   j                  d      \  }}}|j                         }|d   j                  d      |d<   | j                   j	                  d      }|r| j                   j                  |      \  }}}|dk(  rw|ru|j                         D ]b  }|j                  d      }d|v r|d   j                         |d	<   d
|v r|d   j                         |d<   d|v sM|d   j                         |d<   d |S )Nz&/usr/sbin/lsattr -El sys0 -a fwversionr!   zIBM,firmware_versionlsconfr   :zMachine Serial Numberproduct_serialz	LPAR Info	lpar_infozSystem Modelproduct_name)r(   r)   r+   stripget_bin_pathr*   )r   r   r-   r.   r/   r2   lsconf_pathr1   s           r   r   zAIXHardware.get_dmi_facts~   s   	{{../WXCyy{(,Qf(=	$%kk..x8;;22;?LBSQw3NN, DD::c?D.$66:1gmmo	"23"d*15a	+.%-48GMMO	.1D r   c                P   i }| j                   j                  d      }| j                   j                  d      }|d|d|d}|r_|r\| j                   j                  |d      \  }}}|dk(  r5|r2i |d	<   t        j                  d
|      D ]  }g |d	   |j                  d      <   d}	|d|j                  d      }| j                   j                  |      \  }}}|dk(  sX|s[t        j                  d|      j                  d      }	t        j                  d|j                  d            D ]l  }
|
j                  d      |
j                  d      |
j                  d      |
j                  d      |	d}|d	   |j                  d         j                  |       n  |S )a  
        Get vg and pv Facts
        rootvg:
        PV_NAME           PV STATE          TOTAL PPs   FREE PPs    FREE DISTRIBUTION
        hdisk0            active            546         0           00..00..00..00..00
        hdisk1            active            546         113         00..00..00..21..92
        realsyncvg:
        PV_NAME           PV STATE          TOTAL PPs   FREE PPs    FREE DISTRIBUTION
        hdisk74           active            1999        6           00..00..00..00..06
        testvg:
        PV_NAME           PV STATE          TOTAL PPs   FREE PPs    FREE DISTRIBUTION
        hdisk105          active            999         838         200..39..199..200..200
        hdisk106          active            999         599         200..00..00..199..200
        lsvgxargsz -o | r$   z -pT)use_unsafe_shellr   vgsz?(\S+):\n.*FREE DISTRIBUTION(\n(\S+)\s+(\w+)\s+(\d+)\s+(\d+).*)+r!   zPP SIZE:\s+(\d+\s+\S+)z(\S+)\s+(\w+)\s+(\d+)\s+(\d+).*         )pv_namepv_state	total_ppsfree_ppspp_size)r(   rJ   r)   refinditergroupsearchappend)r   r   	lsvg_path
xargs_pathcmdr-   r.   r/   mrX   npv_infos               r   r   zAIXHardware.get_vgs_facts   s     	KK,,V4	[[--g6
$-z9E;;2232NLBSQw3#%	% %gilm IA35Ie$QWWQZ0G%.
;C#';;#:#:3#?LBSQw3"$)),Es"K"Q"QRS"T!#-OQRQXQXYZQ[!\ IA23''!*34771:45GGAJ34771:29	')G &e,QWWQZ8??HII  r   c                   i }g |d<   g }| j                   j                  d      }|r@| j                   j                  |      \  }}}|r|j                  d      D ]	  }|j                         }t	        |      dk7  s#|d   dk7  s,|d   d   dk7  s8t        j                  d|d         sRt        j                  d|d         rB|d	   }	|	|d   |d
   |d   |d   d|d   d|d   d}
|
j                  t        |	             nLt	        |      dk  r|j                  d       |d
   |d   d|d	   |d   |d   |d   d|d   d|d   d}
|j                  |
        ||d<   |S )Nmountsmount
r   node-z^/.*|^[a-zA-Z].*|^[0-9].*z^/r!   rQ      rR   r$   rS      )rf   devicefstypeoptionstime    rE      )
r(   rJ   r)   r+   lenrY   matchr   r   r]   )r   r   re   
mount_pathr-   	mount_outr/   r1   fieldsrf   
mount_infos              r   r   zAIXHardware.get_mount_facts   s    "H [[--g6
!%!8!8!DB	3%OOD1 2D!ZZ\F6{a'F1I,?F1IaLTWDW\^\d\d  fA  CI  JK  CL  ]M88D&)4$*1IE384:1I4:1I5;AY@Fq	6RS9V\]^V_2`	*bJ
 '--nU.CD
  #6{Q &b 139!9?Eay&QR)4T4:1I5;AY@Fq	6RS9V\]^V_2`	*bJ j1326 !'Hr   c                   i }i |d<   | j                   j                  d      }| j                   j                  d      }|r|r| j                   j                  |      \  }}}|j                         D ]  }|j	                         }i }	|d   }
|d   }|dd  }|dd|
g}| j                   j                  |      \  }}}|j                         D ]!  }|j	                         }|d   }|d   }||	|<   # |d	j                  |      |	d
|d   |
<    |S )Ndeviceslsdevlsattrr   r!   rQ   z-Ez-lr$   )statetype
attributes)r(   rJ   r)   r*   r+   join)r   device_facts	lsdev_cmd
lsattr_cmdr-   	out_lsdevr/   r1   fielddevice_attrsdevice_namedevice_statedevice_typelsattr_cmd_args
out_lsattrattrattr_fields	attr_nameattr_parameters                      r   r   zAIXHardware.get_device_facts   s3   "$YKK,,W5	[[--h7
!%!8!8!CB	3!,,. 

!#Ah$Qx#ABi#-tT;"G&*kk&=&=o&N#J&113 =D"&**,K +AI%0^N.<L+	= *HH[1".8Y'4* r   r   )__name__
__module____qualname____doc__platformr   r   r   r   r   r   r    r   r   r   r      s4     H&'R6((T*Xr   r   c                      e Zd ZdZeZy)AIXHardwareCollectorr	   N)r   r   r   	_platformr   _fact_classr   r   r   r   r   	  s    IKr   r   )

__future__r   rY   (ansible.module_utils.facts.hardware.baser   r    ansible.module_utils.facts.utilsr   r   r   r   r   r   <module>r      s/     # 	 P ;n( nb, r   