
    VhE                    t    d dl mZ d dlZd dlZd dlZd dlmZmZ d dlm	Z	m
Z
  G d de      Z G d de      Zy)	    )annotationsN)VirtualVirtualCollector)get_file_contentget_file_linesc                      e Zd ZdZdZd Zy)LinuxVirtualzw
    This is a Linux-specific subclass of Virtual.  It defines
    - virtualization_type
    - virtualization_role
    Linuxc                `   i }d}t               }t               }t        j                  j                  d      rt	        d      D ]  }t        j                  d|      r|j                  d       |sd|d<   d|d<   d}t        j                  d	|      st        j                  d
|      r|j                  d       |sd|d<   d|d<   d}t        j                  d|      s|j                  d       |rd|d<   d|d<   d} t        j                  j                  d      rt	        dd      D ]  }t        j                  d|      r|j                  d       |sd|d<   d|d<   d}t        j                  d|      r|j                  d       |sd|d<   d|d<   d}t        j                  d|      s|j                  d       |rd|d<   d|d<   d} t        j                  j                  d      rvt        j                  j                  d      sWd|d<   t        j                  j                  d      r|j                  d       |sd|d<   n|j                  d       |sd|d<   d}t        d      }|r|j                  |       |s||d<   d|d<   d}t        j                  j                  d      st        j                  j                  d      r|j                  d       |sd|d<   d|d<   d}|j                  t        g d            s|r|j                  d       t        j                  j                  d      rId}	 t	        d       D ]	  }d!|v sd} 	 |r|j                  d"       |sd"|d<   d|d<   n|s
d"|d<   d|d<   d}|sd|d<   t        d#      }t        d$      }	t        d%      }
|d&v r|j                  d'       |sd'|d<   d}|	d(k(  r|j                  d(       |sd(|d<   d}|	d)k(  r?|
d*k(  r|j                  d*       |s'd*|d<   d}n|d+k(  r|j                  d,       |sd,|d<   d}|r+|j                  d-      r|j                  d.       |sd.|d<   d}|d/v r|j                  d0       |sd0|d<   d}t        d1      }|d2k(  r|j                  d"       |sd"|d<   d}|d3k(  r|j                  d4       |sd4|d<   d}|d5v r|j                  d'       |sd'|d<   d}d6}|	|v r|j                  d'       |sd'|d<   d}|	d7k(  r|j                  d7       |sd7|d<   d}|	d8k(  r|j                  d9       |sd9|d<   d}|	d:k(  r|j                  d;       |sd;|d<   d}|	d<k(  r|j                  d0       |sd0|d<   d}|s|d= t        j                  j                  d=      rwt	        d=      D ]i  }t        j                  d>|      s|sd?|d<   t        j                  d@|      r|j                  d?       |sd|d<   n|j                  d?       |sd|d<   d}k t        j                  j                  dA      rt	        dA      D ]  }t        j                  dB|      r|j                  d'       |sd'|d<   nt        j                  dC|      r|j                  dD       |sdD|d<   nt        j                  dE|      r|j                  dD       |s_dD|d<   nXt        j                  dF|      r|j                  d'       |s.d'|d<   n't        j                  dG|      r|j                  dH       |sdH|d<   nt        j                  dI|      r|j                  dJ       |sdJ|d<   | j                  j                  dK      }|r| j                  j                  dKg      \  }}}|dLk(  r|j!                         D ]Y  }|j#                  dMdN      }|dL   j%                         }|dOk(  s.|dN   j%                         }|j                  |       |rU||d<   [ n|j                  dP       |sdP|d<   n|d   dJk(  r|sdQ|d<   n|sd|d<   |r
d} t        j                  j                  dR      rPt        j&                  dRt        j(                        r+g }t	        dR      D ](  }|j#                  dSdN      }|j+                  |dL          * d'|v r|j                  d'       |s
d'|d<   d|d<   t        j                  j-                  dT      rkt/        j.                  dU      D ]S  }	 t1        |      5 }|j3                         j5                         }d d d        dVv r|j                  d,       |sd,|d<    nU d}dW|v r|j                  d4       |sd4|d<   d|d<   d}dX|v r|j                  d'       |sd'|d<   d|d<   d}| j                  j                  dY      }|| j                  j                  dZ|z        \  }}}|dLk(  rd[j9                  |j!                         D cg c]$  }|j                  d\      r|j%                         & c}      }|j                  d.      r|j                  d.       |sd.|d<   d|d<   d}d]|v r|j                  d^       |sd^|d<   d|d<   d}t        j                  j                  d_      r|j                  d'       |sd'|d<   d|d<   d}|sd`|d<   d`|d<   d}||da<   ||db<   |S # t        $ r Y w xY w# 1 sw Y   xY w# t6        $ r Y w xY wc c}w )cNFz/proc/1/cgroupz/docker(/|-[0-9a-f]+\.scope)dockervirtualization_typeguestvirtualization_roleTz/lxc/z/machine.slice/machine-lxclxcz /system.slice/containerd.service
containerdz/proc/1/environ )line_sepzcontainer=lxczcontainer=podmanpodmanz^container=.	containerz/proc/vzz	/proc/lveopenvzz/proc/bchostz/run/systemd/containerz/.dockerenvz/.dockerinit)r   r   r   r   r   z	/proc/xenz/proc/xen/capabilities	control_dxenz(/sys/devices/virtual/dmi/id/product_namez&/sys/devices/virtual/dmi/id/sys_vendorz*/sys/devices/virtual/dmi/id/product_family)KVMz
KVM ServerBochsAHVkvmoVirtzRed HatRHVzRHEV HypervisorRHEV)VMwarer!   )zOpenStack ComputezOpenStack Nova	openstackz'/sys/devices/virtual/dmi/id/bios_vendorXenzinnotek GmbH
virtualbox)
Amazon EC2DigitalOceanHetzner)QEMUr%   r&   GoogleScalewayNutanixKubeVirtzMicrosoft Corporation	VirtualPCz%Parallels Software International Inc.	parallelszOpenStack Foundationz/proc/self/statusz^VxID:\s+\d+linux_vserverz
^VxID:\s+0z/proc/cpuinfoz^model name.*QEMU Virtual CPUz^vendor_id.*User Mode Linuxumlz^model name.*UMLz-^machine.*CHRP IBM pSeries .emulated by qemu.z^vendor_id.*PowerVM Lx86powervm_lx86z^vendor_id.*IBM/S390zPR/SMlscpur   :   
Hypervisoribm_systemzLPARz/proc/modules z/rhev/z/proc/[0-9]*/comm)vdsmvdsmdvboxdrvvirtio	dmidecodez%s -s system-product-name #BHYVEbhyvez/dev/kvmNAvirtualization_tech_guestvirtualization_tech_host)setospathexistsr   researchaddr   intersectionIOError
startswithmatchmoduleget_bin_pathrun_command
splitlinessplitstripaccessR_OKappendisdirglobopenreadrstrip	Exceptionjoin)selfvirtual_facts
found_virt	host_tech
guest_techlinesystemd_containeris_xen_hostproduct_name
sys_vendorproduct_familybios_vendorKVM_SYS_VENDORSr2   rcouterrdatakeytechmodulesfvirt_fhcomm_contentdmi_binvendor_names                             X/home/dcms/DCMS/lib/python3.12/site-packages/ansible/module_utils/facts/virtual/linux.pyget_virtual_factszLinuxVirtual.get_virtual_facts#   s    
 E	U
 77>>*+&'78 *99<dCNN8,%?G&;<?F&;<%)
99Wd+ryy9UW[/\NN5)%?D&;<?F&;<%)
99?FNN<0%?K&;<?F&;<%)
%** 77>>+,&'86J *99_d3NN5)%?D&;<?F&;<%)
99/6NN8,%?G&;<?F&;<%)
99^T2NN;/%?J&;<?F&;<%)
%*( 77>>*%bggnn[.I3;M/0ww~~j)h'!;AM"78x(!;BM"78J,-EFNN,-7H347>34!

 77>>-(BGGNN>,JNN8$7?347>34!
 ""3'Z#[\`qNN;'77>>+&K*+CD +D"d*&*+ e$!;@M"78;AM"78!;@M"78;BM"78J 3:M/0'(RS%&NO
)*VW@@NN5!7<34!
 NN7#7>34!
"&u%!;@M"78!%J!22v&!;AM"78!%JL33K@NN8$7?34!
BBNN;'7B34!
&'PQ%NN5!7<34!
.(NN<(7C34!
CCNN5!7<34!
a(NN5!7<34!
#NN:&7A34!
 00NN;'7B34!
@@NN;'7B34!
//NN;'7B34!
 3477>>-.&':; &88OT2%?N&;<xxt4!o6)CIM*?@"7)CJM*?@!%J& 77>>/*&7 2&88;TBNN5)%?D&;<XX;TBNN5)%?D&;<XX0$7NN5)%?D&;<XXMtTNN5)%?D&;<XX8$?NN>2%?M&;<XX4d;NN7+%?F&;< KK44W=E'+{{'>'>y'IC7(+(8 T'+zz#q'9&*1gmmo#&,#6+/7==?D$.NN4$8+5OS6K(LT #}5)CPM*?@ !677B%?E&;<%?F&;<!!%Je2&j 77>>/*ryy"''/RG&7 (zz#q)tAw'( e$!;@M"78;AM"7877==*!YY':; !!!%a GG/6||~/D/D/FG  ,/@@ !*f 5'1KQM2G$H %  A! "
G#l+!;GM"78;AM"78!%J7"e$!;@M"78;BM"78!%J ++**;7![[445PSZ5Z[NRcQw gg@P&mX\XgXghkXltzz|&mn))(3NN8,%?G&;<?F&;<%)
c>NN7+%?F&;<?F&;<%)
77>>*%MM% 7<347=34!
 37M/037M/0J5?124=01W  NG G  ) ! !6 'nsN    k> k> (l3l$l#l+:l+>	l
ll	l	l('l(N)__name__
__module____qualname____doc__platformrz        ry   r	   r	      s    
 Hlr   r	   c                      e Zd ZeZdZy)LinuxVirtualCollectorr
   N)r{   r|   r}   r	   _fact_class	_platformr   r   ry   r   r     s    KIr   r   )
__future__r   rZ   rF   rI   'ansible.module_utils.facts.virtual.baser   r    ansible.module_utils.facts.utilsr   r   r	   r   r   r   ry   <module>r      s5     #  	 	 M Mu7 up, r   