o
    f%                     @   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	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rae  Zeee dS dS )z(Debug network config format conversions.    N)distroslogsafeyaml)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>F   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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\   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   r   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]
