Skip to content

Commit 31afea8

Browse files
authored
Merge pull request #151 from schoren/resource-domain-alias
Resource domain alias
2 parents 00678e9 + 9bbc1ea commit 31afea8

File tree

14 files changed

+279
-10
lines changed

14 files changed

+279
-10
lines changed

api/model_alias_response.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,14 @@ func (o *MailcowResponseArray) GetAliasId() (*string, error) {
1515
}
1616
return o.GetFinalMsgItem(2), nil
1717
}
18+
19+
func (o *MailcowResponseArray) GetAliasDomainId() (*string, error) {
20+
if !o.HasFinalMsgItem(0) || !o.HasFinalMsgItem(1) {
21+
return nil, errors.New(fmt.Sprint("msg error: ", o.GetFinalMsgs()))
22+
}
23+
receipt := *o.GetFinalMsgItem(0)
24+
if receipt != "aliasd_added" {
25+
return nil, errors.New(fmt.Sprint("msg error: ", receipt))
26+
}
27+
return o.GetFinalMsgItem(1), nil
28+
}

api/model_create_request.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ type MailcowCreateRequest struct {
1313
ResourceName string
1414
}
1515

16+
func (o *MailcowCreateRequest) GetPayload() map[string]interface{} {
17+
return o.payload
18+
}
19+
1620
func NewCreateAliasRequest() *MailcowCreateRequest {
1721
this := MailcowCreateRequest{}
1822
this.payload = make(map[string]interface{})
@@ -21,6 +25,14 @@ func NewCreateAliasRequest() *MailcowCreateRequest {
2125
return &this
2226
}
2327

28+
func NewCreateAliasDomainRequest() *MailcowCreateRequest {
29+
this := MailcowCreateRequest{}
30+
this.payload = make(map[string]interface{})
31+
this.endpoint = "/api/v1/add/alias-domain"
32+
this.ResourceName = "resourceAliasDomain"
33+
return &this
34+
}
35+
2436
func NewCreateDomainRequest() *MailcowCreateRequest {
2537
this := MailcowCreateRequest{}
2638
this.payload = make(map[string]interface{})

api/model_delete_request.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,13 @@ func NewDeleteAliasRequest() *MailcowDeleteRequest {
1919
return &this
2020
}
2121

22+
func NewDeleteAliasDomainRequest() *MailcowDeleteRequest {
23+
this := MailcowDeleteRequest{}
24+
this.endpoint = "/api/v1/delete/alias-domain"
25+
this.ResourceName = "resourceAliasDomain"
26+
return &this
27+
}
28+
2229
func NewDeleteDomainRequest() *MailcowDeleteRequest {
2330
this := MailcowDeleteRequest{}
2431
this.endpoint = "/api/v1/delete/domain"

api/model_get_request.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,15 @@ func (a *ApiService) MailcowGetAlias(ctx context.Context, id string) ApiMailcowG
1111
}
1212
}
1313

14+
func (a *ApiService) MailcowGetAliasDomain(ctx context.Context, id string) ApiMailcowGetRequest {
15+
return ApiMailcowGetRequest{
16+
ApiService: a,
17+
ctx: ctx,
18+
endpoint: "/api/v1/get/alias-domain/{id}",
19+
id: id,
20+
}
21+
}
22+
1423
func (a *ApiService) MailcowGetDomain(ctx context.Context, id string) ApiMailcowGetRequest {
1524
return ApiMailcowGetRequest{
1625
ApiService: a,

api/model_update_request.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,15 @@ func NewUpdateAliasRequest() *MailcowUpdateRequest {
2323
return &this
2424
}
2525

26+
func NewUpdateAliasDomainRequest() *MailcowUpdateRequest {
27+
this := MailcowUpdateRequest{}
28+
this.attr = make(map[string]interface{})
29+
this.items = make([]string, 1)
30+
this.endpoint = "/api/v1/edit/alias-domain"
31+
this.ResourceName = "resourceAliasDomain"
32+
return &this
33+
}
34+
2635
func NewUpdateMailboxRequest() *MailcowUpdateRequest {
2736
this := MailcowUpdateRequest{}
2837
this.attr = make(map[string]interface{})

docs/resources/domain_alias.md

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# mailcow_domain_alias (Resource)
2+
3+
## Example Usage
4+
5+
```terraform
6+
resource "mailcow_domain_alias" "example" {
7+
alias_domain = "alias-domain.tld"
8+
target_domain = "target-domain.tld"
9+
}
10+
```
11+
12+
<!-- schema generated by tfplugindocs -->
13+
## Schema
14+
15+
### Required
16+
17+
- **alias_domain** (String) Alias domain name
18+
- **target_domain** (String) Target domain name
19+
20+
### Optional
21+
22+
- **active** (Boolean) is domain alias active or not
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
resource "mailcow_domain_alias" "example" {
2+
alias_domain = "alias-domain.tld"
3+
target_domain = "target-domain.tld"
4+
}

mailcow/data_source_domain.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@ import (
44
"context"
55
"errors"
66
"fmt"
7+
"reflect"
8+
79
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
810
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
9-
"reflect"
1011
)
1112

1213
func dataSourceDomain() *schema.Resource {
@@ -166,7 +167,7 @@ func dataSourceDomainRead(ctx context.Context, d *schema.ResourceData, m interfa
166167
return diag.FromErr(err)
167168
}
168169
} else {
169-
tags := make([]string, 0, 0)
170+
tags := make([]string, 0)
170171
err = d.Set("tags", tags)
171172
if err != nil {
172173
return diag.FromErr(err)

mailcow/helper.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,12 @@ package mailcow
22

33
import (
44
"fmt"
5-
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
65
"log"
76
"math/rand"
87
"strconv"
98
"time"
9+
10+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
1011
)
1112

1213
func resourceDataSet(rd *schema.ResourceData, argument string, value any, elem *schema.Schema) error {
@@ -39,7 +40,7 @@ func resourceDataSet(rd *schema.ResourceData, argument string, value any, elem *
3940
}
4041
setValue = list
4142
} else {
42-
list := make([]string, 0, 0)
43+
list := make([]string, 0)
4344
setValue = list
4445
}
4546
case schema.TypeString:

mailcow/provider.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,10 @@ package mailcow
33
import (
44
"context"
55
"crypto/tls"
6-
"github.com/l-with/terraform-provider-mailcow/api"
76
"net/http"
87

8+
"github.com/l-with/terraform-provider-mailcow/api"
9+
910
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
1011
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
1112
)
@@ -36,6 +37,7 @@ func Provider() *schema.Provider {
3637
ResourcesMap: map[string]*schema.Resource{
3738
"mailcow_alias": resourceAlias(),
3839
"mailcow_domain": resourceDomain(),
40+
"mailcow_domain_alias": resourceDomainAlias(),
3941
"mailcow_identity_provider_keycloak": resourceIdentityProviderKeycloak(),
4042
"mailcow_mailbox": resourceMailbox(),
4143
"mailcow_dkim": resourceDkim(),
@@ -70,7 +72,7 @@ func providerConfigure(ctx context.Context, d *schema.ResourceData) (interface{}
7072
config.AddDefaultHeader("accept", "application/json")
7173
config.Debug = true
7274

73-
customTransport := &(*http.DefaultTransport.(*http.Transport)) // make shallow copy
75+
customTransport := http.DefaultTransport.(*http.Transport).Clone() // make shallow copy
7476
customTransport.TLSClientConfig = &tls.Config{InsecureSkipVerify: insecure}
7577
client := &http.Client{Transport: customTransport}
7678
config.HTTPClient = client

0 commit comments

Comments
 (0)