mirror of
https://github.com/rancher/steve.git
synced 2025-09-02 07:55:31 +00:00
65 lines
1.5 KiB
Go
65 lines
1.5 KiB
Go
package helmrelease
|
|
|
|
import (
|
|
"encoding/base64"
|
|
"fmt"
|
|
"strings"
|
|
"time"
|
|
|
|
"github.com/gogo/protobuf/proto"
|
|
"github.com/golang/protobuf/ptypes/timestamp"
|
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
"k8s.io/helm/pkg/proto/hapi/release"
|
|
)
|
|
|
|
func ToRelease(data, name string) (*HelmRelease, error) {
|
|
bytes, err := base64.StdEncoding.DecodeString(data)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
var hr release.Release
|
|
if err := proto.Unmarshal(bytes, &hr); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if hr.Chart == nil || hr.Chart.Metadata == nil {
|
|
return nil, fmt.Errorf("invalid chart, missing chart or metadata")
|
|
}
|
|
|
|
hrVersion := HelmRelease{
|
|
ObjectMeta: metav1.ObjectMeta{
|
|
Name: name,
|
|
Namespace: hr.Namespace,
|
|
},
|
|
ID: fmt.Sprintf("%s:%s", hr.Namespace, name),
|
|
Name: hr.Name,
|
|
FirstDeployed: toTime(hr.Info.FirstDeployed),
|
|
LastDeployed: toTime(hr.Info.LastDeployed),
|
|
Deleted: toTime(hr.Info.Deleted),
|
|
Metadata: *hr.Chart.Metadata,
|
|
Status: release.Status_Code_name[int32(hr.Info.Status.Code)],
|
|
Manifest: hr.Manifest,
|
|
Version: hr.Version,
|
|
}
|
|
|
|
if hr.Info.Status != nil {
|
|
hrVersion.Status = release.Status_Code_name[int32(hr.Info.Status.Code)]
|
|
for _, template := range hr.Chart.Templates {
|
|
if strings.EqualFold("readme.md", template.Name) {
|
|
hrVersion.ReadMe = string(template.Data)
|
|
}
|
|
}
|
|
}
|
|
|
|
return &hrVersion, nil
|
|
}
|
|
|
|
func toTime(t *timestamp.Timestamp) *metav1.Time {
|
|
if t == nil {
|
|
return nil
|
|
}
|
|
time := metav1.NewTime(time.Unix(t.Seconds, int64(t.Nanos)))
|
|
return &time
|
|
}
|