forked from vmware-tanzu/sonobuoy
/
master.go
81 lines (65 loc) · 2 KB
/
master.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
/*
Copyright 2018 Heptio Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package app
import (
"os"
"github.com/heptio/sonobuoy/pkg/config"
"github.com/heptio/sonobuoy/pkg/discovery"
"github.com/heptio/sonobuoy/pkg/errlog"
"github.com/pkg/errors"
"github.com/sirupsen/logrus"
"github.com/spf13/cobra"
"k8s.io/client-go/kubernetes"
)
var noExit bool
var kubecfg Kubeconfig
func init() {
cmd := &cobra.Command{
Use: "master",
Short: "Runs the master/aggregator component (for internal use)",
Long: "Sonobuoy is an introspective kubernetes component that generates reports on cluster conformance, configuration, and more",
Run: runMaster,
Hidden: true,
Args: cobra.ExactArgs(0),
}
cmd.PersistentFlags().BoolVar(
&noExit, "no-exit", false,
"Use this if you want sonobuoy to block and not exit. Useful when you want to explicitly grab results.tar.gz",
)
AddKubeconfigFlag(&kubecfg, cmd.Flags())
RootCmd.AddCommand(cmd)
}
func runMaster(cmd *cobra.Command, args []string) {
cfg, err := config.LoadConfig()
if err != nil {
errlog.LogError(errors.Wrap(err, "error loading sonobuoy configuration"))
os.Exit(1)
}
kcfg, err := kubecfg.Get()
if err != nil {
errlog.LogError(err)
os.Exit(1)
}
clientset, err := kubernetes.NewForConfig(kcfg)
if err != nil {
errlog.LogError(err)
os.Exit(1)
}
// Run Discovery (gather API data, run plugins)
errcount := discovery.Run(clientset, cfg)
if noExit {
logrus.Info("no-exit was specified, sonobuoy is now blocking")
select {}
}
os.Exit(errcount)
}