Skip to content

Commit 755312a

Browse files
Cr 4000 incluster (#236)
In cluster runtime support
1 parent 4909522 commit 755312a

File tree

4 files changed

+65
-23
lines changed

4 files changed

+65
-23
lines changed

venona/VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1.6.3
1+
1.6.4

venona/cmd/start.go

Lines changed: 46 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ type startOptions struct {
5555
serverPort string
5656
newrelicLicenseKey string
5757
newrelicAppname string
58+
inClusterRuntime string
5859
}
5960

6061
var (
@@ -74,6 +75,7 @@ var startCmd = &cobra.Command{
7475
func init() {
7576
dieOnError(viper.BindEnv("codefresh-token", "CODEFRESH_TOKEN"))
7677
dieOnError(viper.BindEnv("codefresh-host", "CODEFRESH_HOST"))
78+
dieOnError(viper.BindEnv("in-cluster-runtime", "CODEFRESH_IN_CLUSTER_RUNTIME"))
7779
dieOnError(viper.BindEnv("agent-id", "AGENT_ID"))
7880
dieOnError(viper.BindEnv("config-dir", "VENONA_CONFIG_DIR"))
7981
dieOnError(viper.BindEnv("port", "PORT"))
@@ -85,10 +87,12 @@ func init() {
8587
viper.SetDefault("codefresh-host", defaultCodefreshHost)
8688
viper.SetDefault("port", "8080")
8789
viper.SetDefault("NODE_TLS_REJECT_UNAUTHORIZED", "1")
90+
viper.SetDefault("in-cluster-runtime", "")
8891
viper.SetDefault("newrelic-appname", AppName)
8992

9093
startCmd.Flags().BoolVar(&startCmdOptions.verbose, "verbose", viper.GetBool("verbose"), "Show more logs")
9194
startCmd.Flags().BoolVar(&startCmdOptions.rejectTLSUnauthorized, "tls-reject-unauthorized", viper.GetBool("NODE_TLS_REJECT_UNAUTHORIZED"), "Disable certificate validation for TLS connections")
95+
startCmd.Flags().StringVar(&startCmdOptions.inClusterRuntime, "in-cluster-runtime", viper.GetString("in-cluster-runtime"), "Runtime name to run agent in cluster mode ")
9296
startCmd.Flags().StringVar(&startCmdOptions.agentID, "agent-id", viper.GetString("agent-id"), "ID of the agent [$AGENT_ID]")
9397
startCmd.Flags().StringVar(&startCmdOptions.configDir, "config-dir", viper.GetString("config-dir"), "path to configuration folder [$CONFIG_DIR]")
9498
startCmd.Flags().StringVar(&startCmdOptions.codefreshToken, "codefresh-token", viper.GetString("codefresh-token"), "Codefresh API token [$CODEFRESH_TOKEN]")
@@ -122,30 +126,16 @@ func run(options startOptions) {
122126
log.Warn("Running in insecure mode", "NODE_TLS_REJECT_UNAUTHORIZED", options.rejectTLSUnauthorized)
123127
}
124128

125-
configs, err := config.Load(options.configDir, ".*.runtime.yaml", log.New("module", "config-loader"))
126-
dieOnError(err)
127-
runtimes := map[string]runtime.Runtime{}
128-
{
129-
for name, config := range configs {
130-
k, err := kubernetes.New(kubernetes.Options{
131-
Token: config.Token,
132-
Type: config.Type,
133-
Host: config.Host,
134-
Cert: config.Cert,
135-
Insecure: !options.rejectTLSUnauthorized,
136-
})
137-
if err != nil {
138-
log.Error("Failed to load kubernetes", "error", err.Error(), "file", name, "name", config.Name)
139-
continue
140-
}
141-
re := runtime.New(runtime.Options{
142-
Kubernetes: k,
143-
})
144-
runtimes[config.Name] = re
145-
}
129+
var runtimes map[string]runtime.Runtime
130+
if options.inClusterRuntime != "" {
131+
runtimes = inClusterRuntimeConfiguration(options)
132+
} else {
133+
runtimes = remoteRuntimeConfiguration(options, log)
146134
}
147135

148136
var monitor monitoring.Monitor = monitoring.NewEmpty()
137+
var err error
138+
149139
if options.newrelicLicenseKey != "" {
150140
monitor, err = newrelic.New(
151141
nr.ConfigAppName(options.newrelicAppname),
@@ -217,6 +207,41 @@ func run(options startOptions) {
217207
<-ctx.Done()
218208
}
219209

210+
func inClusterRuntimeConfiguration(options startOptions) map[string]runtime.Runtime {
211+
k, err := kubernetes.NewInCluster()
212+
dieOnError(err)
213+
re := runtime.New(runtime.Options{
214+
Kubernetes: k,
215+
})
216+
return map[string]runtime.Runtime{options.inClusterRuntime: re}
217+
}
218+
219+
func remoteRuntimeConfiguration(options startOptions, log logger.Logger) map[string]runtime.Runtime {
220+
configs, err := config.Load(options.configDir, ".*.runtime.yaml", log.New("module", "config-loader"))
221+
dieOnError(err)
222+
runtimes := map[string]runtime.Runtime{}
223+
{
224+
for name, config := range configs {
225+
k, err := kubernetes.New(kubernetes.Options{
226+
Token: config.Token,
227+
Type: config.Type,
228+
Host: config.Host,
229+
Cert: config.Cert,
230+
Insecure: !options.rejectTLSUnauthorized,
231+
})
232+
if err != nil {
233+
log.Error("Failed to load kubernetes", "error", err.Error(), "file", name, "name", config.Name)
234+
continue
235+
}
236+
re := runtime.New(runtime.Options{
237+
Kubernetes: k,
238+
})
239+
runtimes[config.Name] = re
240+
}
241+
}
242+
return runtimes
243+
}
244+
220245
func withSignals(
221246
ctx context.Context,
222247
stopServer func(context.Context) error,

venona/pkg/kubernetes/kubernetes.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,15 @@ type (
6060
}
6161
)
6262

63+
// NewInCluster build Kubernetes API based on local in cluster runtime
64+
func NewInCluster() (Kubernetes, error) {
65+
client, err := buildKubeInCluster()
66+
return &kube{
67+
client: client,
68+
logger: logger.New(logger.Options{}),
69+
}, err
70+
}
71+
6372
// New build Kubernetes API
6473
func New(opt Options) (Kubernetes, error) {
6574
if opt.Type != "runtime" {
@@ -144,3 +153,11 @@ func buildKubeClient(host string, token string, crt string, insecure bool) (kube
144153
TLSClientConfig: tlsconf,
145154
})
146155
}
156+
157+
func buildKubeInCluster() (kubernetes.Interface, error) {
158+
config, err := rest.InClusterConfig()
159+
if err != nil {
160+
return nil, err
161+
}
162+
return kubernetes.NewForConfig(config)
163+
}

venonactl/VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1.6.3
1+
1.6.4

0 commit comments

Comments
 (0)