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"
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_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)
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))
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']
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_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)
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()
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