def test(self): conn = connection(type='SSH', user='******', password='******') prov = provisioner('PROVISIONER', sorce='SOURCE', destination='DESTINATION', connection=conn) r.aws_instance('NAME', provisioner=[prov])
def test_reference(self): mod = module('M3', source="devops-workflow/ami-ids/aws") self.cfg += mod res = r.aws_instance('NAME', ami=AWS_AMI, instance_type=AWS_INSTANCE_TYPE, depends_on=[mod]) self.cfg += res assert '"module.M3"' in self.cfg.dump()
def test_issue33(): """Issue 33: Suggestion of syntax to terrascript""" ts = Terrascript() var_access_key = ts.add(variable('access_key')) assert isinstance(var_access_key, variable) var_secret_key = ts.add(variable('secret_key')) assert isinstance(var_secret_key, variable) var_region = ts.add(variable('region', default='us-east-1')) assert isinstance(var_region, variable) ts += provider('aws', access_key=var_access_key, secret_key=var_secret_key, region=var_region ) resource_aws_instance = ts.add(aws_instance('example', ami='ami-2757f631', instance_type='t2.micro')) assert isinstance(resource_aws_instance, aws_instance) ts += output('example_public_ip', value=resource_aws_instance.public_ip, description='Public IP of example') assert ts.validate() is True
def test_interpolate(self): mod = module('M2', source="devops-workflow/ami-ids/aws") self.cfg += mod res = r.aws_instance('NAME', ami=mod.ami_id, instance_type=AWS_INSTANCE_TYPE) self.cfg += res assert '"${module.M2.ami_id}"' in self.cfg.dump()
def test_interpol_listitem(self): var = variable('VAR5', type='list', default=['us-east-1', 'us-east-2']) self.cfg += var res = r.aws_instance('NAME', ami=var[1], instance_type=AWS_INSTANCE_TYPE) self.cfg += res assert '"${var.VAR5[1]}"' in self.cfg.dump()
def test(self): conn = connection(type='SSH', user='******', password='******') prov = provisioner('file', sorce='SOURCE', destination='DESTINATION', connection=conn) res = r.aws_instance('NAME', ami=AWS_AMI, instance_type=AWS_INSTANCE_TYPE, provisioner=prov)
def test_issue22(): """Issue 22: Allow multiple providers of same type. See also pull request #27 Feature/multiple providers { "provider": { "aws": { "__DEFAULT__": { "region": "us-east-1" }, "useast2": { "alias": "useast2", "region": "us-east-2" } } }, "resource": { "aws_instance": { "I1": { "ami": "ami-4bf3d731", "instance_type": "t2.large" }, "I2": { "ami": "ami-e1496384", "instance_type": "t2.large", "provider": "aws.useast2" } } } } """ ts = Terrascript() ts += provider('aws', region='us-east-1') ts += provider('aws', region='us-east-2', alias='useast2') ts += aws_instance('I1', ami='ami-4bf3d731', instance_type='t2.large') ts += aws_instance('I2', ami='ami-e1496384', instance_type='t2.large', provider='aws.useast2') assert ts.validate() is True
def test_interpol_mapitem(self): var = variable('VAR6', type='map', default={ 'one': 'us-east-1', 'two': 'us-east-2' }) self.cfg += var res = r.aws_instance('NAME', ami=var['two'], instance_type=AWS_INSTANCE_TYPE) self.cfg += res assert '"${var.VAR6[\\"two\\"]}"' in self.cfg.dump()
def test_update_add_value(): ts = Terrascript() ts2 = Terrascript() var_access_key = ts.add(variable('access_key')) var_secret_key = ts.add(variable('secret_key')) var_region = ts.add(variable('region', default='us-east-1')) ts += provider('aws', access_key=var_access_key, secret_key=var_secret_key, region=var_region) resource_aws_instance = ts.add( aws_instance('example', ami='ami-2757f631', instance_type='t2.micro')) resource_aws_instance_2 = ts2.add( aws_instance('example_second', ami='ami-2757f631', instance_type='t2.micro')) assert isinstance(resource_aws_instance, aws_instance) assert isinstance(resource_aws_instance_2, aws_instance) # ts2 add resource "example_second" to ts ts.update(ts2) assert isinstance(ts, Terrascript) assert isinstance(ts2, Terrascript) ts_resources = ts.config.get('resource', {}) assert len(ts_resources.items()) == 1 ts_aws_instances = ts_resources.get('aws_instance') assert len(ts_aws_instances.items()) == 2 assert resource_aws_instance._name in ts_aws_instances.keys() assert resource_aws_instance_2._name in ts_aws_instances.keys() assert ts.validate(delete=False) is True
def test_issue32(): """Issue 32: provisioner return one line with provisioner.file instead a dictionary.""" ts = Terrascript() ts += provider('aws', region='ap-southeast-2') p = provisioner('local-exec', command='date > $(mktemp tmpXXXXXXX.terrascript)') ts += aws_instance('I1', ami='ami-60a26a02', instance_type='t2.nano', provisioner=p) j = ts.dump() assert 'mktemp' in j assert ts.validate() is True
def test_float(self): self.cfg += r.aws_instance('R4', argument=FLOAT) assert self.cfg.config['resource']['aws_instance']['R4'][ 'argument'] == FLOAT
def test_interpol_string(self): var = variable('VAR4', type='string', default='us-east-1') self.cfg += var res = r.aws_instance('NAME', ami=AWS_AMI, instance_type=var) self.cfg += res assert '"${var.VAR4}"' in self.cfg.dump()
def test_reference(self): res = r.aws_instance('NAME1') r.instance('NAME2', depends_on=[res])
def test_interpol_resource_attr(self): resource = r.aws_instance('RESOURCE') self._type(self.name, argument=resource.attr) assert config[self.k1][self.k2][ self.k3]['argument'] == '${aws_instance.RESOURCE.attr}'
def test_resource(self): res = r.aws_instance('NAME') assert f.function(res) == '${function(aws_instance.NAME)}'
def test_resource(self): res = r.aws_instance('NAME', ami=AWS_AMI, instance_type=AWS_INSTANCE_TYPE) assert f.somefunction(res) == '${somefunction(aws_instance.NAME)}'
def test_interpol_data_attr(self): data = d.aws_instance('D1') self.cfg += data self.cfg += r.aws_instance('R9', argument=data.attr) assert self.cfg.config['resource']['aws_instance']['R9'][ 'argument'] == '${data.aws_instance.D1.attr}'
def test_interpol_resource_attr(self): resource = r.aws_instance('R8', attr=STRING) self.cfg += resource self.cfg += r.aws_instance('R10', argument=resource.attr) assert self.cfg.config['resource']['aws_instance']['R10'][ 'argument'] == '${aws_instance.R8.attr}'
def test_dict(self): self.cfg += r.aws_instance('R7', argument=DICT) assert self.cfg.config['resource']['aws_instance']['R7'][ 'argument'] == DICT
def test_string(self): self.cfg += r.aws_instance('R1', argument=STRING) assert self.cfg.config['resource']['aws_instance']['R1'][ 'argument'] == STRING
def test_int(self): self.cfg += r.aws_instance('R3', argument=INT) assert self.cfg.config['resource']['aws_instance']['R3'][ 'argument'] == INT
def test_bool(self): self.cfg += r.aws_instance('R2', argument=BOOL) assert self.cfg.config['resource']['aws_instance']['R2'][ 'argument'] == BOOL
def test_list(self): self.cfg += r.aws_instance('R6', argument=LIST) assert self.cfg.config['resource']['aws_instance']['R6'][ 'argument'] == LIST
def wireguard_terraform(region, ami): ts = Terrascript() ts += provider('aws', access_key=ACCESS_KEY, secret_key=SECRET_KEY, region=region) # If key already exists, an error with be thrown and infrastructure will not build key = ts.add( aws_key_pair('wireguard_key', key_name="wireguard", public_key=PUBLIC_KEY)) # If security groups already exist, an error will be thrown but infrastructure will still build sg_ssh = ts.add( aws_security_group('allow_ssh', name='allow_ssh', description='default', ingress=[ { 'from_port': 22, 'to_port': 22, 'protocol': 'tcp', 'cidr_blocks': ['0.0.0.0/0'] }, ], egress=[{ 'from_port': 0, 'to_port': 0, 'protocol': '-1', 'cidr_blocks': ['0.0.0.0/0'] }])) sg_wg = ts.add( aws_security_group('wg', name='wg', description='Open port for wireguard', ingress=[ { 'from_port': 54321, 'to_port': 54321, 'protocol': 'tcp', 'cidr_blocks': ["0.0.0.0/0"] }, ])) inst = ts.add( aws_instance( 'wireguard_test', ami=ami, instance_type='t2.micro', security_groups=["allow_ssh", "wg"], key_name="wireguard", tags=[{ 'Name': 'wireguard' }], )) eip = ts.add(aws_eip('default', instance=inst.id, vpc=True)) a_ip = ts.add( aws_eip_association('eip_assoc', instance_id=inst.id, allocation_id=eip.id)) with open('wireguard.tf', 'w') as tf: tf.write(ts.dump()) subprocess.run([ 'terraform', 'init', ]) subprocess.run(['terraform', 'apply', '-auto-approve'])