def cloud_clean( args=sys.argv[1:], # pylint: disable=W0102 config=None): """ Entrypoint for the cloud-clean CLI interface :param args: Command line arguments passed from user :param config: The config object to be used :return: None """ # Construct or configure cloud cleaner config if config is None: config = CloudCleanerConfig(args=args) else: config.set_args(args) # Register all the resource types and options with the configurator for resource in ALL_RESOURCES.values(): resource.register(config) config.parse_args() # Call the process method for the target resource type print("Options parsed, fetching resources") if config.get_arg("force"): ALL_RESOURCES[config.get_resource()].prep_deletion() ALL_RESOURCES[config.get_resource()].process() print("Resources fetched, cleaning") ALL_RESOURCES[config.get_resource()].clean() else: print("No changes made, force option not enabled") ALL_RESOURCES[config.get_resource()].process() if config.get_arg("email"): ALL_RESOURCES[config.get_resource()].send_emails()
def test_parser_with_name(self): parser = ArgumentParser() config = CloudCleanerConfig(parser=parser, args=["--os-auth-url", "http://no.com", "server", "--name", "test-.*"]) server = Server() server.register(config) config.parse_args() self.assertEqual("test-.*", config.get_arg("name")) self.assertEqual(Server.type_name, config.get_resource())
def test_set_args(self): parser = ArgumentParser() config = CloudCleanerConfig(parser=parser, args=[]) config.add_subparser("item") config.set_args(["--os-auth-url", "http://no.com", "item"]) config.parse_args() self.assertEqual("item", config.get_resource()) config.warning("Dummy warning") log = getLogger("cloud_cleaner") self.assertEqual(log.getEffectiveLevel(), WARNING) self.assertIsNone(config.get_arg("no_arg"))
def test_cloud_cleaner_server(self): config = CloudCleanerConfig(args=[]) ALL_RESOURCES["server"].process = Mock() ALL_RESOURCES["server"].clean = Mock() cloud_clean(args=[ "--os-auth-url", "http://no.com", "server", "--name", "derp" ], config=config) self.assertEqual("server", config.get_resource()) self.assertEqual("derp", config.get_arg("name")) self.assertEqual(1, len(ALL_RESOURCES["server"].process.mock_calls)) self.assertEqual(0, len(ALL_RESOURCES["server"].clean.mock_calls))
def test_cloud_cleaner_noopts(self): parser = ArgumentParser() config_module.DEFAULT_ARGUMENTS = [] config = CloudCleanerConfig(parser=parser) if version_info.major == 3: # Raised because no resource with self.assertRaises(MissingRequiredOptions): cloud_clean([], config) else: with self.assertRaises(SystemExit): cloud_clean([], config) self.assertIsNone(config.get_resource())
def test_resource_handled_from_args(self): parser = ArgumentParser() config = CloudCleanerConfig( parser=parser, args=["--os-auth-url", "httpp://no.com", Fip.type_name]) fip = Fip() # If config hasn't yet been registered, then there will be an error # from within this method, as intended with self.assertRaises(AttributeError): fip.process() fip.register(config) config.parse_args() self.assertEqual(Fip.type_name, config.get_resource())