// Filter is part of the filter.Filterable interface func (a *AutoScalingGroup) Filter(filter filters.Filter) bool { matched := false // map function names to function calls switch filter.Function { case "SizeGreaterThan": if i, err := filter.Int64Value(0); err == nil && a.sizeGreaterThan(i) { matched = true } case "SizeLessThan": if i, err := filter.Int64Value(0); err == nil && a.sizeLessThan(i) { matched = true } case "SizeEqualTo": if i, err := filter.Int64Value(0); err == nil && a.sizeEqualTo(i) { matched = true } case "SizeLessThanOrEqualTo": if i, err := filter.Int64Value(0); err == nil && a.sizeLessThanOrEqualTo(i) { matched = true } case "SizeGreaterThanOrEqualTo": if i, err := filter.Int64Value(0); err == nil && a.sizeGreaterThanOrEqualTo(i) { matched = true } case "CreatedTimeInTheLast": d, err := time.ParseDuration(filter.Arguments[0]) if err == nil && a.CreatedTime != nil && time.Since(*a.CreatedTime) < d { matched = true } case "CreatedTimeNotInTheLast": d, err := time.ParseDuration(filter.Arguments[0]) if err == nil && a.CreatedTime != nil && time.Since(*a.CreatedTime) > d { matched = true } case "InCloudformation": if b, err := filter.BoolValue(0); err == nil && a.IsInCloudformation == b { matched = true } case "Region": for _, region := range filter.Arguments { if a.Region() == reapable.Region(region) { matched = true } } case "NotRegion": // was this resource's region one of those in the NOT list regionSpecified := false for _, region := range filter.Arguments { if a.Region() == reapable.Region(region) { regionSpecified = true } } if !regionSpecified { matched = true } case "Tagged": if a.Tagged(filter.Arguments[0]) { matched = true } case "NotTagged": if !a.Tagged(filter.Arguments[0]) { matched = true } case "TagNotEqual": if a.Tag(filter.Arguments[0]) != filter.Arguments[1] { matched = true } case "ReaperState": if a.reaperState.State.String() == filter.Arguments[0] { matched = true } case "NotReaperState": if a.reaperState.State.String() != filter.Arguments[0] { matched = true } case "Named": if a.Name == filter.Arguments[0] { matched = true } case "NotNamed": if a.Name != filter.Arguments[0] { matched = true } case "IsDependency": if b, err := filter.BoolValue(0); err == nil && a.Dependency == b { matched = true } case "NameContains": if strings.Contains(a.Name, filter.Arguments[0]) { matched = true } case "NotNameContains": if !strings.Contains(a.Name, filter.Arguments[0]) { matched = true } default: log.Error(fmt.Sprintf("No function %s could be found for filtering AutoScalingGroups.", filter.Function)) } return matched }