Ejemplo n.º 1
0
    def test_node_deletion_redeploy_started_for_proper_controllers(
            self, mcast):
        self.env.create(nodes_kwargs=[
            {
                'roles': ['controller'],
                'status': consts.NODE_STATUSES.provisioned
            },
            {
                'roles': ['controller'],
                'status': consts.NODE_STATUSES.discover
            },
        ])
        cluster_db = self.env.clusters[0]

        node_to_delete = self.env.create_node(
            cluster_id=cluster_db.id,
            roles=['controller'],
            status=consts.NODE_STATUSES.ready)
        node_to_deploy = self.env.create_node(
            cluster_id=cluster_db.id,
            roles=['controller'],
            status=consts.NODE_STATUSES.ready)

        manager_ = manager.NodeDeletionTaskManager(cluster_id=cluster_db.id)
        manager_.execute([node_to_delete])

        args, kwargs = mcast.call_args_list[0]
        depl_info = args[1][0]['args']['deployment_info']

        self.assertEqual(node_to_deploy.uid, depl_info[0]['uid'])
Ejemplo n.º 2
0
    def test_delete_nodes_do_not_run_if_there_is_deletion_running(self, _):
        self.env.create(nodes_kwargs=[{'roles': ['controller']}] * 3)
        self.task_manager = manager.NodeDeletionTaskManager(
            cluster_id=self.env.clusters[0].id)

        self.task_manager.execute(self.env.nodes)
        self.assertRaisesRegexp(
            errors.DeploymentAlreadyStarted,
            'Cannot perform the actions because there are running tasks',
            self.task_manager.execute, self.env.nodes)
Ejemplo n.º 3
0
    def test_node_deletion_task_manager_invalid_cluster(self):
        self.env.create(nodes_kwargs=[{
            "pending_deletion": True,
            "status": "ready"
        }])
        cluster_db = self.env.clusters[0]
        objects.Cluster.clear_pending_changes(cluster_db)
        manager_ = manager.NodeDeletionTaskManager()

        self.assertRaises(errors.InvalidData, manager_.execute,
                          cluster_db.nodes)
Ejemplo n.º 4
0
    def test_node_deletion_task_manager(self):
        self.env.create(nodes_kwargs=[{
            "pending_deletion": True,
            "status": "ready"
        }])
        cluster_db = self.env.clusters[0]
        objects.Cluster.clear_pending_changes(cluster_db)
        manager_ = manager.NodeDeletionTaskManager(cluster_id=cluster_db.id)
        task = manager_.execute(cluster_db.nodes)
        node = cluster_db.nodes[0]
        self.assertEqual(node.status, NODE_STATUSES.removing)
        self.db.commit()
        self.env.wait_ready(task, timeout=5)

        self.assertEqual(self.db.query(models.Node).count(), 0)
Ejemplo n.º 5
0
    def test_node_deletion_task_failed_with_controller_in_error(self):
        self.env.create(nodes_kwargs=[
            {'roles': ['controller'],
             'status': consts.NODE_STATUSES.error},
        ])
        cluster_db = self.env.clusters[0]

        node_to_delete = self.env.create_node(
            cluster_id=cluster_db.id,
            roles=['controller'],
            status=consts.NODE_STATUSES.ready
        )

        manager_ = manager.NodeDeletionTaskManager(cluster_id=cluster_db.id)
        self.assertRaises(errors.ControllerInErrorState,
                          manager_.execute, [node_to_delete])
Ejemplo n.º 6
0
    def test_node_deletion_task_manager_works_for_nodes_not_in_cluster(self):
        self.env.create(nodes_kwargs=[{
            "pending_deletion": True,
            "status": "ready"
        }])
        cluster_db = self.env.clusters[0]
        objects.Cluster.clear_pending_changes(cluster_db)
        node = cluster_db.nodes[0]
        objects.Node.update(node, {'cluster_id': None})
        self.db.commit()

        self.db.refresh(node)
        self.db.refresh(cluster_db)
        manager_ = manager.NodeDeletionTaskManager()
        task = manager_.execute([node])
        self.db.commit()
        # Nodes are removed immediately
        self.assertEqual(task.status, TASK_STATUSES.ready)

        self.assertEqual(self.db.query(models.Node).count(), 0)
Ejemplo n.º 7
0
    def test_delete_nodes_reelection_if_primary_for_deletion(self, _):
        self.env.create(nodes_kwargs=[{
            'roles': ['controller'],
            'status': consts.NODE_STATUSES.ready
        }] * 3)
        cluster = self.env.clusters[0]
        task_manager = manager.NodeDeletionTaskManager(cluster_id=cluster.id)
        objects.Cluster.set_primary_roles(cluster, self.env.nodes)
        primary_node = filter(lambda n: 'controller' in n.primary_roles,
                              self.env.nodes)[0]

        task_manager.execute([primary_node])
        self.env.refresh_nodes()

        new_primary = filter(
            lambda n:
            ('controller' in n.primary_roles and n.pending_deletion is False),
            self.env.nodes)[0]

        self.assertNotEqual(primary_node.id, new_primary.id)