예제 #1
0
        dom = XMLParse(xml_path)
        parent = dom.createElement("parent")
        name   = dom.createElement("name")
        txt = dom.createTextNode("hoge")
        name.appendChild(txt)
        parent.appendChild(name)
        dom.childNodes[0].appendChild(parent)
        xmlDesc = kvs.generateXML(dom)
        print xmlDesc

    id = u'1274235845'
    print kvs.getSnapshotXMLPath(id)
    print kvs.getXMLDesc(id)

    id = '1274235848'
    id = '1274235841'
    for domain in kvs.whichDomain(id):
        print kvs.getSnapshotXMLPath(id,domain=domain)
        print kvs.getXMLDesc(id,domain=domain)
        print kvs.getChildrenNames(id,domain=domain)
    """

    names = kvs.listNames()
    preprint_r(names)
    names = kvs.listNames(all=True)
    preprint_r(names)

    kvs.refreshSnapshot()

    kvs.finish()
예제 #2
0
        dom = XMLParse(xml_path)
        parent = dom.createElement("parent")
        name   = dom.createElement("name")
        txt = dom.createTextNode("hoge")
        name.appendChild(txt)
        parent.appendChild(name)
        dom.childNodes[0].appendChild(parent)
        xmlDesc = kvs.generateXML(dom)
        print xmlDesc

    id = u'1274235845'
    print kvs.getSnapshotXMLPath(id)
    print kvs.getXMLDesc(id)

    id = '1274235848'
    id = '1274235841'
    for domain in kvs.whichDomain(id):
        print kvs.getSnapshotXMLPath(id,domain=domain)
        print kvs.getXMLDesc(id,domain=domain)
        print kvs.getChildrenNames(id,domain=domain)
    """

    names = kvs.listNames()
    preprint_r(names)
    names = kvs.listNames(all=True)
    preprint_r(names)

    kvs.refreshSnapshot()

    kvs.finish()
예제 #3
0
def write_conf(dop, webobj=None, machine=None, modules=[], extra_args={}):
    """<comment-ja>
    @param dop: 辞書配列操作オブジェクト
    @param webobj: 
    @param machine: 
    @type dop: object dict_op
    @rtype: boolean
    @return: True or False
    </comment-ja>
    <comment-en>
    TODO: English Comment
    </comment-en>
    """
    from karesansui.lib.file.configfile import ConfigFile

    if isinstance(dop,karesansui.lib.dict_op.DictOp) is False:
        return False

    if not os.path.exists(CONF_TMP_DIR):
        os.makedirs(CONF_TMP_DIR)
        r_chmod(CONF_TMP_DIR,0770)
        r_chown(CONF_TMP_DIR,KARESANSUI_USER)
        r_chgrp(CONF_TMP_DIR,KARESANSUI_GROUP)

    serial = time.strftime("%Y%m%d%H%M%S",time.localtime())

    if len(modules) == 0:
        modules = dop.ModuleNames

    w_modules = []
    w_files   = []
    for _module in modules:
        if _module in dop.ModuleNames:
            filename = "%s/%s.%s" % (CONF_TMP_DIR,_module,serial,)
            data = preprint_r(dop.getconf(_module),return_var=True)
            ConfigFile(filename).write(data+"\n")
            r_chmod(filename,0660)
            r_chown(filename,KARESANSUI_USER)
            r_chgrp(filename,KARESANSUI_GROUP)
            w_modules.append(_module)
            w_files.append(filename)

    if len(w_modules) == 0:
        return False

    options = {
         "module"     : ":".join(w_modules),
         "input-file" : ":".join(w_files),
    }
    options["delete"] = None

    try:
        extra_args['pre-command']
        options['pre-command'] = "b64:" + base64_encode(extra_args['pre-command'])
    except:
        pass
    try:
        extra_args['post-command']
        options['post-command'] = "b64:" + base64_encode(extra_args['post-command'])
    except:
        pass

    try:
        options['include'] = extra_args['include']
    except:
        pass

    #cmd_name = u"Write Settings - %s" % ":".join(w_modules)
    cmd_name = u"Write Settings"

    if type(webobj) == types.InstanceType:
        from karesansui.db.model._2pysilhouette import Job, JobGroup, \
                                                       JOBGROUP_TYPE
        from karesansui.db.access._2pysilhouette import jg_findby1, jg_save,corp
        from karesansui.db.access._2pysilhouette import save_job_collaboration
        from karesansui.db.access.machine2jobgroup import new as m2j_new
        from pysilhouette.command import dict2command

        _cmd = dict2command(
            "%s/%s" % (karesansui.config['application.bin.dir'],
                       CONFIGURE_COMMAND_WRITE), options)

        _jobgroup = JobGroup(cmd_name, karesansui.sheconf['env.uniqkey'])
        _jobgroup.jobs.append(Job('%s command' % cmd_name, 0, _cmd))

        _machine2jobgroup = m2j_new(machine=machine,
                                jobgroup_id=-1,
                                uniq_key=karesansui.sheconf['env.uniqkey'],
                                created_user=webobj.me,
                                modified_user=webobj.me,
                                )

        save_job_collaboration(webobj.orm,
                               webobj.pysilhouette.orm,
                               _machine2jobgroup,
                               _jobgroup,
                               )

        """
        _jobgroup.type = JOBGROUP_TYPE['PARALLEL']
        if corp(webobj.orm, webobj.pysilhouette.orm,_machine2jobgroup, _jobgroup) is False:
            webobj.logger.debug("%s command failed. Return to timeout" % (cmd_name))
            for filename in w_files:
                if os.path.exists(filename):
                    os.unlink(filename)
            return False

        cmd_res = jobgroup.jobs[0].action_stdout
        """

    else:
        from karesansui.lib.utils import execute_command

        opts_str = ""
        for x in options.keys():
            if options[x] is None:
                opts_str += "--%s " % x 
            else:
                opts_str += "--%s=%s " % (x, options[x])

        _cmd = "%s/bin/%s %s" % (KARESANSUI_PREFIX, CONFIGURE_COMMAND_WRITE, opts_str.strip(),)

        command_args = _cmd.strip().split(" ")
        (rc,res) = execute_command(command_args)
        if rc != 0:
            for filename in w_files:
                if os.path.exists(filename):
                    os.unlink(filename)
            return False

        cmd_res = "\n".join(res)

    """
    for filename in w_files:
        if os.path.exists(filename):
            os.unlink(filename)
    """

    return True
예제 #4
0
            pass
        command_args = [PARSER_COMMAND_ROUTE, "del", type, target, "dev", device]
        (ret,res) = execute_command(command_args)
        if ret != 0:
            retval = False

        return retval

"""
"""
if __name__ == '__main__':
    """Testing
    """
    parser = staticrouteParser()

    preprint_r(parser.do_status())
    parser.do_add("eth0","5.6.7.0","172.16.0.1")
    parser.do_del("eth0","5.6.7.0")
    preprint_r(parser.do_status())

    conf_arr = parser.read_conf()
    preprint_r(conf_arr)

    dop = DictOp()
    dop.addconf("parser",conf_arr)
    dop.add("parser",["eth1","2.3.4.5/32"],"172.16.0.10")
    dop.add("parser",["eth1","2.3.4.6/32"],"172.16.0.10")
    dop.add("parser",["eth1","2.3.4.7/32"],"172.16.0.10")
    #dop.insert_order("parser",["eth1","2.3.4.5/32"],0,is_parent_parser=True)
    #dop.insert_order("parser",["eth1","2.3.4.6/32"],0,is_parent_parser=True)
    dop.insert_order("parser",["eth1","2.3.4.7/32"],1,is_parent_parser=True)
예제 #5
0
      </domain>
    </arch>
  </guest>

  <guest>
    <os_type>hvm</os_type>
    <arch name='ppc'>
      <wordsize>32</wordsize>
      <emulator>/usr/bin/qemu-system-ppc</emulator>
      <machine>g3beige</machine>
      <machine>mpc8544ds</machine>
      <machine>bamboo</machine>
      <machine>ref405ep</machine>
      <machine>taihu</machine>
      <machine>mac99</machine>
      <machine>prep</machine>
      <machine>xenpv</machine>
      <domain type='qemu'>
      </domain>
    </arch>
  </guest>

</capabilities>
"""

    param = CapabilitiesConfigParam()
    param.load_xml_config(string)

    preprint_r(param.host)
    preprint_r(param.guest) 
예제 #6
0
    plugin = "cpu"
    plugin_instance = "0"
    type = "cpu"
    type_instance = "user"
    ds = "value"
    host = None
    host = "foo.example.com"

    from karesansui.lib.utils import preprint_r
    watch_data = query_watch_data(plugin,
                                  plugin_instance,
                                  type,
                                  type_instance,
                                  ds,
                                  host=host)
    preprint_r(watch_data)
    try:
        for column_name in watch_column:
            exec("%s = watch_data[0]['%s']" % (
                column_name,
                column_name,
            ))
            exec("_var = %s" % (column_name, ))
            print "%s: %s" % (column_name, _var)

        macros = {"host": "localhost.localdomain"}
        print evaluate_macro(okay_mail_body, macros)
    except:
        print "Error: cannot get watch data."
        sys.exit(0)
예제 #7
0
파일: utils.py 프로젝트: goura/karesansui
                     'okay_mail_body',
                     'is_okay_script',
                     'is_okay_mail',
                     'notify_mail_from',
                     'notify_mail_to']

    plugin          = "cpu"
    plugin_instance = "0"
    type            = "cpu"
    type_instance   = "user"
    ds              = "value"
    host            = None
    host            = "foo.example.com"

    from karesansui.lib.utils import preprint_r
    watch_data = query_watch_data(plugin,plugin_instance,type,type_instance,ds,host=host)
    preprint_r(watch_data)
    try:
        for column_name in watch_column:
            exec("%s = watch_data[0]['%s']" % (column_name,column_name,))
            exec("_var = %s" % (column_name,))
            print "%s: %s"  % (column_name,_var)

        macros = {"host":"localhost.localdomain"}
        print evaluate_macro(okay_mail_body,macros)
    except:
        print "Error: cannot get watch data."
        sys.exit(0)

    pass 
예제 #8
0
        if action == "delete":
            dop.add('__',new_key,val)
            dop.delete('__',new_key)
        elif action == "set":
            dop.set('__',new_key,val)
        else:
            dop.add('__',new_key,val)
        if iscomment is True:
            dop.comment('__',new_key)

        #preprint_r(dop.getconf('__'))
        new_lines = self._value_to_lines(dop.getconf('__'))
        #print "\n".join(new_lines)

        return new_lines

"""
"""
if __name__ == '__main__':
    """Testing
    """
    parser = xmlLikeConfParser()
    parser.set_source_file("/etc/collectd.conf")

    conf_arr = parser.read_conf()
    dop = DictOp()
    dop.addconf("parser",conf_arr)
    conf_arr = dop.getconf("parser")
    preprint_r(conf_arr)
    parser.write_conf(conf_arr,dryrun=True)
예제 #9
0
    #                SubOpt1         gege # post
    #        </View>
    #        Option2         false
    #        Option1         true
    # </Plugin>
    dop.cdp_set("dum",["Plugin","foobar","Option1"],"true")
    dop.cdp_set("dum",["Plugin","foobar","Option2"],"false")
    dop.cdp_set("dum",["Plugin","foobar","View","hoge","SubOpt1"],"gege")
    dop.cdp_set_pre_comment("dum",["Plugin","foobar","View","hoge","SubOpt1"],["","pre comment"])
    dop.cdp_set_post_comment("dum",["Plugin","foobar","View","hoge","SubOpt1"],"post")

    # 'LoadPlugin target_replace' の値を取得
    key = ["LoadPlugin","target_hoge"]
    dop.insert_order("dum",key)
    value = dop.cdp_get("dum",key)
    preprint_r(value)

    # 'LoadPlugin target_replace' の設定順を取得
    key = ["LoadPlugin","target_hoge"]
    num = dop.order("dum",key)
    print num

    # '<Plugin foobar>' を 'LoadPlugin target_hoge' の前にする
    key = ["Plugin","foobar"]
    dop.insert_order("dum",key,num)

    # '<Plugin foobar>' を 'LoadPlugin target_hoge' の後に変更する
    dop.change_order("dum",key,num+1)

    # 'Foo' を 'Bar' の後に変更する
    num = dop.order("dum",['Foo'])
예제 #10
0
        try:
            self.dop.addconf("parser",{})
            self.dop.set("parser",[PARSER_HOSTS_CONF],conf_arr)
            #self.dop.preprint_r("parser")
            arr = self.dop.getconf("parser")
            self.parser.write_conf(arr,dryrun=dryrun)
        except:
            pass

        return retval

"""
"""
if __name__ == '__main__':
    """Testing
    """
    parser = hostsParser()
    dop = DictOp()
    dop.addconf("dum",parser.read_conf())
    dop.add("dum",['key'],['value',[['comment foo','comment bar'],'comment hoge']])
    print dop.cdp_get("dum",['key'])
    print dop.cdp_get_pre_comment("dum",['key'])
    print dop.cdp_get_post_comment("dum",['key'])
    print dop.cdp_set("dum",['key'],"value2")
    print dop.cdp_set_pre_comment("dum",['key'],["comment foo2","comment bar2","a"])
    print dop.cdp_set_post_comment("dum",['key'],"comment fuga")
    conf = dop.getconf("dum")
    preprint_r(conf)
    parser.write_conf(conf,dryrun=True)
예제 #11
0
파일: mail.py 프로젝트: AdUser/karesansui
def send_mail(recipient=None, sender=None, server="localhost", port=25, message="", extra_message="", watch_name="", logfile="/dev/null"):
    retval = False

    func_name = sys._getframe(0).f_code.co_name
    append_line(logfile,"[%s] Entering function '%s'." % (func_name,func_name,))

    smtp_server = server.split(":")[0]
    try:
        smtp_port = int(port)
    except:
        smtp_port = 25

    try:
        socket_timeout
    except:
        socket_timeout = 30

    if recipient is not None:

        append_line(logfile,"[%s] Connecting SMTP server" % (func_name,))
        append_line(logfile,"[%s] smtp_server :%s" % (func_name,smtp_server,))
        append_line(logfile,"[%s] smtp_port   :%s" % (func_name,smtp_port,))

        mail = MAIL_LIB(smtp_server,smtp_port)

        if socket_timeout is None:
            socket_timeout = 30
        mail.set_timeout(int(socket_timeout))

        mail.set_verbosity(0)

        if sender is None:
            mail.set_sender(DEFAULT_SENDER)
        else:
            mail.set_sender(sender)

        mail.encoding   = "utf-8"

        mail.set_recipients(recipient.split(","))
        append_line(logfile,"[%s] recipient   :%s" % (func_name,recipient,))

        # デフォルトのヘッダをセット
        headers = {}
        headers['Subject'] = re.sub("\%\{watch_name\}",watch_name,DEFAULT_SUBJECT)

        # カテゴリ用のヘッダとボディを上書きでセット
        rawbody = ""
        try:
            append_line(logfile,"[%s] message   :%s" % (func_name,message,))
            try:
                del headers["Content-Transfer-Encoding"]
                message = message.encode('utf-8')
                message = str(message)
            except:
                pass
            append_line(logfile,"[%s] lang %s" % (func_name,os.environ['LANG']))
            extra_args = {"message":message}
            eml = emlParser().read_conf(extra_args=extra_args)
            parse_ret = preprint_r(eml,return_var=True)
            append_line(logfile,"[%s] parse_ret   :%s" % (func_name,parse_ret,))

            header  = eml['@message']['value']['header']['value']
            rawbody += eml['@message']['value']['rawbody']['value']
            for _k,_v in header.iteritems():
                headers[_k] = _v['value']
        except:
            pass
        try:
            extra_message = extra_message.encode('utf-8')
        except:
            pass
        rawbody += "\n\n" + extra_message

        # Add footer
        rawbody += "\n\n" + "(brought to you by %s)" % AppName

        append_line(logfile,"[%s] rawbody   :%s" % (func_name,rawbody,))

        mail.set_body(rawbody)

        # 一旦メッセージを生成
        mail.create_message()

        #preprint_r(mail.msg._headers)
        for _k,_v in headers.iteritems():
            append_line(logfile,"[%s] Headers %-12s: %s" % (func_name,_k,_v))
            try:
                del mail.msg[_k]
            except:
                pass
            if _k == "Subject":
                try:
                    mail.set_subject(_v.encode('utf_8'))
                except:
                    mail.set_subject(_v)
            else:
                mail.msg[_k] = _v

        try:
            del mail.msg["Content-Transfer-Encoding"]
            mail.msg["Content-Transfer-Encoding"] = "base64"
        except:
            pass

        for _header in mail.msg._headers:
            append_line(logfile,"[%s] Header %-12s: %s" % (func_name,_header[0],_header[1]))
        #sys.exit()

        try:
            mail.send()
            retval = True
        except MAIL_LIB_Exception, msg:
            append_line(logfile,"[%s] Error: %s" % (func_name,str(msg),))
        except Exception:
            append_line(logfile,"[%s] Error: failed to send mail." % (func_name,))
예제 #12
0
            pass
        command_args = [PARSER_COMMAND_ROUTE, "del", type, target, "dev", device]
        (ret,res) = execute_command(command_args)
        if ret != 0:
            retval = False

        return retval

"""
"""
if __name__ == '__main__':
    """Testing
    """
    parser = staticrouteParser()

    preprint_r(parser.do_status())
    parser.do_add("eth0","5.6.7.0","172.16.0.1")
    parser.do_del("eth0","5.6.7.0")
    preprint_r(parser.do_status())

    conf_arr = parser.read_conf()
    preprint_r(conf_arr)

    dop = DictOp()
    dop.addconf("parser",conf_arr)
    dop.add("parser",["eth1","2.3.4.5/32"],"172.16.0.10")
    dop.add("parser",["eth1","2.3.4.6/32"],"172.16.0.10")
    dop.add("parser",["eth1","2.3.4.7/32"],"172.16.0.10")
    #dop.insert_order("parser",["eth1","2.3.4.5/32"],0,is_parent_parser=True)
    #dop.insert_order("parser",["eth1","2.3.4.6/32"],0,is_parent_parser=True)
    dop.insert_order("parser",["eth1","2.3.4.7/32"],1,is_parent_parser=True)
예제 #13
0
            dop.add('__', new_key, val)
            dop.delete('__', new_key)
        elif action == "set":
            dop.set('__', new_key, val)
        else:
            dop.add('__', new_key, val)
        if iscomment is True:
            dop.comment('__', new_key)

        #preprint_r(dop.getconf('__'))
        new_lines = self._value_to_lines(dop.getconf('__'))
        #print "\n".join(new_lines)

        return new_lines


"""
"""
if __name__ == '__main__':
    """Testing
    """
    parser = xmlLikeConfParser()
    parser.set_source_file("/etc/collectd.conf")

    conf_arr = parser.read_conf()
    dop = DictOp()
    dop.addconf("parser", conf_arr)
    conf_arr = dop.getconf("parser")
    preprint_r(conf_arr)
    parser.write_conf(conf_arr, dryrun=True)
예제 #14
0
def send_mail(recipient=None,
              sender=None,
              server="localhost",
              port=25,
              message="",
              extra_message="",
              watch_name="",
              logfile="/dev/null"):
    retval = False

    func_name = sys._getframe(0).f_code.co_name
    append_line(logfile, "[%s] Entering function '%s'." % (
        func_name,
        func_name,
    ))

    smtp_server = server.split(":")[0]
    try:
        smtp_port = int(port)
    except:
        smtp_port = 25

    try:
        socket_timeout
    except:
        socket_timeout = 30

    if recipient is not None:

        append_line(logfile, "[%s] Connecting SMTP server" % (func_name, ))
        append_line(logfile, "[%s] smtp_server :%s" % (
            func_name,
            smtp_server,
        ))
        append_line(logfile, "[%s] smtp_port   :%s" % (
            func_name,
            smtp_port,
        ))

        mail = MAIL_LIB(smtp_server, smtp_port)

        if socket_timeout is None:
            socket_timeout = 30
        mail.set_timeout(int(socket_timeout))

        mail.set_verbosity(0)

        if sender is None:
            mail.set_sender(DEFAULT_SENDER)
        else:
            mail.set_sender(sender)

        mail.encoding = "utf-8"

        mail.set_recipients(recipient.split(","))
        append_line(logfile, "[%s] recipient   :%s" % (
            func_name,
            recipient,
        ))

        # デフォルトのヘッダをセット
        headers = {}
        headers['Subject'] = re.sub("\%\{watch_name\}", watch_name,
                                    DEFAULT_SUBJECT)

        # カテゴリ用のヘッダとボディを上書きでセット
        rawbody = ""
        try:
            append_line(logfile, "[%s] message   :%s" % (
                func_name,
                message,
            ))
            try:
                del headers["Content-Transfer-Encoding"]
                message = message.encode('utf-8')
                message = str(message)
            except:
                pass
            append_line(logfile,
                        "[%s] lang %s" % (func_name, os.environ['LANG']))
            extra_args = {"message": message}
            eml = emlParser().read_conf(extra_args=extra_args)
            parse_ret = preprint_r(eml, return_var=True)
            append_line(logfile, "[%s] parse_ret   :%s" % (
                func_name,
                parse_ret,
            ))

            header = eml['@message']['value']['header']['value']
            rawbody += eml['@message']['value']['rawbody']['value']
            for _k, _v in header.iteritems():
                headers[_k] = _v['value']
        except:
            pass
        try:
            extra_message = extra_message.encode('utf-8')
        except:
            pass
        rawbody += "\n\n" + extra_message

        # Add footer
        rawbody += "\n\n" + "(brought to you by %s)" % AppName

        append_line(logfile, "[%s] rawbody   :%s" % (
            func_name,
            rawbody,
        ))

        mail.set_body(rawbody)

        # 一旦メッセージを生成
        mail.create_message()

        #preprint_r(mail.msg._headers)
        for _k, _v in headers.iteritems():
            append_line(logfile,
                        "[%s] Headers %-12s: %s" % (func_name, _k, _v))
            try:
                del mail.msg[_k]
            except:
                pass
            if _k == "Subject":
                try:
                    mail.set_subject(_v.encode('utf_8'))
                except:
                    mail.set_subject(_v)
            else:
                mail.msg[_k] = _v

        try:
            del mail.msg["Content-Transfer-Encoding"]
            mail.msg["Content-Transfer-Encoding"] = "base64"
        except:
            pass

        for _header in mail.msg._headers:
            append_line(
                logfile,
                "[%s] Header %-12s: %s" % (func_name, _header[0], _header[1]))
        #sys.exit()

        try:
            mail.send()
            retval = True
        except MAIL_LIB_Exception, msg:
            append_line(logfile, "[%s] Error: %s" % (
                func_name,
                str(msg),
            ))
        except Exception:
            append_line(logfile,
                        "[%s] Error: failed to send mail." % (func_name, ))
예제 #15
0
      </domain>
    </arch>
  </guest>

  <guest>
    <os_type>hvm</os_type>
    <arch name='ppc'>
      <wordsize>32</wordsize>
      <emulator>/usr/bin/qemu-system-ppc</emulator>
      <machine>g3beige</machine>
      <machine>mpc8544ds</machine>
      <machine>bamboo</machine>
      <machine>ref405ep</machine>
      <machine>taihu</machine>
      <machine>mac99</machine>
      <machine>prep</machine>
      <machine>xenpv</machine>
      <domain type='qemu'>
      </domain>
    </arch>
  </guest>

</capabilities>
"""

    param = CapabilitiesConfigParam()
    param.load_xml_config(string)

    preprint_r(param.host)
    preprint_r(param.guest)