o ed&@s@ddlZddlZddlZddlZddlZddlZddlZddlZddlm Z ddl m Z ddlm Z dZdZe e efZddZdd Zd d Zd ed efddZddZddZd3ddZd3dededefddZddZddZd d!Zd"d#Z d$d%Z!d&d'Z"d(d)Z#d3d*d+Z$d,d-Z%d.efd/d0Z&Gd1d2d2ej'Z(dS)4N)ConfigurationError)LibNetplanExceptionzNetworkManager.servicez+snap.network-manager.networkmanager.servicecCstjddS)NNETPLAN_GENERATE_PATHz/usr/libexec/netplan/generate)osenvirongetrr'/usr/share/netplan/netplan/cli/utils.pyget_generator_path&sr cCstjdddtgtjddkS)N systemctl--quiet is-enabled)stderrr) subprocesscallNM_SNAP_SERVICE_NAMEDEVNULLrrrr is_nm_snap_enabled*srcCstjdg|tjtjddS)Nnmclistdoutrr check_callrargsrrr r.srrreturncCstjdg|ddS)NrTtext)r check_outputrrrr nmcli_out4src Cs,ztdgWdSttjfyYdSw)z"Check if NetworkManager is runninggeneralTF)rOSErrorrSubprocessErrorrrrr nm_running:s  r#c Cstd}t}|D]3}t|d$}|D]}||}|r-|tt||dnqWdn1s8wYq |S)Nz^interface-name=(.*)$r) recompilesetopenmatchupdatefnmatchfiltergroup)pathsdevicespat interfacespathflinemrrr nm_interfacesDs   r7FcCs"tr t|tg|St|tg|SN)rr rNM_SERVICE_NAME)actionsyncrrr systemctl_network_managerRsr<r:servicesr;cCs>t|dkrd|g}|s|d||t|dSdS)Nr%r z --no-block)lenappendextendrr)r:r=r;commandrrr r Zs   r cCs^t}tjgddd}|D]}|d}|dr,|ddvr,||dq|S)N) networkctlz --no-pagerz --no-legendTr r) unmanagedlinger)r(rr splitlinesstripsplit isnumericadd)r2outr5srrr networkd_interfacesfs rNcCstddgdS)NrBreloadrrrrrr networkctl_reloadpsrQcCs*t|dkrtddgt|dSdS)Nr%rB reconfigure)r>rrlist)r2rrr networkctl_reconfigurets rTcCstddd|gdkr dSdS)z4Return True if at least one matching unit is runningr r z is-activerTF)rr) unit_patternrrr systemctl_is_activeysrVcCs8tjdd|gtjtjdd}|jdkrd|jvrdSdS)z5Return True if output is "masked" or "masked-runtime"r r T)rrrrmaskedF)rrunPIPE returncoder)rUresrrr systemctl_is_maskeds r\cCstddgdS)zEReload systemd unit files from disk and re-calculate its dependenciesr z daemon-reloadNrPrrrr systemctl_daemon_reloadsr]cCs tjddd|gtjtjddS)z8Flush all IP addresses of a given interface via iproute2ipaddrflushrNr)ifacerrr ip_addr_flushs rbc Cstjd|}|r\z6ttj|d#}|}|dkr/td|| WdWdSWdn1s9wYWnty[}zt d|t |WYd}~dSd}~wwztj tj|dd}tj |}W|Sty}ztd||t |WYd}~dSd}~ww) Nz/sys/class/net operstatedownz'device %s operstate is %s, not changingz$Cannot determine operstate of %s: %sdevicedriverz0Cannot replug %s: cannot read link %s/device: %s) rr3joinr)readrHloggingdebugIOErrorerrorstrrealpathbasename) interface only_downdevdirr4stateerf driver_namerrr get_interface_driver_names4 rvcCs&t|tjigd}|ddS)Nrr_) netifaces ifaddressesrAF_LINK)rplinkrrr get_interface_macaddresss r|r2csRttjsJjs Jttfdd|}t|dkr%t|dS|dS)Ncsj|t|t|dS)N)itf_name itf_driveritf_mac)match_interfacervr|)itfnetdefrr s z%find_matching_iface..r%r) isinstancenp NetDefinition has_matchrSr-r>riinfo)r2rmatchesrrr find_matching_ifaces   rc@sFeZdZdddZddZddZd d Zd d Zd dZddZ dS)NetplanCommandTFcCs||_||_||_||_d|_d|_d|_d|_i|_d|_ d|_ t j dt jd|f|dd|_|jjdddd |jjd dt jd |sb|jjd d d d|_|jjdddd}|j|jddSdS)NFz%s %srT)prog descriptionadd_helpz--debug store_truezEnable debug messages)r:helpz --breakpointzAvailable commandsrw subcommand)titlemetavardestrzShow this help message)rr)func) command_idr leaf_commandtesting_argsrj breakpoint commandclass subcommandsrrargparseArgumentParsersysargvparser add_argumentSUPPRESSadd_subparsers subparsers add_parser set_defaults print_usage)selfrrleafrp_helprrr __init__s>  zNetplanCommand.__init__cCs ||_dSr8)r)rrrrr r+s zNetplanCommand.updatecCsF|jj|j|d\}|_|js|js!tdtjd|dSdSdS)N)r namespacezYou need to specify a commandfile) rparse_known_argsrrrprintrrr)rnsrrr parse_argss   zNetplanCommand.parse_argscCsD|jr |j|j|jrd|jvr||jrt|dS)Nr)rr+rrrrrrrrr run_commands zNetplanCommand.run_commandcCs |jjtjdttjdS)Nr)r print_helprrexitrEX_USAGErrrr rszNetplanCommand.print_usagecCs|}i|j|<||j|d<||j|d<|jr"tjdds"dS|jj|j|j|jdd}|j |j |d||j|d<dS)NclassinstanceENABLE_TEST_COMMANDSF)rrr)rrr) rrrrrrrrrrrX)rnamerrprrr _add_subparser_from_classs  z(NetplanCommand._add_subparser_from_classcCs@ddl}||D]\}}||rt|tr|||q dS)Nr)inspect getmembersisclass issubclassrr)r submodulesrrobjrrr _import_subcommands s  z"NetplanCommand._import_subcommandsN)TF) __name__ __module__ __qualname__rr+rrrrrrrrr rs   r)F))rrrirrrxr,r&netplan.libnetplan libnetplanrnetplan.configmanagerrrr9r RuntimeError config_errorsr rrrSrmrr#r7r<boolr rNrQrTrVr\r]rbrvr|r Namespacerrrrr sB