Ejemplo n.º 1
0
    def startup(self):
        """
        Start a new namespace node by invoking the vnoded process that
        allocates a new namespace. Bring up the loopback device and set
        the hostname.

        :return: nothing
        """
        if self.up:
            raise Exception("already up")
        vnoded = [
            "%s/vnoded" % constants.CORE_SBIN_DIR, "-v", "-c",
            self.ctrlchnlname, "-l", self.ctrlchnlname + ".log", "-p",
            self.ctrlchnlname + ".pid"
        ]
        if self.nodedir:
            vnoded += ["-C", self.nodedir]
        env = self.session.get_environment(state=False)
        env["NODE_NUMBER"] = str(self.objid)
        env["NODE_NAME"] = str(self.name)

        try:
            tmp = subprocess.Popen(vnoded, stdout=subprocess.PIPE, env=env)
        except OSError:
            msg = "error running vnoded command: %s" % vnoded
            logger.exception("SimpleLxcNode.startup(): %s", msg)
            raise Exception(msg)

        try:
            self.pid = int(tmp.stdout.read())
            tmp.stdout.close()
        except ValueError:
            msg = "vnoded failed to create a namespace; "
            msg += "check kernel support and user priveleges"
            logger.exception("SimpleLxcNode.startup(): %s", msg)

        if tmp.wait():
            raise Exception("command failed: %s" % vnoded)

        self.vnodeclient = vnodeclient.VnodeClient(self.name,
                                                   self.ctrlchnlname)
        logger.info("bringing up loopback interface")
        self.cmd([constants.IP_BIN, "link", "set", "lo", "up"])
        logger.info("setting hostname: %s" % self.name)
        self.cmd(["hostname", self.name])
        self.up = True
Ejemplo n.º 2
0
    def startup(self):
        """
        Start a new namespace node by invoking the vnoded process that
        allocates a new namespace. Bring up the loopback device and set
        the hostname.

        :return: nothing
        """
        if self.up:
            raise ValueError("starting a node that is already up")

        # create a new namespace for this node using vnoded
        vnoded = [
            constants.VNODED_BIN,
            "-v",
            "-c", self.ctrlchnlname,
            "-l", self.ctrlchnlname + ".log",
            "-p", self.ctrlchnlname + ".pid"
        ]
        if self.nodedir:
            vnoded += ["-C", self.nodedir]
        env = self.session.get_environment(state=False)
        env["NODE_NUMBER"] = str(self.objid)
        env["NODE_NAME"] = str(self.name)

        output = utils.check_cmd(vnoded, env=env)
        self.pid = int(output)

        # create vnode client
        self.client = vnodeclient.VnodeClient(self.name, self.ctrlchnlname)

        # bring up the loopback interface
        logger.debug("bringing up loopback interface")
        self.check_cmd([constants.IP_BIN, "link", "set", "lo", "up"])

        # set hostname for node
        logger.debug("setting hostname: %s", self.name)
        self.check_cmd(["hostname", self.name])

        # mark node as up
        self.up = True