def polling_vs_waiters_noncompliant()

in src/python/detectors/aws_polling_instead_of_waiter/aws_polling_instead_of_waiter.py [0:0]


def polling_vs_waiters_noncompliant(response):
    import boto3
    ec2_client = boto3.client('ec2', region_name='us-east-1')
    ec2_instance_id = response['Instances'][0]['InstanceId']

    attempts = 0
    while True:
        print("Waiting for EC2 instance to be up")
        # Noncompliant: uses custom polling instead of waiters feature.
        rsp = ec2_client.describe_instance_status(
            InstanceIds=[
                str(ec2_instance_id)
            ],
            IncludeAllInstances=True
        )

        instance_status = rsp['Statuses'][0]['InstanceStatus']['Status']
        system_status = rsp['Statuses'][0]['SystemStatus']['Status']

        if str(instance_status) == 'ok' and str(system_status) == 'ok':
            break
        if str(instance_status) == 'impaired' or \
                str(instance_status) == 'insufficient-data' or \
                str(system_status) == 'failed' or \
                str(system_status) == 'insufficient-data':
            print('Instance status is ' + str(instance_status))
            print('System status is ' + str(system_status))
            tear_down()
            exit(1)

        attempts = attempts + 1
        if attempts >= MAX_ATTEMPTS:
            print("MAX wait time for EC2 instance to be up reached.")
            print("Tearing down")
            tear_down()
            exit(1)

        time.sleep(10)