-
Notifications
You must be signed in to change notification settings - Fork 8
/
ip_reservations.go
151 lines (132 loc) · 5.07 KB
/
ip_reservations.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
143
144
145
146
147
148
149
150
151
package compute
// IPReservationsClient is a client for the IP Reservations functions of the Compute API.
type IPReservationsClient struct {
*ResourceClient
}
const (
iPReservationDesc = "ip reservation"
iPReservationContainerPath = "/ip/reservation/"
iPReservataionResourcePath = "/ip/reservation"
)
// IPReservations obtains an IPReservationsClient which can be used to access to the
// IP Reservations functions of the Compute API
func (c *Client) IPReservations() *IPReservationsClient {
return &IPReservationsClient{
ResourceClient: &ResourceClient{
Client: c,
ResourceDescription: iPReservationDesc,
ContainerPath: iPReservationContainerPath,
ResourceRootPath: iPReservataionResourcePath,
}}
}
// IPReservationPool details the constants for the ip reservation pool attribute
type IPReservationPool string
const (
// PublicReservationPool - /oracle/public/ippool
PublicReservationPool IPReservationPool = "/oracle/public/ippool"
)
// IPReservation describes an existing IP reservation.
type IPReservation struct {
// Shows the default account for your identity domain.
Account string `json:"account"`
// Fully Qualified Domain Name
FQDN string `json:"name"`
// Public IP address.
IP string `json:"ip"`
// The three-part name of the IP Reservation (/Compute-identity_domain/user/object).
Name string
// Pool of public IP addresses
ParentPool IPReservationPool `json:"parentpool"`
// A comma-separated list of strings which helps you to identify IP reservation.
Tags []string `json:"tags"`
// Uniform Resource Identifier
URI string `json:"uri"`
// Is the IP Reservation Persistent (i.e. static) or not (i.e. Dynamic)?
Permanent bool `json:"permanent"`
// Is the IP reservation associated with an instance?
Used bool `json:"used"`
}
// CreateIPReservationInput defines an IP reservation to be created.
type CreateIPReservationInput struct {
// The name of the object
// If you don't specify a name for this object, then the name is generated automatically.
// Object names can contain only alphanumeric characters, hyphens, underscores, and periods.
// Object names are case-sensitive.
// Optional
Name string `json:"name"`
// Pool of public IP addresses. This must be set to `ippool`
// Required
ParentPool IPReservationPool `json:"parentpool"`
// Is the IP Reservation Persistent (i.e. static) or not (i.e. Dynamic)?
// Required
Permanent bool `json:"permanent"`
// A comma-separated list of strings which helps you to identify IP reservations.
// Optional
Tags []string `json:"tags"`
}
// CreateIPReservation creates a new IP reservation with the given parentpool, tags and permanent flag.
func (c *IPReservationsClient) CreateIPReservation(input *CreateIPReservationInput) (*IPReservation, error) {
var ipInput IPReservation
input.Name = c.getQualifiedName(input.Name)
if err := c.createResource(input, &ipInput); err != nil {
return nil, err
}
return c.success(&ipInput)
}
// GetIPReservationInput defines an IP Reservation to get
type GetIPReservationInput struct {
// The name of the IP Reservation
// Required
Name string
}
// GetIPReservation retrieves the IP reservation with the given name.
func (c *IPReservationsClient) GetIPReservation(input *GetIPReservationInput) (*IPReservation, error) {
var ipInput IPReservation
input.Name = c.getQualifiedName(input.Name)
if err := c.getResource(input.Name, &ipInput); err != nil {
return nil, err
}
return c.success(&ipInput)
}
// UpdateIPReservationInput defines an IP Reservation to be updated
type UpdateIPReservationInput struct {
// The name of the object
// If you don't specify a name for this object, then the name is generated automatically.
// Object names can contain only alphanumeric characters, hyphens, underscores, and periods.
// Object names are case-sensitive.
// Required
Name string `json:"name"`
// Pool of public IP addresses.
// Required
ParentPool IPReservationPool `json:"parentpool"`
// Is the IP Reservation Persistent (i.e. static) or not (i.e. Dynamic)?
// Required
Permanent bool `json:"permanent"`
// A comma-separated list of strings which helps you to identify IP reservations.
// Optional
Tags []string `json:"tags"`
}
// UpdateIPReservation updates the IP reservation.
func (c *IPReservationsClient) UpdateIPReservation(input *UpdateIPReservationInput) (*IPReservation, error) {
var updateOutput IPReservation
input.Name = c.getQualifiedName(input.Name)
if err := c.updateResource(input.Name, input, &updateOutput); err != nil {
return nil, err
}
return c.success(&updateOutput)
}
// DeleteIPReservationInput defines an IP Reservation to delete
type DeleteIPReservationInput struct {
// The name of the IP Reservation
// Required
Name string
}
// DeleteIPReservation deletes the IP reservation with the given name.
func (c *IPReservationsClient) DeleteIPReservation(input *DeleteIPReservationInput) error {
input.Name = c.getQualifiedName(input.Name)
return c.deleteResource(input.Name)
}
func (c *IPReservationsClient) success(result *IPReservation) (*IPReservation, error) {
result.Name = c.getUnqualifiedName(result.FQDN)
return result, nil
}