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)
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')
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)
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)
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)
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)
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')