/
data_source_illumio_workload_interfaces.go
136 lines (121 loc) · 3.38 KB
/
data_source_illumio_workload_interfaces.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
// Copyright 2021 Illumio, Inc. All Rights Reserved.
package illumiocore
import (
"context"
"fmt"
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
)
func datasourceIllumioWorkloadInterfaces() *schema.Resource {
return &schema.Resource{
ReadContext: dataSourceIllumioWorkloadInterfacesRead,
SchemaVersion: 1,
Description: "Represents Illumio Workload Interfaces",
Schema: map[string]*schema.Schema{
"items": {
Type: schema.TypeList,
Computed: true,
Description: "list of Workload Interfaces",
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"href": {
Type: schema.TypeString,
Computed: true,
Description: "URI of Workload Interface",
},
"name": {
Type: schema.TypeString,
Computed: true,
Description: "Name of the Workload Interface",
},
"link_state": {
Type: schema.TypeString,
Computed: true,
Description: "Link State for Workload Interface",
},
"address": {
Type: schema.TypeString,
Computed: true,
Description: "The IP Address to assign to this interface ",
},
"cidr_block": {
Type: schema.TypeInt,
Computed: true,
Description: "The number of bits in the subnet /24 is 255.255.255.0",
},
"default_gateway_address": {
Type: schema.TypeString,
Computed: true,
Description: "The IP Address of the default gateway",
},
"network": {
Type: schema.TypeMap,
Computed: true,
Description: "Network for the Workload Interface. ",
Elem: &schema.Schema{
Type: schema.TypeString,
},
},
"loopback": {
Type: schema.TypeBool,
Computed: true,
Description: "Loopback for Workload Interface",
},
"network_detection_mode": {
Type: schema.TypeString,
Computed: true,
Description: "Network Detection Mode for Workload Interface",
},
"friendly_name": {
Type: schema.TypeString,
Computed: true,
Description: "User-friendly name for Workload Interface",
},
},
},
},
"workload_href": {
Type: schema.TypeString,
Required: true,
Description: "URI of Workload",
},
},
}
}
func dataSourceIllumioWorkloadInterfacesRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
var diagnostics diag.Diagnostics
pConfig, _ := m.(Config)
illumioClient := pConfig.IllumioClient
wHref := d.Get("workload_href").(string)
// Does not support Async call
_, data, err := illumioClient.Get(fmt.Sprintf("%v/interfaces", wHref), nil)
if err != nil {
return diag.FromErr(err)
}
d.SetId(fmt.Sprintf("%v", hashcode(wHref)))
dataMap := []map[string]interface{}{}
for _, child := range data.Children() {
m := map[string]interface{}{}
for _, key := range []string{
"href",
"name",
"link_state",
"address",
"cidr_block",
"default_gateway_address",
"network",
"loopback",
"network_detection_mode",
"friendly_name",
} {
if child.Exists(key) {
m[key] = child.S(key).Data()
} else {
m[key] = nil
}
}
dataMap = append(dataMap, m)
}
d.Set("items", dataMap)
return diagnostics
}