Esempio n. 1
0
 def test(self):
     conn = connection(type='SSH', user='******', password='******')
     prov = provisioner('PROVISIONER',
                        sorce='SOURCE',
                        destination='DESTINATION',
                        connection=conn)
     r.aws_instance('NAME', provisioner=[prov])
Esempio n. 2
0
 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()
Esempio n. 3
0
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
Esempio n. 4
0
 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()
Esempio n. 5
0
 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()
Esempio n. 6
0
 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)
Esempio n. 7
0
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
Esempio n. 8
0
 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
Esempio n. 10
0
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
Esempio n. 11
0
 def test_float(self):
     self.cfg += r.aws_instance('R4', argument=FLOAT)
     assert self.cfg.config['resource']['aws_instance']['R4'][
         'argument'] == FLOAT
Esempio n. 12
0
 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()
Esempio n. 13
0
 def test_reference(self):
     res = r.aws_instance('NAME1')
     r.instance('NAME2', depends_on=[res])
Esempio n. 14
0
 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}'
Esempio n. 15
0
 def test_resource(self):
     res = r.aws_instance('NAME')
     assert f.function(res) == '${function(aws_instance.NAME)}'
Esempio n. 16
0
 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)}'
Esempio n. 17
0
 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}'
Esempio n. 18
0
 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}'
Esempio n. 19
0
 def test_dict(self):
     self.cfg += r.aws_instance('R7', argument=DICT)
     assert self.cfg.config['resource']['aws_instance']['R7'][
         'argument'] == DICT
Esempio n. 20
0
 def test_string(self):
     self.cfg += r.aws_instance('R1', argument=STRING)
     assert self.cfg.config['resource']['aws_instance']['R1'][
         'argument'] == STRING
Esempio n. 21
0
 def test_int(self):
     self.cfg += r.aws_instance('R3', argument=INT)
     assert self.cfg.config['resource']['aws_instance']['R3'][
         'argument'] == INT
Esempio n. 22
0
 def test_bool(self):
     self.cfg += r.aws_instance('R2', argument=BOOL)
     assert self.cfg.config['resource']['aws_instance']['R2'][
         'argument'] == BOOL
Esempio n. 23
0
 def test_list(self):
     self.cfg += r.aws_instance('R6', argument=LIST)
     assert self.cfg.config['resource']['aws_instance']['R6'][
         'argument'] == LIST
Esempio n. 24
0
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'])