func AddTagsToResource(resourceARN string, tags []*rds.Tag, rdssvc *rds.RDS, logger lager.Logger) error { addTagsToResourceInput := &rds.AddTagsToResourceInput{ ResourceName: aws.String(resourceARN), Tags: tags, } logger.Debug("add-tags-to-resource", lager.Data{"input": addTagsToResourceInput}) addTagsToResourceOutput, err := rdssvc.AddTagsToResource(addTagsToResourceInput) if err != nil { logger.Error("aws-rds-error", err) if awsErr, ok := err.(awserr.Error); ok { return errors.New(awsErr.Code() + ": " + awsErr.Message()) } return err } logger.Debug("add-tags-to-resource", lager.Data{"output": addTagsToResourceOutput}) return nil }
// setTags is a helper to set the tags for a resource. It expects the // tags field to be named "tags" func setTagsRDS(conn *rds.RDS, d *schema.ResourceData, arn string) error { if d.HasChange("tags") { oraw, nraw := d.GetChange("tags") o := oraw.(map[string]interface{}) n := nraw.(map[string]interface{}) create, remove := diffTagsRDS(tagsFromMapRDS(o), tagsFromMapRDS(n)) // Set tags if len(remove) > 0 { log.Printf("[DEBUG] Removing tags: %s", remove) k := make([]*string, len(remove), len(remove)) for i, t := range remove { k[i] = t.Key } _, err := conn.RemoveTagsFromResource(&rds.RemoveTagsFromResourceInput{ ResourceName: aws.String(arn), TagKeys: k, }) if err != nil { return err } } if len(create) > 0 { log.Printf("[DEBUG] Creating tags: %s", create) _, err := conn.AddTagsToResource(&rds.AddTagsToResourceInput{ ResourceName: aws.String(arn), Tags: create, }) if err != nil { return err } } } return nil }