-
Notifications
You must be signed in to change notification settings - Fork 649
/
data_source_ibm_pi_dhcp.go
133 lines (115 loc) · 3.46 KB
/
data_source_ibm_pi_dhcp.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
// Copyright IBM Corp. 2017, 2021 All Rights Reserved.
// Licensed under the Mozilla Public License v2.0
package power
import (
"context"
"fmt"
"log"
st "github.com/IBM-Cloud/power-go-client/clients/instance"
"github.com/IBM-Cloud/terraform-provider-ibm/ibm/conns"
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
)
func DataSourceIBMPIDhcp() *schema.Resource {
return &schema.Resource{
ReadContext: dataSourceIBMPIDhcpRead,
Schema: map[string]*schema.Schema{
// Required Arguments
Arg_CloudInstanceID: {
Type: schema.TypeString,
Required: true,
ValidateFunc: validation.NoZeroValues,
},
Arg_DhcpID: {
Type: schema.TypeString,
Required: true,
Description: "The ID of the DHCP Server",
},
// Attributes
Attr_DhcpID: {
Type: schema.TypeString,
Computed: true,
Description: "The ID of the DHCP Server",
},
Attr_DhcpLeases: {
Type: schema.TypeList,
Computed: true,
Description: "The list of DHCP Server PVM Instance leases",
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
Attr_DhcpLeaseInstanceIP: {
Type: schema.TypeString,
Computed: true,
Description: "The IP of the PVM Instance",
},
Attr_DhcpLeaseInstanceMac: {
Type: schema.TypeString,
Computed: true,
Description: "The MAC Address of the PVM Instance",
},
},
},
},
Attr_DhcpNetworkDeprecated: {
Type: schema.TypeString,
Computed: true,
Description: "The ID of the DHCP Server private network (deprecated - replaced by network_id)",
},
Attr_DhcpNetworkID: {
Type: schema.TypeString,
Computed: true,
Description: "The ID of the DHCP Server private network",
},
Attr_DhcpNetworkName: {
Type: schema.TypeString,
Computed: true,
Description: "The name of the DHCP Server private network",
},
Attr_DhcpStatus: {
Type: schema.TypeString,
Computed: true,
Description: "The status of the DHCP Server",
},
},
}
}
func dataSourceIBMPIDhcpRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
// session
sess, err := meta.(conns.ClientSession).IBMPISession()
if err != nil {
return diag.FromErr(err)
}
// arguments
cloudInstanceID := d.Get(Arg_CloudInstanceID).(string)
dhcpID := d.Get(Arg_DhcpID).(string)
// client
client := st.NewIBMPIDhcpClient(ctx, sess, cloudInstanceID)
// get dhcp
dhcpServer, err := client.Get(dhcpID)
if err != nil {
log.Printf("[DEBUG] get DHCP failed %v", err)
return diag.FromErr(err)
}
// set attributes
d.SetId(fmt.Sprintf("%s/%s", cloudInstanceID, *dhcpServer.ID))
d.Set(Attr_DhcpID, *dhcpServer.ID)
d.Set(Attr_DhcpStatus, *dhcpServer.Status)
if dhcpServer.Network != nil {
dhcpNetwork := dhcpServer.Network
d.Set(Attr_DhcpNetworkDeprecated, *dhcpNetwork.ID)
d.Set(Attr_DhcpNetworkID, *dhcpNetwork.ID)
d.Set(Attr_DhcpNetworkName, *dhcpNetwork.Name)
}
if dhcpServer.Leases != nil {
leaseList := make([]map[string]string, len(dhcpServer.Leases))
for i, lease := range dhcpServer.Leases {
leaseList[i] = map[string]string{
Attr_DhcpLeaseInstanceIP: *lease.InstanceIP,
Attr_DhcpLeaseInstanceMac: *lease.InstanceMacAddress,
}
}
d.Set(Attr_DhcpLeases, leaseList)
}
return nil
}