]> git.immae.eu Git - github/fretlink/terraform-provider-mailgun.git/blobdiff - mailgun/resource_mailgun_domain.go
fix the tests
[github/fretlink/terraform-provider-mailgun.git] / mailgun / resource_mailgun_domain.go
index eaf00fa51fae04ed69bb8ff45426fc8eada39890..e2bfe732e7fe68142addfe6e7e517f3868a52f33 100644 (file)
@@ -4,7 +4,7 @@ import (
        "context"
        "fmt"
        "github.com/hashicorp/terraform/helper/schema"
-       "github.com/mailgun/mailgun-go"
+       "github.com/mailgun/mailgun-go/v3"
        "log"
        "time"
 )
@@ -16,7 +16,7 @@ func resourceMailgunDomain() *schema.Resource {
                Delete: DeleteDomain,
                Read:   ReadDomain,
                Importer: &schema.ResourceImporter{
-                       State: schema.ImportStatePassthrough,
+                       State: ImportStatePassthroughDomain,
                },
 
                Schema: map[string]*schema.Schema{
@@ -107,29 +107,29 @@ func resourceMailgunDomain() *schema.Resource {
                        "open_tracking_settings_active": &schema.Schema{
                                Type:     schema.TypeBool,
                                Optional: true,
-                               Computed: true,
+                               Default:  false,
                        },
 
                        "click_tracking_settings_active": &schema.Schema{
                                Type:     schema.TypeBool,
                                Optional: true,
-                               Computed: true,
+                               Default:  false,
                        },
 
                        "unsubscribe_tracking_settings_active": &schema.Schema{
                                Type:     schema.TypeBool,
                                Optional: true,
-                               Computed: true,
+                               Default:  false,
                        },
                        "unsubscribe_tracking_settings_html_footer": &schema.Schema{
                                Type:     schema.TypeString,
                                Optional: true,
-                               Computed: true,
+                               Default:  "\n<br>\n<p><a href=\"%unsubscribe_url%\">unsubscribe</a></p>\n",
                        },
                        "unsubscribe_tracking_settings_text_footer": &schema.Schema{
                                Type:     schema.TypeString,
                                Optional: true,
-                               Computed: true,
+                               Default:  "\n\nTo unsubscribe click: <%unsubscribe_url%>\n\n",
                        },
 
                        "require_tls": &schema.Schema{
@@ -205,6 +205,14 @@ func resourceMailgunDomain() *schema.Resource {
        }
 }
 
+func interfaceToStringTab(i interface{}) []string {
+       aInterface := i.([]interface{})
+       aString := make([]string, len(aInterface))
+       for i, v := range aInterface {
+               aString[i] = v.(string)
+       }
+       return aString
+}
 func CreateDomain(d *schema.ResourceData, meta interface{}) error {
        mg := meta.(*mailgun.MailgunImpl)
        ctx, cancel := context.WithTimeout(context.Background(), time.Second*30)
@@ -218,7 +226,7 @@ func CreateDomain(d *schema.ResourceData, meta interface{}) error {
                Wildcard:           d.Get("wildcard").(bool),
                ForceDKIMAuthority: d.Get("force_dkim_authority").(bool),
                DKIMKeySize:        d.Get("dkim_key_size").(int),
-               IPS:                d.Get("ips").([]string),
+               IPS:                interfaceToStringTab(d.Get("ips")),
        })
 
        if err != nil {
@@ -358,9 +366,9 @@ func DeleteDomain(d *schema.ResourceData, meta interface{}) error {
 
 func ReadDomain(d *schema.ResourceData, meta interface{}) error {
        mg := meta.(*mailgun.MailgunImpl)
-       ctx, cancel := context.WithTimeout(context.Background(), time.Second*30)
+       ctx, cancel := context.WithTimeout(context.Background(), time.Second*120)
        defer cancel()
-       domainName := d.Get("name").(string)
+       domainName := d.Id()
        mg = mailgun.NewMailgun(domainName, mg.APIKey())
 
        domainResponse, err := mg.GetDomain(ctx, domainName)
@@ -417,9 +425,10 @@ func ReadDomain(d *schema.ResourceData, meta interface{}) error {
        d.Set("unsubscribe_tracking_settings_html_footer", domainTracking.Unsubscribe.HTMLFooter)
        d.Set("unsubscribe_tracking_settings_text_footer", domainTracking.Unsubscribe.TextFooter)
 
-       ipAddress, err := mg.ListDomainIPS(ctx)
+       ipAddress, err := getIps(ctx, mg)
+
        if err != nil {
-               return fmt.Errorf("Error Getting mailgun domain ips for %s: Error: %s", d.Id(), err)
+               return fmt.Errorf("Error Getting mailgun domain ips1 for %s: Error: %s", d.Id(), err)
        }
        ips := make([]string, len(ipAddress))
        for i, r := range ipAddress {
@@ -432,7 +441,7 @@ func ReadDomain(d *schema.ResourceData, meta interface{}) error {
        if err != nil {
                return fmt.Errorf("Error Getting mailgun credentials for %s: Error: %s", d.Id(), err)
        }
-       
+
        credentials := make([]map[string]interface{}, len(credentialsResponse))
        for i, r := range credentialsResponse {
                credentials[i] = make(map[string]interface{})
@@ -471,3 +480,26 @@ func ListCredentials(domain, apiKey string) ([]mailgun.Credential, error) {
        }
        return result, nil
 }
+
+func ImportStatePassthroughDomain(d *schema.ResourceData, meta interface{}) ([]*schema.ResourceData, error) {
+       if _, ok := d.GetOk("dkim_key_size"); !ok {
+               d.Set("dkim_key_size", 1024)
+       }
+
+       if _, ok := d.GetOk("force_dkim_authority"); !ok {
+               d.Set("force_dkim_authority", false)
+       }
+       return []*schema.ResourceData{d}, nil
+}
+
+func getIps(ctx context.Context,mg *mailgun.MailgunImpl) ([]mailgun.IPAddress, error){
+       start := time.Now()
+       t := time.Now()
+       ipAddress, err := mg.ListDomainIPS(ctx)
+       for (err != nil && t.Sub(start)< 120 * time.Second) {
+               ipAddress, err = mg.ListDomainIPS(ctx)
+               time.Sleep(5 * time.Second)
+               t = time.Now()
+       }
+       return ipAddress, err
+}