-
Notifications
You must be signed in to change notification settings - Fork 499
/
disk_types.go
99 lines (90 loc) · 2.54 KB
/
disk_types.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
package compute
import (
"github.com/mitchellh/mapstructure"
"go.uber.org/zap"
"google.golang.org/api/compute/v1"
)
type DiskType struct {
ID uint `gorm:"primarykey"`
ProjectID string
CreationTimestamp string
DefaultDiskSizeGb int64
DeprecatedDeleted string
DeprecatedDeprecated string
DeprecatedObsolete string
DeprecatedReplacement string
DeprecatedState string
Description string
ResourceID uint64
Kind string
Name string
Region string
SelfLink string
ValidDiskSize string
Zone string
}
func (DiskType) TableName() string {
return "gcp_compute_disk_types"
}
func (c *Client) transformDiskType(value *compute.DiskType) *DiskType {
return &DiskType{
ProjectID: c.projectID,
CreationTimestamp: value.CreationTimestamp,
DefaultDiskSizeGb: value.DefaultDiskSizeGb,
//DeprecatedDeleted: value.Deprecated.Deleted,
//DeprecatedDeprecated: value.Deprecated.Deprecated,
//DeprecatedObsolete: value.Deprecated.Obsolete,
//DeprecatedReplacement: value.Deprecated.Replacement,
//DeprecatedState: value.Deprecated.State,
Description: value.Description,
ResourceID: value.Id,
Kind: value.Kind,
Name: value.Name,
Region: value.Region,
SelfLink: value.SelfLink,
ValidDiskSize: value.ValidDiskSize,
Zone: value.Zone,
}
}
func (c *Client) transformDiskTypes(values []*compute.DiskType) []*DiskType {
var tValues []*DiskType
for _, v := range values {
tValues = append(tValues, c.transformDiskType(v))
}
return tValues
}
type DiskTypeConfig struct {
Filter string
}
var DiskTypeTables = []interface{}{
&DiskType{},
}
func (c *Client) diskTypes(gConfig interface{}) error {
var config DiskTypeConfig
err := mapstructure.Decode(gConfig, &config)
if err != nil {
return err
}
c.db.Where("project_id", c.projectID).Delete(DiskTypeTables...)
nextPageToken := ""
for {
call := c.svc.DiskTypes.AggregatedList(c.projectID)
call.PageToken(nextPageToken)
call.Filter(config.Filter)
output, err := call.Do()
if err != nil {
return err
}
var tValues []*DiskType
for _, items := range output.Items {
tValues = append(tValues, c.transformDiskTypes(items.DiskTypes)...)
}
c.db.ChunkedCreate(tValues)
c.log.Info("Fetched resources", zap.String("resource", "compute.disk_types"), zap.Int("count", len(tValues)))
if output.NextPageToken == "" {
break
}
nextPageToken = output.NextPageToken
}
return nil
}