Пример #1
0
 def check_tags(instances):
     for inst_group in instances:
         for inst in inst_group:
             inst_tag_id = get_tag(inst, 'ID')
             assert inst_tag_id is not None
             inst_tag_name = get_tag(inst, 'Name')
             assert inst_tag_name == "{}-{}-{}-{}".format(
                 ec2_resources.project, ec2_resources.namespace,
                 ec2_resources.group, inst_tag_id.zfill(3)).lower()
Пример #2
0
 def check_tags(instances):
     for group in instances:
         for inst in group:
             check_params(inst, params)
             inst_tag_id = get_tag(inst, 'ID')
             assert inst_tag_id is not None
             inst_tag_name = get_tag(inst, 'Name')
             assert inst_tag_name == "{}-{}-{}-{}".format(
                 params.project, params.namespace, params.role,
                 inst_tag_id.zfill(3)).lower()
             for tag_key, tag_value in params.add_tags.iteritems():
                 assert tag_value == get_tag(inst, tag_key)
Пример #3
0
def test_find_instances(ec2ctx, ec2_resources):
    launcher = AwsEC2Launcher()
    terminator = AwsEC2Terminator()

    params1 = ec2_resources._replace(
        group="{}_{}".format(ec2_resources.group, 'aaa'))
    params2 = ec2_resources._replace(
        group="{}_{}".format(ec2_resources.group, 'bbb'))

    for group in (params1.group, params2.group):
        for inst in find_instances(ec2ctx.resource, ec2_resources.project,
                                   ec2_resources.namespace, group):
            terminator.terminate(inst, ec2ctx.region)
    terminator.wait(False)

    launcher.launch(params1, 2, ec2=ec2ctx.resource)
    launcher.launch(params2, 3, ec2=ec2ctx.resource)

    aaa = find_instances(ec2ctx.resource, params1.project, params1.namespace,
                         params1.group)
    bbb = find_instances(ec2ctx.resource, params2.project, params2.namespace,
                         params2.group)
    aaa_and_bbb = [
        i for i in find_instances(ec2ctx.resource, ec2_resources.project,
                                  ec2_resources.namespace)
        if get_tag(i, 'Group') in (params1.group, params2.group)
    ]

    assert len(aaa) == 2
    assert len(bbb) == 3
    assert len(aaa_and_bbb) == 5
    assert set(aaa).union(bbb) == set(aaa_and_bbb)

    for inst in aaa_and_bbb:
        terminator.terminate(inst, ec2ctx.region)
    terminator.wait(False)
Пример #4
0
def test_manage_instances(ec2ctxs, ec2_resources):
    regions = [ctx.region for ctx in ec2ctxs]

    def check_hosts(hosts):
        assert len(set(host.tag_id for host in hosts)) == len(hosts)
        assert len(set(host.public_ip for host in hosts)) == len(hosts)

    def check_tags(instances):
        for inst_group in instances:
            for inst in inst_group:
                inst_tag_id = get_tag(inst, 'ID')
                assert inst_tag_id is not None
                inst_tag_name = get_tag(inst, 'Name')
                assert inst_tag_name == "{}-{}-{}-{}".format(
                    ec2_resources.project, ec2_resources.namespace,
                    ec2_resources.group, inst_tag_id.zfill(3)).lower()

    res = manage_instances(regions, ec2_resources, 4)
    instances = [
        find_instances(ctx.resource, ec2_resources.project,
                       ec2_resources.namespace, ec2_resources.group)
        for ctx in ec2ctxs
    ]
    assert res.changed
    assert len(res.active) == 4
    assert len(res.terminated) == 0
    check_hosts(res.active + res.terminated)
    check_tags(instances)
    assert len(instances[0]) == 2
    assert len(instances[1]) == 1
    assert len(instances[2]) == 1
    assert set(
        [get_tag(instances[0][0], 'ID'),
         get_tag(instances[0][1], 'ID')]) == set(['1', '4'])
    assert get_tag(instances[1][0], 'ID') == '2'
    assert get_tag(instances[2][0], 'ID') == '3'

    res = manage_instances(regions, ec2_resources, 4)
    instances = [
        find_instances(ctx.resource, ec2_resources.project,
                       ec2_resources.namespace, ec2_resources.group)
        for ctx in ec2ctxs
    ]
    assert not res.changed
    assert len(res.active) == 4
    assert len(res.terminated) == 0
    check_hosts(res.active + res.terminated)
    check_tags(instances)
    assert len(instances[0]) == 2
    assert len(instances[1]) == 1
    assert len(instances[2]) == 1
    assert set(
        [get_tag(instances[0][0], 'ID'),
         get_tag(instances[0][1], 'ID')]) == set(['1', '4'])
    assert get_tag(instances[1][0], 'ID') == '2'
    assert get_tag(instances[2][0], 'ID') == '3'

    res = manage_instances(regions, ec2_resources, 2)
    instances = [
        find_instances(ctx.resource, ec2_resources.project,
                       ec2_resources.namespace, ec2_resources.group)
        for ctx in ec2ctxs
    ]
    assert res.changed
    assert len(res.active) == 2
    assert len(res.terminated) == 2
    check_hosts(res.active + res.terminated)
    check_tags(instances)
    assert len(instances[0]) == 1
    assert len(instances[1]) == 1
    assert len(instances[2]) == 0
    assert get_tag(instances[0][0], 'ID') == '1'
    assert get_tag(instances[1][0], 'ID') == '2'

    res = manage_instances(regions, ec2_resources, 0)
    instances = [
        find_instances(ctx.resource, ec2_resources.project,
                       ec2_resources.namespace, ec2_resources.group)
        for ctx in ec2ctxs
    ]
    assert res.changed
    assert len(res.active) == 0
    assert len(res.terminated) == 2
    check_hosts(res.active + res.terminated)
    check_tags(instances)
    assert len(instances[0]) == 0
    assert len(instances[1]) == 0
    assert len(instances[2]) == 0

    res = manage_instances(regions, ec2_resources, 0)
    instances = [
        find_instances(ctx.resource, ec2_resources.project,
                       ec2_resources.namespace, ec2_resources.group)
        for ctx in ec2ctxs
    ]
    assert not res.changed
    assert len(res.active) == 0
    assert len(res.terminated) == 0
    check_hosts(res.active + res.terminated)
    check_tags(instances)
    assert len(instances[0]) == 0
    assert len(instances[1]) == 0
    assert len(instances[2]) == 0
Пример #5
0
 def check_tags(obj):
     assert {'Key': 'Project', 'Value': params.project} in obj.tags
     assert {'Key': 'Namespace', 'Value': params.namespace} in obj.tags
     assert {'Key': 'Group', 'Value': params.group} in obj.tags
     for tag_key, tag_value in params.add_tags.iteritems():
         assert tag_value == get_tag(obj, tag_key)
Пример #6
0
 def check_tags(instances):
     for group in instances:
         for inst in group:
             check_params(inst, params)
             assert get_tag(inst, 'id') is not None
Пример #7
0
def test_manage_instances(ec2_all):
    regions = ['eu-central-1', 'us-west-1', 'us-west-2']
    connections = [ec2_all[r] for r in regions]
    params = PARAMS._replace(role='test_manage')

    def check_hosts(hosts):
        assert len(set(host.tag_id for host in hosts)) == len(hosts)
        assert len(set(host.public_ip for host in hosts)) == len(hosts)

    def check_tags(instances):
        for group in instances:
            for inst in group:
                check_params(inst, params)
                assert get_tag(inst, 'id') is not None

    changed, hosts = manage_instances(regions, params, 4)
    instances = [find_instances(c, PARAMS.namespace, 'test_manage')
                 for c in connections]
    assert changed
    check_hosts(hosts)
    check_tags(instances)
    assert len(hosts) == 4
    assert len(instances[0]) == 2
    assert len(instances[1]) == 1
    assert len(instances[2]) == 1
    assert set([get_tag(instances[0][0], 'id'),
                get_tag(instances[0][1], 'id')]) == set(['1', '4'])
    assert get_tag(instances[1][0], 'id') == '2'
    assert get_tag(instances[2][0], 'id') == '3'

    changed, hosts = manage_instances(regions, params, 4)
    instances = [find_instances(c, PARAMS.namespace, 'test_manage')
                 for c in connections]
    assert not changed
    check_hosts(hosts)
    check_tags(instances)
    assert len(hosts) == 4
    assert len(instances[0]) == 2
    assert len(instances[1]) == 1
    assert len(instances[2]) == 1
    assert set([get_tag(instances[0][0], 'id'),
                get_tag(instances[0][1], 'id')]) == set(['1', '4'])
    assert get_tag(instances[1][0], 'id') == '2'
    assert get_tag(instances[2][0], 'id') == '3'

    changed, hosts = manage_instances(regions, params, 2)
    instances = [find_instances(c, PARAMS.namespace, 'test_manage')
                 for c in connections]
    assert changed
    check_hosts(hosts)
    check_tags(instances)
    assert len(hosts) == 2
    assert len(instances[0]) == 1
    assert len(instances[1]) == 1
    assert len(instances[2]) == 0
    assert get_tag(instances[0][0], 'id') == '1'
    assert get_tag(instances[1][0], 'id') == '2'

    changed, hosts = manage_instances(regions, params, 0)
    instances = [find_instances(c, PARAMS.namespace, 'test_manage')
                 for c in connections]
    assert changed
    check_hosts(hosts)
    check_tags(instances)
    assert len(hosts) == 0
    assert len(instances[0]) == 0
    assert len(instances[1]) == 0
    assert len(instances[2]) == 0

    changed, hosts = manage_instances(regions, params, 0)
    instances = [find_instances(c, PARAMS.namespace, 'test_manage')
                 for c in connections]
    assert not changed
    check_hosts(hosts)
    check_tags(instances)
    assert len(hosts) == 0
    assert len(instances[0]) == 0
    assert len(instances[1]) == 0
    assert len(instances[2]) == 0
Пример #8
0
def test_manage_instances(ec2_all):
    regions = ['us-east-1', 'us-east-2', 'us-west-2']
    connections = [ec2_all[r] for r in regions]
    params = PARAMS._replace(group='test_manage')

    def check_hosts(hosts):
        assert len(set(host.tag_id for host in hosts)) == len(hosts)
        assert len(set(host.public_ip for host in hosts)) == len(hosts)

    def check_tags(instances):
        for group in instances:
            for inst in group:
                check_params(inst, params)
                inst_tag_id = get_tag(inst, 'ID')
                assert inst_tag_id is not None
                inst_tag_name = get_tag(inst, 'Name')
                assert inst_tag_name == "{}-{}-{}-{}".format(
                    params.project,
                    params.namespace,
                    params.group,
                    inst_tag_id.zfill(3)).lower()
                for tag_key, tag_value in params.add_tags.iteritems():
                    assert tag_value == get_tag(inst, tag_key)

    res = manage_instances(regions, params, 4)
    instances = [find_instances(c, PARAMS.project, PARAMS.namespace, 'test_manage')
                 for c in connections]
    assert res.changed
    assert len(res.active) == 4
    assert len(res.terminated) == 0
    check_hosts(res.active + res.terminated)
    check_tags(instances)
    assert len(instances[0]) == 2
    assert len(instances[1]) == 1
    assert len(instances[2]) == 1
    assert set([get_tag(instances[0][0], 'ID'),
                get_tag(instances[0][1], 'ID')]) == set(['1', '4'])
    assert get_tag(instances[1][0], 'ID') == '2'
    assert get_tag(instances[2][0], 'ID') == '3'

    res = manage_instances(regions, params, 4)
    instances = [find_instances(c, PARAMS.project, PARAMS.namespace, 'test_manage')
                 for c in connections]
    assert not res.changed
    assert len(res.active) == 4
    assert len(res.terminated) == 0
    check_hosts(res.active + res.terminated)
    check_tags(instances)
    assert len(instances[0]) == 2
    assert len(instances[1]) == 1
    assert len(instances[2]) == 1
    assert set([get_tag(instances[0][0], 'ID'),
                get_tag(instances[0][1], 'ID')]) == set(['1', '4'])
    assert get_tag(instances[1][0], 'ID') == '2'
    assert get_tag(instances[2][0], 'ID') == '3'

    res = manage_instances(regions, params, 2)
    instances = [find_instances(c, PARAMS.project, PARAMS.namespace, 'test_manage')
                 for c in connections]
    assert res.changed
    assert len(res.active) == 2
    assert len(res.terminated) == 2
    check_hosts(res.active + res.terminated)
    check_tags(instances)
    assert len(instances[0]) == 1
    assert len(instances[1]) == 1
    assert len(instances[2]) == 0
    assert get_tag(instances[0][0], 'ID') == '1'
    assert get_tag(instances[1][0], 'ID') == '2'

    res = manage_instances(regions, params, 0)
    instances = [find_instances(c, PARAMS.project, PARAMS.namespace, 'test_manage')
                 for c in connections]
    assert res.changed
    assert len(res.active) == 0
    assert len(res.terminated) == 2
    check_hosts(res.active + res.terminated)
    check_tags(instances)
    assert len(instances[0]) == 0
    assert len(instances[1]) == 0
    assert len(instances[2]) == 0

    res = manage_instances(regions, params, 0)
    instances = [find_instances(c, PARAMS.project, PARAMS.namespace, 'test_manage')
                 for c in connections]
    assert not res.changed
    assert len(res.active) == 0
    assert len(res.terminated) == 0
    check_hosts(res.active + res.terminated)
    check_tags(instances)
    assert len(instances[0]) == 0
    assert len(instances[1]) == 0
    assert len(instances[2]) == 0