示例#1
0
    def after_spawn(self):
        pool = self.other_attribute("pool").used_pool()
        size = self.io().stat(self.get_tmp_volume_path()).st_size
        volume_tpl = paths.template("volume.xml")
        xml = volume_tpl.safe_substitute({
            "name": self.component_entity(),
            "capacity": size
            })

        # FIXME: Add error handling
        volume = pool.createXML(xml)

        def read_handler(stream, data, file_):
            return file_.read(data)

        self.say("importing...")
        with open(self.get_tmp_volume_path(), 'r') as image:
            stream = self.virt().newStream(0)
            volume.upload(stream, 0, 0, 0)
            stream.sendAll(read_handler, image)
            stream.finish()

        disk_tpl = paths.template("disk.xml")
        xml = disk_tpl.safe_substitute({
            "pool": pool.name(),
            "volume": self.component_entity()
        })

        self.parent().add_xml('devices', xml)
        self.io().rm(self._tempdir)
示例#2
0
    def spawn(self):
        template = 'mode.xml'

        if self._get_dev():
            template = 'mode_route_dev.xml'

        xml = paths.template(template)
        self.get_parent().add_xml(xml.safe_substitute({
            'type': self._get_mode(),
            'dev': self._get_dev()
        }))
示例#3
0
 def spawn(self):
     settings = {
         'ip': self.setting('ip', '192.168.122.1'),
         'netmask': self.setting('netmask', '255.255.255.0'),
         'start': self.setting('dhcp/start', '192.168.122.2'),
         'end': self.setting('dhcp/end', '192.168.122.254')
     }
     self.say("setup ipv4 network")
     self.say("gateway ip = {}".format(settings["ip"]))
     self.say("dhcp       = {}/{}".format(settings["start"], settings["end"]))
     xml = paths.template('ipv4.xml')
     self.get_parent().add_xml(xml.safe_substitute(settings))
示例#4
0
    def _spawn_network(self):
        self.childs_run("spawn")

        replace = {'config': "\n".join(self.xml_net),
                   'name': self.name}

        tpl = paths.template('network-component.xml')
        xml = tpl.safe_substitute(replace)

        # FIXME: Handle case where the network already is used by another
        # device
        try:
            self.virt().networkDefineXML(xml)
            net = self.get_network(self.name)
            return net
        except libvirt.libvirtError as err:
            raise error.ExecError("Could not define {}: {}".format(self.name, err))
示例#5
0
    def _spawn_domain(self):
        self.say("spawning...")
        self.xml_dfn = {'devices': ''}
        self.each_child("spawn")

        caps = self.get_capabilities()
        self.add_meta('created', time())
        self.add_meta('definition', self.config("runtime/definition"))
        self.add_meta('user', self.io().user())

        xml = paths.template('node.xml')
        self.xml_dfn['name'] = self.entity()
        self.xml_dfn['meta'] = self._generate_meta_xml()
        self.xml_dfn.update(caps)

        self.finalize()
        self.each_child("after_spawn")
        try:
            self.virt().defineXML(xml.safe_substitute(self.xml_dfn))
            domain = self.get_domain(self.entity())
            return domain
        except libvirt.libvirtError as err:
            raise error.ExecError("Could not start {}: {}".format(self.entity(), str(err)))
示例#6
0
 def _gen_xml(self):
     xml = paths.template('network.xml')
     return xml.safe_substitute({'network': self.network_name()})
示例#7
0
 def spawn(self):
     if not self.settings():
         return
     xml = paths.template('graphic.xml')
     self.add_xml('devices', xml.safe_substitute())