o
    w7e                     @   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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r]e  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>E   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 n5|jdkrtjt||d}n%|jdkrtt|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!t.j)}|
j*d}nt/d||d}t0j1||d}|jrEtjdd
dt23|d
g tjd
d|j|jj#f d|j(|j f gd  |j4||j d d S ) N/)level,   r   r   network
z
Input YAML r   )
known_macsr   r   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)5	directoryendswithospathisdirmakedirsdebugr   setupBasicLoggingDEBUGWARNmacsplitnetwork_datareadkindr   convert_eni_datar   loadgetsysstderrwritejoin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_datar   dumprender_network_state)rZ   argsr5   r   
iface_name	iface_macnet_datapre_nsr9   
distro_clsr]   r_clsrnsr   r   r   handle_args^   s   













 
rn   __main__)N)r'   r$   rT   r>   rN   r   	cloudinitr   r   r   cloudinit.netr   r   r   r   r	   r
   cloudinit.sourcesr   rV   cloudinit.sources.helpersr   $cloudinit.sources.helpers.vmware.imcr   r&   r-   rn   __name__
parse_argsre   r   r   r   r   <module>   s$    
B\
