o
    x[hJ  ã                   @   sÎ   d Z ddlZddlZddl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 ddlmZmZmZmZmZmZ ddlmZ ddlmZ ddlmZ d	Zdd
d„Zdd„ Zedkreeƒ  ¡ Zeeeƒ dS dS )z(Debug network config format conversions.é    N)ÚdistrosÚsafeyaml)Úloggers)ÚeniÚnetplanÚnetwork_managerÚnetwork_stateÚnetworkdÚ	sysconfig)ÚDataSourceAzure)Ú	openstack)Úguestcust_utilznet-convertc                 C   s¶   | s	t jttd�} | jddtdddd� | jdd	g d
¢ddd� | jdddddd� | jdddd„ tj ¡ D ƒdd� | jdddddd� | jdddd� | jd d!g d"¢dd#d� | S )$a  Build or extend and arg parser for net-convert utility.

    @param parser: Optional existing ArgumentParser instance representing the
        subcommand which will be extended to support the args of this utility.

    @returns: ArgumentParser with proper argument configuration.
    )ÚprogÚdescriptionz-pz--network-dataÚPATHTz!The network configuration to read)ÚtypeÚmetavarÚrequiredÚhelpz-kz--kind)r   únetwork_data.jsonÚyamlú
azure-imdsú
vmware-imcz&The format of the given network config)Úchoicesr   r   z-dz--directoryzdirectory to place output in)r   r   r   z-Dz--distroc                 S   s   g | ]	}|D ]}|‘qqS © r   )Ú.0ÚsublistÚitemr   r   úA/usr/lib/python3/dist-packages/cloudinit/cmd/devel/net_convert.pyÚ
<listcomp>G   s
    ÿÿzget_parser.<locals>.<listcomp>)r   r   z-mz--maczname,macÚappendzinterface name to mac mapping)r   Úactionr   z--debugÚ
store_truezenable debug logging to stderr.)r!   r   z-Oz--output-kind)r   r   r	   r
   únetwork-managerz!The network config format to emit)	ÚargparseÚArgumentParserÚNAMEÚ__doc__Úadd_argumentÚopenr   Ú
OSFAMILIESÚvalues)Úparserr   r   r   Ú
get_parser   sd   úõûÿúûÿûr-   c              	   C   sÖ  |j  d¡s| j d7  _ tj |j ¡st |j ¡ |jr%tjt	j
d� ntjt	jd� |jrDi }|jD ]}| dd¡\}}|||< q4nd }|j ¡ }|jdkrVt |¡}n]|jdkr|t |¡}d|v ri| d¡}|jr{tj d d	t |¡d
g¡¡ n7|jdkrŒtjt |¡|d�}n'|jdkržt j!t |¡d dd�}n|jdkr³t" #t" $|jj%¡¡}t" &|d¡}t' (|j)¡}	|	|j)i d ƒ}
|j*dkrÏtj+}|
j, d¡}nX|j*dkrót-j+}|
j, di ¡}d|d< |d dd … |d< ddg|d< n4|j*dk�rt.j+}|
j, d¡}n$|j*dk�rt/j+}|
j, d¡}n|j*dk�r#t0j+}|
j, d¡}nt1dƒ‚||d�}t2j3||d�}|j�rGtj d d
dt 4|¡d
g¡¡ tj d
 d|j|jj%f d |j*|j f g¡d ¡ |j5||j d!� d S )"Nú/)Úlevelú,é   r   r   ÚnetworkÚ
z
Input YAMLÚ r   )Ú
known_macsr   T)Ú&apply_network_config_for_secondary_ipsr   Fr   ÚpostcmdsÚnetplan_pathzdhcp-use-domainszipv6-mtuÚfeaturesr	   r
   r#   zInvalid output_kind)Úconfig)ÚrendererzInternal Statez"Read input format '%s' from '%s'.
z!Wrote output format '%s' to '%s'
)r   Útarget)6Ú	directoryÚendswithÚosÚpathÚisdirÚmakedirsÚdebugr   Úsetup_basic_loggingÚloggingÚDEBUGÚWARNÚmacÚsplitÚnetwork_dataÚreadÚkindr   Úconvert_eni_datar   Ú	safe_loadÚgetÚsysÚstderrÚwriteÚjoinr   Údumpsr   Úconvert_net_jsonÚjsonÚloadsÚazureÚ6generate_network_config_from_instance_network_metadatar   ÚConfigÚ
ConfigFileÚnameÚ%get_network_data_from_vmware_cust_cfgr   ÚfetchÚdistroÚoutput_kindÚRendererÚrenderer_configsr   r	   r
   r   ÚRuntimeErrorr   Úparse_net_config_dataÚdumpÚrender_network_state)r\   Úargsr5   r   Ú
iface_nameÚ	iface_macÚnet_dataÚpre_nsr:   Ú
distro_clsr_   Úr_clsÚrÚnsr   r   r   Úhandle_args`   s¢   

þ




ÿ€

ÿ
þ
ÿÿ


 ÿ
ÿýÿøÿrp   Ú__main__)N) r'   r$   rV   rE   r?   rP   r   Ú	cloudinitr   r   Úcloudinit.logr   Úcloudinit.netr   r   r   r   r	   r
   Úcloudinit.sourcesr   rX   Úcloudinit.sources.helpersr   Ú$cloudinit.sources.helpers.vmware.imcr   r&   r-   rp   Ú__name__Ú
parse_argsrg   r   r   r   r   Ú<module>   s(    
B]
þ