예제 #1
0
def test_respawn_auto_scaling_group(monkeypatch):

    inst = {'InstanceId': 'myinst-1', 'LaunchConfigurationName': 'lc-1', 'LifecycleState': 'InService'}
    group = {'LaunchConfigurationName': 'lc-2', 'Instances': [inst], 'MinSize': 1, 'MaxSize': 1, 'DesiredCapacity': 1,
             'LoadBalancerNames': ['myelb']}
    groups = {'AutoScalingGroups': [group]}
    instance_states = [{'InstanceId': 'myinst-1', 'State': 'InService'},
                       {'InstanceId': 'myinst-2', 'State': 'InService'}]
    asg = MagicMock()
    asg.describe_auto_scaling_groups.return_value = groups

    def terminate_instance(InstanceId, **kwargs):
        for i in range(len(instance_states)):
            if instance_states[i]['InstanceId'] == InstanceId:
                del instance_states[i]
                break

    asg.terminate_instance_in_auto_scaling_group = terminate_instance
    elb = MagicMock()
    elb.describe_instance_health.return_value = {'InstanceStates': instance_states}
    services = {'autoscaling': asg, 'elb': elb}

    def client(service, region):
        assert region == 'myregion'
        return services[service]
    monkeypatch.setattr('boto3.client', client)
    monkeypatch.setattr('time.sleep', lambda s: s)
    respawn_auto_scaling_group('myasg', 'myregion')
예제 #2
0
def test_respawn_auto_scaling_group_without_elb(monkeypatch):

    inst = {'InstanceId': 'myinst-1', 'LaunchConfigurationName': 'lc-1', 'LifecycleState': 'InService'}
    instances = [inst]
    group = {'AutoScalingGroupName': 'myasg',
             'LaunchConfigurationName': 'lc-2', 'Instances': instances, 'MinSize': 1, 'MaxSize': 1, 'DesiredCapacity': 1,
             'LoadBalancerNames': []}
    groups = {'AutoScalingGroups': [group]}
    asg = MagicMock()
    asg.describe_auto_scaling_groups.return_value = groups

    def update_group(**kwargs):
        instances.append({'InstanceId': 'myinst-2', 'LaunchConfigurationName': 'lc-2', 'LifecycleState': 'InService'})

    def terminate_instance(InstanceId, **kwargs):
        for i in range(len(instances)):
            if instances[i]['InstanceId'] == InstanceId:
                del instances[i]
                break

    asg.update_auto_scaling_group = update_group
    asg.terminate_instance_in_auto_scaling_group = terminate_instance
    services = {'autoscaling': asg}
    def client(service, *args):
        return services[service]
    monkeypatch.setattr('boto3.client', client)
    monkeypatch.setattr('time.sleep', lambda s: s)
    respawn_auto_scaling_group('myasg', 'myregion')
예제 #3
0
def test_respawn_auto_scaling_group(monkeypatch):

    inst = {
        'InstanceId': 'myinst-1',
        'LaunchConfigurationName': 'lc-1',
        'LifecycleState': 'InService'
    }
    group = {
        'LaunchConfigurationName': 'lc-2',
        'Instances': [inst],
        'MinSize': 1,
        'MaxSize': 1,
        'DesiredCapacity': 1,
        'LoadBalancerNames': ['myelb']
    }
    groups = {'AutoScalingGroups': [group]}
    instance_states = [{
        'InstanceId': 'myinst-1',
        'State': 'InService'
    }, {
        'InstanceId': 'myinst-2',
        'State': 'InService'
    }]
    asg = MagicMock()
    asg.describe_auto_scaling_groups.return_value = groups

    def terminate_instance(InstanceId, **kwargs):
        for i in range(len(instance_states)):
            if instance_states[i]['InstanceId'] == InstanceId:
                del instance_states[i]
                break

    asg.terminate_instance_in_auto_scaling_group = terminate_instance
    elb = MagicMock()
    elb.describe_instance_health.return_value = {
        'InstanceStates': instance_states
    }
    services = {'autoscaling': asg, 'elb': elb}

    def client(service, region):
        assert region == 'myregion'
        return services[service]

    monkeypatch.setattr('boto3.client', client)
    monkeypatch.setattr('time.sleep', lambda s: s)
    respawn_auto_scaling_group('myasg', 'myregion')
예제 #4
0
def test_respawn_auto_scaling_group_without_elb(monkeypatch):

    inst = {
        'InstanceId': 'myinst-1',
        'LaunchConfigurationName': 'lc-1',
        'LifecycleState': 'InService'
    }
    instances = [inst]
    group = {
        'AutoScalingGroupName': 'myasg',
        'LaunchConfigurationName': 'lc-2',
        'Instances': instances,
        'MinSize': 1,
        'MaxSize': 1,
        'DesiredCapacity': 1,
        'LoadBalancerNames': []
    }
    groups = {'AutoScalingGroups': [group]}
    asg = MagicMock()
    asg.describe_auto_scaling_groups.return_value = groups

    def update_group(**kwargs):
        instances.append({
            'InstanceId': 'myinst-2',
            'LaunchConfigurationName': 'lc-2',
            'LifecycleState': 'InService'
        })

    def terminate_instance(InstanceId, **kwargs):
        for i in range(len(instances)):
            if instances[i]['InstanceId'] == InstanceId:
                del instances[i]
                break

    asg.update_auto_scaling_group = update_group
    asg.terminate_instance_in_auto_scaling_group = terminate_instance
    services = {'autoscaling': asg}

    def client(service, *args):
        return services[service]

    monkeypatch.setattr('boto3.client', client)
    monkeypatch.setattr('time.sleep', lambda s: s)
    respawn_auto_scaling_group('myasg', 'myregion')