a ì)g )ã@s`ddlmZmZmZeZddlZddlmZm Z ddl m Z Gdd„deƒZ Gdd„de ƒZ dS) é)Úabsolute_importÚdivisionÚprint_functionN)ÚHardwareÚHardwareCollector)Úget_mount_sizec@sNeZdZdZdZddd„Zdd„Zdd „Zd d „Zd d „Z dd„Z dd„Z dS)Ú 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 Csti}| ¡}| ¡}| ¡}| ¡}| ¡}| ¡}| |¡| |¡| |¡| |¡| |¡| |¡|S)N)Ú get_cpu_factsÚget_memory_factsÚ get_dmi_factsÚ get_vgs_factsÚget_mount_factsÚget_device_factsÚupdate) ÚselfZcollected_factsZhardware_factsÚ cpu_factsÚ memory_factsÚ dmi_factsÚ vgs_factsÚ mount_factsZ devices_facts©rúK/usr/lib/python3.9/site-packages/ansible/module_utils/facts/hardware/aix.pyÚpopulate(s      zAIXHardware.populatec Csüi}g|d<d|d<|j d¡\}}}|rød}| ¡D].}d|vr6|dkr\| d¡}|d}|d7}q6t|ƒ|d<|j d |d ¡\}}}| d¡}|dg|d<d|d <|j d |d ¡\}}}|rä| d¡}t|dƒ|d <|d|d |d <|S)NZ processoréZprocessor_countz/usr/sbin/lsdev -Cc processorrZ Availableú Zprocessor_coresz/usr/sbin/lsattr -El z -a typeZprocessor_threads_per_corez -a smt_threadsZprocessor_vcpus)ÚmoduleÚ run_commandÚ splitlinesÚsplitÚint) rrÚrcÚoutÚerrÚiÚlineÚdataZcpudevrrrr ;s<ÿ      ÿ   ÿ  ÿzAIXHardware.get_cpu_factsc Csòi}d}|j d¡\}}}| ¡D]4}| ¡}d|vrBt|dƒ}d|vr"t|dƒ} q"||dd|d<|| dd|d<|j d ¡\}}}|rî| ¡} | d  ¡}t|d d ¡ƒ} t|d  d ¡ƒ} | |d <t| d| dƒ|d<|S)Niz/usr/bin/vmstat -vz memory pagesrz free pagesiZ memtotal_mbZ memfree_mbz/usr/sbin/lsps -srZMBú%Ú swaptotal_mbédZ swapfree_mb)rrrrr Úrstrip) rrZpagesizer!r"r#r%r&Z pagecountZ freecountÚlinesr(Zpercusedrrrr ds(   zAIXHardware.get_memory_factscCsÂi}|j d¡\}}}| ¡}|d d¡|d<|j d¡}|r¾|j |¡\}}}|dkr¾|r¾| ¡D]V}| d¡}d|vrŒ|d ¡|d <d |vr¤|d ¡|d <d |vrf|d ¡|d <qf|S)Nz&/usr/sbin/lsattr -El sys0 -a fwversionrzIBM,Zfirmware_versionZlsconfrú:zMachine Serial NumberZproduct_serialz LPAR InfoZ lpar_infoz System ModelZ product_name)rrrÚstripÚ get_bin_pathr)rrr!r"r#r&Z lsconf_pathr%rrrr s"    zAIXHardware.get_dmi_factsc Cs*i}|j d¡}|j d¡}d|||f}|r&|r&|jj|dd\}}}|dkr&|r&i|d<t d|¡D]´}g|d| d ¡<d} d || d ¡f}|j |¡\}}}|dkrp|rpt d |¡ d ¡} t d | d¡¡D]D} |  d ¡|  d ¡|  d¡|  d¡| dœ} |d| d ¡ | ¡qÞqp|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 ZlsvgZxargsz%s -o | %s %s -pT)Zuse_unsafe_shellrZvgsz?(\S+):\n.*FREE DISTRIBUTION(\n(\S+)\s+(\w+)\s+(\d+)\s+(\d+).*)+rz%s %szPP SIZE:\s+(\d+\s+\S+)z(\S+)\s+(\w+)\s+(\d+)\s+(\d+).*ééé)Zpv_nameZpv_stateZ total_ppsZfree_ppsÚpp_size)rr.rÚreÚfinditerÚgroupÚsearchÚappend) rrZ lsvg_pathZ xargs_pathÚcmdr!r"r#Úmr2ÚnZpv_inforrrr “s0    üzAIXHardware.get_vgs_factsc CsNi}g|d<g}|j d¡}|j |¡\}}}|rB| d¡D]}| ¡}t|ƒdkr>|ddkr>|dddkr>t d|d¡r>t d|d¡rÞ|d } | |d|d |d d |d |d|dfdœ} |  t| ƒ¡nXt|ƒdkrô|  d¡|d d|d|d f|d |dd |d|d|d fdœ} |  | ¡q>||d<|S)NÚmountsÚmountÚ rZnodeú-z^/.*|^[a-zA-Z].*|^[0-9].*z^/rr/éz%s %s %sr0r1é)r<ZdeviceZfstypeÚoptionsÚtimeéÚz%s:%sé) rr.rrÚlenr3Úmatchrrr7) rrr;Z mount_pathr!Z mount_outr#r%Úfieldsr<Z mount_inforrrr½s: 8ü  ü zAIXHardware.get_mount_factscCsÚi}i|d<|j dd¡}|j dd¡}|j |¡\}}}| ¡D]’}| ¡}i} |d} |d} |dd…} |dd | g} |j | ¡\}}}| ¡D]$}| ¡}|d}|d}|| |<q”| d  | ¡| d œ|d| <qB|S) NZdevicesZlsdevTZlsattrrrr/z-Ez-lr)ÚstateÚtypeZ attributes)rr.rrrÚjoin)rZ device_factsZ lsdev_cmdZ lsattr_cmdr!Z out_lsdevr#r%ZfieldZ device_attrsZ device_nameZ device_stateZ device_typeZlsattr_cmd_argsZ out_lsattrÚattrZ attr_fieldsZ attr_nameZattr_parameterrrrrès.     ýzAIXHardware.get_device_facts)N) Ú__name__Ú __module__Ú __qualname__Ú__doc__Úplatformrr r r r rrrrrrrs  )*+rc@seZdZdZeZdS)ÚAIXHardwareCollectorr N)rMrNrOZ _platformrZ _fact_classrrrrrRsrR)Z __future__rrrrJZ __metaclass__r3Z(ansible.module_utils.facts.hardware.baserrZ ansible.module_utils.facts.utilsrrrRrrrrÚs p