Skip to content

Commit 9f64e4d

Browse files
committed
add interface for resource container
1 parent 474df9a commit 9f64e4d

File tree

10 files changed

+111
-95
lines changed

10 files changed

+111
-95
lines changed

cmd/analyzer/subcmds/vpcconfigs.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,11 @@ func vpcConfigsFromFiles(fileNames []string, inArgs *inArgs) (*vpcmodel.Multiple
5757
}
5858
switch provider {
5959
case common.IBM:
60-
return ibmvpc.VpcConfigsFromFiles(fileNames, inArgs.vpc, inArgs.resourceGroup, inArgs.regionList)
60+
rc := ibmvpc.IBMresourcesContainer{}
61+
return rc.VpcConfigsFromFiles(fileNames, inArgs.vpc, inArgs.resourceGroup, inArgs.regionList)
6162
case common.AWS:
62-
return awsvpc.VpcConfigsFromFiles(fileNames, inArgs.vpc, inArgs.resourceGroup, inArgs.regionList)
63+
rc := awsvpc.AWSresourcesContainer{}
64+
return rc.VpcConfigsFromFiles(fileNames, inArgs.vpc, inArgs.resourceGroup, inArgs.regionList)
6365
default:
6466
return nil, fmt.Errorf(notSupportedYet, provider)
6567
}
@@ -80,7 +82,8 @@ func vpcConfigsFromAccount(inArgs *inArgs) (*vpcmodel.MultipleVPCConfigs, error)
8082
if !ok {
8183
return nil, fmt.Errorf("error casting resources to *datamodel.ResourcesContainerModel type")
8284
}
83-
vpcConfigs, err = ibmvpc.VPCConfigsFromResources(ibmResources, inArgs.vpc, inArgs.resourceGroup, inArgs.regionList)
85+
rc := ibmvpc.IBMresourcesContainer{ResourcesContainerModel: *ibmResources}
86+
vpcConfigs, err = rc.VPCConfigsFromResources(inArgs.vpc, inArgs.resourceGroup, inArgs.regionList)
8487
if err != nil {
8588
return nil, err
8689
}

pkg/awsvpc/analysis_output_test.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -304,11 +304,12 @@ func getVPCConfigs(t *testing.T, tt *vpcGeneralTest, firstCfg bool) *vpcmodel.Mu
304304
inputConfig = tt.inputConfig2nd
305305
}
306306
inputConfigFile := filepath.Join(getTestsDirInput(), inputConfig)
307-
rc, err := parseResourcesFromFile(inputConfigFile)
307+
rc := AWSresourcesContainer{}
308+
err := rc.ParseResourcesFromFile(inputConfigFile)
308309
if err != nil {
309310
t.Fatalf("err: %s", err)
310311
}
311-
vpcConfigs, err := VPCConfigsFromResources(rc, tt.vpc, tt.resourceGroup, tt.regions)
312+
vpcConfigs, err := rc.VPCConfigsFromResources(tt.vpc, tt.resourceGroup, tt.regions)
312313
if err != nil {
313314
t.Fatalf("err: %s", err)
314315
}

pkg/awsvpc/parser.go

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -22,22 +22,25 @@ import (
2222
"github.com/np-guard/vpc-network-config-analyzer/pkg/vpcmodel"
2323
)
2424

25+
type AWSresourcesContainer struct {
26+
aws.ResourcesContainer
27+
}
28+
2529
// parseResourcesFromFile returns aws.ResourcesContainer object, containing the configured resources structs
2630
// from the input JSON file
27-
func parseResourcesFromFile(fileName string) (*aws.ResourcesContainer, error) {
31+
func (rc *AWSresourcesContainer) ParseResourcesFromFile(fileName string) error {
2832
inputConfigContent, err := os.ReadFile(fileName)
2933
if err != nil {
30-
return nil, err
34+
return err
3135
}
32-
config := aws.ResourcesContainer{}
33-
err = json.Unmarshal(inputConfigContent, &config)
36+
err = json.Unmarshal(inputConfigContent, &rc)
3437
if err != nil {
35-
return nil, err
38+
return err
3639
}
37-
return &config, nil
40+
return nil
3841
}
3942

40-
func mergeResourcesContainers(rc1, rc2 *aws.ResourcesContainer) (*aws.ResourcesContainer, error) {
43+
func mergeResourcesContainers(rc1, rc2 *AWSresourcesContainer) (*AWSresourcesContainer, error) {
4144
if rc2 == nil && rc1 != nil {
4245
return rc1, nil
4346
}
@@ -57,27 +60,27 @@ func mergeResourcesContainers(rc1, rc2 *aws.ResourcesContainer) (*aws.ResourcesC
5760
return rc1, nil
5861
}
5962

60-
func VpcConfigsFromFiles(fileNames []string, vpcID, resourceGroup string, regions []string) (
63+
func (rc *AWSresourcesContainer) VpcConfigsFromFiles(fileNames []string, vpcID, resourceGroup string, regions []string) (
6164
*vpcmodel.MultipleVPCConfigs, error) {
62-
var mergedRC *aws.ResourcesContainer
6365
for _, file := range fileNames {
64-
rc, err1 := parseResourcesFromFile(file)
66+
mergedRC := &AWSresourcesContainer{}
67+
err1 := mergedRC.ParseResourcesFromFile(file)
6568
if err1 != nil {
6669
return nil, fmt.Errorf("error parsing input vpc resources file: %w", err1)
6770
}
68-
mergedRC, err1 = mergeResourcesContainers(mergedRC, rc)
71+
rc, err1 = mergeResourcesContainers(mergedRC, rc)
6972
if err1 != nil {
7073
return nil, err1
7174
}
7275
}
73-
vpcConfigs, err2 := VPCConfigsFromResources(mergedRC, vpcID, resourceGroup, regions)
76+
vpcConfigs, err2 := rc.VPCConfigsFromResources(vpcID, resourceGroup, regions)
7477
if err2 != nil {
7578
return nil, fmt.Errorf("error generating cloud config from input vpc resources file: %w", err2)
7679
}
7780
return vpcConfigs, nil
7881
}
7982

80-
func filterByVpc(rc *aws.ResourcesContainer, vpcID string) map[string]bool {
83+
func filterByVpc(rc *AWSresourcesContainer, vpcID string) map[string]bool {
8184
shouldSkipVpcIds := make(map[string]bool)
8285
for _, vpc := range rc.VpcsList {
8386
if vpcID != "" && *vpc.VpcId != vpcID {
@@ -89,7 +92,7 @@ func filterByVpc(rc *aws.ResourcesContainer, vpcID string) map[string]bool {
8992

9093
// VPCConfigsFromResources returns a map from VPC UID (string) to its corresponding VPCConfig object,
9194
// containing the parsed resources in the relevant model objects
92-
func VPCConfigsFromResources(rc *aws.ResourcesContainer, vpcID, resourceGroup string, regions []string) (
95+
func (rc *AWSresourcesContainer) VPCConfigsFromResources(vpcID, resourceGroup string, regions []string) (
9396
*vpcmodel.MultipleVPCConfigs, error) {
9497
res := vpcmodel.NewMultipleVPCConfigs("AWS Cloud") // map from VPC UID to its config
9598
var err error
@@ -131,7 +134,7 @@ func VPCConfigsFromResources(rc *aws.ResourcesContainer, vpcID, resourceGroup st
131134
return res, nil
132135
}
133136

134-
func getVPCconfig(rc *aws.ResourcesContainer,
137+
func getVPCconfig(rc *AWSresourcesContainer,
135138
res *vpcmodel.MultipleVPCConfigs,
136139
skipByVPC map[string]bool) error {
137140
for _, vpc := range rc.VpcsList {
@@ -178,7 +181,7 @@ func newNetworkInterface(uid, zone, address, vsi string, vpc vpcmodel.VPCResourc
178181
}
179182

180183
func getInstancesConfig(
181-
rc *aws.ResourcesContainer,
184+
rc *AWSresourcesContainer,
182185
subnetIDToNetIntf map[string][]*commonvpc.NetworkInterface,
183186
netIntfToSGs map[string][]types.GroupIdentifier,
184187
res *vpcmodel.MultipleVPCConfigs,
@@ -236,7 +239,7 @@ func getInstancesConfig(
236239
func getSubnetsConfig(
237240
res *vpcmodel.MultipleVPCConfigs,
238241
subnetNameToNetIntf map[string][]*commonvpc.NetworkInterface,
239-
rc *aws.ResourcesContainer,
242+
rc *AWSresourcesContainer,
240243
skipByVPC map[string]bool,
241244
) (vpcInternalAddressRange map[string]*ipblock.IPBlock, err error) {
242245
vpcInternalAddressRange = map[string]*ipblock.IPBlock{}
@@ -301,7 +304,7 @@ func parseSGTargets(sgResources map[string]map[string]*commonvpc.SecurityGroup,
301304
}
302305
}
303306

304-
func getSGconfig(rc *aws.ResourcesContainer,
307+
func getSGconfig(rc *AWSresourcesContainer,
305308
res *vpcmodel.MultipleVPCConfigs,
306309
skipByVPC map[string]bool,
307310
netIntfToSGs map[string][]types.GroupIdentifier,

pkg/commonvpc/parser.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,14 @@ const (
5050
ResourceTypeRoutingTable = "RoutingTable"
5151
)
5252

53+
type ResourcesContainer interface {
54+
ParseResourcesFromFile(fileName string) error
55+
VpcConfigsFromFiles(fileNames []string, vpcID, resourceGroup string, regions []string) (
56+
*vpcmodel.MultipleVPCConfigs, error)
57+
VPCConfigsFromResources(vpcID, resourceGroup string, regions []string) (
58+
*vpcmodel.MultipleVPCConfigs, error)
59+
}
60+
5361
func UpdateVPCSAddressRanges(vpcInternalAddressRange map[string]*ipblock.IPBlock,
5462
vpcsMap *vpcmodel.MultipleVPCConfigs) error {
5563
// assign to each vpc object its internal address range, as inferred from its subnets

pkg/ibmvpc/analysis_output_test.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -884,11 +884,12 @@ func getVPCConfigs(t *testing.T, tt *vpcGeneralTest, firstCfg bool) *vpcmodel.Mu
884884
inputConfig = tt.inputConfig2nd
885885
}
886886
inputConfigFile := filepath.Join(getTestsDirInput(), inputConfig)
887-
rc, err := parseResourcesFromFile(inputConfigFile)
887+
rc := IBMresourcesContainer{}
888+
err := rc.ParseResourcesFromFile(inputConfigFile)
888889
if err != nil {
889890
t.Fatalf("err: %s", err)
890891
}
891-
vpcConfigs, err := VPCConfigsFromResources(rc, tt.vpc, tt.resourceGroup, tt.regions)
892+
vpcConfigs, err := rc.VPCConfigsFromResources(tt.vpc, tt.resourceGroup, tt.regions)
892893
if err != nil {
893894
t.Fatalf("err: %s", err)
894895
}

pkg/ibmvpc/explainability_test.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,12 @@ const explainOut = "explain_out"
2525
// getConfigs returns *vpcmodel.MultipleVPCConfigs obj for the input test (config json file)
2626
func getConfig(t *testing.T, fileName string) *vpcmodel.MultipleVPCConfigs {
2727
inputConfigFile := filepath.Join(getTestsDirInput(), inputFilePrefix+fileName+jsonOutSuffix)
28-
rc, err := parseResourcesFromFile(inputConfigFile)
28+
rc := IBMresourcesContainer{}
29+
err := rc.ParseResourcesFromFile(inputConfigFile)
2930
if err != nil {
3031
t.Fatalf("err: %s", err)
3132
}
32-
vpcConfigs, err := VPCConfigsFromResources(rc, "", "", nil)
33+
vpcConfigs, err := rc.VPCConfigsFromResources("", "", nil)
3334
if err != nil {
3435
t.Fatalf("err: %s", err)
3536
}

pkg/ibmvpc/naclAnalysis_test.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,10 @@ import (
1818
)
1919

2020
func TestGetRules(t *testing.T) {
21-
rc, err := parseResourcesFromFile(filepath.Join(getTestsDirInput(), "input_acl_testing3.json"))
21+
rc := IBMresourcesContainer{}
22+
err := rc.ParseResourcesFromFile(filepath.Join(getTestsDirInput(), "input_acl_testing3.json"))
2223
require.Nilf(t, err, "err: %s", err)
23-
vpcConfigs, err := VPCConfigsFromResources(rc, "", "", nil)
24+
vpcConfigs, err := rc.VPCConfigsFromResources("", "", nil)
2425
require.Nilf(t, err, "err: %s", err)
2526
for _, config := range vpcConfigs.Configs() {
2627
for _, f := range config.FilterResources {

0 commit comments

Comments
 (0)