Esempio n. 1
0
def instances_restart_cmd(args):
    if not are_you_sure('restart version {}'.format(describe_current_release(args)), args):
        return
    # Store old motd
    events = get_events(args)
    old_motd = events['motd']
    events['motd'] = old_motd if args['motd'] == '' else args['motd']
    save_events(args, events)
    modified_groups = {}
    failed = False
    for instance in pick_instances(args):
        logger.info("Restarting {}...".format(instance))
        as_instance_status = instance.describe_autoscale()
        as_group_name = as_instance_status['AutoScalingGroupName']
        if as_instance_status['LifecycleState'] != 'InService':
            logger.error("Skipping {} as it is not InService ({})".format(instance, as_instance_status))
            continue

        try:
            restart_one_instance(as_group_name, instance, modified_groups)
        except Exception as e:
            logger.error("Failed restarting {} - skipping: {}".format(instance, e))
            failed = True
            # TODO, what here?

    for group, desired in iter(modified_groups.items()):
        logger.info("Putting desired instances for {} back to {}".format(group, desired))
        as_client.update_auto_scaling_group(AutoScalingGroupName=group, DesiredCapacity=desired)
    # Events might have changed, re-fetch
    events = get_events(args)
    events['motd'] = old_motd
    save_events(args, events)
    sys.exit(1 if failed else 0)
Esempio n. 2
0
def environment_stop(cfg: Config):
    """Stops an environment."""
    if cfg.env == Environment.PROD:
        print('Operation aborted. This would bring down the site')
        print(
            'If you know what you are doing, edit the code in bin/lib/ce.py, function environment_stop_cmd'
        )
    elif are_you_sure('stop environment', cfg):
        for asg in get_autoscaling_groups_for(cfg):
            group_name = asg['AutoScalingGroupName']
            if asg['MinSize'] > 0:
                print(
                    f"Skipping ASG {group_name} as it has a non-zero min size")
                continue
            prev = asg['DesiredCapacity']
            if not prev:
                print(
                    f"Skipping ASG {group_name} as it already zero desired capacity"
                )
                continue
            print(
                f"Updating {group_name} to have desired capacity 0 (from {prev})"
            )
            as_client.update_auto_scaling_group(
                AutoScalingGroupName=group_name, DesiredCapacity=0)
Esempio n. 3
0
def environment_stop_cmd(args):
    for asg in get_autoscaling_groups_for(args):
        group_name = asg['AutoScalingGroupName']
        if asg['MinSize'] > 0:
            print(f"Skipping ASG {group_name} as it has a non-zero min size")
            continue
        prev = asg['DesiredCapacity']
        if not prev:
            print(f"Skipping ASG {group_name} as it already zero desired capacity")
            continue
        print(f"Updating {group_name} to have desired capacity 0 (from {prev})")
        as_client.update_auto_scaling_group(AutoScalingGroupName=group_name, DesiredCapacity=0)
Esempio n. 4
0
File: ce.py Progetto: iCodeIN/infra
def instances_restart_cmd(args):
    if not are_you_sure(
            'restart all instances with version {}'.format(
                describe_current_release(args)), args):
        return
    # Store old motd
    begin_time = datetime.datetime.now()
    events = get_events(args)
    old_motd = events['motd']
    events['motd'] = old_motd if args['motd'] == '' else args['motd']
    save_events(args, events)
    modified_groups = {}
    failed = False
    for instance in pick_instances(args):
        logger.info("Restarting %s...", instance)
        as_instance_status = instance.describe_autoscale()
        if not as_instance_status:
            logger.warning("Skipping %s as it is no longer in the ASG",
                           instance)
            continue
        as_group_name = as_instance_status['AutoScalingGroupName']
        if as_instance_status['LifecycleState'] != 'InService':
            logger.warning("Skipping %s as it is not InService (%s)", instance,
                           as_instance_status)
            continue

        try:
            restart_one_instance(as_group_name, instance, modified_groups)
        except RuntimeError as e:
            logger.error("Failed restarting %s - skipping: %s", instance, e)
            failed = True
            # TODO, what here?

    for group, desired in iter(modified_groups.items()):
        logger.info("Putting desired instances for %s back to %s", group,
                    desired)
        as_client.update_auto_scaling_group(AutoScalingGroupName=group,
                                            DesiredCapacity=desired)
    # Events might have changed, re-fetch
    events = get_events(args)
    events['motd'] = old_motd
    save_events(args, events)
    end_time = datetime.datetime.now()
    delta_time = end_time - begin_time
    print(f'Instances restarted in {delta_time.total_seconds()} seconds')
    sys.exit(1 if failed else 0)
Esempio n. 5
0
def environment_start(cfg: Config):
    """Starts up an environment by ensure its ASGs have capacity."""
    for asg in get_autoscaling_groups_for(cfg):
        group_name = asg['AutoScalingGroupName']
        if asg['MinSize'] > 0:
            print(f"Skipping ASG {group_name} as it has a non-zero min size")
            continue
        prev = asg['DesiredCapacity']
        if prev:
            print(
                f"Skipping ASG {group_name} as it has non-zero desired capacity"
            )
            continue
        print(
            f"Updating {group_name} to have desired capacity 1 (from {prev})")
        as_client.update_auto_scaling_group(AutoScalingGroupName=group_name,
                                            DesiredCapacity=1)
Esempio n. 6
0
def instances_restart(cfg: Config, motd: str):
    """Restart the instances, picking up new code."""
    if not are_you_sure(
            'restart all instances with version {}'.format(
                describe_current_release(cfg)), cfg):
        return
    begin_time = datetime.datetime.now()
    # Store old motd
    old_motd = update_motd(cfg, motd)
    modified_groups: Dict[str, int] = {}
    failed = False
    to_restart = pick_instances(cfg)

    for index, instance in enumerate(to_restart):
        logger.info("Restarting %s (%d of %d)...", instance, index + 1,
                    len(to_restart))
        as_instance_status = instance.describe_autoscale()
        if not as_instance_status:
            logger.warning("Skipping %s as it is no longer in the ASG",
                           instance)
            continue
        as_group_name = as_instance_status['AutoScalingGroupName']
        if as_instance_status['LifecycleState'] != 'InService':
            logger.warning("Skipping %s as it is not InService (%s)", instance,
                           as_instance_status)
            continue

        try:
            restart_one_instance(as_group_name, instance, modified_groups)
        except RuntimeError as e:
            logger.error("Failed restarting %s - skipping: %s", instance, e)
            failed = True
            # TODO, what here?

    for group, desired in iter(modified_groups.items()):
        logger.info("Putting desired instances for %s back to %d", group,
                    desired)
        as_client.update_auto_scaling_group(AutoScalingGroupName=group,
                                            DesiredCapacity=desired)
    update_motd(cfg, old_motd)
    end_time = datetime.datetime.now()
    delta_time = end_time - begin_time
    print(f'Instances restarted in {delta_time.total_seconds()} seconds')
    sys.exit(1 if failed else 0)