Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add new wrappers functions for IP Set using VDC Groups #451

Merged
merged 33 commits into from
Mar 31, 2022
Merged
Changes from 29 commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
d05517b
add main implementation
vbauzys Aug 25, 2020
3faee0a
git push origin master
vbauzys Aug 25, 2020
a497ca1
git push origin master
vbauzys Sep 3, 2020
71d524d
git push origin master
vbauzys Sep 22, 2020
879296d
Merge branch 'master' of github.com:vmware/go-vcloud-director
vbauzys Oct 21, 2020
02a4d81
git push origin masterMerge branch 'master' of github.com:vmware/go-v…
vbauzys Oct 21, 2020
b365d6c
git push origin masterMerge branch 'master' of github.com:vmware/go-v…
vbauzys Oct 27, 2020
808752b
removed not needed after merge
vbauzys Oct 29, 2020
29c17ae
git push origin masterMerge branch 'master' of github.com:vmware/go-v…
vbauzys Nov 5, 2020
9073403
git push origin masterMerge branch 'master' of github.com:vmware/go-v…
vbauzys Nov 12, 2020
9efad14
Merge branch 'vmware:master' into master
vbauzys Oct 11, 2021
dabfd82
git push origin masterMerge branch 'master' of github.com:vmware/go-v…
vbauzys Nov 8, 2021
be532a2
Merge branch 'master' of github.com:vmware/go-vcloud-director
vbauzys Nov 10, 2021
6cf856a
git push origin masterMerge branch 'master' of github.com:vmware/go-v…
vbauzys Nov 23, 2021
144ef18
Merge branch 'master' of github.com:vmware/go-vcloud-director
vbauzys Nov 25, 2021
8c0217f
Merge branch 'master' of github.com:vmware/go-vcloud-director
vbauzys Dec 8, 2021
05ac73e
Merge branch 'master' of github.com:vmware/go-vcloud-director
vbauzys Dec 17, 2021
9056c05
Merge branch 'master' of github.com:vmware/go-vcloud-director
vbauzys Dec 20, 2021
cb919b2
Merge branch 'master' of github.com:vmware/go-vcloud-director
vbauzys Jan 5, 2022
253df2d
Merge branch 'master' of github.com:vmware/go-vcloud-director
vbauzys Jan 13, 2022
a1bccce
Merge branch 'master' of github.com:vmware/go-vcloud-director
vbauzys Jan 17, 2022
2fa708c
Merge branch 'master' of github.com:vmware/go-vcloud-director
vbauzys Jan 17, 2022
5161390
Merge branch 'main' of github.com:vmware/go-vcloud-director into main
vbauzys Jan 19, 2022
7c0cf81
Merge branch 'main' of github.com:vmware/go-vcloud-director into main
vbauzys Jan 19, 2022
cf4c3fe
Merge branch 'main' of github.com:vmware/go-vcloud-director into main
vbauzys Feb 18, 2022
f7be576
Merge branch 'main' of github.com:vmware/go-vcloud-director into main
vbauzys Feb 22, 2022
f672000
Merge branch 'main' of github.com:vmware/go-vcloud-director into main
vbauzys Mar 24, 2022
5fa3357
add new wrappers and test
vbauzys Mar 29, 2022
b5b838a
add changelog
vbauzys Mar 29, 2022
36572fd
NIT
vbauzys Mar 29, 2022
e4e0d4d
fix test
vbauzys Mar 29, 2022
60b5e90
Merge branch 'main' of github.com:vmware/go-vcloud-director into main
vbauzys Mar 29, 2022
fbce316
Merge branch 'main' into ip-set-vdc-group
vbauzys Mar 29, 2022
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
1 change: 1 addition & 0 deletions .changes/v2.15.0/451-features.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
* Added functions `VdcGroup.GetNsxtFirewallGroupByName` and `VdcGroup.GetNsxtFirewallGroupById` [GH-451]
26 changes: 26 additions & 0 deletions govcd/nsxt_firewall_group.go
Original file line number Diff line number Diff line change
@@ -124,6 +124,27 @@ func (vdc *Vdc) GetNsxtFirewallGroupByName(name, firewallGroupType string) (*Nsx
return getNsxtFirewallGroupByName(vdc.client, name, queryParameters)
}

// GetNsxtFirewallGroupByName allows users to retrieve Firewall Group by Name in a particular Vdc Group
// firewallGroupType can be one of the following:
// * types.FirewallGroupTypeSecurityGroup - for NSX-T Security Groups
// * types.FirewallGroupTypeIpSet - for NSX-T IP Sets
// * "" (empty) - search will not be limited and will get both - IP Sets and Security Groups
//
// Note. One might get an error if IP Set and Security Group exist with the same name (two objects
// of the same type cannot exist) and firewallGroupType is left empty.
func (vdcGroup *VdcGroup) GetNsxtFirewallGroupByName(name string, firewallGroupType string) (*NsxtFirewallGroup, error) {
queryParameters := url.Values{}

if firewallGroupType != "" {
queryParameters = queryParameterFilterAnd("type=="+firewallGroupType, queryParameters)
}

// Automatically inject Edge Gateway filter because this is an Edge Gateway scoped query
queryParameters = queryParameterFilterAnd("ownerRef.id=="+vdcGroup.VdcGroup.Id, queryParameters)

return getNsxtFirewallGroupByName(vdcGroup.client, name, queryParameters)
}

// GetNsxtFirewallGroupByName allows users to retrieve Firewall Group by Name in a particular Edge Gateway
// firewallGroupType can be one of the following:
// * types.FirewallGroupTypeSecurityGroup - for NSX-T Security Groups
@@ -160,6 +181,11 @@ func (egw *NsxtEdgeGateway) GetNsxtFirewallGroupById(id string) (*NsxtFirewallGr
return getNsxtFirewallGroupById(egw.client, id)
}

// GetNsxtFirewallGroupById retrieves NSX-T Firewall Group by ID
func (vdcGroup *VdcGroup) GetNsxtFirewallGroupById(id string) (*NsxtFirewallGroup, error) {
return getNsxtFirewallGroupById(vdcGroup.client, id)
}

// Update allows users to update NSX-T Firewall Group
func (firewallGroup *NsxtFirewallGroup) Update(firewallGroupConfig *types.NsxtFirewallGroup) (*NsxtFirewallGroup, error) {
endpoint := types.OpenApiPathVersion1_0_0 + types.OpenApiEndpointFirewallGroups
66 changes: 61 additions & 5 deletions govcd/nsxt_firewall_group_ip_set_test.go
Original file line number Diff line number Diff line change
@@ -23,10 +23,10 @@ func (vcd *TestVCD) Test_NsxtIpSet(check *C) {
check.Assert(err, IsNil)

ipSetDefinition := &types.NsxtFirewallGroup{
Name: check.TestName(),
Description: check.TestName() + "-Description",
Type: types.FirewallGroupTypeIpSet,
EdgeGatewayRef: &types.OpenApiReference{ID: edge.EdgeGateway.ID},
Name: check.TestName(),
Description: check.TestName() + "-Description",
Type: types.FirewallGroupTypeIpSet,
OwnerRef: &types.OpenApiReference{ID: edge.EdgeGateway.ID},

IpAddresses: []string{
"12.12.12.1",
@@ -96,6 +96,62 @@ func (vcd *TestVCD) Test_NsxtIpSet(check *C) {
check.Assert(edgeIpSetByName.NsxtFirewallGroup, DeepEquals, orgIpSetByName.NsxtFirewallGroup)
check.Assert(edgeIpSetById.NsxtFirewallGroup, DeepEquals, edgeIpSetByName.NsxtFirewallGroup)

// Get Firewall Group using VDC Group
adminOrg, err := vcd.client.GetAdminOrgByName(vcd.config.VCD.Org)
check.Assert(err, IsNil)

nsxtExternalNetwork, err := GetExternalNetworkV2ByName(vcd.client, vcd.config.VCD.Nsxt.ExternalNetwork)
check.Assert(err, IsNil)
check.Assert(nsxtExternalNetwork, NotNil)

vdc, vdcGroup := test_CreateVdcGroup(check, adminOrg, vcd)
egwDefinition := &types.OpenAPIEdgeGateway{
Name: "nsx-for-IpSet-edge",
Description: "nsx-for-IpSet-edge-description",
OwnerRef: &types.OpenApiReference{
ID: vdc.Vdc.ID,
},
EdgeGatewayUplinks: []types.EdgeGatewayUplinks{{
UplinkID: nsxtExternalNetwork.ExternalNetwork.ID,
Subnets: types.OpenAPIEdgeGatewaySubnets{Values: []types.OpenAPIEdgeGatewaySubnetValue{{
Gateway: "1.1.1.1",
PrefixLength: 24,
Enabled: true,
}}},
Connected: true,
Dedicated: false,
}},
}

// Create Edge Gateway in VDC Group
createdEdge, err := adminOrg.CreateNsxtEdgeGateway(egwDefinition)
check.Assert(err, IsNil)
check.Assert(createdEdge.EdgeGateway.OwnerRef.ID, Matches, `^urn:vcloud:vdc:.*`)
openApiEndpoint = types.OpenApiPathVersion1_0_0 + types.OpenApiEndpointEdgeGateways + createdEdge.EdgeGateway.ID
PrependToCleanupListOpenApi(createdEdge.EdgeGateway.Name, check.TestName(), openApiEndpoint)

check.Assert(createdEdge.EdgeGateway.Name, Equals, egwDefinition.Name)
check.Assert(createdEdge.EdgeGateway.OwnerRef.ID, Equals, egwDefinition.OwnerRef.ID)

movedGateway, err := createdEdge.MoveToVdcOrVdcGroup(vdcGroup.VdcGroup.Id)
check.Assert(err, IsNil)
check.Assert(movedGateway.EdgeGateway.OwnerRef.ID, Equals, vdcGroup.VdcGroup.Id)
check.Assert(movedGateway.EdgeGateway.OwnerRef.ID, Matches, `^urn:vcloud:vdcGroup:.*`)

ipSetDefinition.Name = check.TestName() + "VdcGroup"
ipSetDefinition.OwnerRef.ID = vdcGroup.VdcGroup.Id
createdIpSetInVdcGroup, err := createdEdge.CreateNsxtFirewallGroup(ipSetDefinition)
check.Assert(err, IsNil)
check.Assert(createdIpSetInVdcGroup, NotNil)
openApiEndpoint = types.OpenApiPathVersion1_0_0 + types.OpenApiEndpointFirewallGroups + createdIpSetInVdcGroup.NsxtFirewallGroup.ID
AddToCleanupListOpenApi(createdIpSet.NsxtFirewallGroup.Name, check.TestName(), openApiEndpoint)
vdcGroupIpSetByName, err := vdcGroup.GetNsxtFirewallGroupByName(createdIpSetInVdcGroup.NsxtFirewallGroup.Name, types.FirewallGroupTypeIpSet)
check.Assert(err, IsNil)
vdcGroupIpSetById, err := vdcGroup.GetNsxtFirewallGroupById(createdIpSetInVdcGroup.NsxtFirewallGroup.ID)
check.Assert(err, IsNil)
check.Assert(vdcGroupIpSetByName.NsxtFirewallGroup, DeepEquals, vdcGroupIpSetById.NsxtFirewallGroup)
check.Assert(vdcGroupIpSetById.NsxtFirewallGroup, DeepEquals, vdcGroupIpSetByName.NsxtFirewallGroup)

associatedVms, err := edgeIpSetByName.GetAssociatedVms()
// IP_SET type Firewall Groups do not have VM associations and throw an error on API call.
// The error is: only Security Groups have associated VMs. This Firewall Group has type 'IP_SET'
@@ -117,7 +173,7 @@ func (vcd *TestVCD) Test_NsxtIpSet(check *C) {
AddToCleanupListOpenApi(createdIpSet.NsxtFirewallGroup.Name, check.TestName(), openApiEndpoint)

check.Assert(edgeCreatedIpSet.NsxtFirewallGroup.ID, Not(Equals), "")
check.Assert(edgeCreatedIpSet.NsxtFirewallGroup.EdgeGatewayRef.Name, Equals, vcd.config.VCD.Nsxt.EdgeGateway)
check.Assert(edgeCreatedIpSet.NsxtFirewallGroup.OwnerRef.Name, Equals, vcd.config.VCD.Nsxt.EdgeGateway)

err = edgeCreatedIpSet.Delete()
check.Assert(err, IsNil)