Ejemplo n.º 1
0
def test_ask_stack_modules(hcl_fname, invalid, monkeypatch):
    # Single region
    inputs = ['', '']
    input_generator = (i for i in inputs)
    monkeypatch.setattr('builtins.input', lambda prompt: next(input_generator))
    tg = TerragruntGenerator(num_regions=1,
                             debug=True,
                             region='ap-northeast-1',
                             stack={
                                 'env_inputs': {},
                                 0: {
                                     'region': 'eu-west-3',
                                     'modules': {},
                                     'region_inputs': {}
                                 }
                             })
    tg.stacks_dir = os.path.join(os.path.abspath(os.path.curdir), 'stacks')
    tg.common_template = hcl_fname
    tg.get_stack_env()
    if not invalid:
        tg.ask_stack_modules()
    else:
        with pytest.raises((ValueError, UndefinedError, TemplateSyntaxError)):
            tg.ask_common_modules()

    pprint(tg.stack)
Ejemplo n.º 2
0
def test_ask_region(monkeypatch):
    # Single input
    inputs = ['n', 'eu-west-3']
    input_generator = (i for i in inputs)
    monkeypatch.setattr('builtins.input', lambda prompt: next(input_generator))
    tg = TerragruntGenerator(debug=True)
    tg.ask_region()
    pprint(tg.stack)
    assert tg.regions == ['eu-west-3']
Ejemplo n.º 3
0
def test_ask_simple_question_defaults(monkeypatch):
    monkeypatch.setattr('builtins.input', lambda x: "ben")
    tg = TerragruntGenerator(debug=True).simple_question(
        'What is your name', 'frank')
    assert tg == "ben"
    monkeypatch.setattr('builtins.input', lambda x: "")
    tg = TerragruntGenerator(debug=True).simple_question(
        'What is your name', 'frank')
    assert tg == "frank"
Ejemplo n.º 4
0
def test_choice_question(monkeypatch, capsys):
    with pytest.raises(ValueError) as e:
        TerragruntGenerator(debug=True).choice_question(
            'What is your name', 'frank')
    assert "Default is not a list" in str(e.value)

    monkeypatch.setattr('builtins.input', lambda x: "frank")
    tg = TerragruntGenerator(debug=True).choice_question(
        'What is your name', ['frank'])
    assert tg == "frank"

    monkeypatch.setattr('builtins.input', lambda x: "")
    tg = TerragruntGenerator(debug=True).choice_question(
        'What is your name', ['frank', 'sam'])
    assert tg == "frank"
def test_cidr_stack(tmpdir):
    with open(os.path.join('stacks', 'cidr-issue.hcl'), 'r') as f:
        out = hcl.load(f)
    p = tmpdir.mkdir("sub")
    os.chdir(p)

    tg = TerragruntGenerator(debug=True, terraform_version="0.11", headless=True, num_azs=3)
    tg.region = 'ap-northeast-1'
    tg.stack[0] = StackParser(out).stack

    tg.templates_dir = TEMPLATES_DIR
    print(os.path.exists(tg.templates_dir))
    print(tg.templates_dir)
    tg.get_tpl_env()

    # with open()

    tg.ask_terragrunt_version()
    tg.region_num = 0
    tg.stack[0]['region_inputs'].update({'region': tg.region})
    region_dict = {'is_service': False, 'inputs': tg.stack[0]['region_inputs']}
    rendered_file = tg.tpl_env.get_template(tg.service_template).render(region_dict)
    pprint(region_dict)
    print(rendered_file)
Ejemplo n.º 6
0
def test_ask_availability_zones(monkeypatch):
    # Single region
    inputs = ['', 'max']
    input_generator = (i for i in inputs)
    monkeypatch.setattr('builtins.input', lambda prompt: next(input_generator))
    tg = TerragruntGenerator(num_regions=1,
                             debug=True,
                             region='ap-northeast-1')
    tg.get_aws_availability_zones()
    tg.ask_availability_zones()

    assert tg.num_azs == 3
def test_render_service_vpc(tpl_fname, invalid, version, tmpdir):
    with open(os.path.join(FIXTURE_DIR, tpl_fname), 'rb') as fp:
        print(f'\n\ntpl_fname is {tpl_fname}\n\n')

        if not invalid:
            inp = fp.read()
            tg = TerragruntGenerator(debug=True, terraform_version=version, headless=True)
            tg.templates_dir = FIXTURE_DIR
            tg.stack = SINGLE_STACK
            tg.ask_terragrunt_version()

            p = tmpdir.mkdir("sub")
            os.chdir(p)

            tg.make_all()
            # print(os.listdir("ap-northeast-1/ebs"))

        else:
            with pytest.raises((ValueError, UndefinedError)):
                hcl.loads(fp.read())
def test_make_all(stack_file, stack_invalid, service_file, service_invalid,
                  head_file, head_invalid, version, tmpdir):

    # inputs = ['']
    # input_generator = (i for i in inputs)
    # monkeypatch.setattr('builtins.input', lambda prompt: next(input_generator))

    tg = TerragruntGenerator(debug=True,
                             terraform_version=version,
                             headless=True)
    tg.templates_dir = RENDER_FIXTURE_DIR
    tg.stacks_dir = FIXTURE_DIR

    tg.ask_terragrunt_version()

    tg.head_template = head_file + tg.terraform_version + '.hcl'
    tg.service_template = service_file + tg.terraform_version + '.hcl'
    p = tmpdir.mkdir("sub")
    os.chdir(p)
    print(f'Cur dir is {tg.templates_dir}')
    with open(os.path.join(FIXTURE_DIR, stack_file), 'r') as fp:
        print(f'\n\ntpl_fname is {service_file}\n\n')
        if not stack_invalid:
            print(f'f{stack_file} stack is valid')
            inp = hcl.load(fp)
            tg.region = 'ap-northeast-1'
            tg.stack[0] = StackParser(inp).stack
            tg.stack[0].update({'region': 'ap-northeast-1'})
            if not service_invalid and not head_invalid:
                print(f'{service_file} and {head_file} is valid')
                tg.make_all()

                if int(tg.terraform_version) == 12:
                    print(f'version = {version}')
                    print(os.listdir(p))
                    assert os.listdir(p) == sorted([
                        'ap-northeast-1', 'environment.tfvars',
                        'terragrunt.hcl', 'clear-cache.sh', 'stack.json'
                    ])
                    with open(
                            os.path.join(p, 'ap-northeast-1',
                                         'region.tfvars')) as fp:
                        print(fp.read())
                elif int(tg.terraform_version) == 11:
                    print(f'version = {version}')
                    print(os.listdir(p))
                    assert sorted(os.listdir(p)) == sorted([
                        'ap-northeast-1', 'environment.tfvars',
                        'terraform.tfvars', 'clear-cache.sh', 'stack.json'
                    ])
                    with open(
                            os.path.join(p, 'ap-northeast-1',
                                         'region.tfvars')) as fp:
                        print(fp.read())

                else:
                    print(tg.terraform_version)
                    print(os.listdir(os.path.join(p)))
                    raise UndefinedError
            # Check that errors are raised
            elif service_invalid and not head_invalid:
                with pytest.raises(
                    (ValueError, UndefinedError, TemplateSyntaxError)):
                    print(f'version = {version}')
                    print(f'Service file = {tg.service_template} is invalid ')
                    tg.make_all()
            elif head_invalid and not service_invalid:
                with pytest.raises(
                    (ValueError, UndefinedError, TemplateSyntaxError)):
                    print(f'version = {version}')
                    print(
                        f'Service file = {tg.service_template} is {service_invalid}'
                        +
                        f' and Head file = {tg.head_template} is {head_invalid}'
                    )
                    tg.get_tpl_env()
                    tg.make_head()
            elif head_invalid and service_invalid:
                with pytest.raises(
                    (ValueError, UndefinedError, TemplateSyntaxError)):
                    print(f'version = {version}')
                    print(
                        f'Service file = {tg.service_template} is {service_invalid}'
                        +
                        f' and Head file = {tg.head_template} is {head_invalid}'
                    )
                    tg.make_all()

        else:
            with pytest.raises((ValueError, KeyError)):
                tg.make_all()
Ejemplo n.º 9
0
def test_get_aws_availability_zones(monkeypatch, tmpdir):
    monkeypatch.setattr('builtins.input', lambda x: "n")
    tg = TerragruntGenerator(debug=True)
    tg.get_aws_availability_zones()
    assert len(tg.available_azs['ap-northeast-1']) == 3
def test_ask_networking(azs, cidr, mask, num_subnets, result,
                        monkeypatch, tmpdir):
    inputs = ['', '', '']
    input_generator = (i for i in inputs)
    monkeypatch.setattr('builtins.input', lambda prompt: next(input_generator))

    p = tmpdir.mkdir("sub")
    os.chdir(p)

    tg = TerragruntGenerator(debug=True, terraform_version="0.11", headless=True, num_azs=3)
    tg.ask_terragrunt_version()

    tg.num_vpcs = 1
    tg.num_subnets = num_subnets
    tg.subnet_names = ['private_subnets', 'public_subnets', 'database_subnets',
                       'elasticache_subnets', 'redshift_subnets', 'infra_subnets'][0:num_subnets]
    tg.num_azs = azs

    tg.netmask = mask

    tg.build_network()
    print('\n')
    pprint(str(tg.subnets[0]))

    print('\n')
    pprint(str(tg.subnets))