Ignore AWS specific tags
Allows us to adopt resources created with CloudFormation. Extend AWS specific tag ignoring to all tags* Ignore AWS specific tags for autoscaling
This commit is contained in:
parent
1a139aac50
commit
5e32c144d5
|
@ -4,6 +4,7 @@ import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
|
"regexp"
|
||||||
|
|
||||||
"github.com/aws/aws-sdk-go/aws"
|
"github.com/aws/aws-sdk-go/aws"
|
||||||
"github.com/aws/aws-sdk-go/service/autoscaling"
|
"github.com/aws/aws-sdk-go/service/autoscaling"
|
||||||
|
@ -119,13 +120,16 @@ func autoscalingTagsFromMap(m map[string]interface{}, resourceID string) []*auto
|
||||||
result := make([]*autoscaling.Tag, 0, len(m))
|
result := make([]*autoscaling.Tag, 0, len(m))
|
||||||
for k, v := range m {
|
for k, v := range m {
|
||||||
attr := v.(map[string]interface{})
|
attr := v.(map[string]interface{})
|
||||||
result = append(result, &autoscaling.Tag{
|
t := &autoscaling.Tag{
|
||||||
Key: aws.String(k),
|
Key: aws.String(k),
|
||||||
Value: aws.String(attr["value"].(string)),
|
Value: aws.String(attr["value"].(string)),
|
||||||
PropagateAtLaunch: aws.Bool(attr["propagate_at_launch"].(bool)),
|
PropagateAtLaunch: aws.Bool(attr["propagate_at_launch"].(bool)),
|
||||||
ResourceId: aws.String(resourceID),
|
ResourceId: aws.String(resourceID),
|
||||||
ResourceType: aws.String("auto-scaling-group"),
|
ResourceType: aws.String("auto-scaling-group"),
|
||||||
})
|
}
|
||||||
|
if !tagIgnoredAutoscaling(t) {
|
||||||
|
result = append(result, t)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
@ -182,3 +186,17 @@ func setToMapByKey(s *schema.Set, key string) map[string]interface{} {
|
||||||
|
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// compare a tag against a list of strings and checks if it should
|
||||||
|
// be ignored or not
|
||||||
|
func tagIgnoredAutoscaling(t *autoscaling.Tag) bool {
|
||||||
|
filter := []string{"^aws:*"}
|
||||||
|
for _, v := range filter {
|
||||||
|
log.Printf("[DEBUG] Matching %v with %v\n", v, *t.Key)
|
||||||
|
if r, _ := regexp.MatchString(v, *t.Key); r == true {
|
||||||
|
log.Printf("[DEBUG] Found AWS specific tag %s (val: %s), ignoring.\n", *t.Key, *t.Value)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@ import (
|
||||||
"reflect"
|
"reflect"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/aws/aws-sdk-go/aws"
|
||||||
"github.com/aws/aws-sdk-go/service/autoscaling"
|
"github.com/aws/aws-sdk-go/service/autoscaling"
|
||||||
"github.com/hashicorp/terraform/helper/resource"
|
"github.com/hashicorp/terraform/helper/resource"
|
||||||
"github.com/hashicorp/terraform/terraform"
|
"github.com/hashicorp/terraform/terraform"
|
||||||
|
@ -120,3 +121,20 @@ func testAccCheckAutoscalingTagNotExists(ts *[]*autoscaling.TagDescription, key
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestIgnoringTagsAutoscaling(t *testing.T) {
|
||||||
|
var ignoredTags []*autoscaling.Tag
|
||||||
|
ignoredTags = append(ignoredTags, &autoscaling.Tag{
|
||||||
|
Key: aws.String("aws:cloudformation:logical-id"),
|
||||||
|
Value: aws.String("foo"),
|
||||||
|
})
|
||||||
|
ignoredTags = append(ignoredTags, &autoscaling.Tag{
|
||||||
|
Key: aws.String("aws:foo:bar"),
|
||||||
|
Value: aws.String("baz"),
|
||||||
|
})
|
||||||
|
for _, tag := range ignoredTags {
|
||||||
|
if !tagIgnoredAutoscaling(tag) {
|
||||||
|
t.Fatalf("Tag %v with value %v not ignored, but should be!", *tag.Key, *tag.Value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@ package aws
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"log"
|
"log"
|
||||||
|
"regexp"
|
||||||
|
|
||||||
"github.com/aws/aws-sdk-go/aws"
|
"github.com/aws/aws-sdk-go/aws"
|
||||||
"github.com/aws/aws-sdk-go/aws/awserr"
|
"github.com/aws/aws-sdk-go/aws/awserr"
|
||||||
|
@ -74,10 +75,13 @@ func diffTagsS3(oldTags, newTags []*s3.Tag) ([]*s3.Tag, []*s3.Tag) {
|
||||||
func tagsFromMapS3(m map[string]interface{}) []*s3.Tag {
|
func tagsFromMapS3(m map[string]interface{}) []*s3.Tag {
|
||||||
result := make([]*s3.Tag, 0, len(m))
|
result := make([]*s3.Tag, 0, len(m))
|
||||||
for k, v := range m {
|
for k, v := range m {
|
||||||
result = append(result, &s3.Tag{
|
t := &s3.Tag{
|
||||||
Key: aws.String(k),
|
Key: aws.String(k),
|
||||||
Value: aws.String(v.(string)),
|
Value: aws.String(v.(string)),
|
||||||
})
|
}
|
||||||
|
if !tagIgnoredS3(t) {
|
||||||
|
result = append(result, t)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
@ -87,7 +91,9 @@ func tagsFromMapS3(m map[string]interface{}) []*s3.Tag {
|
||||||
func tagsToMapS3(ts []*s3.Tag) map[string]string {
|
func tagsToMapS3(ts []*s3.Tag) map[string]string {
|
||||||
result := make(map[string]string)
|
result := make(map[string]string)
|
||||||
for _, t := range ts {
|
for _, t := range ts {
|
||||||
result[*t.Key] = *t.Value
|
if !tagIgnoredS3(t) {
|
||||||
|
result[*t.Key] = *t.Value
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
@ -111,3 +117,17 @@ func getTagSetS3(s3conn *s3.S3, bucket string) ([]*s3.Tag, error) {
|
||||||
|
|
||||||
return response.TagSet, nil
|
return response.TagSet, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// compare a tag against a list of strings and checks if it should
|
||||||
|
// be ignored or not
|
||||||
|
func tagIgnoredS3(t *s3.Tag) bool {
|
||||||
|
filter := []string{"^aws:*"}
|
||||||
|
for _, v := range filter {
|
||||||
|
log.Printf("[DEBUG] Matching %v with %v\n", v, *t.Key)
|
||||||
|
if r, _ := regexp.MatchString(v, *t.Key); r == true {
|
||||||
|
log.Printf("[DEBUG] Found AWS specific tag %s (val: %s), ignoring.\n", *t.Key, *t.Value)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@ import (
|
||||||
"reflect"
|
"reflect"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/aws/aws-sdk-go/aws"
|
||||||
"github.com/aws/aws-sdk-go/service/s3"
|
"github.com/aws/aws-sdk-go/service/s3"
|
||||||
"github.com/hashicorp/terraform/helper/resource"
|
"github.com/hashicorp/terraform/helper/resource"
|
||||||
"github.com/hashicorp/terraform/terraform"
|
"github.com/hashicorp/terraform/terraform"
|
||||||
|
@ -61,6 +62,23 @@ func TestDiffTagsS3(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestIgnoringTagsS3(t *testing.T) {
|
||||||
|
var ignoredTags []*s3.Tag
|
||||||
|
ignoredTags = append(ignoredTags, &s3.Tag{
|
||||||
|
Key: aws.String("aws:cloudformation:logical-id"),
|
||||||
|
Value: aws.String("foo"),
|
||||||
|
})
|
||||||
|
ignoredTags = append(ignoredTags, &s3.Tag{
|
||||||
|
Key: aws.String("aws:foo:bar"),
|
||||||
|
Value: aws.String("baz"),
|
||||||
|
})
|
||||||
|
for _, tag := range ignoredTags {
|
||||||
|
if !tagIgnoredS3(tag) {
|
||||||
|
t.Fatalf("Tag %v with value %v not ignored, but should be!", *tag.Key, *tag.Value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// testAccCheckTags can be used to check the tags on a resource.
|
// testAccCheckTags can be used to check the tags on a resource.
|
||||||
func testAccCheckTagsS3(
|
func testAccCheckTagsS3(
|
||||||
ts *[]*s3.Tag, key string, value string) resource.TestCheckFunc {
|
ts *[]*s3.Tag, key string, value string) resource.TestCheckFunc {
|
||||||
|
|
|
@ -2,6 +2,7 @@ package aws
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"log"
|
"log"
|
||||||
|
"regexp"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
@ -137,7 +138,6 @@ func diffTags(oldTags, newTags []*ec2.Tag) ([]*ec2.Tag, []*ec2.Tag) {
|
||||||
for _, t := range oldTags {
|
for _, t := range oldTags {
|
||||||
old, ok := create[*t.Key]
|
old, ok := create[*t.Key]
|
||||||
if !ok || old != *t.Value {
|
if !ok || old != *t.Value {
|
||||||
// Delete it!
|
|
||||||
remove = append(remove, t)
|
remove = append(remove, t)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -149,10 +149,13 @@ func diffTags(oldTags, newTags []*ec2.Tag) ([]*ec2.Tag, []*ec2.Tag) {
|
||||||
func tagsFromMap(m map[string]interface{}) []*ec2.Tag {
|
func tagsFromMap(m map[string]interface{}) []*ec2.Tag {
|
||||||
result := make([]*ec2.Tag, 0, len(m))
|
result := make([]*ec2.Tag, 0, len(m))
|
||||||
for k, v := range m {
|
for k, v := range m {
|
||||||
result = append(result, &ec2.Tag{
|
t := &ec2.Tag{
|
||||||
Key: aws.String(k),
|
Key: aws.String(k),
|
||||||
Value: aws.String(v.(string)),
|
Value: aws.String(v.(string)),
|
||||||
})
|
}
|
||||||
|
if !tagIgnored(t) {
|
||||||
|
result = append(result, t)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
@ -162,7 +165,9 @@ func tagsFromMap(m map[string]interface{}) []*ec2.Tag {
|
||||||
func tagsToMap(ts []*ec2.Tag) map[string]string {
|
func tagsToMap(ts []*ec2.Tag) map[string]string {
|
||||||
result := make(map[string]string)
|
result := make(map[string]string)
|
||||||
for _, t := range ts {
|
for _, t := range ts {
|
||||||
result[*t.Key] = *t.Value
|
if !tagIgnored(t) {
|
||||||
|
result[*t.Key] = *t.Value
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
@ -192,7 +197,9 @@ func diffElbV2Tags(oldTags, newTags []*elbv2.Tag) ([]*elbv2.Tag, []*elbv2.Tag) {
|
||||||
func tagsToMapELBv2(ts []*elbv2.Tag) map[string]string {
|
func tagsToMapELBv2(ts []*elbv2.Tag) map[string]string {
|
||||||
result := make(map[string]string)
|
result := make(map[string]string)
|
||||||
for _, t := range ts {
|
for _, t := range ts {
|
||||||
result[*t.Key] = *t.Value
|
if !tagIgnoredELBv2(t) {
|
||||||
|
result[*t.Key] = *t.Value
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
@ -202,11 +209,41 @@ func tagsToMapELBv2(ts []*elbv2.Tag) map[string]string {
|
||||||
func tagsFromMapELBv2(m map[string]interface{}) []*elbv2.Tag {
|
func tagsFromMapELBv2(m map[string]interface{}) []*elbv2.Tag {
|
||||||
var result []*elbv2.Tag
|
var result []*elbv2.Tag
|
||||||
for k, v := range m {
|
for k, v := range m {
|
||||||
result = append(result, &elbv2.Tag{
|
t := &elbv2.Tag{
|
||||||
Key: aws.String(k),
|
Key: aws.String(k),
|
||||||
Value: aws.String(v.(string)),
|
Value: aws.String(v.(string)),
|
||||||
})
|
}
|
||||||
|
if !tagIgnoredELBv2(t) {
|
||||||
|
result = append(result, t)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// tagIgnored compares a tag against a list of strings and checks if it should
|
||||||
|
// be ignored or not
|
||||||
|
func tagIgnored(t *ec2.Tag) bool {
|
||||||
|
filter := []string{"^aws:*"}
|
||||||
|
for _, v := range filter {
|
||||||
|
log.Printf("[DEBUG] Matching %v with %v\n", v, *t.Key)
|
||||||
|
if r, _ := regexp.MatchString(v, *t.Key); r == true {
|
||||||
|
log.Printf("[DEBUG] Found AWS specific tag %s (val: %s), ignoring.\n", *t.Key, *t.Value)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// and for ELBv2 as well
|
||||||
|
func tagIgnoredELBv2(t *elbv2.Tag) bool {
|
||||||
|
filter := []string{"^aws:*"}
|
||||||
|
for _, v := range filter {
|
||||||
|
log.Printf("[DEBUG] Matching %v with %v\n", v, *t.Key)
|
||||||
|
if r, _ := regexp.MatchString(v, *t.Key); r == true {
|
||||||
|
log.Printf("[DEBUG] Found AWS specific tag %s (val: %s), ignoring.\n", *t.Key, *t.Value)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
|
@ -1,6 +1,9 @@
|
||||||
package aws
|
package aws
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"log"
|
||||||
|
"regexp"
|
||||||
|
|
||||||
"github.com/aws/aws-sdk-go/aws"
|
"github.com/aws/aws-sdk-go/aws"
|
||||||
"github.com/aws/aws-sdk-go/service/elasticbeanstalk"
|
"github.com/aws/aws-sdk-go/service/elasticbeanstalk"
|
||||||
)
|
)
|
||||||
|
@ -32,10 +35,13 @@ func diffTagsBeanstalk(oldTags, newTags []*elasticbeanstalk.Tag) ([]*elasticbean
|
||||||
func tagsFromMapBeanstalk(m map[string]interface{}) []*elasticbeanstalk.Tag {
|
func tagsFromMapBeanstalk(m map[string]interface{}) []*elasticbeanstalk.Tag {
|
||||||
var result []*elasticbeanstalk.Tag
|
var result []*elasticbeanstalk.Tag
|
||||||
for k, v := range m {
|
for k, v := range m {
|
||||||
result = append(result, &elasticbeanstalk.Tag{
|
t := &elasticbeanstalk.Tag{
|
||||||
Key: aws.String(k),
|
Key: aws.String(k),
|
||||||
Value: aws.String(v.(string)),
|
Value: aws.String(v.(string)),
|
||||||
})
|
}
|
||||||
|
if !tagIgnoredBeanstalk(t) {
|
||||||
|
result = append(result, t)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
@ -45,8 +51,24 @@ func tagsFromMapBeanstalk(m map[string]interface{}) []*elasticbeanstalk.Tag {
|
||||||
func tagsToMapBeanstalk(ts []*elasticbeanstalk.Tag) map[string]string {
|
func tagsToMapBeanstalk(ts []*elasticbeanstalk.Tag) map[string]string {
|
||||||
result := make(map[string]string)
|
result := make(map[string]string)
|
||||||
for _, t := range ts {
|
for _, t := range ts {
|
||||||
result[*t.Key] = *t.Value
|
if !tagIgnoredBeanstalk(t) {
|
||||||
|
result[*t.Key] = *t.Value
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// compare a tag against a list of strings and checks if it should
|
||||||
|
// be ignored or not
|
||||||
|
func tagIgnoredBeanstalk(t *elasticbeanstalk.Tag) bool {
|
||||||
|
filter := []string{"^aws:*"}
|
||||||
|
for _, v := range filter {
|
||||||
|
log.Printf("[DEBUG] Matching %v with %v\n", v, *t.Key)
|
||||||
|
if r, _ := regexp.MatchString(v, *t.Key); r == true {
|
||||||
|
log.Printf("[DEBUG] Found AWS specific tag %s (val: %s), ignoring.\n", *t.Key, *t.Value)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@ import (
|
||||||
"reflect"
|
"reflect"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/aws/aws-sdk-go/aws"
|
||||||
"github.com/aws/aws-sdk-go/service/elasticbeanstalk"
|
"github.com/aws/aws-sdk-go/service/elasticbeanstalk"
|
||||||
"github.com/hashicorp/terraform/helper/resource"
|
"github.com/hashicorp/terraform/helper/resource"
|
||||||
"github.com/hashicorp/terraform/terraform"
|
"github.com/hashicorp/terraform/terraform"
|
||||||
|
@ -61,6 +62,23 @@ func TestDiffBeanstalkTags(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestIgnoringTagsBeanstalk(t *testing.T) {
|
||||||
|
var ignoredTags []*elasticbeanstalk.Tag
|
||||||
|
ignoredTags = append(ignoredTags, &elasticbeanstalk.Tag{
|
||||||
|
Key: aws.String("aws:cloudformation:logical-id"),
|
||||||
|
Value: aws.String("foo"),
|
||||||
|
})
|
||||||
|
ignoredTags = append(ignoredTags, &elasticbeanstalk.Tag{
|
||||||
|
Key: aws.String("aws:foo:bar"),
|
||||||
|
Value: aws.String("baz"),
|
||||||
|
})
|
||||||
|
for _, tag := range ignoredTags {
|
||||||
|
if !tagIgnoredBeanstalk(tag) {
|
||||||
|
t.Fatalf("Tag %v with value %v not ignored, but should be!", *tag.Key, *tag.Value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// testAccCheckTags can be used to check the tags on a resource.
|
// testAccCheckTags can be used to check the tags on a resource.
|
||||||
func testAccCheckBeanstalkTags(
|
func testAccCheckBeanstalkTags(
|
||||||
ts *[]*elasticbeanstalk.Tag, key string, value string) resource.TestCheckFunc {
|
ts *[]*elasticbeanstalk.Tag, key string, value string) resource.TestCheckFunc {
|
||||||
|
|
|
@ -2,6 +2,7 @@ package aws
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"log"
|
"log"
|
||||||
|
"regexp"
|
||||||
|
|
||||||
"github.com/aws/aws-sdk-go/aws"
|
"github.com/aws/aws-sdk-go/aws"
|
||||||
"github.com/aws/aws-sdk-go/service/cloudtrail"
|
"github.com/aws/aws-sdk-go/service/cloudtrail"
|
||||||
|
@ -72,10 +73,13 @@ func diffTagsCloudtrail(oldTags, newTags []*cloudtrail.Tag) ([]*cloudtrail.Tag,
|
||||||
func tagsFromMapCloudtrail(m map[string]interface{}) []*cloudtrail.Tag {
|
func tagsFromMapCloudtrail(m map[string]interface{}) []*cloudtrail.Tag {
|
||||||
var result []*cloudtrail.Tag
|
var result []*cloudtrail.Tag
|
||||||
for k, v := range m {
|
for k, v := range m {
|
||||||
result = append(result, &cloudtrail.Tag{
|
t := &cloudtrail.Tag{
|
||||||
Key: aws.String(k),
|
Key: aws.String(k),
|
||||||
Value: aws.String(v.(string)),
|
Value: aws.String(v.(string)),
|
||||||
})
|
}
|
||||||
|
if !tagIgnoredCloudtrail(t) {
|
||||||
|
result = append(result, t)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
@ -85,8 +89,24 @@ func tagsFromMapCloudtrail(m map[string]interface{}) []*cloudtrail.Tag {
|
||||||
func tagsToMapCloudtrail(ts []*cloudtrail.Tag) map[string]string {
|
func tagsToMapCloudtrail(ts []*cloudtrail.Tag) map[string]string {
|
||||||
result := make(map[string]string)
|
result := make(map[string]string)
|
||||||
for _, t := range ts {
|
for _, t := range ts {
|
||||||
result[*t.Key] = *t.Value
|
if !tagIgnoredCloudtrail(t) {
|
||||||
|
result[*t.Key] = *t.Value
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// compare a tag against a list of strings and checks if it should
|
||||||
|
// be ignored or not
|
||||||
|
func tagIgnoredCloudtrail(t *cloudtrail.Tag) bool {
|
||||||
|
filter := []string{"^aws:*"}
|
||||||
|
for _, v := range filter {
|
||||||
|
log.Printf("[DEBUG] Matching %v with %v\n", v, *t.Key)
|
||||||
|
if r, _ := regexp.MatchString(v, *t.Key); r == true {
|
||||||
|
log.Printf("[DEBUG] Found AWS specific tag %s (val: %s), ignoring.\n", *t.Key, *t.Value)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@ import (
|
||||||
"reflect"
|
"reflect"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/aws/aws-sdk-go/aws"
|
||||||
"github.com/aws/aws-sdk-go/service/cloudtrail"
|
"github.com/aws/aws-sdk-go/service/cloudtrail"
|
||||||
"github.com/hashicorp/terraform/helper/resource"
|
"github.com/hashicorp/terraform/helper/resource"
|
||||||
"github.com/hashicorp/terraform/terraform"
|
"github.com/hashicorp/terraform/terraform"
|
||||||
|
@ -61,6 +62,23 @@ func TestDiffCloudtrailTags(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestIgnoringTagsCloudtrail(t *testing.T) {
|
||||||
|
var ignoredTags []*cloudtrail.Tag
|
||||||
|
ignoredTags = append(ignoredTags, &cloudtrail.Tag{
|
||||||
|
Key: aws.String("aws:cloudformation:logical-id"),
|
||||||
|
Value: aws.String("foo"),
|
||||||
|
})
|
||||||
|
ignoredTags = append(ignoredTags, &cloudtrail.Tag{
|
||||||
|
Key: aws.String("aws:foo:bar"),
|
||||||
|
Value: aws.String("baz"),
|
||||||
|
})
|
||||||
|
for _, tag := range ignoredTags {
|
||||||
|
if !tagIgnoredCloudtrail(tag) {
|
||||||
|
t.Fatalf("Tag %v with value %v not ignored, but should be!", *tag.Key, *tag.Value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// testAccCheckCloudTrailCheckTags can be used to check the tags on a trail
|
// testAccCheckCloudTrailCheckTags can be used to check the tags on a trail
|
||||||
func testAccCheckCloudTrailCheckTags(tags *[]*cloudtrail.Tag, expectedTags map[string]string) resource.TestCheckFunc {
|
func testAccCheckCloudTrailCheckTags(tags *[]*cloudtrail.Tag, expectedTags map[string]string) resource.TestCheckFunc {
|
||||||
return func(s *terraform.State) error {
|
return func(s *terraform.State) error {
|
||||||
|
|
|
@ -2,6 +2,7 @@ package aws
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"log"
|
"log"
|
||||||
|
"regexp"
|
||||||
|
|
||||||
"github.com/aws/aws-sdk-go/aws"
|
"github.com/aws/aws-sdk-go/aws"
|
||||||
"github.com/aws/aws-sdk-go/service/elasticache"
|
"github.com/aws/aws-sdk-go/service/elasticache"
|
||||||
|
@ -75,10 +76,13 @@ func diffTagsEC(oldTags, newTags []*elasticache.Tag) ([]*elasticache.Tag, []*ela
|
||||||
func tagsFromMapEC(m map[string]interface{}) []*elasticache.Tag {
|
func tagsFromMapEC(m map[string]interface{}) []*elasticache.Tag {
|
||||||
result := make([]*elasticache.Tag, 0, len(m))
|
result := make([]*elasticache.Tag, 0, len(m))
|
||||||
for k, v := range m {
|
for k, v := range m {
|
||||||
result = append(result, &elasticache.Tag{
|
t := &elasticache.Tag{
|
||||||
Key: aws.String(k),
|
Key: aws.String(k),
|
||||||
Value: aws.String(v.(string)),
|
Value: aws.String(v.(string)),
|
||||||
})
|
}
|
||||||
|
if !tagIgnoredEC(t) {
|
||||||
|
result = append(result, t)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
@ -88,8 +92,24 @@ func tagsFromMapEC(m map[string]interface{}) []*elasticache.Tag {
|
||||||
func tagsToMapEC(ts []*elasticache.Tag) map[string]string {
|
func tagsToMapEC(ts []*elasticache.Tag) map[string]string {
|
||||||
result := make(map[string]string)
|
result := make(map[string]string)
|
||||||
for _, t := range ts {
|
for _, t := range ts {
|
||||||
result[*t.Key] = *t.Value
|
if !tagIgnoredEC(t) {
|
||||||
|
result[*t.Key] = *t.Value
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// compare a tag against a list of strings and checks if it should
|
||||||
|
// be ignored or not
|
||||||
|
func tagIgnoredEC(t *elasticache.Tag) bool {
|
||||||
|
filter := []string{"^aws:*"}
|
||||||
|
for _, v := range filter {
|
||||||
|
log.Printf("[DEBUG] Matching %v with %v\n", v, *t.Key)
|
||||||
|
if r, _ := regexp.MatchString(v, *t.Key); r == true {
|
||||||
|
log.Printf("[DEBUG] Found AWS specific tag %s (val: %s), ignoring.\n", *t.Key, *t.Value)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@ import (
|
||||||
"reflect"
|
"reflect"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/aws/aws-sdk-go/aws"
|
||||||
"github.com/aws/aws-sdk-go/service/elasticache"
|
"github.com/aws/aws-sdk-go/service/elasticache"
|
||||||
"github.com/hashicorp/terraform/helper/resource"
|
"github.com/hashicorp/terraform/helper/resource"
|
||||||
"github.com/hashicorp/terraform/terraform"
|
"github.com/hashicorp/terraform/terraform"
|
||||||
|
@ -61,6 +62,23 @@ func TestDiffelasticacheTags(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestIgnoringTagsEC(t *testing.T) {
|
||||||
|
var ignoredTags []*elasticache.Tag
|
||||||
|
ignoredTags = append(ignoredTags, &elasticache.Tag{
|
||||||
|
Key: aws.String("aws:cloudformation:logical-id"),
|
||||||
|
Value: aws.String("foo"),
|
||||||
|
})
|
||||||
|
ignoredTags = append(ignoredTags, &elasticache.Tag{
|
||||||
|
Key: aws.String("aws:foo:bar"),
|
||||||
|
Value: aws.String("baz"),
|
||||||
|
})
|
||||||
|
for _, tag := range ignoredTags {
|
||||||
|
if !tagIgnoredEC(tag) {
|
||||||
|
t.Fatalf("Tag %v with value %v not ignored, but should be!", *tag.Key, *tag.Value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// testAccCheckTags can be used to check the tags on a resource.
|
// testAccCheckTags can be used to check the tags on a resource.
|
||||||
func testAccCheckelasticacheTags(
|
func testAccCheckelasticacheTags(
|
||||||
ts []*elasticache.Tag, key string, value string) resource.TestCheckFunc {
|
ts []*elasticache.Tag, key string, value string) resource.TestCheckFunc {
|
||||||
|
|
|
@ -2,6 +2,7 @@ package aws
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"log"
|
"log"
|
||||||
|
"regexp"
|
||||||
|
|
||||||
"github.com/aws/aws-sdk-go/aws"
|
"github.com/aws/aws-sdk-go/aws"
|
||||||
"github.com/aws/aws-sdk-go/service/efs"
|
"github.com/aws/aws-sdk-go/service/efs"
|
||||||
|
@ -74,10 +75,13 @@ func diffTagsEFS(oldTags, newTags []*efs.Tag) ([]*efs.Tag, []*efs.Tag) {
|
||||||
func tagsFromMapEFS(m map[string]interface{}) []*efs.Tag {
|
func tagsFromMapEFS(m map[string]interface{}) []*efs.Tag {
|
||||||
var result []*efs.Tag
|
var result []*efs.Tag
|
||||||
for k, v := range m {
|
for k, v := range m {
|
||||||
result = append(result, &efs.Tag{
|
t := &efs.Tag{
|
||||||
Key: aws.String(k),
|
Key: aws.String(k),
|
||||||
Value: aws.String(v.(string)),
|
Value: aws.String(v.(string)),
|
||||||
})
|
}
|
||||||
|
if !tagIgnoredEFS(t) {
|
||||||
|
result = append(result, t)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
@ -87,8 +91,24 @@ func tagsFromMapEFS(m map[string]interface{}) []*efs.Tag {
|
||||||
func tagsToMapEFS(ts []*efs.Tag) map[string]string {
|
func tagsToMapEFS(ts []*efs.Tag) map[string]string {
|
||||||
result := make(map[string]string)
|
result := make(map[string]string)
|
||||||
for _, t := range ts {
|
for _, t := range ts {
|
||||||
result[*t.Key] = *t.Value
|
if !tagIgnoredEFS(t) {
|
||||||
|
result[*t.Key] = *t.Value
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// compare a tag against a list of strings and checks if it should
|
||||||
|
// be ignored or not
|
||||||
|
func tagIgnoredEFS(t *efs.Tag) bool {
|
||||||
|
filter := []string{"^aws:*"}
|
||||||
|
for _, v := range filter {
|
||||||
|
log.Printf("[DEBUG] Matching %v with %v\n", v, *t.Key)
|
||||||
|
if r, _ := regexp.MatchString(v, *t.Key); r == true {
|
||||||
|
log.Printf("[DEBUG] Found AWS specific tag %s (val: %s), ignoring.\n", *t.Key, *t.Value)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@ import (
|
||||||
"reflect"
|
"reflect"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/aws/aws-sdk-go/aws"
|
||||||
"github.com/aws/aws-sdk-go/service/efs"
|
"github.com/aws/aws-sdk-go/service/efs"
|
||||||
"github.com/hashicorp/terraform/helper/resource"
|
"github.com/hashicorp/terraform/helper/resource"
|
||||||
"github.com/hashicorp/terraform/terraform"
|
"github.com/hashicorp/terraform/terraform"
|
||||||
|
@ -61,6 +62,23 @@ func TestDiffEFSTags(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestIgnoringTagsEFS(t *testing.T) {
|
||||||
|
var ignoredTags []*efs.Tag
|
||||||
|
ignoredTags = append(ignoredTags, &efs.Tag{
|
||||||
|
Key: aws.String("aws:cloudformation:logical-id"),
|
||||||
|
Value: aws.String("foo"),
|
||||||
|
})
|
||||||
|
ignoredTags = append(ignoredTags, &efs.Tag{
|
||||||
|
Key: aws.String("aws:foo:bar"),
|
||||||
|
Value: aws.String("baz"),
|
||||||
|
})
|
||||||
|
for _, tag := range ignoredTags {
|
||||||
|
if !tagIgnoredEFS(tag) {
|
||||||
|
t.Fatalf("Tag %v with value %v not ignored, but should be!", *tag.Key, *tag.Value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// testAccCheckTags can be used to check the tags on a resource.
|
// testAccCheckTags can be used to check the tags on a resource.
|
||||||
func testAccCheckEFSTags(
|
func testAccCheckEFSTags(
|
||||||
ts *[]*efs.Tag, key string, value string) resource.TestCheckFunc {
|
ts *[]*efs.Tag, key string, value string) resource.TestCheckFunc {
|
||||||
|
|
|
@ -2,6 +2,7 @@ package aws
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"log"
|
"log"
|
||||||
|
"regexp"
|
||||||
|
|
||||||
"github.com/aws/aws-sdk-go/aws"
|
"github.com/aws/aws-sdk-go/aws"
|
||||||
"github.com/aws/aws-sdk-go/service/elb"
|
"github.com/aws/aws-sdk-go/service/elb"
|
||||||
|
@ -74,10 +75,13 @@ func diffTagsELB(oldTags, newTags []*elb.Tag) ([]*elb.Tag, []*elb.Tag) {
|
||||||
func tagsFromMapELB(m map[string]interface{}) []*elb.Tag {
|
func tagsFromMapELB(m map[string]interface{}) []*elb.Tag {
|
||||||
var result []*elb.Tag
|
var result []*elb.Tag
|
||||||
for k, v := range m {
|
for k, v := range m {
|
||||||
result = append(result, &elb.Tag{
|
t := &elb.Tag{
|
||||||
Key: aws.String(k),
|
Key: aws.String(k),
|
||||||
Value: aws.String(v.(string)),
|
Value: aws.String(v.(string)),
|
||||||
})
|
}
|
||||||
|
if !tagIgnoredELB(t) {
|
||||||
|
result = append(result, t)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
@ -87,8 +91,24 @@ func tagsFromMapELB(m map[string]interface{}) []*elb.Tag {
|
||||||
func tagsToMapELB(ts []*elb.Tag) map[string]string {
|
func tagsToMapELB(ts []*elb.Tag) map[string]string {
|
||||||
result := make(map[string]string)
|
result := make(map[string]string)
|
||||||
for _, t := range ts {
|
for _, t := range ts {
|
||||||
result[*t.Key] = *t.Value
|
if !tagIgnoredELB(t) {
|
||||||
|
result[*t.Key] = *t.Value
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// compare a tag against a list of strings and checks if it should
|
||||||
|
// be ignored or not
|
||||||
|
func tagIgnoredELB(t *elb.Tag) bool {
|
||||||
|
filter := []string{"^aws:*"}
|
||||||
|
for _, v := range filter {
|
||||||
|
log.Printf("[DEBUG] Matching %v with %v\n", v, *t.Key)
|
||||||
|
if r, _ := regexp.MatchString(v, *t.Key); r == true {
|
||||||
|
log.Printf("[DEBUG] Found AWS specific tag %s (val: %s), ignoring.\n", *t.Key, *t.Value)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@ import (
|
||||||
"reflect"
|
"reflect"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/aws/aws-sdk-go/aws"
|
||||||
"github.com/aws/aws-sdk-go/service/elb"
|
"github.com/aws/aws-sdk-go/service/elb"
|
||||||
"github.com/hashicorp/terraform/helper/resource"
|
"github.com/hashicorp/terraform/helper/resource"
|
||||||
"github.com/hashicorp/terraform/terraform"
|
"github.com/hashicorp/terraform/terraform"
|
||||||
|
@ -61,6 +62,23 @@ func TestDiffELBTags(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestIgnoringTagsELB(t *testing.T) {
|
||||||
|
var ignoredTags []*elb.Tag
|
||||||
|
ignoredTags = append(ignoredTags, &elb.Tag{
|
||||||
|
Key: aws.String("aws:cloudformation:logical-id"),
|
||||||
|
Value: aws.String("foo"),
|
||||||
|
})
|
||||||
|
ignoredTags = append(ignoredTags, &elb.Tag{
|
||||||
|
Key: aws.String("aws:foo:bar"),
|
||||||
|
Value: aws.String("baz"),
|
||||||
|
})
|
||||||
|
for _, tag := range ignoredTags {
|
||||||
|
if !tagIgnoredELB(tag) {
|
||||||
|
t.Fatalf("Tag %v with value %v not ignored, but should be!", *tag.Key, *tag.Value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// testAccCheckTags can be used to check the tags on a resource.
|
// testAccCheckTags can be used to check the tags on a resource.
|
||||||
func testAccCheckELBTags(
|
func testAccCheckELBTags(
|
||||||
ts *[]*elb.Tag, key string, value string) resource.TestCheckFunc {
|
ts *[]*elb.Tag, key string, value string) resource.TestCheckFunc {
|
||||||
|
|
|
@ -3,6 +3,7 @@ package aws
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
|
"regexp"
|
||||||
|
|
||||||
"github.com/aws/aws-sdk-go/aws"
|
"github.com/aws/aws-sdk-go/aws"
|
||||||
"github.com/aws/aws-sdk-go/service/rds"
|
"github.com/aws/aws-sdk-go/service/rds"
|
||||||
|
@ -76,10 +77,13 @@ func diffTagsRDS(oldTags, newTags []*rds.Tag) ([]*rds.Tag, []*rds.Tag) {
|
||||||
func tagsFromMapRDS(m map[string]interface{}) []*rds.Tag {
|
func tagsFromMapRDS(m map[string]interface{}) []*rds.Tag {
|
||||||
result := make([]*rds.Tag, 0, len(m))
|
result := make([]*rds.Tag, 0, len(m))
|
||||||
for k, v := range m {
|
for k, v := range m {
|
||||||
result = append(result, &rds.Tag{
|
t := &rds.Tag{
|
||||||
Key: aws.String(k),
|
Key: aws.String(k),
|
||||||
Value: aws.String(v.(string)),
|
Value: aws.String(v.(string)),
|
||||||
})
|
}
|
||||||
|
if !tagIgnoredRDS(t) {
|
||||||
|
result = append(result, t)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
@ -89,7 +93,9 @@ func tagsFromMapRDS(m map[string]interface{}) []*rds.Tag {
|
||||||
func tagsToMapRDS(ts []*rds.Tag) map[string]string {
|
func tagsToMapRDS(ts []*rds.Tag) map[string]string {
|
||||||
result := make(map[string]string)
|
result := make(map[string]string)
|
||||||
for _, t := range ts {
|
for _, t := range ts {
|
||||||
result[*t.Key] = *t.Value
|
if !tagIgnoredRDS(t) {
|
||||||
|
result[*t.Key] = *t.Value
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
@ -111,3 +117,17 @@ func saveTagsRDS(conn *rds.RDS, d *schema.ResourceData, arn string) error {
|
||||||
|
|
||||||
return d.Set("tags", tagsToMapRDS(dt))
|
return d.Set("tags", tagsToMapRDS(dt))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// compare a tag against a list of strings and checks if it should
|
||||||
|
// be ignored or not
|
||||||
|
func tagIgnoredRDS(t *rds.Tag) bool {
|
||||||
|
filter := []string{"^aws:*"}
|
||||||
|
for _, v := range filter {
|
||||||
|
log.Printf("[DEBUG] Matching %v with %v\n", v, *t.Key)
|
||||||
|
if r, _ := regexp.MatchString(v, *t.Key); r == true {
|
||||||
|
log.Printf("[DEBUG] Found AWS specific tag %s (val: %s), ignoring.\n", *t.Key, *t.Value)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@ import (
|
||||||
"reflect"
|
"reflect"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/aws/aws-sdk-go/aws"
|
||||||
"github.com/aws/aws-sdk-go/service/rds"
|
"github.com/aws/aws-sdk-go/service/rds"
|
||||||
"github.com/hashicorp/terraform/helper/resource"
|
"github.com/hashicorp/terraform/helper/resource"
|
||||||
"github.com/hashicorp/terraform/terraform"
|
"github.com/hashicorp/terraform/terraform"
|
||||||
|
@ -61,6 +62,23 @@ func TestDiffRDSTags(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestIgnoringTagsRDS(t *testing.T) {
|
||||||
|
var ignoredTags []*rds.Tag
|
||||||
|
ignoredTags = append(ignoredTags, &rds.Tag{
|
||||||
|
Key: aws.String("aws:cloudformation:logical-id"),
|
||||||
|
Value: aws.String("foo"),
|
||||||
|
})
|
||||||
|
ignoredTags = append(ignoredTags, &rds.Tag{
|
||||||
|
Key: aws.String("aws:foo:bar"),
|
||||||
|
Value: aws.String("baz"),
|
||||||
|
})
|
||||||
|
for _, tag := range ignoredTags {
|
||||||
|
if !tagIgnoredRDS(tag) {
|
||||||
|
t.Fatalf("Tag %v with value %v not ignored, but should be!", *tag.Key, *tag.Value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// testAccCheckTags can be used to check the tags on a resource.
|
// testAccCheckTags can be used to check the tags on a resource.
|
||||||
func testAccCheckRDSTags(
|
func testAccCheckRDSTags(
|
||||||
ts []*rds.Tag, key string, value string) resource.TestCheckFunc {
|
ts []*rds.Tag, key string, value string) resource.TestCheckFunc {
|
||||||
|
|
|
@ -2,6 +2,7 @@ package aws
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"log"
|
"log"
|
||||||
|
"regexp"
|
||||||
|
|
||||||
"github.com/aws/aws-sdk-go/aws"
|
"github.com/aws/aws-sdk-go/aws"
|
||||||
"github.com/aws/aws-sdk-go/service/redshift"
|
"github.com/aws/aws-sdk-go/service/redshift"
|
||||||
|
@ -69,10 +70,13 @@ func diffTagsRedshift(oldTags, newTags []*redshift.Tag) ([]*redshift.Tag, []*red
|
||||||
func tagsFromMapRedshift(m map[string]interface{}) []*redshift.Tag {
|
func tagsFromMapRedshift(m map[string]interface{}) []*redshift.Tag {
|
||||||
result := make([]*redshift.Tag, 0, len(m))
|
result := make([]*redshift.Tag, 0, len(m))
|
||||||
for k, v := range m {
|
for k, v := range m {
|
||||||
result = append(result, &redshift.Tag{
|
t := &redshift.Tag{
|
||||||
Key: aws.String(k),
|
Key: aws.String(k),
|
||||||
Value: aws.String(v.(string)),
|
Value: aws.String(v.(string)),
|
||||||
})
|
}
|
||||||
|
if !tagIgnoredRedshift(t) {
|
||||||
|
result = append(result, t)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
@ -81,8 +85,24 @@ func tagsFromMapRedshift(m map[string]interface{}) []*redshift.Tag {
|
||||||
func tagsToMapRedshift(ts []*redshift.Tag) map[string]string {
|
func tagsToMapRedshift(ts []*redshift.Tag) map[string]string {
|
||||||
result := make(map[string]string)
|
result := make(map[string]string)
|
||||||
for _, t := range ts {
|
for _, t := range ts {
|
||||||
result[*t.Key] = *t.Value
|
if !tagIgnoredRedshift(t) {
|
||||||
|
result[*t.Key] = *t.Value
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// compare a tag against a list of strings and checks if it should
|
||||||
|
// be ignored or not
|
||||||
|
func tagIgnoredRedshift(t *redshift.Tag) bool {
|
||||||
|
filter := []string{"^aws:*"}
|
||||||
|
for _, v := range filter {
|
||||||
|
log.Printf("[DEBUG] Matching %v with %v\n", v, *t.Key)
|
||||||
|
if r, _ := regexp.MatchString(v, *t.Key); r == true {
|
||||||
|
log.Printf("[DEBUG] Found AWS specific tag %s (val: %s), ignoring.\n", *t.Key, *t.Value)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
|
@ -3,6 +3,9 @@ package aws
|
||||||
import (
|
import (
|
||||||
"reflect"
|
"reflect"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/aws/aws-sdk-go/aws"
|
||||||
|
"github.com/aws/aws-sdk-go/service/redshift"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestDiffRedshiftTags(t *testing.T) {
|
func TestDiffRedshiftTags(t *testing.T) {
|
||||||
|
@ -52,3 +55,20 @@ func TestDiffRedshiftTags(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestIgnoringTagsRedshift(t *testing.T) {
|
||||||
|
var ignoredTags []*redshift.Tag
|
||||||
|
ignoredTags = append(ignoredTags, &redshift.Tag{
|
||||||
|
Key: aws.String("aws:cloudformation:logical-id"),
|
||||||
|
Value: aws.String("foo"),
|
||||||
|
})
|
||||||
|
ignoredTags = append(ignoredTags, &redshift.Tag{
|
||||||
|
Key: aws.String("aws:foo:bar"),
|
||||||
|
Value: aws.String("baz"),
|
||||||
|
})
|
||||||
|
for _, tag := range ignoredTags {
|
||||||
|
if !tagIgnoredRedshift(tag) {
|
||||||
|
t.Fatalf("Tag %v with value %v not ignored, but should be!", *tag.Key, *tag.Value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@ package aws
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"log"
|
"log"
|
||||||
|
"regexp"
|
||||||
|
|
||||||
"github.com/aws/aws-sdk-go/aws"
|
"github.com/aws/aws-sdk-go/aws"
|
||||||
elasticsearch "github.com/aws/aws-sdk-go/service/elasticsearchservice"
|
elasticsearch "github.com/aws/aws-sdk-go/service/elasticsearchservice"
|
||||||
|
@ -74,10 +75,13 @@ func diffTagsElasticsearchService(oldTags, newTags []*elasticsearch.Tag) ([]*ela
|
||||||
func tagsFromMapElasticsearchService(m map[string]interface{}) []*elasticsearch.Tag {
|
func tagsFromMapElasticsearchService(m map[string]interface{}) []*elasticsearch.Tag {
|
||||||
var result []*elasticsearch.Tag
|
var result []*elasticsearch.Tag
|
||||||
for k, v := range m {
|
for k, v := range m {
|
||||||
result = append(result, &elasticsearch.Tag{
|
t := &elasticsearch.Tag{
|
||||||
Key: aws.String(k),
|
Key: aws.String(k),
|
||||||
Value: aws.String(v.(string)),
|
Value: aws.String(v.(string)),
|
||||||
})
|
}
|
||||||
|
if !tagIgnoredElasticsearchService(t) {
|
||||||
|
result = append(result, t)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
@ -87,8 +91,24 @@ func tagsFromMapElasticsearchService(m map[string]interface{}) []*elasticsearch.
|
||||||
func tagsToMapElasticsearchService(ts []*elasticsearch.Tag) map[string]string {
|
func tagsToMapElasticsearchService(ts []*elasticsearch.Tag) map[string]string {
|
||||||
result := make(map[string]string)
|
result := make(map[string]string)
|
||||||
for _, t := range ts {
|
for _, t := range ts {
|
||||||
result[*t.Key] = *t.Value
|
if !tagIgnoredElasticsearchService(t) {
|
||||||
|
result[*t.Key] = *t.Value
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// compare a tag against a list of strings and checks if it should
|
||||||
|
// be ignored or not
|
||||||
|
func tagIgnoredElasticsearchService(t *elasticsearch.Tag) bool {
|
||||||
|
filter := []string{"^aws:*"}
|
||||||
|
for _, v := range filter {
|
||||||
|
log.Printf("[DEBUG] Matching %v with %v\n", v, *t.Key)
|
||||||
|
if r, _ := regexp.MatchString(v, *t.Key); r == true {
|
||||||
|
log.Printf("[DEBUG] Found AWS specific tag %s (val: %s), ignoring.\n", *t.Key, *t.Value)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@ import (
|
||||||
"reflect"
|
"reflect"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/aws/aws-sdk-go/aws"
|
||||||
elasticsearch "github.com/aws/aws-sdk-go/service/elasticsearchservice"
|
elasticsearch "github.com/aws/aws-sdk-go/service/elasticsearchservice"
|
||||||
"github.com/hashicorp/terraform/helper/resource"
|
"github.com/hashicorp/terraform/helper/resource"
|
||||||
"github.com/hashicorp/terraform/terraform"
|
"github.com/hashicorp/terraform/terraform"
|
||||||
|
@ -61,6 +62,23 @@ func TestDiffElasticsearchServiceTags(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestIgnoringTagsElasticsearchService(t *testing.T) {
|
||||||
|
var ignoredTags []*elasticsearch.Tag
|
||||||
|
ignoredTags = append(ignoredTags, &elasticsearch.Tag{
|
||||||
|
Key: aws.String("aws:cloudformation:logical-id"),
|
||||||
|
Value: aws.String("foo"),
|
||||||
|
})
|
||||||
|
ignoredTags = append(ignoredTags, &elasticsearch.Tag{
|
||||||
|
Key: aws.String("aws:foo:bar"),
|
||||||
|
Value: aws.String("baz"),
|
||||||
|
})
|
||||||
|
for _, tag := range ignoredTags {
|
||||||
|
if !tagIgnoredElasticsearchService(tag) {
|
||||||
|
t.Fatalf("Tag %v with value %v not ignored, but should be!", *tag.Key, *tag.Value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// testAccCheckTags can be used to check the tags on a resource.
|
// testAccCheckTags can be used to check the tags on a resource.
|
||||||
func testAccCheckElasticsearchServiceTags(
|
func testAccCheckElasticsearchServiceTags(
|
||||||
ts *[]*elasticsearch.Tag, key string, value string) resource.TestCheckFunc {
|
ts *[]*elasticsearch.Tag, key string, value string) resource.TestCheckFunc {
|
||||||
|
|
|
@ -2,6 +2,7 @@ package aws
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"log"
|
"log"
|
||||||
|
"regexp"
|
||||||
|
|
||||||
"github.com/aws/aws-sdk-go/aws"
|
"github.com/aws/aws-sdk-go/aws"
|
||||||
"github.com/aws/aws-sdk-go/service/kinesis"
|
"github.com/aws/aws-sdk-go/service/kinesis"
|
||||||
|
@ -85,10 +86,13 @@ func diffTagsKinesis(oldTags, newTags []*kinesis.Tag) ([]*kinesis.Tag, []*kinesi
|
||||||
func tagsFromMapKinesis(m map[string]interface{}) []*kinesis.Tag {
|
func tagsFromMapKinesis(m map[string]interface{}) []*kinesis.Tag {
|
||||||
var result []*kinesis.Tag
|
var result []*kinesis.Tag
|
||||||
for k, v := range m {
|
for k, v := range m {
|
||||||
result = append(result, &kinesis.Tag{
|
t := &kinesis.Tag{
|
||||||
Key: aws.String(k),
|
Key: aws.String(k),
|
||||||
Value: aws.String(v.(string)),
|
Value: aws.String(v.(string)),
|
||||||
})
|
}
|
||||||
|
if !tagIgnoredKinesis(t) {
|
||||||
|
result = append(result, t)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
@ -98,8 +102,24 @@ func tagsFromMapKinesis(m map[string]interface{}) []*kinesis.Tag {
|
||||||
func tagsToMapKinesis(ts []*kinesis.Tag) map[string]string {
|
func tagsToMapKinesis(ts []*kinesis.Tag) map[string]string {
|
||||||
result := make(map[string]string)
|
result := make(map[string]string)
|
||||||
for _, t := range ts {
|
for _, t := range ts {
|
||||||
result[*t.Key] = *t.Value
|
if !tagIgnoredKinesis(t) {
|
||||||
|
result[*t.Key] = *t.Value
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// compare a tag against a list of strings and checks if it should
|
||||||
|
// be ignored or not
|
||||||
|
func tagIgnoredKinesis(t *kinesis.Tag) bool {
|
||||||
|
filter := []string{"^aws:*"}
|
||||||
|
for _, v := range filter {
|
||||||
|
log.Printf("[DEBUG] Matching %v with %v\n", v, *t.Key)
|
||||||
|
if r, _ := regexp.MatchString(v, *t.Key); r == true {
|
||||||
|
log.Printf("[DEBUG] Found AWS specific tag %s (val: %s), ignoring.\n", *t.Key, *t.Value)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@ import (
|
||||||
"reflect"
|
"reflect"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/aws/aws-sdk-go/aws"
|
||||||
"github.com/aws/aws-sdk-go/service/kinesis"
|
"github.com/aws/aws-sdk-go/service/kinesis"
|
||||||
"github.com/hashicorp/terraform/helper/resource"
|
"github.com/hashicorp/terraform/helper/resource"
|
||||||
"github.com/hashicorp/terraform/terraform"
|
"github.com/hashicorp/terraform/terraform"
|
||||||
|
@ -61,6 +62,23 @@ func TestDiffTagsKinesis(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestIgnoringTagsKinesis(t *testing.T) {
|
||||||
|
var ignoredTags []*kinesis.Tag
|
||||||
|
ignoredTags = append(ignoredTags, &kinesis.Tag{
|
||||||
|
Key: aws.String("aws:cloudformation:logical-id"),
|
||||||
|
Value: aws.String("foo"),
|
||||||
|
})
|
||||||
|
ignoredTags = append(ignoredTags, &kinesis.Tag{
|
||||||
|
Key: aws.String("aws:foo:bar"),
|
||||||
|
Value: aws.String("baz"),
|
||||||
|
})
|
||||||
|
for _, tag := range ignoredTags {
|
||||||
|
if !tagIgnoredKinesis(tag) {
|
||||||
|
t.Fatalf("Tag %v with value %v not ignored, but should be!", *tag.Key, *tag.Value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// testAccCheckTags can be used to check the tags on a resource.
|
// testAccCheckTags can be used to check the tags on a resource.
|
||||||
func testAccCheckKinesisTags(ts []*kinesis.Tag, key string, value string) resource.TestCheckFunc {
|
func testAccCheckKinesisTags(ts []*kinesis.Tag, key string, value string) resource.TestCheckFunc {
|
||||||
return func(s *terraform.State) error {
|
return func(s *terraform.State) error {
|
||||||
|
|
|
@ -2,6 +2,7 @@ package aws
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"log"
|
"log"
|
||||||
|
"regexp"
|
||||||
|
|
||||||
"github.com/aws/aws-sdk-go/aws"
|
"github.com/aws/aws-sdk-go/aws"
|
||||||
"github.com/aws/aws-sdk-go/service/route53"
|
"github.com/aws/aws-sdk-go/service/route53"
|
||||||
|
@ -71,10 +72,13 @@ func diffTagsR53(oldTags, newTags []*route53.Tag) ([]*route53.Tag, []*route53.Ta
|
||||||
func tagsFromMapR53(m map[string]interface{}) []*route53.Tag {
|
func tagsFromMapR53(m map[string]interface{}) []*route53.Tag {
|
||||||
result := make([]*route53.Tag, 0, len(m))
|
result := make([]*route53.Tag, 0, len(m))
|
||||||
for k, v := range m {
|
for k, v := range m {
|
||||||
result = append(result, &route53.Tag{
|
t := &route53.Tag{
|
||||||
Key: aws.String(k),
|
Key: aws.String(k),
|
||||||
Value: aws.String(v.(string)),
|
Value: aws.String(v.(string)),
|
||||||
})
|
}
|
||||||
|
if !tagIgnoredRoute53(t) {
|
||||||
|
result = append(result, t)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
@ -84,8 +88,24 @@ func tagsFromMapR53(m map[string]interface{}) []*route53.Tag {
|
||||||
func tagsToMapR53(ts []*route53.Tag) map[string]string {
|
func tagsToMapR53(ts []*route53.Tag) map[string]string {
|
||||||
result := make(map[string]string)
|
result := make(map[string]string)
|
||||||
for _, t := range ts {
|
for _, t := range ts {
|
||||||
result[*t.Key] = *t.Value
|
if !tagIgnoredRoute53(t) {
|
||||||
|
result[*t.Key] = *t.Value
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// compare a tag against a list of strings and checks if it should
|
||||||
|
// be ignored or not
|
||||||
|
func tagIgnoredRoute53(t *route53.Tag) bool {
|
||||||
|
filter := []string{"^aws:*"}
|
||||||
|
for _, v := range filter {
|
||||||
|
log.Printf("[DEBUG] Matching %v with %v\n", v, *t.Key)
|
||||||
|
if r, _ := regexp.MatchString(v, *t.Key); r == true {
|
||||||
|
log.Printf("[DEBUG] Found AWS specific tag %s (val: %s), ignoring.\n", *t.Key, *t.Value)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@ import (
|
||||||
"reflect"
|
"reflect"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/aws/aws-sdk-go/aws"
|
||||||
"github.com/aws/aws-sdk-go/service/route53"
|
"github.com/aws/aws-sdk-go/service/route53"
|
||||||
"github.com/hashicorp/terraform/helper/resource"
|
"github.com/hashicorp/terraform/helper/resource"
|
||||||
"github.com/hashicorp/terraform/terraform"
|
"github.com/hashicorp/terraform/terraform"
|
||||||
|
@ -61,6 +62,23 @@ func TestDiffTagsR53(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestIgnoringTagsRoute53(t *testing.T) {
|
||||||
|
var ignoredTags []*route53.Tag
|
||||||
|
ignoredTags = append(ignoredTags, &route53.Tag{
|
||||||
|
Key: aws.String("aws:cloudformation:logical-id"),
|
||||||
|
Value: aws.String("foo"),
|
||||||
|
})
|
||||||
|
ignoredTags = append(ignoredTags, &route53.Tag{
|
||||||
|
Key: aws.String("aws:foo:bar"),
|
||||||
|
Value: aws.String("baz"),
|
||||||
|
})
|
||||||
|
for _, tag := range ignoredTags {
|
||||||
|
if !tagIgnoredRoute53(tag) {
|
||||||
|
t.Fatalf("Tag %v with value %v not ignored, but should be!", *tag.Key, *tag.Value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// testAccCheckTags can be used to check the tags on a resource.
|
// testAccCheckTags can be used to check the tags on a resource.
|
||||||
func testAccCheckTagsR53(
|
func testAccCheckTagsR53(
|
||||||
ts *[]*route53.Tag, key string, value string) resource.TestCheckFunc {
|
ts *[]*route53.Tag, key string, value string) resource.TestCheckFunc {
|
||||||
|
|
|
@ -5,6 +5,7 @@ import (
|
||||||
"reflect"
|
"reflect"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/aws/aws-sdk-go/aws"
|
||||||
"github.com/aws/aws-sdk-go/service/ec2"
|
"github.com/aws/aws-sdk-go/service/ec2"
|
||||||
"github.com/hashicorp/terraform/helper/resource"
|
"github.com/hashicorp/terraform/helper/resource"
|
||||||
"github.com/hashicorp/terraform/terraform"
|
"github.com/hashicorp/terraform/terraform"
|
||||||
|
@ -61,6 +62,24 @@ func TestDiffTags(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestIgnoringTags(t *testing.T) {
|
||||||
|
var ignoredTags []*ec2.Tag
|
||||||
|
ignoredTags = append(ignoredTags, &ec2.Tag{
|
||||||
|
|
||||||
|
Key: aws.String("aws:cloudformation:logical-id"),
|
||||||
|
Value: aws.String("foo"),
|
||||||
|
})
|
||||||
|
ignoredTags = append(ignoredTags, &ec2.Tag{
|
||||||
|
Key: aws.String("aws:foo:bar"),
|
||||||
|
Value: aws.String("baz"),
|
||||||
|
})
|
||||||
|
for _, tag := range ignoredTags {
|
||||||
|
if !tagIgnored(tag) {
|
||||||
|
t.Fatalf("Tag %v with value %v not ignored, but should be!", *tag.Key, *tag.Value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// testAccCheckTags can be used to check the tags on a resource.
|
// testAccCheckTags can be used to check the tags on a resource.
|
||||||
func testAccCheckTags(
|
func testAccCheckTags(
|
||||||
ts *[]*ec2.Tag, key string, value string) resource.TestCheckFunc {
|
ts *[]*ec2.Tag, key string, value string) resource.TestCheckFunc {
|
||||||
|
|
Loading…
Reference in New Issue