Skip to content

Commit 8d7cd37

Browse files
authored
Added support to send optional diverse device uuid in Create Single Device (#31)
1 parent 73b7de9 commit 8d7cd37

File tree

4 files changed

+147
-137
lines changed

4 files changed

+147
-137
lines changed

client.go

Lines changed: 45 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -239,49 +239,51 @@ type Account struct {
239239

240240
// Device describes Network Edge device
241241
type Device struct {
242-
UUID *string
243-
Name *string
244-
TypeCode *string
245-
Status *string
246-
LicenseStatus *string
247-
MetroCode *string
248-
IBX *string
249-
Region *string
250-
Throughput *int
251-
ThroughputUnit *string
252-
HostName *string
253-
PackageCode *string
254-
Version *string
255-
IsBYOL *bool
256-
LicenseToken *string
257-
LicenseFile *string
258-
CloudInitFile *string
259-
LicenseFileID *string
260-
CloudInitFileID *string
261-
ACLTemplateUUID *string
262-
MgmtAclTemplateUuid *string
263-
SSHIPAddress *string
264-
SSHIPFqdn *string
265-
AccountNumber *string
266-
Notifications []string
267-
PurchaseOrderNumber *string
268-
RedundancyType *string
269-
RedundantUUID *string
270-
TermLength *int
271-
AdditionalBandwidth *int
272-
OrderReference *string
273-
InterfaceCount *int
274-
CoreCount *int
275-
IsSelfManaged *bool
276-
Connectivity *string
277-
WanInterfaceId *string
278-
Interfaces []DeviceInterface
279-
VendorConfiguration map[string]string
280-
UserPublicKey *DeviceUserPublicKey
281-
ASN *int
282-
ZoneCode *string
283-
ClusterDetails *ClusterDetails
284-
ProjectID *string
242+
UUID *string
243+
Name *string
244+
TypeCode *string
245+
Status *string
246+
LicenseStatus *string
247+
MetroCode *string
248+
IBX *string
249+
Region *string
250+
Throughput *int
251+
ThroughputUnit *string
252+
HostName *string
253+
PackageCode *string
254+
Version *string
255+
IsBYOL *bool
256+
LicenseToken *string
257+
LicenseFile *string
258+
CloudInitFile *string
259+
LicenseFileID *string
260+
CloudInitFileID *string
261+
ACLTemplateUUID *string
262+
MgmtAclTemplateUuid *string
263+
SSHIPAddress *string
264+
SSHIPFqdn *string
265+
AccountNumber *string
266+
Notifications []string
267+
PurchaseOrderNumber *string
268+
RedundancyType *string
269+
RedundantUUID *string
270+
TermLength *int
271+
AdditionalBandwidth *int
272+
OrderReference *string
273+
InterfaceCount *int
274+
CoreCount *int
275+
IsSelfManaged *bool
276+
Connectivity *string
277+
WanInterfaceId *string
278+
Interfaces []DeviceInterface
279+
VendorConfiguration map[string]string
280+
UserPublicKey *DeviceUserPublicKey
281+
ASN *int
282+
ZoneCode *string
283+
ClusterDetails *ClusterDetails
284+
ProjectID *string
285+
DiverseFromDeviceUUID *string
286+
DiverseFromDeviceName *string
285287
}
286288

287289
// DeviceInterface describes Network Edge device interface

internal/api/device.go

Lines changed: 74 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -2,81 +2,84 @@ package api
22

33
// Device describes network edge device
44
type Device struct {
5-
UUID *string `json:"uuid,omitempty"`
6-
Name *string `json:"name,omitempty"`
7-
DeviceTypeCode *string `json:"deviceTypeCode,omitempty"`
8-
Status *string `json:"status,omitempty"`
9-
LicenseStatus *string `json:"licenseStatus,omitempty"`
10-
MetroCode *string `json:"metroCode,omitempty"`
11-
IBX *string `json:"ibx,omitempty"`
12-
Region *string `json:"region,omitempty"`
13-
Throughput *int `json:"throughput,omitempty,string"`
14-
ThroughputUnit *string `json:"throughputUnit,omitempty"`
15-
HostName *string `json:"hostName,omitempty"`
16-
PackageCode *string `json:"packageCode,omitempty"`
17-
Version *string `json:"version,omitempty"`
18-
LicenseToken *string `json:"licenseToken,omitempty"`
19-
LicenseType *string `json:"licenseType,omitempty"`
20-
LicenseFileID *string `json:"licenseFileId,omitempty"`
21-
CloudInitFileID *string `json:"CloudInitFileId,omitempty"`
22-
ACLTemplateUUID *string `json:"aclTemplateUuid,omitempty"`
23-
MgmtAclTemplateUUID *string `json:"mgmtAclTemplateUuid,omitempty"`
24-
SSHIPAddress *string `json:"sshIpAddress,omitempty"`
25-
SSHIPFqdn *string `json:"sshIpFqdn,omitempty"`
26-
AccountNumber *string `json:"accountNumber,omitempty"`
27-
Notifications []string `json:"notifications,omitempty"`
28-
PurchaseOrderNumber *string `json:"purchaseOrderNumber,omitempty"`
29-
RedundancyType *string `json:"redundancyType,omitempty"`
30-
RedundantUUID *string `json:"redundantUuid,omitempty"`
31-
TermLength *int `json:"termLength,omitempty"`
32-
AdditionalBandwidth *int `json:"additionalBandwidth,omitempty"`
33-
OrderReference *string `json:"orderReference,omitempty"`
34-
InterfaceCount *int `json:"interfaceCount,omitempty"`
35-
Core *DeviceCoreInformation `json:"core,omitempty"`
36-
DeviceManagementType *string `json:"deviceManagementType,omitempty"`
37-
SshInterfaceID *string `json:"sshInterfaceId,omitempty"`
38-
Interfaces []DeviceInterface `json:"interfaces,omitempty"`
39-
VendorConfig map[string]string `json:"vendorConfig,omitempty"`
40-
UserPublicKey *DeviceUserPublicKey `json:"userPublicKey,omitempty"`
41-
ASN *int `json:"asn,omitempty"`
42-
ZoneCode *string `json:"zoneCode,omitempty"`
43-
ClusterDetails *ClusterDetails `json:"clusterDetails,omitempty"`
44-
Connectivity *string `json:"connectivity,omitempty"`
45-
ProjectID *string `json:"projectId,omitempty"`
5+
UUID *string `json:"uuid,omitempty"`
6+
Name *string `json:"name,omitempty"`
7+
DeviceTypeCode *string `json:"deviceTypeCode,omitempty"`
8+
Status *string `json:"status,omitempty"`
9+
LicenseStatus *string `json:"licenseStatus,omitempty"`
10+
MetroCode *string `json:"metroCode,omitempty"`
11+
IBX *string `json:"ibx,omitempty"`
12+
Region *string `json:"region,omitempty"`
13+
Throughput *int `json:"throughput,omitempty,string"`
14+
ThroughputUnit *string `json:"throughputUnit,omitempty"`
15+
HostName *string `json:"hostName,omitempty"`
16+
PackageCode *string `json:"packageCode,omitempty"`
17+
Version *string `json:"version,omitempty"`
18+
LicenseToken *string `json:"licenseToken,omitempty"`
19+
LicenseType *string `json:"licenseType,omitempty"`
20+
LicenseFileID *string `json:"licenseFileId,omitempty"`
21+
CloudInitFileID *string `json:"CloudInitFileId,omitempty"`
22+
ACLTemplateUUID *string `json:"aclTemplateUuid,omitempty"`
23+
MgmtAclTemplateUUID *string `json:"mgmtAclTemplateUuid,omitempty"`
24+
SSHIPAddress *string `json:"sshIpAddress,omitempty"`
25+
SSHIPFqdn *string `json:"sshIpFqdn,omitempty"`
26+
AccountNumber *string `json:"accountNumber,omitempty"`
27+
Notifications []string `json:"notifications,omitempty"`
28+
PurchaseOrderNumber *string `json:"purchaseOrderNumber,omitempty"`
29+
RedundancyType *string `json:"redundancyType,omitempty"`
30+
RedundantUUID *string `json:"redundantUuid,omitempty"`
31+
TermLength *int `json:"termLength,omitempty"`
32+
AdditionalBandwidth *int `json:"additionalBandwidth,omitempty"`
33+
OrderReference *string `json:"orderReference,omitempty"`
34+
InterfaceCount *int `json:"interfaceCount,omitempty"`
35+
Core *DeviceCoreInformation `json:"core,omitempty"`
36+
DeviceManagementType *string `json:"deviceManagementType,omitempty"`
37+
SshInterfaceID *string `json:"sshInterfaceId,omitempty"`
38+
Interfaces []DeviceInterface `json:"interfaces,omitempty"`
39+
VendorConfig map[string]string `json:"vendorConfig,omitempty"`
40+
UserPublicKey *DeviceUserPublicKey `json:"userPublicKey,omitempty"`
41+
ASN *int `json:"asn,omitempty"`
42+
ZoneCode *string `json:"zoneCode,omitempty"`
43+
ClusterDetails *ClusterDetails `json:"clusterDetails,omitempty"`
44+
Connectivity *string `json:"connectivity,omitempty"`
45+
ProjectID *string `json:"projectId,omitempty"`
46+
DiverseFromDeviceUUID *string `json:"diverseFromDeviceUuid,omitempty"`
47+
DiverseFromDeviceName *string `json:"diverseFromDeviceName,omitempty"`
4648
}
4749

4850
// DeviceRequest describes network edge device creation request
4951
type DeviceRequest struct {
50-
Throughput *int `json:"throughput,omitempty,string"`
51-
ThroughputUnit *string `json:"throughputUnit,omitempty"`
52-
MetroCode *string `json:"metroCode,omitempty"`
53-
DeviceTypeCode *string `json:"deviceTypeCode,omitempty"`
54-
TermLength *string `json:"termLength,omitempty"`
55-
LicenseMode *string `json:"licenseMode,omitempty"`
56-
LicenseToken *string `json:"licenseToken,omitempty"`
57-
LicenseFileID *string `json:"licenseFileId,omitempty"`
58-
CloudInitFileID *string `json:"cloudInitFileId,omitempty"`
59-
PackageCode *string `json:"packageCode,omitempty"`
60-
VirtualDeviceName *string `json:"virtualDeviceName,omitempty"`
61-
Notifications []string `json:"notifications,omitempty"`
62-
HostNamePrefix *string `json:"hostNamePrefix,omitempty"`
63-
OrderReference *string `json:"orderReference,omitempty"`
64-
PurchaseOrderNumber *string `json:"purchaseOrderNumber,omitempty"`
65-
AccountNumber *string `json:"accountNumber,omitempty"`
66-
Version *string `json:"version,omitempty"`
67-
InterfaceCount *int `json:"interfaceCount,omitempty"`
68-
DeviceManagementType *string `json:"deviceManagementType,omitempty"`
69-
SshInterfaceId *string `json:"sshInterfaceId,omitempty"`
70-
Core *int `json:"core,omitempty"`
71-
AdditionalBandwidth *int `json:"additionalBandwidth,omitempty,string"`
72-
ACLTemplateUUID *string `json:"aclTemplateUuid,omitempty"`
73-
MgmtAclTemplateUUID *string `json:"mgmtAclTemplateUuid,omitempty"`
74-
VendorConfig map[string]string `json:"vendorConfig,omitempty"`
75-
UserPublicKey *DeviceUserPublicKeyRequest `json:"userPublicKey,omitempty"`
76-
Secondary *SecondaryDeviceRequest `json:"secondary,omitempty"`
77-
ClusterDetails *ClusterDetailsRequest `json:"clusterDetails,omitempty"`
78-
Connectivity *string `json:"connectivity,omitempty"`
79-
ProjectID *string `json:"projectId,omitempty"`
52+
Throughput *int `json:"throughput,omitempty,string"`
53+
ThroughputUnit *string `json:"throughputUnit,omitempty"`
54+
MetroCode *string `json:"metroCode,omitempty"`
55+
DeviceTypeCode *string `json:"deviceTypeCode,omitempty"`
56+
TermLength *string `json:"termLength,omitempty"`
57+
LicenseMode *string `json:"licenseMode,omitempty"`
58+
LicenseToken *string `json:"licenseToken,omitempty"`
59+
LicenseFileID *string `json:"licenseFileId,omitempty"`
60+
CloudInitFileID *string `json:"cloudInitFileId,omitempty"`
61+
PackageCode *string `json:"packageCode,omitempty"`
62+
VirtualDeviceName *string `json:"virtualDeviceName,omitempty"`
63+
Notifications []string `json:"notifications,omitempty"`
64+
HostNamePrefix *string `json:"hostNamePrefix,omitempty"`
65+
OrderReference *string `json:"orderReference,omitempty"`
66+
PurchaseOrderNumber *string `json:"purchaseOrderNumber,omitempty"`
67+
AccountNumber *string `json:"accountNumber,omitempty"`
68+
Version *string `json:"version,omitempty"`
69+
InterfaceCount *int `json:"interfaceCount,omitempty"`
70+
DeviceManagementType *string `json:"deviceManagementType,omitempty"`
71+
SshInterfaceId *string `json:"sshInterfaceId,omitempty"`
72+
Core *int `json:"core,omitempty"`
73+
AdditionalBandwidth *int `json:"additionalBandwidth,omitempty,string"`
74+
ACLTemplateUUID *string `json:"aclTemplateUuid,omitempty"`
75+
MgmtAclTemplateUUID *string `json:"mgmtAclTemplateUuid,omitempty"`
76+
VendorConfig map[string]string `json:"vendorConfig,omitempty"`
77+
UserPublicKey *DeviceUserPublicKeyRequest `json:"userPublicKey,omitempty"`
78+
Secondary *SecondaryDeviceRequest `json:"secondary,omitempty"`
79+
ClusterDetails *ClusterDetailsRequest `json:"clusterDetails,omitempty"`
80+
Connectivity *string `json:"connectivity,omitempty"`
81+
ProjectID *string `json:"projectId,omitempty"`
82+
DiverseFromDeviceUUID *string `json:"diverseFromDeviceUuid,omitempty"`
8083
}
8184

8285
// SecondaryDeviceRequest describes secondary device part of device creation request

rest_device.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,8 @@ func mapDeviceAPIToDomain(apiDevice api.Device) *Device {
264264
device.ASN = apiDevice.ASN
265265
device.ZoneCode = apiDevice.ZoneCode
266266
device.ClusterDetails = mapDeviceClusterDetailsAPIToDomain(apiDevice.ClusterDetails)
267+
device.DiverseFromDeviceUUID = apiDevice.DiverseFromDeviceUUID
268+
device.DiverseFromDeviceName = apiDevice.DiverseFromDeviceName
267269
return &device
268270
}
269271

@@ -405,6 +407,7 @@ func createDeviceRequest(device Device) api.DeviceRequest {
405407
req.VendorConfig = device.VendorConfiguration
406408
req.UserPublicKey = mapDeviceUserPublicKeyDomainToAPI(device.UserPublicKey)
407409
req.ClusterDetails = mapDeviceClusterDetailsDomainToAPI(device.ClusterDetails)
410+
req.DiverseFromDeviceUUID = device.DiverseFromDeviceUUID
408411
return req
409412
}
410413

rest_device_test.go

Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -15,29 +15,30 @@ import (
1515
)
1616

1717
var testDevice = Device{
18-
AdditionalBandwidth: Int(100),
19-
TypeCode: String("PA-VM"),
20-
HostName: String("myhostSRmy"),
21-
IsBYOL: Bool(true),
22-
LicenseToken: String("somelicensetokenaaaaazzzzz"),
23-
LicenseFileID: String("8d180057-8309-4c59-b645-f630f010ad43"),
24-
CloudInitFileID: String("9318885d-4b8c-48a5-9aa4-24387834ebae"),
25-
MetroCode: String("SV"),
26-
Notifications: []string{"test1@example.com", "test2@example.com"},
27-
PackageCode: String("VM100"),
28-
TermLength: Int(24),
29-
ProjectID: String("68ccfd49-39b1-478e-957a-67c72f719d7a"),
30-
Throughput: Int(1),
31-
ThroughputUnit: String("Gbps"),
32-
Name: String("PaloAltoSRmy"),
33-
ACLTemplateUUID: String("4792d9ab-b8aa-49cc-8fe2-b56ced6c9c2f"),
34-
AccountNumber: String("1777643"),
35-
OrderReference: String("orderRef"),
36-
PurchaseOrderNumber: String("PO123456789"),
37-
InterfaceCount: Int(10),
38-
CoreCount: Int(2),
39-
Version: String("10.09.05"),
40-
IsSelfManaged: Bool(true),
18+
AdditionalBandwidth: Int(100),
19+
TypeCode: String("PA-VM"),
20+
HostName: String("myhostSRmy"),
21+
IsBYOL: Bool(true),
22+
LicenseToken: String("somelicensetokenaaaaazzzzz"),
23+
LicenseFileID: String("8d180057-8309-4c59-b645-f630f010ad43"),
24+
CloudInitFileID: String("9318885d-4b8c-48a5-9aa4-24387834ebae"),
25+
MetroCode: String("SV"),
26+
Notifications: []string{"test1@example.com", "test2@example.com"},
27+
PackageCode: String("VM100"),
28+
TermLength: Int(24),
29+
ProjectID: String("68ccfd49-39b1-478e-957a-67c72f719d7a"),
30+
DiverseFromDeviceUUID: String("ed7891bd-15b4-4f72-ac56-d96cfdacddcc"),
31+
Throughput: Int(1),
32+
ThroughputUnit: String("Gbps"),
33+
Name: String("PaloAltoSRmy"),
34+
ACLTemplateUUID: String("4792d9ab-b8aa-49cc-8fe2-b56ced6c9c2f"),
35+
AccountNumber: String("1777643"),
36+
OrderReference: String("orderRef"),
37+
PurchaseOrderNumber: String("PO123456789"),
38+
InterfaceCount: Int(10),
39+
CoreCount: Int(2),
40+
Version: String("10.09.05"),
41+
IsSelfManaged: Bool(true),
4142
VendorConfiguration: map[string]string{
4243
"serialNumber": "12312312",
4344
"controller1": "1.1.1.1",
@@ -503,6 +504,7 @@ func verifyDeviceRequest(t *testing.T, device Device, req api.DeviceRequest) {
503504
termLengthStr := strconv.Itoa(*device.TermLength)
504505
assert.Equal(t, &termLengthStr, req.TermLength, "TermLength matches")
505506
assert.Equal(t, device.ProjectID, req.ProjectID, "Project Id matches")
507+
assert.Equal(t, device.DiverseFromDeviceUUID, req.DiverseFromDeviceUUID, "Diverse from Device UUID matches")
506508
if *device.IsBYOL {
507509
assert.Equal(t, DeviceLicenseModeBYOL, StringValue(req.LicenseMode), "LicenseMode matches")
508510
} else {

0 commit comments

Comments
 (0)