예제 #1
0
def test_load_rules_from_file_no_mapping(tmpdir):
    p = tmpdir.join("missing-keys.yaml")
    p.write('''rules:
                 - foo
                 - bar
            ''')
    with pytest.raises(TypeError):
        load_rules_from_file(str(p))
예제 #2
0
def test_load_rules_from_file(tmpdir):
    p = tmpdir.join("rules.yaml")
    p.write('''rules:
                 - id: rule-1
                   resources: [foos, bars]
                   jmespath: a.b.c
                   ttl: 5m
            ''')
    load_rules_from_file(str(p))
예제 #3
0
def test_load_rules_from_file_missing_keys(tmpdir):
    p = tmpdir.join("missing-keys.yaml")
    p.write('''rules:
                 - resources: [foos, bars]
                   jmespath: a.b.c
                   ttl: 5m
            ''')
    with pytest.raises(TypeError):
        load_rules_from_file(str(p))
예제 #4
0
def main(args=None):
    parser = cmd.get_parser()
    args = parser.parse_args(args)

    logging.basicConfig(
        format="%(asctime)s %(levelname)s: %(message)s",
        level=logging.DEBUG if args.debug else logging.INFO,
    )

    config_str = ", ".join(f"{k}={v}" for k, v in sorted(vars(args).items()))
    logger.info(f"Janitor v{__version__} started with {config_str}")

    if args.dry_run:
        logger.info("**DRY-RUN**: no deletions will be performed!")

    if args.rules_file:
        rules = load_rules_from_file(args.rules_file)
        logger.info(f"Loaded {len(rules)} rules from file {args.rules_file}")
    else:
        rules = []

    return run_loop(
        args.once,
        args.include_resources,
        args.exclude_resources,
        args.include_namespaces,
        args.exclude_namespaces,
        rules,
        args.interval,
        args.delete_notification,
        args.deployment_time_annotation,
        args.resource_context_hook,
        args.dry_run,
    )
예제 #5
0
def main(args=None):
    parser = cmd.get_parser()
    args = parser.parse_args(args)

    logging.basicConfig(format='%(asctime)s %(levelname)s: %(message)s',
                        level=logging.DEBUG if args.debug else logging.INFO)

    config_str = ', '.join(f'{k}={v}' for k, v in sorted(vars(args).items()))
    logger.info(f'Janitor v{__version__} started with {config_str}')

    if args.dry_run:
        logger.info('**DRY-RUN**: no deletions will be performed!')

    if args.rules_file:
        rules = load_rules_from_file(args.rules_file)
        logger.info(f'Loaded {len(rules)} rules from file {args.rules_file}')
    else:
        rules = []

    if args.tiller_host and args.tiller_port:
        tiller = Tiller(args.tiller_host, args.tiller_port)
    else:
        tiller = None

    return run_loop(args.once, args.include_resources, args.exclude_resources,
                    args.include_namespaces, args.exclude_namespaces, rules,
                    args.interval, args.delete_notification, args.dry_run,
                    tiller)
예제 #6
0
def main(args=None):
    parser = cmd.get_parser()
    args = parser.parse_args(args)

    std = logging.StreamHandler(sys.stdout)
    logHandlers = [std]

    if args.slack_webhook_url:
        from slack_logger import SlackHandler, SlackFormatter
        sh = SlackHandler(username='******',
                          icon_emoji=':robot_face:',
                          url=args.slack_webhook_url)
        sh.addFilter(lambda x: x.levelno != logging.DEBUG)
        sh.setFormatter(SlackFormatter())
        logHandlers.append(sh)

    logging.basicConfig(
        handlers=logHandlers,
        format="%(asctime)s %(levelname)s: %(message)s",
        level=logging.DEBUG if args.debug else logging.INFO,
    )

    config_str = ", ".join(f"{k}={v}" for k, v in sorted(vars(args).items()))
    logger.info(f"Janitor v{__version__} started with {config_str}")

    if args.dry_run:
        logger.info("**DRY-RUN**: no deletions will be performed!")

    if args.rules_file:
        rules = load_rules_from_file(args.rules_file)
        logger.info(f"Loaded {len(rules)} rules from file {args.rules_file}")
    else:
        rules = []

    return run_loop(
        args.once,
        args.include_resources,
        args.exclude_resources,
        args.include_namespaces,
        args.exclude_namespaces,
        rules,
        args.interval,
        args.delete_notification,
        args.deployment_time_annotation,
        args.resource_context_hook,
        args.wait_after_delete,
        args.dry_run,
    )
예제 #7
0
def main(args=None):
    parser = cmd.get_parser()
    args = parser.parse_args(args)

    logging.basicConfig(format='%(asctime)s %(levelname)s: %(message)s',
                        level=logging.DEBUG if args.debug else logging.INFO)

    logger.info(f'Janitor v{__version__} started with config {args}')

    if args.dry_run:
        logger.info('**DRY-RUN**: no deletions will be performed!')

    if args.rules_file:
        rules = load_rules_from_file(args.rules_file)
        logger.info(f'Loaded {len(rules)} rules from file {args.rules_file}')
    else:
        rules = []

    return run_loop(args.once, args.include_resources, args.exclude_resources,
                    args.include_namespaces, args.exclude_namespaces, rules,
                    args.interval, args.dry_run)
예제 #8
0
def test_load_rules_from_wrong_file(tmpdir):
    p = tmpdir.join("wrong.yaml")
    p.write("wrongformat")
    with pytest.raises(KeyError):
        load_rules_from_file(str(p))
예제 #9
0
def test_load_rules_from_empty_file(tmpdir):
    p = tmpdir.join("empty.yaml")
    p.write("rules: []")
    load_rules_from_file(str(p))