/
resource_aviatrix_filebeat_forwarder.go
142 lines (123 loc) · 3.98 KB
/
resource_aviatrix_filebeat_forwarder.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
package aviatrix
import (
"fmt"
"strconv"
"strings"
"github.com/AviatrixSystems/terraform-provider-aviatrix/v2/goaviatrix"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
)
func resourceAviatrixFilebeatForwarder() *schema.Resource {
return &schema.Resource{
Create: resourceAviatrixFilebeatForwarderCreate,
Read: resourceAviatrixFilebeatForwarderRead,
Delete: resourceAviatrixFilebeatForwarderDelete,
Importer: &schema.ResourceImporter{
State: schema.ImportStatePassthrough,
},
Schema: map[string]*schema.Schema{
"server": {
Type: schema.TypeString,
Required: true,
ForceNew: true,
Description: "Server IP.",
},
"port": {
Type: schema.TypeInt,
Required: true,
ForceNew: true,
Description: "Port number.",
},
"trusted_ca_file": {
Type: schema.TypeString,
Optional: true,
ForceNew: true,
DiffSuppressFunc: func(k, old, new string, d *schema.ResourceData) bool {
return strings.TrimSpace(old) == strings.TrimSpace(new)
},
Description: "Trusted CA file.",
},
"config_file": {
Type: schema.TypeString,
Optional: true,
ForceNew: true,
DiffSuppressFunc: func(k, old, new string, d *schema.ResourceData) bool {
return strings.TrimSpace(old) == strings.TrimSpace(new)
},
Description: "Configuration file.",
},
"excluded_gateways": {
Type: schema.TypeSet,
Optional: true,
ForceNew: true,
Description: "List of excluded gateways.",
Elem: &schema.Schema{
Type: schema.TypeString,
},
},
"status": {
Type: schema.TypeString,
Computed: true,
Description: "Enabled or not.",
},
},
}
}
func marshalFilebeatForwarderInput(d *schema.ResourceData) *goaviatrix.FilebeatForwarder {
filebeatForwarder := &goaviatrix.FilebeatForwarder{
Server: d.Get("server").(string),
Port: d.Get("port").(int),
TrustedCAFile: d.Get("trusted_ca_file").(string),
ConfigFile: d.Get("config_file").(string),
}
var excludedGateways []string
for _, v := range d.Get("excluded_gateways").(*schema.Set).List() {
excludedGateways = append(excludedGateways, v.(string))
}
if len(excludedGateways) != 0 {
filebeatForwarder.ExcludedGatewaysInput = strings.Join(excludedGateways, ",")
}
return filebeatForwarder
}
func resourceAviatrixFilebeatForwarderCreate(d *schema.ResourceData, meta interface{}) error {
client := meta.(*goaviatrix.Client)
_, err := client.GetFilebeatForwarderStatus()
if err != goaviatrix.ErrNotFound {
return fmt.Errorf("the filebeat_forwarder is already enabled, please import to manage with Terraform")
}
filebeatForwarder := marshalFilebeatForwarderInput(d)
if err := client.EnableFilebeatForwarder(filebeatForwarder); err != nil {
return fmt.Errorf("could not enable filebeat forwarder: %v", err)
}
d.SetId("filebeat_forwarder")
return nil
}
func resourceAviatrixFilebeatForwarderRead(d *schema.ResourceData, meta interface{}) error {
client := meta.(*goaviatrix.Client)
if d.Id() != "filebeat_forwarder" {
return fmt.Errorf("invalid ID, expected ID \"filebeat_forwarder\", instead got %s", d.Id())
}
filebeatForwarderStatus, err := client.GetFilebeatForwarderStatus()
if err == goaviatrix.ErrNotFound {
d.SetId("")
return nil
}
if err != nil {
return fmt.Errorf("could not get filebeat forwarder status: %v", err)
}
d.Set("server", filebeatForwarderStatus.Server)
port, _ := strconv.Atoi(filebeatForwarderStatus.Port)
d.Set("port", port)
d.Set("status", filebeatForwarderStatus.Status)
if len(filebeatForwarderStatus.ExcludedGateways) != 0 {
d.Set("excluded_gateways", filebeatForwarderStatus.ExcludedGateways)
}
d.SetId("filebeat_forwarder")
return nil
}
func resourceAviatrixFilebeatForwarderDelete(d *schema.ResourceData, meta interface{}) error {
client := meta.(*goaviatrix.Client)
if err := client.DisableFilebeatForwarder(); err != nil {
return fmt.Errorf("could not disable filebeat forwarder: %v", err)
}
return nil
}