o
    th!                     @   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 zddlmZ W n eyK   dZY nw dZzdd	lmZ W n eya   dZY nw dZzdd
lmZ W n eyw   dZY nw dZdZdddZdd Z e!dkre " 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)DataSourceAzureFT)	openstack)guestcust_utilznet-convertc                 C   s   | s	t jttd} | jddtdddd dd	g}tr|d
 tr&|d t	r-|d | jd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helpr   yaml
azure-imdsnetwork_data.json
vmware-imcz-kz--kindz&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>`   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openazure_kind_availabler    openstack_kind_availablevmware_kind_availabler   
OSFAMILIESvalues)parseravailable_kindsr   r   r   
get_parser1   sr   	


r1   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rtjt||d}n'|jdkrt j!t|d dd}n|jdkrt"#t"$|jj%}t"&|d}t'(|j)}	|	|j)i d }
|j*dkrtj+}|
j,d}nX|j*dkrt-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azure6generate_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`   argsr9   r   
iface_name	iface_macnet_datapre_nsr>   
distro_clsrc   r_clsrnsr   r   r   handle_argsy   s   













 
rt   __main__)N)$r'   r$   rZ   rI   rC   rT   r   	cloudinitr   r   cloudinit.logr   cloudinit.netr   r   r   r   r	   r
   cloudinit.sourcesr   r\   ImportErrorr*   cloudinit.sources.helpersr   r+   $cloudinit.sources.helpers.vmware.imcr   r,   r&   r1   rt   __name__
parse_argsrk   r   r   r   r   <module>   sF    	
H]
