Пример #1
0
    def test_user_provided_for_minion(self):
        '''
        Check the user-provided minion replacement is valid,
        at least for some roles
        '''
        replacement, roles = get_replacement_for(
            self.minion_3,
            replacement=self.other_node,
            **self.get_replacement_for_kwargs)

        # the minion role should be migrated to other_node
        self.assertEqual(replacement, self.other_node,
                         'unexpected replacement')
        self.assertNotIn('etcd', roles, 'etcd role found in replacement')
        self.assertNotIn('kube-master', roles,
                         'kube-master role found in replacement')
        self.assertIn('kube-minion', roles,
                      'kube-minion role not found in replacement')

        # check we cannot use an excluded node
        with self.assertRaises(ExecutionAborted):
            replacement, roles = get_replacement_for(
                self.minion_1,
                replacement=self.minion_3,
                excluded=[self.minion_3],
                **self.get_replacement_for_kwargs)
Пример #2
0
    def test_auto_etcd_replacement(self):
        '''
        Check we can get a replacement for a master, migrating all the
        roles we can to that replacement...
        '''
        with patch('caasp_nodes._get_one_for_role',
                   MagicMock(return_value=self.other_node)):

            replacement, roles = get_replacement_for(
                self.master_2, **self.get_replacement_for_kwargs)

            # we can migrate both the master and the etcd role to a empty node
            self.assertEqual(replacement, self.other_node,
                             'unexpected replacement')
            self.assertIn('etcd', roles, 'etcd role not found in replacement')
            self.assertIn('kube-master', roles,
                          'kube-master role not found in replacement')
            self.assertNotIn('kube-minion', roles,
                             'kube-minion role found in replacement')

        with patch('caasp_nodes._get_one_for_role',
                   MagicMock(return_value=self.minion_1)):

            replacement, roles = get_replacement_for(
                self.master_2, **self.get_replacement_for_kwargs)

            # we can only migrate the etcd role (and not the master role) to a minion
            self.assertEqual(replacement, self.minion_1,
                             'unexpected replacement')
            self.assertIn('etcd', roles, 'etcd role not found in replacement')
            self.assertNotIn('kube-master', roles,
                             'kube-master role not found in replacement')
Пример #3
0
    def test_user_provided_for_etcd_minion(self):
        '''
        Check the user-provided etcd & minion replacement is valid,
        at least for some roles
        '''
        kwargs = self.get_replacement_for_kwargs

        # add one of the minions to the etcd cluster
        etcd_members = [self.master_1, self.master_2, self.minion_1]
        kwargs.update({
            'etcd_members': etcd_members,
            'booted_etcd_members': etcd_members,
        })

        replacement, roles = get_replacement_for(self.minion_1,
                                                 replacement=self.other_node,
                                                 **kwargs)

        # when removing minion_1 (with roles minion and etcd), we can migrate
        # both roles to a free node
        self.assertEqual(replacement, self.other_node,
                         'unexpected replacement')
        self.assertIn('etcd', roles, 'etcd role not found in replacement')
        self.assertNotIn('kube-master', roles,
                         'kube-master role found in replacement')
        self.assertIn('kube-minion', roles,
                      'kube-minion role not found in replacement')

        # however, we can migrate only the etcd role to another minion
        # (as it is a user provided replacement, it will raise an exception)
        with self.assertRaises(ExecutionAborted):
            replacement, roles = get_replacement_for(self.minion_1,
                                                     replacement=self.minion_3,
                                                     **kwargs)
Пример #4
0
 def test_forbidden_target(self):
     '''
     Check get_replacement_for() realizes the CA
     cannot be removed
     '''
     with self.assertRaises(ExecutionAborted):
         replacement, roles = get_replacement_for(
             self.ca,
             replacement=self.minion_3,
             **self.get_replacement_for_kwargs)
Пример #5
0
 def test_forbidden_replacement(self):
     '''
     Check get_replacement_for() realizes the CA
     is not a valid replacement.
     '''
     # the master role cannot be migrated to a CA
     with self.assertRaises(ExecutionAborted):
         replacement, roles = get_replacement_for(
             self.master_2,
             replacement=self.ca,
             **self.get_replacement_for_kwargs)
Пример #6
0
 def test_invalid_etcd_replacement(self):
     '''
     Check get_replacement_for() realizes a minion
     is not a valid replacement for a master & etcd.
     '''
     # the master role cannot be migrated to a minion
     with self.assertRaises(ExecutionAborted):
         replacement, roles = get_replacement_for(
             self.master_2,
             replacement=self.minion_3,
             **self.get_replacement_for_kwargs)
Пример #7
0
    def test_user_provided_for_etc_master(self):
        '''
        Check the user-provided etcd & master replacement is valid,
        at least for some roles
        '''
        replacement, roles = get_replacement_for(
            self.master_2,
            replacement=self.other_node,
            **self.get_replacement_for_kwargs)

        self.assertEqual(replacement, self.other_node,
                         'unexpected replacement')
        self.assertIn('etcd', roles, 'etcd role not found in replacement')
        self.assertIn('kube-master', roles,
                      'kube-master role not found in replacement')
        self.assertNotIn('kube-minion', roles,
                         'kube-minion role found in replacement')