iG ddlZddlZddlZddlmZddlmZddlm Z ddl m Z m Z ej e dZedzZd aGd d eZdd ZdZdZdS)N)minidom) ExpatError)etree) CONFIG_DIR acquire_lockzve.cfgz.tmpNNc eZdZdfd ZxZS)BadVeConfigExceptionNothingcPtd|dS)Nz5Unable to parse /etc/container/ve.cfg file, message: )super__init__)selfmessage __class__s py/clveconfig/ve_config.pyrzBadVeConfigException.__init__s4  MG M M     )r )__name__ __module__ __qualname__r __classcell__)rs@rr r s=          rr Tcdtdkr |rtSt5 tjt}|dd}n5#t tttf$r}td|d}~wwxYw|r||fa||fcdddS#1swxYwYdS)z Load xml config from ve.cfg 1. setup lock on file 2. read info 3. remove lock :type use_cache: bool :rtype: tuple[xml.Document, xml.Element] :raises: BadVeConfigException, LockFailedException r lveconfigrzbad ve.cfg fileN) PARSED_XML_CACHErxmlparse VE_CFG_PATHgetElementsByTagNameOSErrorIOErrorr IndexErrorr ) use_cache_ve_cfg _ve_lveconfiges rget_xml_configr'"s=((Y(  & & Ai ,,G#88EEaHMM*j9 A A A&'899q @ A  6& 5  % & & & & & & & & & & & & & & & & & &s4B%4AB%B 7BB  B%%B),B)ct5 tjt}|cdddS#tj$r"}t t||d}~wwxYw#1swxYwYdS)z This method works same as get_xml_config, but returns etree object :rtype: etree.ElementTree :raises: BadVeConfigException, LockFailedException N)rrrrgetroot ParseErrorr str)treer&s rget_xml_config_etreer->s 66 6;{++D<<>>66666666 6 6 6&s1vv..A 5 6 6666666666s.A>,A  A;A66A;;A>>BBcX|dd}||fa|ddd}|dddd}t j|}|d }|st d tttd 5}| || tj |dddn #1swxYwYtjtt t!jt jd tjdS#t&$r)}t)d |t*jYd}~dSd}~wwxYw)Nrrzutf-8)encodingindentnewl r )r0z Rejected attempt to write empty wbzve.cfg updated by euid=z ve.cfg audit-log syslog failed: )file)rr toprettyxmlreplacer parseString RuntimeErrorropenVE_CFG_PATH_TMPwriteflushosfsyncfilenorenamesyslog LOG_NOTICEgeteuidr printsysstderr) xml_documentr% xml_stringnew_xmlbuffr&s rsave_xmlrNNs!55kBB1EM$m5))72B)OOJ##E3//77sCCJoj))G   w  / /C MKkKKLLL ot $ $     Io{+++G f'??? A A A A A GGG 4443:FFFFFFFFFFGs+:ADDD3E66 F)F$$F))T)r?rGrCxml.domrrxml.parsers.expatrlxmlrve_lockrrpathjoinrr<r Exceptionr r'r-rNrrrWs """"""((((((--------gll:x00 &!     9   &&&&8 6 6 6 GGGGGr