def create_alarm_from_tag()

in src/actions.py [0:0]


def create_alarm_from_tag(id, alarm_tag, instance_info, metric_dimensions_map, sns_topic_arn, alarm_separator):
    alarm_properties = alarm_tag['Key'].split(alarm_separator)
    namespace = alarm_properties[1]
    MetricName = alarm_properties[2]
    dimensions = list()
    for dimension_name in metric_dimensions_map.get(namespace, list()):
        dimension = dict()

        if dimension_name == 'AutoScalingGroupName':
            # find out if the instance is part of an autoscaling group
            instance_asg = next(
                (tag['Value'] for tag in instance_info['Tags'] if tag['Key'] == 'aws:autoscaling:groupName'), None)
            if instance_asg:
                dimension_value = instance_asg
                dimension['Name'] = dimension_name
                dimension['Value'] = dimension_value
                dimensions.append(dimension)
        else:
            dimension_value = instance_info.get(dimension_name, None)
            if dimension_value:
                dimension['Name'] = dimension_name
                dimension['Value'] = dimension_value
                dimensions.append(dimension)
            else:
                logger.warning(
                    "Dimension {} has been specified in APPEND_DIMENSIONS but  no dimension value exists, skipping...".format(
                        dimension_name))

    logger.debug("dimensions are {}".format(dimensions))

    additional_dimensions = list()

    for index, prop in enumerate(alarm_properties[3:], start=3):
        if prop in valid_comparators:
            prop_end_index = index
            break
    else:
        prop_end_index = None

    if prop_end_index:
        additional_dimensions.extend(alarm_properties[3:prop_end_index])
    else:
        logger.error('Unable to determine the dimensions for alarm tag: {}'.format(alarm_tag))
        raise Exception

    AlarmName = 'AutoAlarm-{}-{}-{}'.format(id, namespace, MetricName)
    properties_offset = 0
    if additional_dimensions:
        for num, dim in enumerate(additional_dimensions[::2]):
            val = additional_dimensions[num * 2 + 1]
            dimensions.append(
                {
                    'Name': dim,
                    'Value': val
                }
            )
            AlarmName = AlarmName + '-{}-{}'.format(dim, val)
            properties_offset = properties_offset + 2

    ComparisonOperator = alarm_properties[(properties_offset + 3)]
    Period = alarm_properties[(properties_offset + 4)]
    Statistic = alarm_properties[(properties_offset + 5)]

    AlarmName = AlarmName + '-{}-{}-{}'.format(ComparisonOperator, Period, Statistic)

    create_alarm(AlarmName, MetricName, ComparisonOperator, Period, alarm_tag['Value'], Statistic, namespace,
                 dimensions, sns_topic_arn)