Viewing File: /usr/lib/python2.7/site-packages/cloudinit/net/netplan.pyo

ó
oBú]c@sþddlZddlZddlmZddlmZmZmZddlm	Z
ddlmZddlmZddl
mZmZd	Ze
jeƒZd
„Zdd„Zd„Zdd
„Zdejfd„ƒYZdd„Zdd„ZdS(iÿÿÿÿNi(trenderer(tsubnet_is_ipv6tNET_CONFIG_TO_V2tIPV6_DYNAMIC_TYPES(tlog(tutil(tsafeyaml(t
SYS_CLASS_NETtget_devicelists4# This is the initial network config.
# It can be overwritten by cloud-init or console-conf.
network:
    version: 2
    ethernets:
        all-en:
            match:
                name: "en*"
            dhcp4: true
        all-eth:
            match:
                name: "eth*"
            dhcp4: true
cs t‡fd†|jƒDƒƒS(Nc3s0|]&\}}|jˆƒr||fVqdS(N(t
startswith(t.0tkeytvalue(tmatch(s9/usr/lib/python2.7/site-packages/cloudinit/net/netplan.pys	<genexpr>"s	(tdicttitems(tconfigR
((R
s9/usr/lib/python2.7/site-packages/cloudinit/net/netplan.pyt_get_params_dict_by_match!sc	Cs[dd„}|d"kr!g}ng}g}g}g}|jdgƒ}	|	d"kr`g}	nxy|	D]q}
|
jdƒ}|jdƒr»|dkr¤|d7}n|jit|6ƒqg|tkrÞ|jitd6ƒqg|d#krgd	|
jd
ƒ}d|
kr#|d|
jdƒ7}nd
|
kr‡|
jd
ƒr‡|
jd
ƒ}
d|
krp|ji|
d6ƒq‡|ji|
d6ƒnd|
kr²|||
jdgƒƒ7}nd|
krÝ|||
jdgƒƒ7}nd|
kr0d}t|
ƒrd|krd}n|ji|
jdƒ|6ƒnx•|
jdgƒD]}d|jdƒ|jdƒf}i|jd
ƒd6|d6}d|kr·|ji|jddƒd6ƒn|j|ƒqCW|j|ƒqgqgWd|kr;|jdƒ}|r*|d|kr*tj	d||d|ƒq;|d|d<nt
|ƒdkrd|ji|d6ƒnt
|ƒdkr|ji|d6ƒnt
|ƒdkrÃi|d6}|ji|d6ƒnt
|ƒdkr|jdiƒ}|ji|d 6ƒ|ji|d6ƒnd!|krW|d!d"k	rW|jitj|jd!ƒƒd!6ƒnd"S($s¿This method parse a cloudinit.net.network_state dictionary (config) and
       maps netstate keys/values into a dictionary (entry) to represent
       netplan yaml.

    An example config dictionary might look like:

    {'mac_address': '52:54:00:12:34:00',
     'name': 'interface0',
     'subnets': [
        {'address': '192.168.1.2/24',
         'mtu': 1501,
         'type': 'static'},
        {'address': '2001:4800:78ff:1b:be76:4eff:fe06:1000",
         'mtu': 1480,
         'netmask': 64,
         'type': 'static'}],
      'type: physical',
      'accept-ra': 'true'
    }

    An entry dictionary looks like:

    {'set-name': 'interface0',
     'match': {'macaddress': '52:54:00:12:34:00'},
     'mtu': 1501}

    After modification returns

    {'set-name': 'interface0',
     'match': {'macaddress': '52:54:00:12:34:00'},
     'mtu': 1501,
     'address': ['192.168.1.2/24', '2001:4800:78ff:1b:be76:4eff:fe06:1000"],
     'ipv6-mtu': 1480}

    t cSsD|st|ƒtgkr |S||kr9|j|ƒS|gSdS(sBHelper to convert strings to list of strings, handle single stringN(ttypetstrtsplit(tobjttoken((s9/usr/lib/python2.7/site-packages/cloudinit/net/netplan.pyt_listifyKs

tsubnetsRtdhcpt4tdhcp6tstatics%staddresstprefixs/%dtgatewayt:tgateway6tgateway4tdns_nameserverst
dns_searchtmtusipv6-mtutroutess%s/%stnetworktviattotmetricidsZNetwork config: ignoring %s device-level mtu:%s because ipv4 subnet-level mtu:%s provided.it	addressestnameserverstsearchs	accept-raN(R(
tNonetgetR	tupdatetTrueRRtappendtLOGtwarningtlenRtis_true(RtentrytifnametfeaturesRR,R'R-t
searchdomainsRtsubnettsn_typetaddrR tmtukeytroutetto_nett	new_routet	entry_mtutns((s9/usr/lib/python2.7/site-packages/cloudinit/net/netplan.pyt_extract_addresses&s„%			

	 
#
cCsptg|jƒD]*\}}|jddƒ|kr|^qƒ}t|ƒdkrl|ji|d6ƒndS(Nsbond-masterit
interfaces(tsortedRR0R/R6R1(RFR8tbond_mastertnametcfgtbond_slave_names((s9/usr/lib/python2.7/site-packages/cloudinit/net/netplan.pyt_extract_bond_slaves_by_names'cCsÙtj|dƒ}tjj|ƒs(dStj|dtƒ}|tkrMdSgdD]}tj||ƒ^qT}g|D]}tjj|ƒry|^qy}tj	d||ƒx"|g|D]}tj
|ƒq¾WdS(Ns etc/netplan/00-snapd-config.yamltdecodes-run/systemd/network/10-netplan-all-en.networks.run/systemd/network/10-netplan-all-eth.networks#run/systemd/generator/netplan.stamps9removing known config '%s' and derived existing files: %s(s-run/systemd/network/10-netplan-all-en.networks.run/systemd/network/10-netplan-all-eth.networks#run/systemd/generator/netplan.stamp(Rttarget_pathtostpathtisfilet	load_filetFalsetKNOWN_SNAPD_CONFIGR4tdebugtunlink(ttargetttpathtcontenttftderivedtexisting((s9/usr/lib/python2.7/site-packages/cloudinit/net/netplan.pyt_clean_default¤s"+	
tRenderercBsqeZdZddgZddgZd
d„Zed„ƒZd
d
d„Z	e
d„Ze
d„Zd	„Z
RS(sBRenders network information in a /etc/netplan/network.yaml format.tnetplantgeneratetinfocCs||si}n|jddƒ|_|jddƒ|_|jdtƒ|_|jdtƒ|_|jddƒ|_dS(Ntnetplan_pathsetc/netplan/50-cloud-init.yamltnetplan_headertpostcmdst
clean_defaultR:(	R0RbR/RcRSt	_postcmdsR2Ret	_features(tselfR((s9/usr/lib/python2.7/site-packages/cloudinit/net/netplan.pyt__init__Às		cCsš|jdkr“yBtj|jdtƒ\}}tj|ƒ}|dd|_Wq“tjk
rgq“tt	fk
r}t
jd|ƒq“Xn|jS(Ntcaptures
netplan.ioR:s-Failed to list features from netplan info: %s(RgR/RtsubptNETPLAN_INFOR2t	load_yamltProcessExecutionErrort	TypeErrortKeyErrorR4RU(Rht	info_blobt_errRate((s9/usr/lib/python2.7/site-packages/cloudinit/net/netplan.pyR:ÊscCsÔtjjtj|ƒ|jƒ}tjtjj|ƒƒ|jrL|jnd}|j	|ƒ}|j
dƒs}|d7}ntj|||ƒ|jrªt
d|ƒn|jd|jƒ|jd|jƒdS(Nts
RWtrun(RORPtjoinRRNRbt
ensure_dirtdirnameRct_render_contenttendswitht
write_fileReR]t_netplan_generateRft_net_setup_link(Rht
network_statet	templatesRWtfpnplantheaderRY((s9/usr/lib/python2.7/site-packages/cloudinit/net/netplan.pytrender_network_stateÙs!
	cCs1|stjdƒdStj|jdtƒdS(Ns!netplan generate postcmd disabledRj(R4RURRktNETPLAN_GENERATER2(RhRu((s9/usr/lib/python2.7/site-packages/cloudinit/net/netplan.pyR|îs
cCs…|stjdƒdSdddg}xXgtƒD]-}tjjt|ƒr3|t|g^q3D]}tj|dt	ƒqdWdS(sªTo ensure device link properties are applied, we poke
           udev to re-evaluate networkd .link files and call
           the setup_link udev builtin command
        s'netplan net_setup_link postcmd disabledNtudevadmstest-builtintnet_setup_linkRj(
R4RURRORPtislinkRRRkR2(RhRut	setup_lnktifacetcmd((s9/usr/lib/python2.7/site-packages/cloudinit/net/netplan.pyR}ôs

1c*Cs|jdkr?tjdƒtji|jd6dtdtƒSi}i}i}i}i}g}|jjdgƒ}|j	}	|j
}
xz|jƒD]l}|jdƒ}td„|j
ƒDƒƒ}
|
jd	ƒ}|d
kr‰i|d6|
jddƒd6}|ddkr\|
jd
dƒ}|dk	rKi|jƒd6|d<q\|d=|d=nt|
|||jƒ|ji||6ƒq—|dkrãi}i}tjdƒ}xddgD]s}t|
|ƒ}x[|j
ƒD]M\}}|j|jddƒƒ}|dkrqßn|ji||6ƒqßWq½Wt|ƒdkr]|ji|d6ƒn|
jd
ƒrˆ|
jd
ƒjƒ|d<n|
jdƒ}|dkr¶t|||ƒnt|
|||jƒ|ji||6ƒq—|dkrsttj|
jdƒƒƒ}i|d6}d}t|
|ƒ}i}tjdƒ}x«|j
ƒD]\}}|j|ƒ}|dkr~qQn|ji||6ƒ|d-krQi} x0|D](}!|!jƒ\}"}#t|#ƒ| |"<q«W|ji| |6ƒqQqQWt|ƒdkr|ji|d6ƒn|
jd
ƒrF|
jd
ƒjƒ|d<nt|
|||jƒ|ji||6ƒq—|dkr—i|
jdƒd6|
jd ƒd!6}$|
jd
dƒ}|dk	rÖ|jƒ|$d<nt|
|$||jƒ|ji|$|6ƒq—q—W|	s|
r™i|	d"6|
d#6}%xo|||||gD]U}&xL|&j
ƒD]>\}'}(d$|(ksPd"|(krzqPn|(ji|%d$6ƒqPWq=Wnd%„})|jd&ƒ||)d'|ƒ7}||)d(|ƒ7}||)d)|ƒ7}||)d*|ƒ7}||)d+|ƒ7}d,j|ƒS(.NisV2 to V2 passthroughR(texplicit_starttexplicit_endRFRIcss-|]#\}}|dk	r||fVqdS(N(R/(R
RR((s9/usr/lib/python2.7/site-packages/cloudinit/net/netplan.pys	<genexpr>s	Rtphysicalsset-nameR
tmac_addresst
macaddresstbondtbond_sbond-t_t-it
parameterssbond-slavestnonetbridgetbridge_portstbridge_s	path-costs
port-prioritytvlantvlan_idtidsvlan-raw-devicetlinkR,R.R-cSsK|rGtji||6dtdtdtƒ}tj|dƒ}|gSgS(NRŠR‹tnoaliasRis    (RtdumpsRSR2Rtindent(RItsectiontdumpttxt((s9/usr/lib/python2.7/site-packages/cloudinit/net/netplan.pyt_render_sections	snetwork:
    version: 2
t	ethernetstwifistbondstbridgestvlansRt(s	path-costs
port-priority(tversionR4RURRRRSt_network_stateR0R$tdns_searchdomainstiter_interfacesRRR/tlowerRER:R1RRtreplaceR6RLRGtcopyRtintR3Rv(*RhR~R£R¤R¦R¥R§RYRFR-R;RR9tifcfgtif_typetethtmacaddrRtbond_configtv2_bond_mapR
tbond_paramstparamRtnewnametslave_interfacestportsR•tmatch_prefixtparamst	br_configt
v2_bridge_maptnewvaluetvaltporttportvalR˜tnscfgRŸt_nameRJR¢((s9/usr/lib/python2.7/site-packages/cloudinit/net/netplan.pyRysÆ
		


	

N(t__name__t
__module__t__doc__RƒRlR/RitpropertyR:R‚RSR|R}Ry(((s9/usr/lib/python2.7/site-packages/cloudinit/net/netplan.pyR^ºs
cCsIdg}ddg}x-|D]%}tj|d|d|ƒstSqWtS(NR_s	/usr/sbins/sbinR.RW(RtwhichRSR2(RWtexpectedR.tp((s9/usr/lib/python2.7/site-packages/cloudinit/net/netplan.pyt	available•s	
cCsbd}ti|d6|d6ƒ}|s/d}n|jdƒsK|d7}n|j|ƒ}||S(Nsetc/network/50-cloud-init.yamlRbRcRts
(R^RzRy(R~RRbRtcontents((s9/usr/lib/python2.7/site-packages/cloudinit/net/netplan.pytnetwork_state_to_netplanžs
	
(R®RORtRR~RRRt	cloudinitRtloggingRRt
cloudinit.netRRRTt	getLoggerRÅR4RR/RERLR]R^RÌRÎ(((s9/usr/lib/python2.7/site-packages/cloudinit/net/netplan.pyt<module>s 	w	Û	
Back to Directory File Manager