コード例 #1
0
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()
コード例 #2
0
 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())
コード例 #3
0
 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"))
コード例 #4
0
 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))
コード例 #5
0
 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())
コード例 #6
0
 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())