def test_should_not_raise_exceptions_when_executing_all_bootstrap_steps( self): senza_mock = SenzaWrapper(CONFIG) senza_create_mock = senza_mock.create_stack = MagicMock() senza_switch_mock = senza_mock.switch_traffic = MagicMock( return_value=True) os.listdir = MagicMock(side_effect=self.__side_effect_config_list) controller = ClusterBootstrapController( base_url=BASE_URL, stack_name=STACK_NAME, sharding_level=SHARDING_LEVEL, replication_factor=REPLICATION_FACTOR, image_version=IMAGE_VERSION, oauth_token=OAUTH_TOKEN, senza_wrapper=senza_mock) controller.set_retry_count(1) controller.set_retry_wait(0) urlopen_mock = MagicMock( side_effect=self.__side_effect_return_cluster_state) urllib.request.urlopen = urlopen_mock controller.bootstrap_cluster() senza_create_mock.assert_called_once_with(STACK_NAME, INITIAL_BOOTSTRAP_VERSION, IMAGE_VERSION) senza_switch_mock.assert_called_once_with(STACK_NAME, INITIAL_BOOTSTRAP_VERSION, 100)
def test_should_write_warning_when_waiting_for_cluster_to_be_ready_and_timeout_on_cluster_state( self, log): senza_mock = SenzaWrapper(CONFIG) controller = ClusterBootstrapController( base_url=BASE_URL, stack_name=STACK_NAME, sharding_level=SHARDING_LEVEL, replication_factor=REPLICATION_FACTOR, image_version=IMAGE_VERSION, oauth_token=OAUTH_TOKEN, senza_wrapper=senza_mock) controller.set_retry_count(1) controller.set_retry_wait(0) urlopen_mock = MagicMock(side_effect=self.__side_effect_timeout) urllib.request.urlopen = urlopen_mock controller.wait_for_cluster_to_be_ready() log.check( ('root', 'WARNING', 'Clould not get cluster state: Failed sending request to Solr ' '[' + BASE_URL + '/admin/collections?action=CLUSTERSTATUS&wt=json]: ' 'HTTP Error 504: None'), ('root', 'WARNING', 'Cluster is not ready, yet, retrying ...'), ('root', 'WARNING', 'Clould not get cluster state: Failed sending request to Solr ' '[' + BASE_URL + '/admin/collections?action=CLUSTERSTATUS&wt=json]: ' 'HTTP Error 504: None'), ('root', 'WARNING', 'Cluster is not ready, yet, retrying ...'), ('root', 'WARNING', 'Cluster did not become ready in time.'))
def test_should_write_warning_when_waiting_for_cluster_to_be_ready_and_not_enough_nodes_are_available( self, log): senza_mock = SenzaWrapper(CONFIG) sharding_level = SHARDING_LEVEL + 1 controller = ClusterBootstrapController( base_url=BASE_URL, stack_name=STACK_NAME, sharding_level=sharding_level, replication_factor=REPLICATION_FACTOR, image_version=IMAGE_VERSION, oauth_token=OAUTH_TOKEN, senza_wrapper=senza_mock) controller.set_retry_count(1) controller.set_retry_wait(0) urlopen_mock = MagicMock( side_effect=self.__side_effect_return_cluster_state) urllib.request.urlopen = urlopen_mock controller.wait_for_cluster_to_be_ready() log.check( ('root', 'WARNING', 'Cluster is not ready, yet, retrying ...'), ('root', 'WARNING', 'Cluster is not ready, yet, retrying ...'), ('root', 'WARNING', 'Cluster did not become ready in time.'))
def setUp(self): senza_wrapper = SenzaWrapper(CONFIG) self.__controller = ClusterBootstrapController( base_url=BASE_URL, stack_name=STACK_NAME, sharding_level=SHARDING_LEVEL, replication_factor=REPLICATION_FACTOR, image_version=IMAGE_VERSION, oauth_token=OAUTH_TOKEN, senza_wrapper=senza_wrapper) self.__controller.set_retry_count(1) self.__controller.set_retry_wait(0)
def test_should_not_raise_any_exception_when_creating_a_new_cluster(self): senza_mock = SenzaWrapper(CONFIG) senza_create_mock = senza_mock.create_stack = MagicMock() controller = ClusterBootstrapController( base_url=BASE_URL, stack_name=STACK_NAME, sharding_level=SHARDING_LEVEL, replication_factor=REPLICATION_FACTOR, image_version=IMAGE_VERSION, oauth_token=OAUTH_TOKEN, senza_wrapper=senza_mock) controller.create_cluster() senza_create_mock.assert_called_once_with(STACK_NAME, INITIAL_BOOTSTRAP_VERSION, IMAGE_VERSION)
def solrcloud_cli(cli_args): parser = build_args_parser() args = parser.parse_args(cli_args) if not args.config: args.config = os.path.expanduser(DEFAULT_CONF_FILE) if not os.path.exists(args.config): print('Configuration file does not exist:', args.config) parser.print_usage() return with open(args.config, 'rb') as fd: settings = yaml.load(fd) senza_wrapper = SenzaWrapper(args.senza_configuration) if args.region: senza_wrapper.set_region(args.region) for key, value in settings.items(): senza_wrapper.add_parameter(key, value) if args.command in ['bootstrap']: controller = ClusterBootstrapController( base_url=settings['SolrBaseUrl'], stack_name=settings['ApplicationId'], sharding_level=args.sharding_level, replication_factor=args.replication_level, image_version=args.image_version, oauth_token=args.token, senza_wrapper=senza_wrapper) elif args.command in [ 'deploy', 'create-new-cluster', 'delete-old-cluster', 'add-new-nodes', 'delete-old-nodes', 'switch' ]: controller = ClusterDeploymentController( base_url=settings['SolrBaseUrl'], stack_name=settings['ApplicationId'], image_version=args.image_version, oauth_token=args.token, senza_wrapper=senza_wrapper) elif args.command in ['delete']: controller = ClusterDeleteController( base_url=settings['SolrBaseUrl'], stack_name=settings['ApplicationId'], oauth_token=args.token, senza_wrapper=senza_wrapper) else: print('Unknown command:', args.command) parser.print_usage() return if args.command == 'bootstrap': controller.bootstrap_cluster() elif args.command == 'deploy': controller.deploy_new_version() elif args.command == 'delete': controller.delete_cluster() elif args.command == 'create-new-cluster': controller.create_cluster() elif args.command == 'delete-old-cluster': controller.delete_cluster() elif args.command == 'add-new-nodes': controller.add_new_nodes_to_cluster() elif args.command == 'delete-old-nodes': controller.delete_old_nodes_from_cluster() elif args.command == 'switch': controller.switch_traffic()