Explorar o código

Merge branch 'develop' into helm

Matt Ray %!s(int64=3) %!d(string=hai) anos
pai
achega
bea42ca228

+ 35 - 0
pkg/cloud/aliyunprovider.go

@@ -118,6 +118,22 @@ var alibabaInstanceFamilies = []string{
 	"se1",
 }
 
+// AlibabaInfo contains configuration for Alibaba's CUR integration
+type AlibabaInfo struct {
+	AlibabaClusterRegion    string `json:"clusterRegion"`
+	AlibabaServiceKeyName   string `json:"serviceKeyName"`
+	AlibabaServiceKeySecret string `json:"serviceKeySecret"`
+	AlibabaAccountID        string `json:"accountID"`
+}
+
+// IsEmpty returns true if all fields in config are empty, false if not.
+func (ai *AlibabaInfo) IsEmpty() bool {
+	return ai.AlibabaClusterRegion == "" &&
+		ai.AlibabaServiceKeyName == "" &&
+		ai.AlibabaServiceKeySecret == "" &&
+		ai.AlibabaAccountID == ""
+}
+
 // AlibabaAccessKey holds Alibaba credentials parsing from the service-key.json file.
 type AlibabaAccessKey struct {
 	AccessKeyID     string `json:"alibaba_access_key_id"`
@@ -355,6 +371,25 @@ func (alibaba *Alibaba) GetAlibabaAccessKey() (*credentials.AccessKeyCredential,
 	return alibaba.accessKey, nil
 }
 
+func (alibaba *Alibaba) GetAlibabaCloudInfo() (*AlibabaInfo, error) {
+	config, err := alibaba.GetConfig()
+	if err != nil {
+		return nil, fmt.Errorf("could not retrieve AlibabaCloudInfo %s", err)
+	}
+
+	aak, err := alibaba.GetAlibabaAccessKey()
+	if err != nil {
+		return nil, err
+	}
+
+	return &AlibabaInfo{
+		AlibabaClusterRegion:    config.AlibabaClusterRegion,
+		AlibabaServiceKeyName:   aak.AccessKeyId,
+		AlibabaServiceKeySecret: aak.AccessKeySecret,
+		AlibabaAccountID:        config.ProjectID,
+	}, nil
+}
+
 // DownloadPricingData satisfies the provider interface and downloads the prices for Node instances and PVs.
 func (alibaba *Alibaba) DownloadPricingData() error {
 	alibaba.DownloadPricingDataLock.Lock()

+ 1 - 0
pkg/cloud/provider.go

@@ -174,6 +174,7 @@ type CustomPricing struct {
 	ServiceKeySecret             string `json:"awsServiceKeySecret,omitempty"`
 	AlibabaServiceKeyName        string `json:"alibabaServiceKeyName,omitempty"`
 	AlibabaServiceKeySecret      string `json:"alibabaServiceKeySecret,omitempty"`
+	AlibabaClusterRegion         string `json:"alibabaClusterRegion,omitempty"`
 	SpotDataRegion               string `json:"awsSpotDataRegion,omitempty"`
 	SpotDataBucket               string `json:"awsSpotDataBucket,omitempty"`
 	SpotDataPrefix               string `json:"awsSpotDataPrefix,omitempty"`

+ 9 - 0
pkg/kubecost/cloudcostaggregate.go

@@ -86,6 +86,15 @@ type CloudCostAggregate struct {
 	NetCost           float64                      `json:"netCost"`
 }
 
+func NewCloudCostAggregate(properties CloudCostAggregateProperties, kubernetesPercent, cost, netCost float64) *CloudCostAggregate {
+	return &CloudCostAggregate{
+		Properties:        properties,
+		KubernetesPercent: kubernetesPercent,
+		Cost:              cost,
+		NetCost:           netCost,
+	}
+}
+
 func (cca *CloudCostAggregate) Clone() *CloudCostAggregate {
 	return &CloudCostAggregate{
 		Properties:        cca.Properties,

+ 11 - 0
pkg/kubecost/cloudcostitem.go

@@ -80,6 +80,17 @@ type CloudCostItem struct {
 	NetCost      float64
 }
 
+// NewCloudCostItem instantiates a new CloudCostItem asset
+func NewCloudCostItem(start, end time.Time, cciProperties CloudCostItemProperties, isKubernetes bool, cost, netcost float64) *CloudCostItem {
+	return &CloudCostItem{
+		Properties:   cciProperties,
+		IsKubernetes: isKubernetes,
+		Window:       NewWindow(&start, &end),
+		Cost:         cost,
+		NetCost:      netcost,
+	}
+}
+
 func (cci *CloudCostItem) Clone() *CloudCostItem {
 	return &CloudCostItem{
 		Properties:   cci.Properties.Clone(),