Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 21 additions & 5 deletions client.go
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,7 @@ type Client interface {
GetDevice(uuid string) (*Device, error)
GetDevices(statuses []string) ([]Device, error)
GetDeviceAdditionalBandwidthDetails(uuid string) (*DeviceAdditionalBandwidthDetails, error)
GetDeviceACLDetails(uuid string) (*DeviceACLDetails, error)
NewDeviceUpdateRequest(uuid string) DeviceUpdateRequest
DeleteDevice(uuid string) error

Expand Down Expand Up @@ -345,31 +346,46 @@ type ACLTemplate struct {
UUID *string
Name *string
Description *string
MetroCode *string
DeviceUUID *string
DeviceUUID *string // Deprecated: Refer to DeviceDetails for more information
MetroCode *string // Deprecated: Metro code is not required as template can be used for multiple devices across metros.
DeviceACLStatus *string
InboundRules []ACLTemplateInboundRule
DeviceDetails []ACLTemplateDeviceDetails
}

//ACLTemplateInboundRule describes inbound ACL rule that is part of
//Network Edge device ACL template
type ACLTemplateInboundRule struct {
SeqNo *int
SrcType *string
FQDN *string
Subnets []string
FQDN *string // Deprecated: FQDN is no longer supported
SrcType *string // Deprecated: SrcType is not required.
Subnets []string // Deprecated: Use subnet instead.
Subnet *string
Protocol *string
SrcPort *string
DstPort *string
}

//ACLTemplateDeviceDetails describes Device Details this template applied to
type ACLTemplateDeviceDetails struct {
UUID *string
Name *string
ACLStatus *string
}

//DeviceAdditionalBandwidthDetails describes details of a device
//additional badwidth
type DeviceAdditionalBandwidthDetails struct {
AdditionalBandwidth *int
Status *string
}

//DeviceACLDetails describes details of a device
//additional badwidth
type DeviceACLDetails struct {
Status *string
}

//DeviceLinkGroup describes details of a device link group
type DeviceLinkGroup struct {
UUID *string
Expand Down
23 changes: 15 additions & 8 deletions internal/api/acltemplate.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,14 @@ package api

//ACLTemplate describes Network Edge device ACL template
type ACLTemplate struct {
UUID *string `json:"uuid,omitempty"`
Name *string `json:"name,omitempty"`
Description *string `json:"description,omitempty"`
MetroCode *string `json:"metroCode,omitempty"`
VirtualDeviceUUID *string `json:"virtualDeviceUuid,omitempty"`
DeviceACLStatus *string `json:"deviceAclstatus,omitempty"`
InboundRules []ACLTemplateInboundRule `json:"inboundRules,omitempty"`
UUID *string `json:"uuid,omitempty"`
Name *string `json:"name,omitempty"`
Description *string `json:"description,omitempty"`
MetroCode *string `json:"metroCode,omitempty"`
VirtualDeviceUUID *string `json:"virtualDeviceUuid,omitempty"`
DeviceACLStatus *string `json:"deviceAclstatus,omitempty"`
InboundRules []ACLTemplateInboundRule `json:"inboundRules,omitempty"`
DeviceDetails []ACLTemplateDeviceDetails `json:"virtualDeviceDetails,omitempty"`
}

//ACLTemplateInboundRule describes inbound ACL rule that is part of
Expand All @@ -18,11 +19,17 @@ type ACLTemplateInboundRule struct {
Protocol *string `json:"protocol,omitempty"`
SrcPort *string `json:"srcPort,omitempty"`
DstPort *string `json:"dstPort,omitempty"`
FQDN *string `json:"fqdn,omitempty"`
Subnets []string `json:"subnets,omitempty"`
Subnet *string `json:"subnet,omitempty"`
SeqNO *int `json:"seqNo,omitempty"`
}

type ACLTemplateDeviceDetails struct {
UUID *string `json:"uuid,omitempty"`
Name *string `json:"name,omitempty"`
ACLStatus *string `json:"aclStatus,omitempty"`
}

//ACLTemplatesResponse describes response for a get ACL template collection request
type ACLTemplatesResponse struct {
Pagination Pagination `json:"pagination,omitempty"`
Expand Down
4 changes: 4 additions & 0 deletions internal/api/device.go
Original file line number Diff line number Diff line change
Expand Up @@ -155,3 +155,7 @@ type DeviceAdditionalBandwidthResponse struct {
AdditionalBandwidth *int `json:"additionalBandwidth,omitempty"`
Status *string `json:"status,omitempty"`
}

type DeviceACLResponse struct {
Status *string `json:"status,omitempty"`
}
35 changes: 25 additions & 10 deletions rest_acltemplate.go
Original file line number Diff line number Diff line change
Expand Up @@ -81,13 +81,12 @@ func (c RestClient) DeleteACLTemplate(uuid string) error {

func mapACLTemplateDomainToAPI(template ACLTemplate) api.ACLTemplate {
return api.ACLTemplate{
UUID: template.UUID,
Name: template.Name,
Description: template.Description,
MetroCode: template.MetroCode,
VirtualDeviceUUID: template.DeviceUUID,
DeviceACLStatus: template.DeviceACLStatus,
InboundRules: mapACLTemplateInboundRulesDomainToAPI(template.InboundRules),
UUID: template.UUID,
Name: template.Name,
Description: template.Description,
MetroCode: template.MetroCode,
DeviceACLStatus: template.DeviceACLStatus,
InboundRules: mapACLTemplateInboundRulesDomainToAPI(template.InboundRules),
}
}

Expand All @@ -105,7 +104,7 @@ func mapACLTemplateInboundRuleDomainToAPI(rule ACLTemplateInboundRule) api.ACLTe
Protocol: rule.Protocol,
SrcPort: rule.SrcPort,
DstPort: rule.DstPort,
FQDN: rule.FQDN,
Subnet: rule.Subnet,
Subnets: rule.Subnets,
SeqNO: rule.SeqNo,
}
Expand All @@ -117,9 +116,9 @@ func mapACLTemplateAPIToDomain(apiTemplate api.ACLTemplate) ACLTemplate {
Name: apiTemplate.Name,
Description: apiTemplate.Description,
MetroCode: apiTemplate.MetroCode,
DeviceUUID: apiTemplate.VirtualDeviceUUID,
DeviceACLStatus: apiTemplate.DeviceACLStatus,
InboundRules: mapACLTemplateInboundRulesAPIToDomain(apiTemplate.InboundRules),
DeviceDetails: mapACLTemplateDeviceDetailsAPIToDomain(apiTemplate.DeviceDetails),
}
}

Expand All @@ -137,8 +136,24 @@ func mapACLTemplateInboundRuleAPIToDomain(apiRule api.ACLTemplateInboundRule) AC
Protocol: apiRule.Protocol,
SrcPort: apiRule.SrcPort,
DstPort: apiRule.DstPort,
FQDN: apiRule.FQDN,
Subnets: apiRule.Subnets,
Subnet: apiRule.Subnet,
SeqNo: apiRule.SeqNO,
}
}

func mapACLTemplateDeviceDetailsAPIToDomain(apiRules []api.ACLTemplateDeviceDetails) []ACLTemplateDeviceDetails {
transformed := make([]ACLTemplateDeviceDetails, len(apiRules))
for i := range apiRules {
transformed[i] = mapACLTemplateDeviceDetailAPIToDomain(apiRules[i])
}
return transformed
}

func mapACLTemplateDeviceDetailAPIToDomain(apiRule api.ACLTemplateDeviceDetails) ACLTemplateDeviceDetails {
return ACLTemplateDeviceDetails{
UUID: apiRule.UUID,
Name: apiRule.Name,
ACLStatus: apiRule.ACLStatus,
}
}
14 changes: 12 additions & 2 deletions rest_acltemplate_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,7 @@ func TestGetACLTemplates(t *testing.T) {
assert.Equal(t, len(respBody.Data), len(templates), "Number of objects matches")
for i := range respBody.Data {
verifyACLTemplate(t, templates[i], respBody.Data[i])
verifyACLTemplateDeviceDetails(t, templates[i], respBody.Data[i])
}
}

Expand All @@ -114,6 +115,7 @@ func TestGetACLTemplate(t *testing.T) {
assert.NotNil(t, template, "Returned template is not nil")
assert.Nil(t, err, "Error is not returned")
verifyACLTemplate(t, *template, resp)
verifyACLTemplateDeviceDetails(t, *template, resp)
}

func TestReplaceACLTemplate(t *testing.T) {
Expand Down Expand Up @@ -164,7 +166,6 @@ func verifyACLTemplate(t *testing.T, template ACLTemplate, apiTemplate api.ACLTe
assert.Equal(t, template.Name, apiTemplate.Name, "Name matches")
assert.Equal(t, template.Description, apiTemplate.Description, "Description matches")
assert.Equal(t, template.MetroCode, apiTemplate.MetroCode, "MetroCode matches")
assert.Equal(t, template.DeviceUUID, apiTemplate.VirtualDeviceUUID, "DeviceUUID matches")
assert.Equal(t, template.DeviceACLStatus, apiTemplate.DeviceACLStatus, "DeviceACLStatus matches")
assert.Equal(t, len(template.InboundRules), len(apiTemplate.InboundRules), "Number of InboundRules matches")
for i := range template.InboundRules {
Expand All @@ -175,9 +176,18 @@ func verifyACLTemplate(t *testing.T, template ACLTemplate, apiTemplate api.ACLTe
func verifyACLTemplateInboundRule(t *testing.T, rule ACLTemplateInboundRule, apiRule api.ACLTemplateInboundRule) {
assert.Equal(t, rule.SeqNo, rule.SeqNo, "SeqNo matches")
assert.Equal(t, rule.SrcType, rule.SrcType, "SrcType matches")
assert.Equal(t, rule.FQDN, rule.FQDN, "FQDN matches")
assert.ElementsMatch(t, rule.Subnets, rule.Subnets, "Subnets matches")
assert.Equal(t, rule.Protocol, rule.Protocol, "Protocol matches")
assert.Equal(t, rule.SrcPort, rule.SrcPort, "SrcPort matches")
assert.Equal(t, rule.DstPort, rule.DstPort, "DstPort matches")
}

func verifyACLTemplateDeviceDetails(t *testing.T, template ACLTemplate, apiTemplate api.ACLTemplate) {
assert.Equal(t, len(template.DeviceDetails), len(apiTemplate.DeviceDetails), "Number of DeviceDetails matches")
for i := range template.DeviceDetails {
assert.Equal(t, template.DeviceDetails[i].UUID, apiTemplate.DeviceDetails[i].UUID, "UUID matches")
assert.Equal(t, template.DeviceDetails[i].Name, apiTemplate.DeviceDetails[i].Name, "Name matches")
assert.Equal(t, template.DeviceDetails[i].ACLStatus, apiTemplate.DeviceDetails[i].ACLStatus, "ACL Status matches")

}
}
17 changes: 17 additions & 0 deletions rest_device.go
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,17 @@ func (c RestClient) GetDeviceAdditionalBandwidthDetails(uuid string) (*DeviceAdd
return mapDeviceAdditionalBandwidthAPIToDomain(result), nil
}

//GetDeviceACLDetails retrives device acl template provisioning status
func (c RestClient) GetDeviceACLDetails(uuid string) (*DeviceACLDetails, error) {
path := fmt.Sprintf("/ne/v1/devices/%s/acl", url.PathEscape(uuid))
result := api.DeviceACLResponse{}
request := c.R().SetResult(&result)
if err := c.Execute(request, http.MethodGet, path); err != nil {
return nil, err
}
return mapDeviceACLAPIToDomain(result), nil
}

//NewDeviceUpdateRequest creates new composite update request for a device with a given UUID
func (c RestClient) NewDeviceUpdateRequest(uuid string) DeviceUpdateRequest {
return &restDeviceUpdateRequest{
Expand Down Expand Up @@ -393,3 +404,9 @@ func mapDeviceAdditionalBandwidthAPIToDomain(apiDetails api.DeviceAdditionalBand
Status: apiDetails.Status,
}
}

func mapDeviceACLAPIToDomain(apiDetails api.DeviceACLResponse) *DeviceACLDetails {
return &DeviceACLDetails{
Status: apiDetails.Status,
}
}
17 changes: 13 additions & 4 deletions test-fixtures/ne_acltemplate_get_resp.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
"description": "Test ACL",
"inboundRules": [
{
"srcType": "SUBNET",
"seqNo": 1,
"subnets": [
"10.0.0.0/24"
Expand All @@ -27,9 +26,19 @@
],
"metroName": "Silicon Valley",
"metroCode": "SV",
"virtualDeviceName": "csr1000v-n",
"virtualDeviceUUID": "4ad6ab9c-f470-4dae-a445-926424785e2f",
"deviceAclstatus": "PROVISIONED",
"createdBy": "user",
"createdDate": "2020-10-29T09:58:05.012Z"
"createdDate": "2020-10-29T09:58:05.012Z",
"virtualDeviceDetails": [
{
"name": "test_device1",
"uuid": "7e9bf92a-2189-4474-a181-81039c0ccfb1",
"aclStatus": "PROVISIONED"
},
{
"name": "test_device2",
"uuid": "e54ba802-29c5-4741-a1e5-81c89ca1f172",
"aclStatus": "PROVISIONED"
}
]
}
28 changes: 26 additions & 2 deletions test-fixtures/ne_acltemplates_get_resp.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,19 @@
"virtualDeviceUUID": "",
"deviceAclstatus": "",
"createdBy": "user",
"createdDate": "2020-10-05T21:19:15.912Z"
"createdDate": "2020-10-05T21:19:15.912Z",
"virtualDeviceDetails": [
{
"name": "test_device1",
"uuid": "7e9bf92a-2189-4474-a181-81039c0ccfb1",
"aclStatus": "PROVISIONED"
},
{
"name": "test_device2",
"uuid": "e54ba802-29c5-4741-a1e5-81c89ca1f172",
"aclStatus": "PROVISIONED"
}
]
},
{
"name": "test-twp",
Expand All @@ -52,7 +64,19 @@
"virtualDeviceUUID": "35400805-1c84-46db-acd2-796273b86662",
"deviceAclstatus": "PROVISIONED",
"createdBy": "user",
"createdDate": "2020-10-05T02:31:38.867Z"
"createdDate": "2020-10-05T02:31:38.867Z",
"virtualDeviceDetails": [
{
"name": "test_device1",
"uuid": "7e9bf92a-2189-4474-a181-81039c0ccfb1",
"aclStatus": "PROVISIONED"
},
{
"name": "test_device2",
"uuid": "e54ba802-29c5-4741-a1e5-81c89ca1f172",
"aclStatus": "PROVISIONED"
}
]
}
]
}