
    Vh                        d dl mZ d dlZd dlZd dlZd dlmc mc mZ	 d dl
mZmZmZ d dlmZmZ d dlmZ ddZddZ G d d	      Z G d
 de      Z G d de      Zy)    )annotationsN)get_distributionget_distribution_versionget_distribution_codename)get_file_contentget_file_lines)BaseFactCollectorc                    t        |t              r|j                         }dg}|j                  |       | j	                  |      \  }}}|dk(  r|S y )Nunamer   )
isinstancestrsplitextendrun_command)moduleflagscommandrcouterrs         ^/home/dcms/DCMS/lib/python3.12/site-packages/ansible/module_utils/facts/system/distribution.py	get_unamer      sO    %iGNN5%%g.LBS	Qw
    c                    t         j                  j                  |       sy|ryt         j                  j                  |       dk(  ryy)NFTr   )ospathisfilegetsize)r   allow_emptys     r   _file_existsr       s<    77>>$  
wwt! r   c                  X   e Zd ZdZdddddddddd	d
dddddddddddddddddddddddddddddddddddddddddddd dd!d"dd#d$dd%d&ddd'ddd(dfZd)d*d+d,d-Zdd.iZd/Zd0 Zd1 Z	dCd2Z
d3 Zd4 Zd5 Zd6 Zd7 Zd8 Zd9 Zd: Zd; Zd< Zd= Zd> Zd? Zd@ ZdA ZyB)DDistributionFileszXhas-a various distro file parsers (os-release, etc) and logic for finding the right one.z/etc/altlinux-releaseAltlinux)r   namez/etc/oracle-releaseOracleLinuxz/etc/slackware-version	Slackwarez/etc/centos-releaseCentOSz/etc/redhat-releaseRedHatz/etc/vmware-release	VMwareESXT)r   r$   
allowemptyz/etc/openwrt_releaseOpenWrt/etc/os-releaseAmazonz/etc/system-releasez/etc/alpine-releaseAlpinez/etc/arch-release	ArchlinuxSUSE/etc/SuSE-releasez/etc/gentoo-releaseGentooDebian/etc/lsb-releaseMandrivaz/etc/sourcemage-releaseSMGLz/usr/lib/os-release
ClearLinuxz/etc/coreos/update.confCoreosFlatcarNAzOracle LinuxzRed HatALTSource Mage GNU/Linux)r%   r(   r#   r6   z
Arch Linuxz\'\"\\c                    || _         y Nr   selfr   s     r   __init__zDistributionFiles.__init__a   	    r   c                    t        |      S r>   )r   )rA   r   s     r   _get_file_contentz#DistributionFiles._get_file_contentd   s    %%r   c                H    t        ||      sy| j                  |      }d|fS )Nr   )FNT)r    rE   )rA   r   r   datas       r   _get_dist_file_contentz(DistributionFiles._get_dist_file_contentg   s)    Dk:%%d+Tzr   c                   i }|j                  t        j                        }|| j                  v rF| j                  |   |v r||d<   | j                  |   |d<   d|fS |j	                         d   |d<   d|fS || j
                  v r| j
                  |   |v r	||d<   d|fS d|fS 	 d|z   }t        | |      } |||||      \  }}||fS # t        $ r,}	| j                  j                  d|	z         d|fcY d }	~	S d }	~	ww xY w)Ndistributiondistribution_file_search_stringr   TFparse_distribution_file_zexc: %s)
stripr"   STRIP_QUOTESSEARCH_STRINGr   OS_RELEASE_ALIASgetattrAttributeErrorr   debug)
rA   r$   dist_file_contentr   collected_factsdist_file_dictdistfunc_namedistfuncparsedexcs
             r   _parse_dist_filez"DistributionFiles._parse_dist_fileo   sF   -334E4R4RS4%%% !!$'+<<15~.DHDVDVW[D\@A
 '' 2C1H1H1J11M~.''4((($$T*.??15~.^++.((		)6=Mt]3H%-d4Et_%]"FN>)) 	)KKi#o..((	)s   #"C 	C;!C60C;6C;c                    t               t               t               f}|d   xs d|d   xs d|d   dn|d   d}|d   j                  d      d   xs d|d<   |S )	Nr   r:         )rK   distribution_versiondistribution_releaser`   .distribution_major_version)r   r   r   r   )rA   distdistribution_guesss      r   _guess_distributionz%DistributionFiles._guess_distribution   s{     "$<$>@Y@[\ GOt$(GOt,0GODa	
 <NNd;e;k;klo;pqr;s;{w{78!!r   c                   i }| j                         }|j                  |       | j                  D ]  }|d   }|d   }|j                  dd      }| j	                  ||      \  }}|r|r||d<   ||d<   ||d<    |S |sN| j                  ||||      \  }	}
|	sh||d<   ||d<   ||d<   |	|d	<   |j                  |
        |S  |S )
Nr$   r   r*   FrG   rK   distribution_file_pathdistribution_file_varietydistribution_file_parsed)rf   updateOSDIST_LISTgetrI   r\   )rA   dist_file_facts
dist_guessddictr$   r   r   has_dist_filerU   parsed_dist_fileparsed_dist_file_factss              r   process_dist_filesz$DistributionFiles.process_dist_files   s(    --/
z*%% 	E=D=D))L%8K/3/J/J4]h/J/i,M, 26/<@ 89?C ;<( % !7;7L7LTSdfjl{7|44  26/<@ 89 @D ;<>N :;&&'=>C	B r   c                h    i }d|vrd|fS ||d<   t        j                  d|      }|r|d   |d<   d|fS )Nr&   FrK   z\w+[.]\w+\+?r   r`   T)refindall)rA   r$   rH   r   rV   slackware_factsversions          r   !parse_distribution_file_Slackwarez3DistributionFiles.parse_distribution_file_Slackware   sQ    d"/))*.'**_d36=ajO23_$$r   c                   i }d|vrd|fS d|d<   |dk(  rht        j                  d|      }|rL|j                  d      }||d<   |j                  d      }t	        |      dkD  r|\  }	}
n|d	   d
}
}	|	|d<   |
|d<   d|fS |j                         D cg c]  }|j                         s| }}|r|d	   nd
}||d<   d|fS c c}w )Nr-   FrK   r,   VERSION_ID=\"(.*)\"r^   r`   rb   r   r:   rc   distribution_minor_versionT)rv   searchgroupr   lenisdigit)rA   r$   rH   r   rV   amazon_factsry   r`   version_datamajorminorns               r   parse_distribution_file_Amazonz0DistributionFiles.parse_distribution_file_Amazon   s    4,&&'/^$$$ii 6=G'.}}Q'7$7K34399#>|$q(#/LE5#/?D5E=B9:=B9: \!!	 #'**,>Q!))+q>G>$+gajG3:L/0\!!	 ?s   B=%B=c                    i }d|vrd|fS ||d<   t        j                  d|      }|r|j                         d   |d<   t        j                  d|      }|r|j                         d   |d<   d	|fS )
Nr+   FrK   DISTRIB_RELEASE="(.*)"r   r`   DISTRIB_CODENAME="(.*)"ra   Trv   r~   groups)rA   r$   rH   r   rV   openwrt_factsry   releases           r   parse_distribution_file_OpenWrtz1DistributionFiles.parse_distribution_file_OpenWrt   s    D -''(,n%))4d;4;NN4DQ4GM01))5t<4;NN4DQ4GM01]""r   c                "    i }d|d<   ||d<   d|fS )Nr.   rK   r`   T )rA   r$   rH   r   rV   alpine_factss         r   parse_distribution_file_Alpinez0DistributionFiles.parse_distribution_file_Alpine  s'    '/^$/3+,\!!r   c                   i }d|j                         vrd|fS |dk(  r@|j                         D ]*  }t        j                  d|      }|r#|j	                  d      j                  d      |d<   t        j                  d|      }|r:|j	                  d      |d	<   |j	                  d      j                  d
      d   |d<   d|j                         v r0t        j                  d|      }	|	s|	j                         d   |d<   d|j                         v sd|v st        j                  d|      }	|	j	                  d      r|	j	                  d      }	nd}	|	|d<   - n;|dk(  r5d|j                         v r|j                         }t        |      j                         d   }
|
j                         d   |d<   |D ]?  }t        j                  d|      }	|	s|	j                         d   j                         |d<   A nd|j                         v r|j                         }|d   j                         d   }d|v rd|d<   n	d|v rd|d<   |D ]L  }t        j                  d|      }	|	s|	j	                  d      |d<   |d	   d
z   |	j	                  d      z   |d	<   N t        j                  j                  d      r3t        j                  j                  d      j                  d      rd|d<   d|fS )NsuseFr,   
^NAME=(.*)r^   "rK   z!^VERSION_ID="?([0-9]+\.?[0-9]*)"?r`   rb   r   rc   openz!^VERSION_ID="?[0-9]+\.?([0-9]*)"?ra   
enterprise
VERSION_ID0r1   zCODENAME *= *([^
]+)ServerSLESDesktopSLEDzPATCHLEVEL = ([0-9]+)z/etc/products.d/baseproductzSLES_SAP.prodSLES_SAPT)lower
splitlinesrv   r~   r   rN   r   r   r   r   r   islinkrealpathendswith)rA   r$   rH   r   rV   
suse_factslinerK   r`   r   distdataliness               r   parse_distribution_file_SUSEz.DistributionFiles.parse_distribution_file_SUSE
  s   
%*$$$$) A!yyt<1=1C1CA1F1L1LS1QJ~.')yy1UW['\$'9M9S9STU9VJ56?S?Y?YZ[?\?b?bcf?ghi?jJ;<TZZ\) ii(LdSG=D^^=Ma=P
#9:!TZZ\1ld6J ii(LdSG}}Q'")--"2"%9@J56)A* ((%(+D1<<>qA-5^^-=a-@
>*  YD ii(?FG=D^^=Ma=P=V=V=X
#9:Y -)$Qx~~/2t#17J~.$&17J~.! ~D ii(?FG=D]]1=M
#9:=LMc=dgj=jmtmzmz{|m}=}
#9:	~ 77>>78RWW=M=MNk=l=u=u  wF  >G)3J~&Zr   c                   i }d|v sd|v rd|d<   t        j                  d|      }|r|j                         d   |d<   |d   dk(  r]d|v rY| j                  j	                  d      }|r<d	|z  }| j                  j                  |      \  }	}
}|	dk(  r|
j                         |d<   d
}t        |      }|D ]?  }t        j                  d|j                               }|s*|j                         d   |d<   A d'|fS d|v r	d|d<   d'|fS d|v r	d|d<   d'|fS |dv rMd|v sd|v rEd|v rd|d<   n	d|v rd|d<   t        j                  d|      }|r|j                         d   |d<   d'|fS d|v rwd|d<   t        j                  d|      }|r|j                         d   |d<   t        j                  d|      }|r(|j                  d      |d<   |j                  d      |d<   d'|fS d|v rd|d<   t        j                  d|      }|r=|j                  d      j                  d      \  }}}|j                  d      |d<   ||d<   t        j                  d|      }|r|j                         d   |d<   d'|fS d|v r[d|d<   t        j                  d|      }|r:|j                  d      |d<   |j                  d      j                  d      d   |d<   d'|fS d |v sd!|v sd"|v rd!|d<   t        j                  d#|      }|r|j                         d   |d<   t        j                  d|      }|r:|j                  d      |d<   |j                  d      j                  d      d   |d<   d'|fS d$|v sd%|v rd$|d<   t        j                  d#|      }|r|j                         d   |d<   t        j                  d|      }|r:|j                  d      |d<   |j                  d      j                  d      d   |d<   d'|fS d&|fS )(Nr3   RaspbianrK   zPRETTY_NAME=[^(]+ \(?([^)]+?)\)r   ra   r:   dpkgz.%s --status tzdata|grep Provides|cut -f2 -d'-'z/etc/debian_versionz(\d+)\.(\d+)r^   r}   UbuntuSteamOS)r4   r,   KaliParrotzDISTRIB_RELEASE=(.*)Devuanz'PRETTY_NAME=\"?[^(\"]+ \(?([^) \"]+)\)?r|   r`   rc   CumulusCumulus LinuxVERSION_ID=(.*)rb   zVERSION="(.*)"Mint
Linux MintUOSUosuoszVERSION_CODENAME=\"?([^\"]+)\"?DeepindeepinFT)
rv   r~   r   r   get_bin_pathr   rN   r   r   r   )rA   r$   rH   r   rV   debian_factsr   dpkg_cmdcmdr   r   r   debian_version_pathr   r   mry   r   _minor
_dummy_vers                       r   parse_distribution_file_Debianz0DistributionFiles.parse_distribution_file_Debian@  s   tzT1+3L(ii BDIG7>~~7G7J34 56$>8tCS;;33F;JXUC#';;#:#:3#?LBSQw?Byy{%;<"7%&9:H  OIIotzz|<ABAL!=>OD \!!} +3L(z \!!w $+4L(t \!!q <<&D.T\`dTd~/5^,T!/7^,ii 6=G7>~~7G7J34` \!!_ +3L(ii JDQG7>~~7G7J34ii 6=G7>}}Q7G34=D]]1=M9:N \!!M $+:L(ii 2D9G,3MM!,<,B,B3,G)vz7>}}Q7G34=B9:ii 148G7>~~7G7J348 \!!7 t^+7L(ii 6=G7>}}Q7G34=D]]1=M=S=STW=XYZ=[9:, \!!+ d]etmu}+0L(ii BDIG7>~~7G7J34ii 6=G7>}}Q7G34=D]]1=M=S=STW=XYZ=[9: \!! T!1+3L(ii BDIG7>~~7G7J34ii 6=G7>}}Q7G34=D]]1=M=S=STW=XYZ=[9: \!! ,&&r   c                    i }d|v rjd|d<   t        j                  d|      }|r|j                         d   |d<   t        j                  d|      }|r|j                         d   |d<   ||d<   d	|fS d|fS )
Nr5   rK   r   r   r`   r   ra   FTr   )rA   r$   rH   r   rV   mandriva_factsry   r   s           r    parse_distribution_file_Mandrivaz2DistributionFiles.parse_distribution_file_Mandriva  s    -7N>*ii 8$?G9@9I!9L56ii 94@G9@9I!9L56-1N>* ^## .((r   c                B   i }|j                         D ]  }t        j                  d|      }|r(|dk(  r#|j                  d      j	                  d      |d<   t        j                  d|      }|s\|d   dk(  se|j                  d      j	                  d      |d<    d|fS )	Nr   r:   r^   r   rK   z^VERSION=(.*)r`   T)r   rv   r~   r   rN   )	rA   r$   rH   r   rV   na_factsr   rK   ry   s	            r   parse_distribution_file_NAz,DistributionFiles.parse_distribution_file_NA  s    OO% 	OD99\48L+7+=+=a+@+F+Fs+K(ii6G?+ABdJ3:==3C3I3I#3N/0	O X~r   c                    i }t               }|j                         dk(  rE|sd|fS t        j                  d|      }|r#|j	                  d      j                  d      |d<   d|fS d|fS )NcoreosFz^GROUP=(.*)r^   r   ra   T)r   r   rv   r~   r   rN   )rA   r$   rH   r   rV   coreos_factsdistror   s           r   parse_distribution_file_Coreosz0DistributionFiles.parse_distribution_file_Coreos  sy    !#<<>X% l**iit4G7>}}Q7G7M7Mc7R34 \!! ,&&r   c                <   i }t               }|j                         dk7  rd|fS |sd|fS t        j                  d|      }|rX|j	                  d      j                  d      j                  d      d   |d<   |j	                  d      j                  d      |d	<   d
|fS )NflatcarFzVERSION=(.*)r^   r   rb   r   rc   r`   T)r   r   rv   r~   r   rN   r   )rA   r$   rH   r   rV   flatcar_factsr   ry   s           r   parse_distribution_file_Flatcarz1DistributionFiles.parse_distribution_file_Flatcar  s    !#<<>Y&-''-''))ND1:A--:J:P:PQT:U:[:[\_:`ab:cM674;MM!4D4J4J34OM01]""r   c                   i }d|j                         vrd|fS t        j                  d|      }|r/d|j                         d   vrd|fS |j                         d   |d<   t        j                  d|      }|r,|j                         d   |d<   |j                         d   |d	<   t        j                  d
|      }|r|j                         d   |d<   d|fS )N
clearlinuxFzNAME="(.*)"zClear Linuxr   rK   r   rc   r`   zID=(.*)ra   T)r   rv   r~   r   )	rA   r$   rH   r   rV   clear_factspnamery   r   s	            r   "parse_distribution_file_ClearLinuxz4DistributionFiles.parse_distribution_file_ClearLinux  s    tzz|++%%		-.ELLN1$55k))*/,,.*;K'))-t48?8H8KK4529..2B12EK./))It,29..2B12EK./[  r   c                B    i }d|v r	d|d<   d|fS d|v r	d|d<   d|fS d|fS )	NzCentOS StreamStreamra   TzTencentOS Server	TencentOSrK   Fr   )rA   r$   rH   r   rV   centos_factss         r   parse_distribution_file_CentOSz0DistributionFiles.parse_distribution_file_CentOS  sM    d"3;L/0%%%+6L(%%l""r   NF)__name__
__module____qualname____doc__rl   rP   rQ   rO   rB   rE   rI   r\   rf   rt   rz   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r"   r"   0   sT   b )*=&>);?&9&9&4P';"H5&9&9$kN"K8"F3$f5&9"H5#X6#Z8*F;&=*H="I6"D1/K6 &'	M 	\ L&#$X")X%"2#"4 lT"l$ 	"$#"!&#r   r"   c                  H   e Zd ZdZi dg ddg ddg ddg d	d
d
dgdg dddgddgddgdddgddgddgddgddgdddgdddgdg dd d giZi Zej                         D ]  \  ZZeD ]  Z	eee	<   	  d! Z
d" Zd# Zd$ Zd% Zd& Zd' Zd( Zd) Zd* Zd+ Zy,)-DistributionaH  
    This subclass of Facts fills the distribution, distribution_version and distribution_release variables

    To do so it checks the existence and content of typical files in /etc containing distribution information

    This is unit tested. Please extend the tests to cover all distributions if you have them available.
    r(   )r(   RHELFedorar'   
ScientificSLCAscendos
CloudLinuxPSBMr%   OVSOELr-   Amzn	Virtuozzo	XenServerAlibabaEulerOS	openEuler	AlmaLinuxRockyr   	EuroLinuxzKylin Linux Advanced ServerMIRACLEr3   )r3   r   r   NeonzKDE neonr   r   r   r   r   zPop!_OSr   zPardus GNU/Linuxr   r   OSMCSuse)
SuSEr   r   openSUSEzopenSUSE Tumbleweedr   
SUSE_LINUXzopenSUSE LeapzALP-DolomitezSL-Micror/   )r/   AntergosManjaroMandraker5   Solaris)r  NexentaOmniOSOpenIndianaSmartOSr&   r#   r6   r2   Funtoor.   AIXHP-UXHPUXDarwinMacOSXFreeBSDTrueOSr7   zClear Linux OSzClear Linux Mix	DragonFly)DragonflyBSDDragonFlyBSDzGentoo/DragonflyBSDzGentoo/DragonFlyBSDNetBSDc                    || _         y r>   r?   r@   s     r   rB   zDistribution.__init__  rC   r   c                   i }t        j                         }||d<   t        j                         |d<   t        j                         |d<   d}||v r:|j	                  dd      }t        | d|z         } |       }|j                  |       n<|dk(  r7t        | j                  	      }|j                         }|j                  |       |d   }	| j                  j                  |	d       xs |	|d
<   |S )NrK   ra   r`   )r  r	  r  r  OpenBSDSunOSr  r  - get_distribution_Linuxr?   	os_family)platformsystemr   ry   replacerR   rk   r"   r   rt   	OS_FAMILYrm   )
rA   distribution_factsr  systems_implementedcleanednamerY   dist_func_factsdistribution_filesrn   r   s
             r   get_distribution_factsz#Distribution.get_distribution_facts!  s    
 "-3>*5=5E5E5G125=5E5E5G12n(( ..b1Kt%8;%FGH&jO%%o6w!2$++!F 1CCEO%%o6#N3 +/..*<*<VT*J*Tf;'!!r   c                    i }| j                   j                  d      \  }}}|j                  d      }|d   |d<   t        |      dkD  r|d   d|d   |d<   |d   |d<   |S |d   |d<   |S )Nz/usr/bin/oslevelrb   r   rc   r^   r`   ra   )r   r   r   r   )rA   	aix_factsr   r   r   rH   s         r   get_distribution_AIXz!Distribution.get_distribution_AIXC  s    	{{../ABCyy~26q'	./t9q=;?7DG0LI,-04QI,-  15QI,-r   c                    i }| j                   j                  dd      \  }}}t        j                  d|      }|r,|j	                         d   |d<   |j	                         d   |d<   |S )	Nz7/usr/sbin/swlist |egrep 'HPUX.*OE.*[AB].[0-9]+\.[0-9]+'T)use_unsafe_shellz+HPUX.*OE.*([AB].[0-9]+\.[0-9]+)\.([0-9]+).*r   r`   r^   ra   )r   r   rv   r~   r   )rA   
hpux_factsr   r   r   rH   s         r   get_distribution_HPUXz"Distribution.get_distribution_HPUXO  su    
{{../i  }A.  BCyyGM15q1AJ-.15q1AJ-.r   c                    i }d|d<   | j                   j                  d      \  }}}|j                         d   }|r|j                  d      d   |d<   ||d<   |S )	Nr  rK   z /usr/bin/sw_vers -productVersionrb   r   rc   r`   )r   r   r   )rA   darwin_factsr   r   r   rH   s         r   get_distribution_Darwinz$Distribution.get_distribution_DarwinX  sg    '/^${{../QRCyy{29=C9KL5637L/0r   c                   i }t        j                         |d<   t        j                  d|d         }dt        j                         v rd|d<   |r<|j                  d      |d<   |j                  d      d|j                  d	      |d
<   |S )Nra   z5(\d+)\.(\d+)-(RELEASE|STABLE|CURRENT|RC|PRERELEASE).*trueosr  rK   r^   rc   rb   r_   r`   )r  r   rv   r~   ry   r   )rA   freebsd_factsrH   s      r   get_distribution_FreeBSDz%Distribution.get_distribution_FreeBSDb  s    080@0@0B,-yyQS`awSxyx'')),4M.):>**Q-M67?Czz!}djjYZm4\M01r   c                    i }t        j                         |d<   | j                  j                  d      \  }}}t	        j
                  d|      }|r|j                         d   |d<   |S d|d<   |S )Nr`   /sbin/sysctl -n kern.versionz OpenBSD\s[0-9]+.[0-9]+-(\S+)\s.*r   ra   r   )r  r   r   r   rv   matchr   )rA   openbsd_factsr   r   r   r7  s         r   get_distribution_OpenBSDz%Distribution.get_distribution_OpenBSDm  s{    080@0@0B,-{{../MNC<cB49LLN14EM01  5>M01r   c                    dt        j                         i}| j                  j                  d      \  }}}t	        j
                  d|      }|r-|j                  d      |d<   d|j                         d d z  |d<   |S )	Nra   r6  z/v(\d+)\.(\d+)\.(\d+)-(RELEASE|STABLE|CURRENT).*r^   rc   z%s.%s.%s   r`   )r  r   r   r   rv   r~   r   r   )rA   dragonfly_factsr   r   dummyr7  s         r   get_distribution_DragonFlyz'Distribution.get_distribution_DragonFlyx  s    "H$4$4$6
 001OPC		LcR<AKKNO896@5<<>RTSTCU6UO23r   c                @   i }t        j                         }||d<   | j                  j                  d      \  }}}t	        j
                  d|      }|r/|j                  d      |d<   d|j                         d d z  |d<   |S |j                  d	      d
   |d<   ||d<   |S )Nra   r6  z%NetBSD\s(\d+)\.(\d+)\s\((GENERIC)\).*r^   rc   z%s.%sr_   r`   rb   r   )	r  r   r   r   rv   r7  r   r   r   )rA   netbsd_factsplatform_releaser   r   r=  r7  s          r   get_distribution_NetBSDz$Distribution.get_distribution_NetBSD  s    #++-/?+,001OPCA3G9>QL563:U\\^BQ=O3OL/0  :J9O9OPS9TUV9WL563CL/0r   c                    i }d|d<   |S )Nr<   rK   r   )rA   
smgl_factss     r   get_distribution_SMGLz"Distribution.get_distribution_SMGL  s    
%<
>"r   c           	        i }t        d      j                         d   }d|v rt        | j                  dg      }d}d|v r|j	                  dd      }d}|j                         d   |d	<   |j                         d
   |d<   ||z   |d<   |j                  d      d
   j                         |d<   |S t        | j                  dg      }d }d|v r|d|d	<   t        d      rt        t        d      j                         D cg c]  }d|v s|j                  dd
       c}      }d|v rw|j                  d      j                         d   }nTd|v rd|d	<   nJd|v rd|d	<   |j                         d   }n-|+d|v r'd|d	<   |j                         d   j                  d      }|j                  d	d      dv rD|j                         |d<   |||d<   |S |$|j                         d   j                         |d<   |S |S c c}w )Nz/etc/releaser   r  z-r)r   r  zOracle SolariszOracle rK   r^   r`   ra   rb   rc   -vr  z/etc/productz: Imager.  r  r  
NexentaOS_r  v)r  r  r  r  )r   r   r   r   r  r   rstripr    dictrm   lstriprN   )	rA   sunos_factsrH   uname_r
ora_prefixuname_vr`   lproduct_datas	            r   get_distribution_SunOSz#Distribution.get_distribution_SunOS  s0   /::<Q?D6:GJ4'||Ir2&
*.**,q/K'26**,q/K./2<t2CK./8?c8J18M8T8T8VK45DKKv6#*3K'N+#?OP^?_?j?j?l$z!ptxypyQWWT1%5$z{l*+7+;+;G+D+J+J+LR+P(d"*7K'*2K'#'::<#3  \W%<*3K'#'::<#3#:#:3#? ??>2.2aa26**,K./#/6J23  $6=6H6H6J16M6S6S6U23) %{s   >	G8G8N)r   r   r   r   OS_FAMILY_MAPr  itemsfamilynamesr$   rB   r%  r(  r,  r0  r4  r9  r>  rB  rE  rT  r   r   r   r   r     s   -X  W -
   b-  e- !"F-  *j!9-  Z- !;--  *- fX-  (3!-" z#-$ UG%-& vh'-( z)-* H 5+-, "$46G#H--. !"p/-0 z1-M4 I&,,. % 	%D$IdO	%% "D
			
,r   r   c                  ,    e Zd ZdZ eg d      ZddZy)DistributionFactCollectorrK   )r`   ra   rc   r  Nc                V    |xs i }i }|s|S t        |      }|j                         }|S )Nr?   )r   r%  )rA   r   rV   
facts_dictrK   distro_factss         r   collectz!DistributionFactCollector.collect  s8    )/R
#62#::<r   )NN)r   r   r   r$   set	_fact_idsr^  r   r   r   rZ  rZ    s    D " #I
	r   rZ  )rG  r   )
__future__r   r   r  rv   "ansible.module_utils.compat.typingmodule_utilscompattypingt$ansible.module_utils.common.sys_infor   r   r    ansible.module_utils.facts.utilsr   r   $ansible.module_utils.facts.collectorr	   r   r    r"   objectr   rZ  r   r   r   <module>rk     s\    # 	  	 . .  M B"B# B#JM6 M` 1 r   