Skip to content

Commit d53e586

Browse files
Azure support added. (#1)
* Azure support added. Signed-off-by: viktor-kurchenko <[email protected]> * Minor fix. Signed-off-by: viktor-kurchenko <[email protected]> --------- Signed-off-by: viktor-kurchenko <[email protected]>
1 parent cd6cbf9 commit d53e586

File tree

10 files changed

+114
-104
lines changed

10 files changed

+114
-104
lines changed

.github/workflows/lint-build.yaml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
name: Go Lint and Build
22

33
on:
4-
push:
54
pull_request:
65

76
jobs:

Makefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ define PROJECT_HELP_MSG
44
Usage:
55
make help:\t show this message
66
make lint:\t run go linter
7-
make compile:\t compile c7n-helper binary
7+
make build:\t build c7n-helper binary
88
endef
99
export PROJECT_HELP_MSG
1010

@@ -14,5 +14,5 @@ help:
1414
lint:
1515
golangci-lint run
1616

17-
compile:
17+
build:
1818
go build .

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ $ make lint
2323
To build `c7n-helper` from source please run the following locally:
2424

2525
```console
26-
$ make compile
26+
$ make build
2727
```
2828

2929
## Usage

cmd/parser.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ var parserCmd = &cobra.Command{
1717
var parseType, parseDir, parsePolicy, parseResult *string
1818

1919
func init() {
20-
parseType = parserCmd.Flags().StringP("type", "t", "", "Cloud resource type (eks, ec2, gke, gce)")
20+
parseType = parserCmd.Flags().StringP("type", "t", "", "Cloud resource type (eks, ec2, gke, gce, arg)")
2121
_ = parserCmd.MarkFlagRequired("type")
2222
parseDir = parserCmd.Flags().StringP("report-dir", "d", "", "C7N report directory")
2323
_ = parserCmd.MarkFlagRequired("report-dir")

pkg/cloud/aws.go renamed to pkg/aws/aws.go

Lines changed: 12 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,25 @@
1-
package cloud
1+
package aws
22

33
import (
4-
"c7n-helper/pkg/converter"
54
"c7n-helper/pkg/dto"
65
"encoding/json"
76
"fmt"
87
"time"
98
)
109

11-
type EKS struct {
12-
Name string `converter:"name"`
13-
CreatedAt time.Time `converter:"createdAt"`
10+
type eks struct {
11+
Name string `json:"name"`
12+
CreatedAt time.Time `json:"createdAt"`
1413
}
1514

16-
type EC2 struct {
17-
InstanceId string `converter:"InstanceId"`
18-
LaunchTime time.Time `converter:"LaunchTime"`
19-
InstanceType string `converter:"InstanceType"`
15+
type ec2 struct {
16+
InstanceId string `json:"InstanceId"`
17+
LaunchTime time.Time `json:"LaunchTime"`
18+
InstanceType string `json:"InstanceType"`
2019
}
2120

22-
func EksFromFile(file string) ([]dto.Resource, error) {
23-
content, err := converter.JsonToBytes(file)
24-
if err != nil {
25-
return nil, err
26-
}
27-
var clusters []EKS
21+
func EKS(content []byte) ([]dto.Resource, error) {
22+
var clusters []eks
2823
if err := json.Unmarshal(content, &clusters); err != nil {
2924
return nil, err
3025
}
@@ -38,12 +33,8 @@ func EksFromFile(file string) ([]dto.Resource, error) {
3833
return result, nil
3934
}
4035

41-
func Ec2FromFile(file string) ([]dto.Resource, error) {
42-
content, err := converter.JsonToBytes(file)
43-
if err != nil {
44-
return nil, err
45-
}
46-
var vms []EC2
36+
func EC2(content []byte) ([]dto.Resource, error) {
37+
var vms []ec2
4738
if err := json.Unmarshal(content, &vms); err != nil {
4839
return nil, err
4940
}

pkg/azure/azure.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package azure
2+
3+
import (
4+
"c7n-helper/pkg/dto"
5+
"encoding/json"
6+
"time"
7+
)
8+
9+
type rg struct {
10+
Name string `json:"name"`
11+
}
12+
13+
func RG(content []byte) ([]dto.Resource, error) {
14+
var groups []rg
15+
if err := json.Unmarshal(content, &groups); err != nil {
16+
return nil, err
17+
}
18+
result := make([]dto.Resource, 0, len(groups))
19+
for _, group := range groups {
20+
result = append(result, dto.Resource{
21+
Name: group.Name,
22+
Created: time.Now(), //TODO: fix it
23+
})
24+
}
25+
return result, nil
26+
}

pkg/cloud/gcp.go

Lines changed: 0 additions & 56 deletions
This file was deleted.

pkg/converter/json.go

Lines changed: 0 additions & 15 deletions
This file was deleted.

pkg/gcp/gcp.go

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package gcp
2+
3+
import (
4+
"c7n-helper/pkg/dto"
5+
"encoding/json"
6+
"time"
7+
)
8+
9+
type gke struct {
10+
Name string `json:"name"`
11+
CreatedAt time.Time `json:"createTime"`
12+
}
13+
14+
type gce struct {
15+
Name string `json:"name"`
16+
LaunchTime time.Time `json:"creationTimestamp"`
17+
}
18+
19+
func GKE(content []byte) ([]dto.Resource, error) {
20+
var clusters []gke
21+
if err := json.Unmarshal(content, &clusters); err != nil {
22+
return nil, err
23+
}
24+
result := make([]dto.Resource, 0, len(clusters))
25+
for _, cluster := range clusters {
26+
result = append(result, dto.Resource{
27+
Name: cluster.Name,
28+
Created: cluster.CreatedAt,
29+
})
30+
}
31+
return result, nil
32+
}
33+
34+
func GCE(content []byte) ([]dto.Resource, error) {
35+
var vms []gce
36+
if err := json.Unmarshal(content, &vms); err != nil {
37+
return nil, err
38+
}
39+
result := make([]dto.Resource, 0, len(vms))
40+
for _, vm := range vms {
41+
result = append(result, dto.Resource{
42+
Name: vm.Name,
43+
Created: vm.LaunchTime,
44+
})
45+
}
46+
return result, nil
47+
}

pkg/parser/parser.go

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,25 @@
11
package parser
22

33
import (
4-
"c7n-helper/pkg/cloud"
4+
"c7n-helper/pkg/aws"
5+
"c7n-helper/pkg/azure"
56
"c7n-helper/pkg/dto"
7+
"c7n-helper/pkg/gcp"
68
"encoding/json"
79
"errors"
10+
"io"
811
"log"
912
"os"
1013
"path/filepath"
1114
"strings"
1215
)
1316

14-
var resourceParsers = map[string]func(file string) ([]dto.Resource, error){
15-
"eks": cloud.EksFromFile,
16-
"ec2": cloud.Ec2FromFile,
17-
"gke": cloud.GkeFromFile,
18-
"gce": cloud.GceFromFile,
17+
var resourceParsers = map[string]func(content []byte) ([]dto.Resource, error){
18+
"eks": aws.EKS,
19+
"ec2": aws.EC2,
20+
"gke": gcp.GKE,
21+
"gce": gcp.GCE,
22+
"arg": azure.RG,
1923
}
2024

2125
func Parse(resourceType, c7nDir, policy, outFile string) error {
@@ -83,7 +87,11 @@ func resourcesFromFile(resourceType, file string) ([]dto.Resource, error) {
8387
if !ok {
8488
return nil, errors.New("unsupported resource type")
8589
}
86-
return parser(file)
90+
content, err := jsonToBytes(file)
91+
if err != nil {
92+
return nil, err
93+
}
94+
return parser(content)
8795
}
8896

8997
func accountsFromMap(accountMap map[string]dto.Account) []dto.Account {
@@ -106,5 +114,15 @@ func persistReport(report dto.PolicyReport, outFile string) error {
106114
func accountRegion(file string) (string, string) {
107115
parts := strings.Split(file, "/")
108116
l := len(parts)
117+
//TODO: must be improved for Azure & GCP
109118
return parts[l-4] /* account */, parts[l-3] /* region */
110119
}
120+
121+
func jsonToBytes(file string) ([]byte, error) {
122+
jsonFile, err := os.Open(file)
123+
if err != nil {
124+
return nil, err
125+
}
126+
defer jsonFile.Close()
127+
return io.ReadAll(jsonFile)
128+
}

0 commit comments

Comments
 (0)