Spamworldpro Mini Shell
Spamworldpro


Server : Apache/2.4.52 (Ubuntu)
System : Linux webserver 6.8.0-49-generic #49~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Wed Nov 6 17:42:15 UTC 2 x86_64
User : www-data ( 33)
PHP Version : 8.1.2-1ubuntu2.21
Disable Function : NONE
Directory :  /lib/python3/dist-packages/cloudinit/sources/helpers/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //lib/python3/dist-packages/cloudinit/sources/helpers/__pycache__/azure.cpython-310.pyc
o

}��f\��@s�ddlZddlZddlZddlZddlZddlZddlZddlmZddl	m	Z	ddl
mZm
Z
ddlm
Z
mZmZmZmZddlmZddlmZddlmZmZmZmZmZmZdd	lmZdd
lm Z e�!e"�Z#dZ$dZ%d
Z&dZ'dZ(ej)dddd�Z*ed�Z+de
de+fde
de+ffdd�Z,e,dd��Z-e,dd��Z.dd�de/dej0fd d!�Z1d"d#�Z2e,d$d%��Z3ed&d'��Z4e,dd(d)d*�d+e/d,e5d-ee6d.e7d/e7dej8fd0d1��Z9d2e/d3e/d4e/de6fd5d6�Z:Gd7d8�d8�Z;Gd9d:�d:e<�Z=Gd;d<�d<�Z>Gd=d>�d>�Z?Gd?d@�d@�Z@GdAdB�dB�ZAe,		dSdCe/dDejBdEeee/dFee/fdGdH��ZCe,dCe/dIdJfdKdL��ZDdMdN�ZEGdOdP�dPe<�ZFGdQdR�dR�ZGdS)T�N)�contextmanager)�datetime)�sleep�time)�Callable�List�Optional�TypeVar�Union)�ElementTree)�escape)�distros�subp�
temp_utils�
url_helper�util�version)�events)�errorsz
168.63.129.16�boot-telemetryzsystem-info�
diagnostic�
compressedzazure-dsz initialize reporter for azure dsT)�name�description�reporting_enabled�T�func.�returncs�fdd�}|S)NcsFtj�j�jtd���|i|��Wd�S1swYdS)N�rr�parent)r�ReportEventStack�__name__�azure_ds_reporter)�args�kwargs�r��A/usr/lib/python3/dist-packages/cloudinit/sources/helpers/azure.py�impl*s�$�z)azure_ds_telemetry_reporter.<locals>.implr&)rr(r&r%r'�azure_ds_telemetry_reporter)sr)c
Cs�t��std��t�d�z
tt��tt���}Wnt	y+}ztd�|�d}~wwz*t
j
gd�dd�\}}d}|rGd|vrG|�d�d	}|sMtd
��|t|�d}Wn&t
jyj}ztd|�|�d}~wt	y|}ztd
|�|�d}~wwz*t
j
gd�dd�\}}d}|r�d|vr�|�d�d	}|s�td��|t|�d}Wn&t
jy�}ztd|�|�d}~wt	y�}ztd|�|�d}~wwt
�tddt�|���dt�|���dt�|���dft
j�}t
�|�|S)z[Report timestamps related to kernel initialization and systemd
    activation of cloud-initz1distro not using systemd, skipping boot telemetryzCollecting boot telemetryz*Failed to determine kernel start timestampN)�	systemctl�show�-p�UserspaceTimestampMonotonicT)�capture�=�z8Failed to parse UserspaceTimestampMonotonic from systemdi@Bz-Failed to get UserspaceTimestampMonotonic: %sz<Failed to parse UserspaceTimestampMonotonic from systemd: %s)r*r+zcloud-init-localr,�InactiveExitTimestampMonotonicz;Failed to parse InactiveExitTimestampMonotonic from systemdz0Failed to get InactiveExitTimestampMonotonic: %sz?Failed to parse InactiveExitTimestampMonotonic from systemd: %srz5kernel_start=%s user_start=%s cloudinit_activation=%s�Z)r
�uses_systemd�RuntimeError�LOG�debug�floatrr�uptime�
ValueErrorr�split�ProcessExecutionErrorr�ReportingEvent�BOOT_EVENT_TYPEr�utcfromtimestamp�	isoformat�DEFAULT_EVENT_ORIGIN�report_event)�kernel_start�e�out�_�tsm�
user_start�cloudinit_activation�evtr&r&r'�get_boot_telemetry5s�

��
���������
�
������������
rJc
Csbt��}t�tddt��|d|d|dd|dd|dd|d	ftj�}t�|�|S)
z%Collect and report system informationzsystem informationztcloudinit_version=%s, kernel_version=%s, variant=%s, distro_name=%s, distro_version=%s, flavor=%s, python_version=%s�release�variant�distrr0��python)	r�system_inforr<�SYSTEMINFO_EVENT_TYPEr�version_stringr@rA)�inforIr&r&r'�get_system_info�s$


���
rT��logger_func�msgcCs6t|�r||�t�td|tj�}tj|dhd�|S)zReport a diagnostic eventzdiagnostic message�log��excluded_handler_types)�callablerr<�DIAGNOSTIC_EVENT_TYPEr@rA)rWrVrIr&r&r'�report_diagnostic_event�s�r]cCsNt�t�|��}d|�d�d�}t�t|t�	|�tj
�}tj|hd�d�|S)zReport a compressed eventzgz+b64�ascii)�encoding�data>rX�print�webhookrY)�base64�encodebytes�zlib�compress�decoderr<�COMPRESSED_EVENT_TYPE�json�dumpsr@rA)�
event_name�
event_content�compressed_data�
event_datarIr&r&r'�report_compressed_event�s���roc
Csnt�d�ztjdgddd�\}}td|�WdSty6}ztdt|�tjd�WYd}~dSd}~ww)	zReport dmesg to KVP.zDumping dmesg log to KVP�dmesgFT)rgr.z$Exception when dumping dmesg log: %srUN)r5r6rro�	Exceptionr]�repr�warning)rDrE�exr&r&r'�report_dmesg_to_kvp�s

���ruc	cs@�t��}t�tj�|��zdVWt�|�dSt�|�w�N)�os�getcwd�chdir�path�
expanduser)�newdir�prevdirr&r&r'�cd�s�r~��)r`�retry_sleep�timeout_minutes�url�headersr`r�r�c	
Cs�|dt�}d}d}|sT|d7}ztj|||dd�}Wn7tjyM}z$td||||j|jftjd�t�||ksBd	t	|�vrC�WYd}~nd}~wwt
|�|r
td
||ftjd�|S)z�Readurl wrapper for querying wireserver.

    :param retry_sleep: Time to sleep before retrying.
    :param timeout_minutes: Retry up to specified number of minutes.
    :raises UrlError: on error fetching data.
    �<rNr0)rr�)r�r`�timeoutzdFailed HTTP request with Azure endpoint %s during attempt %d with exception: %s (code=%r headers=%r)rUzNetwork is unreachablez@Successful HTTP request with Azure endpoint %s after %d attempts)rr�readurl�UrlErrorr]�coder�r5r6�strr)	r�r�r`r�r�r��attempt�responserCr&r&r'�http_with_retries�s@���
������r��username�hostname�
disableSshPwdcCs$t�d�}|j|||d�}|�d�S)Na.        <ns0:Environment xmlns:ns0="http://schemas.dmtf.org/ovf/environment/1"
         xmlns:ns1="http://schemas.microsoft.com/windowsazure"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
          <ns1:ProvisioningSection>
            <ns1:Version>1.0</ns1:Version>
            <ns1:LinuxProvisioningConfigurationSet>
              <ns1:ConfigurationSetType>LinuxProvisioningConfiguration
              </ns1:ConfigurationSetType>
              <ns1:UserName>{username}</ns1:UserName>
              <ns1:DisableSshPasswordAuthentication>{disableSshPwd}
              </ns1:DisableSshPasswordAuthentication>
              <ns1:HostName>{hostname}</ns1:HostName>
            </ns1:LinuxProvisioningConfigurationSet>
          </ns1:ProvisioningSection>
          <ns1:PlatformSettingsSection>
            <ns1:Version>1.0</ns1:Version>
            <ns1:PlatformSettings>
              <ns1:ProvisionGuestAgent>true</ns1:ProvisionGuestAgent>
            </ns1:PlatformSettings>
          </ns1:PlatformSettingsSection>
        </ns0:Environment>
        )r�r�r��utf-8)�textwrap�dedent�format�encode)r�r�r��OVF_ENV_TEMPLATE�retr&r&r'�build_minimal_ovfs��
r�c@sLeZdZddd�Zdd�Zddejfdd	�Z	
ddee	dejfdd
�Z
d
S)�AzureEndpointHttpClient�WALinuxAgentz
2012-11-30)zx-ms-agent-namezx-ms-versioncCsd|d�|_dS)N�DES_EDE3_CBC)zx-ms-cipher-namez!x-ms-guest-agent-public-x509-cert)�extra_secure_headers)�self�certificater&r&r'�__init__Bs�z AzureEndpointHttpClient.__init__FrcCs,|j}|r|j��}|�|j�t||d�S)N)r�)r��copy�updater�r�)r�r��securer�r&r&r'�getHs

zAzureEndpointHttpClient.getNr`cCs0|j}|dur|j��}|�|�t|||d�S)N)r`r�)r�r�r�r�)r�r�r`�
extra_headersr�r&r&r'�postOs


zAzureEndpointHttpClient.post)F�NN)r!�
__module__�__qualname__r�r�r�UrlResponser�r�bytesr�r&r&r&r'r�<s����r�c@seZdZdZdS)�InvalidGoalStateXMLExceptionz9Raised when GoalState XML is invalid or has missing data.N)r!r�r��__doc__r&r&r&r'r�Ysr�c	@s:eZdZ	ddeeefdededdfdd�Zd	d
�Z	dS)�	GoalStateT�unparsed_xml�azure_endpoint_client�need_certificaterNc
Cs ||_zt�|�|_Wntjy"}z
td|tjd��d}~ww|�d�|_	|�d�|_
|�d�|_dD]}t||�durOd|}t|tjd�t
|��q7d|_|�d	�}|dur�|r�tjd
dtd��|jj|d
d�j|_|jdurzt
d��Wd�dS1s�wYdSdSdS)ahParses a GoalState XML string and returns a GoalState object.

        @param unparsed_xml: string representing a GoalState XML.
        @param azure_endpoint_client: instance of AzureEndpointHttpClient.
        @param need_certificate: switch to know if certificates is needed.
        @return: GoalState object representing the GoalState XML string.
        z!Failed to parse GoalState XML: %srUNz./Container/ContainerIdz4./Container/RoleInstanceList/RoleInstance/InstanceIdz
./Incarnation)�container_id�instance_id�incarnationzMissing %s in GoalState XMLzD./Container/RoleInstanceList/RoleInstance/Configuration/Certificateszget-certificates-xmlzget certificates xmlrT)r�z/Azure endpoint returned empty certificates xml.)r�r�
fromstring�root�
ParseErrorr]r5rs�_text_from_xpathr�r�r��getattrr��certificates_xmlrr r"r��contents)r�r�r�r�rC�attrrWr�r&r&r'r�^sX
���������
��"��zGoalState.__init__cCs|j�|�}|dur
|jSdSrv)r��find�text)r��xpath�elementr&r&r'r��szGoalState._text_from_xpath)T)
r!r�r�r
r�r�r��boolr�r�r&r&r&r'r�]s�
���
�7r�c@s�eZdZddd�Zdd�Zdd�Zedd	��Zejd
d	��Ze	dd��Z
ee	d
d���Ze	dd��Z
e	dd��Ze	dd��Ze	dd��ZdS)�OpenSSLManagerzTransportPrivate.pemzTransportCert.pem)�private_keyr�cCst��|_d|_|��dSrv)r�mkdtemp�tmpdir�_certificate�generate_certificate�r�r&r&r'r��s
zOpenSSLManager.__init__cCst�|j�dSrv)r�del_dirr�r�r&r&r'�clean_up�szOpenSSLManager.clean_upcCs|jSrv�r�r�r&r&r'r��szOpenSSLManager.certificatecCs
||_dSrvr�)r��valuer&r&r'r��s
cCs�t�d�|jdurt�d�dSt|j��:t�ddddddd	d
ddd
|jdd|jdg�d}t|jd�D]}d|vrE||��7}q9||_Wd�n1sSwYt�d�dS)Nz7Generating certificate for communication with fabric...zCertificate already generated.�openssl�reqz-x509z-nodesz-subjz/CN=LinuxTransportz-days�32768z-newkeyzrsa:2048z-keyoutr�z-outr���CERTIFICATEzNew certificate generated.)	r5r6r�r~r�r�certificate_names�open�rstrip)r�r��liner&r&r'r��s<


����z#OpenSSLManager.generate_certificatecCs"ddd|g}tj||d�\}}|S)Nr��x509z-noout�r`)r)�action�cert�cmd�resultrEr&r&r'�_run_x509_action�szOpenSSLManager._run_x509_actioncCs*|�d|�}gd�}tj||d�\}}|S)Nz-pubkey)z
ssh-keygenz-iz-m�PKCS8z-fz
/dev/stdinr�)r�r)r�r��pub_key�
keygen_cmd�ssh_keyrEr&r&r'�_get_ssh_key_from_cert�sz%OpenSSLManager._get_ssh_key_from_certcCs6|�d|�}|�d�}||dd��d�}d�|�S)aopenssl x509 formats fingerprints as so:
        'SHA1 Fingerprint=07:3E:19:D1:4D:1C:79:92:24:C6:A0:FD:8D:DA:\
        B6:A8:BF:27:D4:73\n'

        Azure control plane passes that fingerprint as so:
        '073E19D14D1C799224C6A0FD8DDAB6A8BF27D473'
        z-fingerprintr/r0����:r�)r�r�r:�join)r�r��raw_fp�eq�octetsr&r&r'�_get_fingerprint_from_cert�s	

z)OpenSSLManager._get_fingerprint_from_certcCs�t�|��d�}|j}ddddd|�d�g}t|j��tjdjd
i|j	��d	d
�
|�d�\}}Wd�|S1s;wY|S)z�Decrypt the certificates XML document using the our private key;
        return the list of certs and private keys contained in the doc.
        z.//DatasMIME-Version: 1.0s<Content-Disposition: attachment; filename="Certificates.p7m"s?Content-Type: application/x-pkcs7-mime; name="Certificates.p7m"s!Content-Transfer-Encoding: base64�r�zuopenssl cms -decrypt -in /dev/stdin -inkey {private_key} -recip {certificate} | openssl pkcs12 -nodes -password pass:T�
)�shellr`Nr&)rr�r�r�r�r~r�rr�r�r�)r�r��tag�certificates_content�linesrDrEr&r&r'�_decrypt_certs_from_xml�s2
�����
��z&OpenSSLManager._decrypt_certs_from_xmlc	Csv|�|�}g}i}|��D]+}|�|�t�d|�rg}q
t�d|�r8d�|�}|�|�}|�|�}|||<g}q
|S)z�Given the Certificates XML document, return a dictionary of
        fingerprints and associated SSH keys derived from the certs.z[-]+END .*?KEY[-]+$z[-]+END .*?CERTIFICATE[-]+$�
)r��
splitlines�append�re�matchr�r�r�)	r�r�rD�current�keysr�r�r��fingerprintr&r&r'�parse_certificates	s




�z!OpenSSLManager.parse_certificatesN)r!r�r�r�r�r��propertyr��setterr)r��staticmethodr�r�r�r�r�r&r&r&r'r��s.�





r�c@s�eZdZe�d�Ze�d�ZdZdZdZ	dZ
deded	e
d
dfdd
�Zeddd��Zede
d
dfdd��Z		dde
de
de
de
d
ef
dd�Zeded
dfdd��ZdS)�GoalStateHealthReportera�        <?xml version="1.0" encoding="utf-8"?>
        <Health xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns:xsd="http://www.w3.org/2001/XMLSchema">
          <GoalStateIncarnation>{incarnation}</GoalStateIncarnation>
          <Container>
            <ContainerId>{container_id}</ContainerId>
            <RoleInstanceList>
              <Role>
                <InstanceId>{instance_id}</InstanceId>
                <Health>
                  <State>{health_status}</State>
                  {health_detail_subsection}
                </Health>
              </Role>
            </RoleInstanceList>
          </Container>
        </Health>
        z�        <Details>
          <SubStatus>{health_substatus}</SubStatus>
          <Description>{health_description}</Description>
        </Details>
        �Ready�NotReady�ProvisioningFailedi�
goal_stater��endpointrNcCs||_||_||_dS)a?Creates instance that will report provisioning status to an endpoint

        @param goal_state: An instance of class GoalState that contains
            goal state info such as incarnation, container id, and instance id.
            These 3 values are needed when reporting the provisioning status
            to Azure
        @param azure_endpoint_client: Instance of class AzureEndpointHttpClient
        @param endpoint: Endpoint (string) where the provisioning status report
            will be sent to
        @return: Instance of class GoalStateHealthReporter
        N)�_goal_state�_azure_endpoint_client�	_endpoint)r�r�r�rr&r&r'r�Ds
z GoalStateHealthReporter.__init__c
Csv|j|jj|jj|jj|jd�}t�d�z|j|d�Wnt	y3}z
t
d|tjd��d}~wwt�d�dS)N)r�r�r��statusz Reporting ready to Azure fabric.��documentz#exception while reporting ready: %srUzReported ready to Azure fabric.)
�build_reportrr�r�r��PROVISIONING_SUCCESS_STATUSr5r6�_post_health_reportrqr]�errorrS)r�rrCr&r&r'�send_ready_signalYs$�
���z)GoalStateHealthReporter.send_ready_signalrc
Csv|j|jj|jj|jj|j|j|d�}z|j|d�Wnty3}zd|}t	|t
jd��d}~wwt
�d�dS)N)r�r�r�r�	substatusrrz%exception while reporting failure: %srUz!Reported failure to Azure fabric.)
rrr�r�r��PROVISIONING_NOT_READY_STATUS�PROVISIONING_FAILURE_SUBSTATUSr	rqr]r5r
rs)r�rrrCrWr&r&r'�send_failure_signalms"���z+GoalStateHealthReporter.send_failure_signalr�r�r�rc	Csbd}|dur|jjt|�t|d|j��d�}|jjtt|��t|�t|�t|�|d�}|�d�S)Nr�)�health_substatus�health_description)r�r�r��
health_status�health_detail_subsectionr�)�%HEALTH_DETAIL_SUBSECTION_XML_TEMPLATEr�r�"HEALTH_REPORT_DESCRIPTION_TRIM_LEN�HEALTH_REPORT_XML_TEMPLATEr�r�)	r�r�r�r�rrr�
health_detail�
health_reportr&r&r'r�s 	��
�
z$GoalStateHealthReporter.build_reportrcCsBtd�t�d�d�|j�}|jj||ddid�t�d�dS)Nrz&Sending health report to Azure fabric.zhttp://{}/machine?comp=healthzContent-Typeztext/xml; charset=utf-8)r`r�z/Successfully sent health report to Azure fabric)rr5r6r�rrr�)r�rr�r&r&r'r	�s
�z+GoalStateHealthReporter._post_health_report)rNr�)r!r�r�r�r�rrrr
rrr�r�r�r�r)rrr�rr	r&r&r&r'r�sN��	���
������
�r�c@s�eZdZdefdd�Zdd�Zedejddfd	d
��Z	e	ddejde
eefdd��Zed
eddfdd��Z
ededefdd��Zedefdd��Zedeeefdedefdd��Zedededefdd��Zedededefdd��ZdS) �WALinuxAgentShimrcCs||_d|_d|_dSrv)r�openssl_managerr�)r�rr&r&r'r��s
zWALinuxAgentShim.__init__cCs|jdur|j��dSdSrv)rr�r�r&r&r'r��s
�zWALinuxAgentShim.clean_up�distrorNc
CsTt�d�z|�|�WdSty)}ztd|tjd�WYd}~dSd}~ww)NzEjecting the provisioning isoz(Failed ejecting the provisioning iso: %srU)r5r6�eject_mediarqr]r
)r��iso_devrrCr&r&r'�	eject_iso�s
���zWALinuxAgentShim.eject_isocCs�d}|jdur|durt�|_|jj}|jdurt|�|_|j|dud�}d}|dur1|�||�}t||j|j�}|durD|j	||d�|�
�|S)a�Gets the VM's GoalState from Azure, uses the GoalState information
        to report ready/send the ready signal/provisioning complete signal to
        Azure, and then uses pubkey_info to filter and obtain the user's
        pubkeys from the GoalState.

        @param pubkey_info: List of pubkey values and fingerprints which are
            used to filter and obtain the user's pubkey values from the
            GoalState.
        @return: The list of user's authorized pubkey values.
        N�r�)r)rr�r�r�r��_fetch_goal_state_from_azure�_get_user_pubkeysr�rrr)r�r�pubkey_infor�http_client_certificater��ssh_keys�health_reporterr&r&r'�"register_with_azure_and_fetch_data�s*
��
�z3WALinuxAgentShim.register_with_azure_and_fetch_datarcCs@|jdur
td�|_|jdd�}t||j|j�}|j|d�dS)z�Gets the VM's GoalState from Azure, uses the GoalState information
        to report failure/send provisioning failure signal to Azure.

        @param: user visible error description of provisioning failure.
        NFr�r)r�r�r r�rr)r�rr�r%r&r&r'�&register_with_azure_and_report_failure�s


�z7WALinuxAgentShim.register_with_azure_and_report_failurer�cCs|��}|�||�S)aFetches the GoalState XML from the Azure endpoint, parses the XML,
        and returns a GoalState object.

        @param need_certificate: switch to know if certificates is needed.
        @return: GoalState object representing the GoalState XML
        )�"_get_raw_goal_state_xml_from_azure�_parse_raw_goal_state_xml)r�r��unparsed_goal_state_xmlr&r&r'r s
�z-WALinuxAgentShim._fetch_goal_state_from_azurec
Cs�t�d�d�|j�}z tjddtd��|j�|�}Wd�n1s%wYWnt	yA}z
t
d|tjd��d}~wwt�d	�|j
S)
z�Fetches the GoalState XML from the Azure endpoint and returns
        the XML as a string.

        @return: GoalState XML string
        zRegistering with Azure...z!http://{}/machine/?comp=goalstatezgoalstate-retrievalzretrieve goalstaterNz9failed to register with Azure and fetch GoalState XML: %srUz#Successfully fetched GoalState XML.)r5rSr�rrr r"r�r�rqr]rsr6r�)r�r�r�rCr&r&r'r)s.
�������
z3WALinuxAgentShim._get_raw_goal_state_xml_from_azurer+c
Cstz	t||j|�}Wnty}z
td|tjd��d}~wwd�d|jd|jd|j	g�}t|tj
d�|S)aParses a GoalState XML string and returns a GoalState object.

        @param unparsed_goal_state_xml: GoalState XML string
        @param need_certificate: switch to know if certificates is needed.
        @return: GoalState object representing the GoalState XML
        z"Error processing GoalState XML: %srUNz, zGoalState XML container id: %szGoalState XML instance id: %szGoalState XML incarnation: %s)r�r�rqr]r5rsr�r�r�r�r6)r�r+r�r�rCrWr&r&r'r*0s,������z*WALinuxAgentShim._parse_raw_goal_state_xmlr�r"cCsHg}|jdur"|dur"|jdur"t�d�|j�|j�}|�||�}|S)a�Gets and filters the VM admin user's authorized pubkeys.

        The admin user in this case is the username specified as "admin"
        when deploying VMs on Azure.
        See https://docs.microsoft.com/en-us/cli/azure/vm#az-vm-create.
        cloud-init expects a straightforward array of keys to be dropped
        into the admin user's authorized_keys file. Azure control plane exposes
        multiple public keys to the VM via wireserver. Select just the
        admin user's key(s) and return them, ignoring any other certs.

        @param goal_state: GoalState object. The GoalState object contains
            a certificate XML, which contains both the VM user's authorized
            pubkeys and other non-user pubkeys, which are used for
            MSI and protected extension handling.
        @param pubkey_info: List of VM user pubkey dicts that were previously
            obtained from provisioning data.
            Each pubkey dict in this list can either have the format
            pubkey['value'] or pubkey['fingerprint'].
            Each pubkey['fingerprint'] in the list is used to filter
            and obtain the actual pubkey value from the GoalState
            certificates XML.
            Each pubkey['value'] requires no further processing and is
            immediately added to the return list.
        @return: A list of the VM user's authorized pubkey values.
        Nz/Certificate XML found; parsing out public keys.)r�rr5r6r��_filter_pubkeys)r�r�r"r$�keys_by_fingerprintr&r&r'r!Rs


�z"WALinuxAgentShim._get_user_pubkeysr-cCs|g}|D]7}d|vr|dr|�|d�qd|vr5|dr5|d}||vr.|�||�qt�d|�qt�d|�q|S)a8Filter and return only the user's actual pubkeys.

        @param keys_by_fingerprint: pubkey fingerprint -> pubkey value dict
            that was obtained from GoalState Certificates XML. May contain
            non-user pubkeys.
        @param pubkey_info: List of VM user pubkeys. Pubkey values are added
            to the return list without further processing. Pubkey fingerprints
            are used to filter and obtain the actual pubkey values from
            keys_by_fingerprint.
        @return: A list of the VM user's authorized pubkey values.
        r�r�zIovf-env.xml specified PublicKey fingerprint %s not found in goalstate XMLzFovf-env.xml specified PublicKey with neither value nor fingerprint: %s)r�r5rs)r-r"r��pubkeyr�r&r&r'r,|s"
��z WALinuxAgentShim._filter_pubkeysr�)r!r�r�r�r�r�r)r
�Distrorrrr&r(r�r�r r�r)r
r*�listr!r��dictr,r&r&r&r'r�sP
��
�%��
���!���)rrrr"rcCs0t|d�}z
|j|||d�W|��S|��w)N�r)rr"r)rr&r�)rrr"r�shimr&r&r'�get_metadata_from_fabric�s
�r4r
zerrors.ReportableErrorcCs8t|d�}|��}z
|j|d�W|��dS|��w)Nr2r')r�as_encoded_reportr(r�)rr
r3rr&r&r'�report_failure_to_fabric�s

r6cCs(td|tjd�td|tjd�dS)Nzdhclient output stream: %srUzdhclient error stream: %s)r]r5r6)rD�errr&r&r'�dhcp_log_cb�s
�

�r8c@seZdZdS)�NonAzureDataSourceN)r!r�r�r&r&r&r'r9�sr9c@s�eZdZddd�Zdddddddddd�	deedeed	eed
eedeedeee	d
edeededdfdd�Z
defdd�Zededdfdd��Z
	d(dededefdd�Z			d)dedededefd d!�Zd"d#�Zd$d%�Zd&d'�ZdS)*�	OvfEnvXmlz)http://schemas.dmtf.org/ovf/environment/1z)http://schemas.microsoft.com/windowsazure)�ovf�waNF�	r��passwordr��custom_data�disable_ssh_password_auth�public_keys�preprovisioned_vm�preprovisioned_vm_type�provision_guest_proxy_agentr�r>r�r?r@rArBrCrDrc	
Cs>||_||_||_||_||_|pg|_||_||_|	|_dSrvr=)
r�r�r>r�r?r@rArBrCrDr&r&r'r��s


zOvfEnvXml.__init__cCs|j|jkSrv)�__dict__)r��otherr&r&r'�__eq__�szOvfEnvXml.__eq__�ovf_env_xmlc
Cslzt�|�}Wntjy}ztj|d�|�d}~ww|�d|j�s'td��t�}|�	|�|�
|�|S)z�Parser for ovf-env.xml data.

        :raises NonAzureDataSource: if XML is not in Azure's format.
        :raises errors.ReportableErrorOvfParsingException: if XML is
                unparsable or invalid.
        )�	exceptionNz./wa:ProvisioningSectionz=Ignoring non-Azure ovf-env.xml: ProvisioningSection not found)rr�r�r�"ReportableErrorOvfParsingExceptionr��
NAMESPACESr9r:�&_parse_linux_configuration_set_section� _parse_platform_settings_section)�clsrHr�rC�instancer&r&r'�
parse_text�s���

zOvfEnvXml.parse_textr<r�required�	namespacecCsp|�d||ftj�}t|�dkr#d|}t�|�|r!t�|��dSt|�dkr4t�d|t|�f��|dS)Nz./%s:%sr�missing configuration for %rr0�*multiple configuration matches for %r (%d))�findallr:rK�lenr5r6r�!ReportableErrorOvfInvalidMetadata)r��noderrQrR�matchesrWr&r&r'�_finds �


��zOvfEnvXml._find�
decode_base64�
parse_boolc
Cs�|�d|tj�}t|�dkr!d|}t�|�|rt�|��|St|�dkr2t�d|t|�f��|dj}	|	dur=|}	|rM|	durMt	�
d�|	����}	|rTt
�|	�}	|	S)Nz./wa:rrSr0rTr�)rUr:rKrVr5r6rrWr�rc�	b64decoder�r:r�translate_bool)
r�rXrrQr[r\�defaultrYrWr�r&r&r'�_parse_propertys*	


��

zOvfEnvXml._parse_propertycCs�|j|ddd�}|j|ddd�}|j|dddd�|_|j|ddd�|_|j|d	dd�|_|j|d
dd�|_|j|dddd�|_|�|�dS)
N�ProvisioningSectionT�rQ�!LinuxProvisioningConfigurationSet�
CustomDataF)r[rQ�UserName�UserPassword�HostName� DisableSshPasswordAuthentication)r\rQ)rZr`r?r�r>r�r@�_parse_ssh_section)r�r��provisioning_section�
config_setr&r&r'rL=s<�������z0OvfEnvXml._parse_linux_configuration_set_sectioncCsb|j|ddd�}|j|ddd�}|j|ddddd�|_|j|ddd�|_|j|d	dddd�|_dS)
N�PlatformSettingsSectionTrb�PlatformSettings�PreprovisionedVmF)r\r_rQ�PreprovisionedVMType�ProvisionGuestProxyAgent)rZr`rBrCrD)r�r��platform_settings_section�platform_settingsr&r&r'rM_s2�����z*OvfEnvXml._parse_platform_settings_sectionc	Cs�g|_|j|ddd�}|durdS|j|ddd�}|durdS|�dtj�D]'}|j|ddd�}|j|ddd�}|j|dd	dd
�}|||d�}|j�|�q&dS)N�SSHFrb�
PublicKeysz./wa:PublicKey�Fingerprint�Path�Valuer�)r_rQ)r�rzr�)rArZrUr:rKr`r�)	r�rk�ssh_section�public_keys_section�
public_keyr�rzr�r�r&r&r'ri{s2������zOvfEnvXml._parse_ssh_section)r<)FFN)r!r�r�rKrr�r�r�rr1r�rG�classmethodrPrZr`rLrMrir&r&r&r'r:�sx�������
�	�
��
����
�����
�$"r:r�)Hrcri�loggingrwr�r�re�
contextlibrrrr�typingrrrr	r
�	xml.etreer�xml.sax.saxutilsr�	cloudinitr
rrrrr�cloudinit.reportingr�cloudinit.sources.azurer�	getLoggerr!r5�DEFAULT_WIRESERVER_ENDPOINTr=rQr\rhr r"rr)rJrTr�r<r]rorur~r1r��intr�r�r�r�rqr�r�r�r�rr/r4r6r8r9r:r&r&r&r'�<module>s� 
�"
S
��
�

	�������6���
�"?f���
��		

Spamworldpro Mini