Skip to content

Commit

Permalink
Create collector and analyzer from supportbundle
Browse files Browse the repository at this point in the history
  • Loading branch information
Andrew Reed committed Sep 3, 2020
1 parent 5e5d59e commit 67fce95
Show file tree
Hide file tree
Showing 3 changed files with 67 additions and 10 deletions.
4 changes: 4 additions & 0 deletions kotsadm/pkg/handlers/troubleshoot.go
Expand Up @@ -297,6 +297,10 @@ func UploadSupportBundle(w http.ResponseWriter, r *http.Request) {
}

analyzer := kotsKinds.Analyzer
// SupportBundle overwrites Analyzer if defined
if kotsKinds.SupportBundle != nil {
analyzer = kotsutil.SupportBundleToAnalyzer(kotsKinds.SupportBundle)
}
if analyzer == nil {
analyzer = &troubleshootv1beta2.Analyzer{
TypeMeta: metav1.TypeMeta{
Expand Down
2 changes: 1 addition & 1 deletion kotsadm/pkg/store/s3pg/version_store.go
Expand Up @@ -15,12 +15,12 @@ import (
"github.com/aws/aws-sdk-go/service/s3/s3manager"
"github.com/mholt/archiver"
"github.com/pkg/errors"
"github.com/replicatedhq/kots/pkg/kotsutil"
"github.com/replicatedhq/kots/kotsadm/pkg/persistence"
"github.com/replicatedhq/kots/kotsadm/pkg/render"
kotss3 "github.com/replicatedhq/kots/kotsadm/pkg/s3"
versiontypes "github.com/replicatedhq/kots/kotsadm/pkg/version/types"
kotsv1beta1 "github.com/replicatedhq/kots/kotskinds/apis/kots/v1beta1"
"github.com/replicatedhq/kots/pkg/kotsutil"
velerov1 "github.com/vmware-tanzu/velero/pkg/apis/velero/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/kubernetes"
Expand Down
71 changes: 62 additions & 9 deletions pkg/kotsutil/kots.go
Expand Up @@ -3,6 +3,7 @@ package kotsutil
import (
"bytes"
"encoding/base64"
"fmt"
"io/ioutil"
"os"
"path/filepath"
Expand Down Expand Up @@ -37,9 +38,10 @@ type KotsKinds struct {
KotsApplication kotsv1beta1.Application
Application *applicationv1beta1.Application

Collector *troubleshootv1beta2.Collector
Preflight *troubleshootv1beta2.Preflight
Analyzer *troubleshootv1beta2.Analyzer
Collector *troubleshootv1beta2.Collector
Preflight *troubleshootv1beta2.Preflight
Analyzer *troubleshootv1beta2.Analyzer
SupportBundle *troubleshootv1beta2.SupportBundle

Config *kotsv1beta1.Config
ConfigValues *kotsv1beta1.ConfigValues
Expand Down Expand Up @@ -201,24 +203,34 @@ func (o KotsKinds) Marshal(g string, v string, k string) (string, error) {
}
}

if g == "troubleshoot.replicated.com" {
if v == "v1beta1" {
if g == "troubleshoot.replicated.com" || g == "troubleshoot.sh" {
if v == "v1beta1" || v == "v1beta2" {
switch k {
case "Collector":
if o.Collector == nil {
collector := o.Collector
// SupportBundle overwrites Collector if defined
if o.SupportBundle != nil {
collector = SupportBundleToCollector(o.SupportBundle)
}
if collector == nil {
return "", nil
}
var b bytes.Buffer
if err := s.Encode(o.Collector, &b); err != nil {
if err := s.Encode(collector, &b); err != nil {
return "", errors.Wrap(err, "failed to encode collector")
}
return string(b.Bytes()), nil
case "Analyzer":
if o.Analyzer == nil {
analyzer := o.Analyzer
// SupportBundle overwrites Analyzer if defined
if o.SupportBundle != nil {
analyzer = SupportBundleToAnalyzer(o.SupportBundle)
}
if analyzer == nil {
return "", nil
}
var b bytes.Buffer
if err := s.Encode(o.Analyzer, &b); err != nil {
if err := s.Encode(analyzer, &b); err != nil {
return "", errors.Wrap(err, "failed to encode analyzer")
}
return string(b.Bytes()), nil
Expand All @@ -231,6 +243,15 @@ func (o KotsKinds) Marshal(g string, v string, k string) (string, error) {
return "", errors.Wrap(err, "failed to encode preflight")
}
return string(b.Bytes()), nil
case "SupportBundle":
if o.SupportBundle == nil {
return "", nil
}
var b bytes.Buffer
if err := s.Encode(o.SupportBundle, &b); err != nil {
return "", errors.Wrap(err, "failed to encode support bundle")
}
return string(b.Bytes()), nil
}
}
}
Expand Down Expand Up @@ -339,6 +360,8 @@ func LoadKotsKindsFromPath(fromDir string) (*KotsKinds, error) {
kotsKinds.Collector = decoded.(*troubleshootv1beta2.Collector)
case "troubleshoot.sh/v1beta2, Kind=Analyzer":
kotsKinds.Analyzer = decoded.(*troubleshootv1beta2.Analyzer)
case "troubleshoot.sh/v1beta2, Kind=SupportBundle":
kotsKinds.SupportBundle = decoded.(*troubleshootv1beta2.SupportBundle)
case "troubleshoot.sh/v1beta2, Kind=Preflight":
kotsKinds.Preflight = decoded.(*troubleshootv1beta2.Preflight)
case "velero.io/v1, Kind=Backup":
Expand Down Expand Up @@ -460,3 +483,33 @@ func LoadBackupFromContents(content []byte) (*velerov1.Backup, error) {

return obj.(*velerov1.Backup), nil
}

func SupportBundleToCollector(sb *troubleshootv1beta2.SupportBundle) *troubleshootv1beta2.Collector {
return &troubleshootv1beta2.Collector{
TypeMeta: metav1.TypeMeta{
APIVersion: "troubleshoot.sh/v1beta2",
Kind: "Collector",
},
ObjectMeta: metav1.ObjectMeta{
Name: fmt.Sprintf("%s-collector", sb.Name),
},
Spec: troubleshootv1beta2.CollectorSpec{
Collectors: sb.Spec.Collectors,
},
}
}

func SupportBundleToAnalyzer(sb *troubleshootv1beta2.SupportBundle) *troubleshootv1beta2.Analyzer {
return &troubleshootv1beta2.Analyzer{
TypeMeta: metav1.TypeMeta{
APIVersion: "troubleshoot.sh/v1beta2",
Kind: "Analyzer",
},
ObjectMeta: metav1.ObjectMeta{
Name: fmt.Sprintf("%s-analyzer", sb.Name),
},
Spec: troubleshootv1beta2.AnalyzerSpec{
Analyzers: sb.Spec.Analyzers,
},
}
}

0 comments on commit 67fce95

Please sign in to comment.