コード例 #1
0
ファイル: core.py プロジェクト: carletes/container-cluster
    def start_nodes(self):
        self.log.debug("Starting nodes for cluster '%s'", self.name)

        def restart_if_needed(node):
            if node.state == NodeState.RUNNING:
                self.log.debug("Node '%s' running", node.name)
                return

            if node.state == NodeState.REBOOTING:
                self.log.debug("Node '%s' rebooting", node.name)
                return

            if node.state == NodeState.PENDING:
                self.log.debug("Node '%s' is being created", node.name)
                return

            error_states = {
                NodeState.TERMINATED,
                NodeState.ERROR,
                NodeState.UNKNOWN
            }

            if node.state in error_states:
                raise Exception("Node '%s' cannot be restarted" % (node.name,))

            self.log.debug("Rebooting node '%s'", node.name)
            self.provider.reboot_node(node)

        utils.parallel((restart_if_needed, node) for node in self.nodes)
        self.log.debug("%s: Waiting for nodes ...", self.name)
        nodes = self.provider.wait_until_running(*self.nodes)
        self.log.debug("start_nodes(): Nodes up: %s", nodes)
コード例 #2
0
    def start_nodes(self):
        self.log.debug("Starting nodes for cluster '%s'", self.name)

        def restart_if_needed(node):
            if node.state == NodeState.RUNNING:
                self.log.debug("Node '%s' running", node.name)
                return

            if node.state == NodeState.REBOOTING:
                self.log.debug("Node '%s' rebooting", node.name)
                return

            if node.state == NodeState.PENDING:
                self.log.debug("Node '%s' is being created", node.name)
                return

            error_states = {
                NodeState.TERMINATED, NodeState.ERROR, NodeState.UNKNOWN
            }

            if node.state in error_states:
                raise Exception("Node '%s' cannot be restarted" %
                                (node.name, ))

            self.log.debug("Rebooting node '%s'", node.name)
            self.provider.reboot_node(node)

        utils.parallel((restart_if_needed, node) for node in self.nodes)
        self.log.debug("%s: Waiting for nodes ...", self.name)
        nodes = self.provider.wait_until_running(*self.nodes)
        self.log.debug("start_nodes(): Nodes up: %s", nodes)
コード例 #3
0
ファイル: core.py プロジェクト: carletes/container-cluster
 def provision_nodes(self):
     try:
         utils.parallel((self.provider.provision_node, n)
                        for n in self.nodes)
     except Exception as exc:
         self.log.debug("Cluster provisioning failed: %s", exc,
                        exc_info=True)
         raise
コード例 #4
0
 def provision_nodes(self):
     try:
         utils.parallel(
             (self.provider.provision_node, n) for n in self.nodes)
     except Exception as exc:
         self.log.debug("Cluster provisioning failed: %s",
                        exc,
                        exc_info=True)
         raise
コード例 #5
0
ファイル: core.py プロジェクト: carletes/container-cluster
    def nodes(self):
        if not self._nodes:
            self.log.debug("Creating nodes for cluster '%s'", self.name)
            etcd_nodes = []
            master_node = None
            worker_nodes = []
            nodes_data = self.config.clusters[self.name]["nodes"]
            for n in nodes_data:
                node_type = n["type"]
                if node_type == "etcd":
                    etcd_nodes.append(n)
                elif node_type == "master":
                    master_node = n
                elif node_type == "worker":
                    worker_nodes.append(n)
                else:
                    raise TypeError("Invalid node type '%s' for node %s" %
                                    (node_type, n))

            # Start first the `etcd` nodes, since the etcd endpoint is needed in
            # all other nodes, and it will not be known until the `etcd` nodes
            # are up.
            self._nodes = utils.parallel((self.provider.ensure_node,
                                          n["name"],
                                          NODE_TYPES[n["type"]],
                                          n["size"],
                                          self,
                                          self.config)
                                         for n in etcd_nodes)
            self._etcd_endpoint = make_etcd_endpoint(self._nodes)

            # Start now the master node, since its address is needed in all
            # worker nodes, and it will not be known until the master node is
            # up.
            n = master_node
            self._nodes.append(self.provider.ensure_node(n["name"],
                                                         MasterNode,
                                                         n["size"],
                                                         self,
                                                         self.config))
            self._master_ip = make_master_ip(self._nodes)

            # Start now all worker nodes.
            self._nodes.extend(utils.parallel((self.provider.ensure_node,
                                               n["name"],
                                               NODE_TYPES[n["type"]],
                                               n["size"],
                                               self,
                                               self.config)
                                              for n in worker_nodes))

        return self._nodes
コード例 #6
0
def test_errors_in_parallel():
    def divide_by_zero(n):
        return n / 0

    def key_error(k):
        return {}[k]

    try:
        divide_by_zero(42)
    except ZeroDivisionError as err:
        divide_by_zero_err = str(err)

    with pytest.raises(utils.MultipleError) as err:
        utils.parallel(((utils.run, "echo foo"), (key_error, "no-such-key"),
                        (divide_by_zero, 42), (utils.run, "echo bar")))
    errors = set(str(exc) for exc in err.value)
    assert errors == set(("'no-such-key'", divide_by_zero_err))
コード例 #7
0
    def nodes(self):
        if not self._nodes:
            self.log.debug("Creating nodes for cluster '%s'", self.name)
            etcd_nodes = []
            master_node = None
            worker_nodes = []
            nodes_data = self.config.clusters[self.name]["nodes"]
            for n in nodes_data:
                node_type = n["type"]
                if node_type == "etcd":
                    etcd_nodes.append(n)
                elif node_type == "master":
                    master_node = n
                elif node_type == "worker":
                    worker_nodes.append(n)
                else:
                    raise TypeError("Invalid node type '%s' for node %s" %
                                    (node_type, n))

            # Start first the `etcd` nodes, since the etcd endpoint is needed in
            # all other nodes, and it will not be known until the `etcd` nodes
            # are up.
            self._nodes = utils.parallel(
                (self.provider.ensure_node, n["name"], NODE_TYPES[n["type"]],
                 n["size"], self, self.config) for n in etcd_nodes)
            self._etcd_endpoint = make_etcd_endpoint(self._nodes)

            # Start now the master node, since its address is needed in all
            # worker nodes, and it will not be known until the master node is
            # up.
            n = master_node
            self._nodes.append(
                self.provider.ensure_node(n["name"], MasterNode, n["size"],
                                          self, self.config))
            self._master_ip = make_master_ip(self._nodes)

            # Start now all worker nodes.
            self._nodes.extend(
                utils.parallel(
                    (self.provider.ensure_node, n["name"],
                     NODE_TYPES[n["type"]], n["size"], self, self.config)
                    for n in worker_nodes))

        return self._nodes
コード例 #8
0
def test_errors_in_parallel():
    def divide_by_zero(n):
        return n / 0

    def key_error(k):
        return {}[k]

    try:
        divide_by_zero(42)
    except ZeroDivisionError as err:
        divide_by_zero_err = str(err)

    with pytest.raises(utils.MultipleError) as err:
        utils.parallel(((utils.run, "echo foo"),
                        (key_error, "no-such-key"),
                        (divide_by_zero, 42),
                        (utils.run, "echo bar")))
    errors = set(str(exc) for exc in err.value)
    assert errors == set(("'no-such-key'", divide_by_zero_err))