@@ -2,6 +2,7 @@ package main
2
2
3
3
import (
4
4
"context"
5
+ "fmt"
5
6
"net"
6
7
7
8
"github.com/sirupsen/logrus"
@@ -16,36 +17,40 @@ import (
16
17
"github.com/operator-framework/operator-registry/pkg/api"
17
18
health "github.com/operator-framework/operator-registry/pkg/api/grpc_health_v1"
18
19
"github.com/operator-framework/operator-registry/pkg/lib/log"
20
+ "github.com/operator-framework/operator-registry/pkg/registry"
19
21
"github.com/operator-framework/operator-registry/pkg/server"
20
22
"github.com/operator-framework/operator-registry/pkg/sqlite"
21
23
)
22
24
23
- func main () {
24
- var rootCmd = & cobra.Command {
25
- Short : "configmap-server" ,
26
- Long : `configmap-server reads a configmap and builds a sqlite database containing operator manifests and serves a grpc API to query it` ,
25
+ var rootCmd = & cobra.Command {
26
+ Short : "configmap-server" ,
27
+ Long : `configmap-server reads a configmap and builds a sqlite database containing operator manifests and serves a grpc API to query it` ,
27
28
28
- PreRunE : func (cmd * cobra.Command , args []string ) error {
29
- if debug , _ := cmd .Flags ().GetBool ("debug" ); debug {
30
- logrus .SetLevel (logrus .DebugLevel )
31
- }
32
- return nil
33
- },
29
+ PreRunE : func (cmd * cobra.Command , args []string ) error {
30
+ if debug , _ := cmd .Flags ().GetBool ("debug" ); debug {
31
+ logrus .SetLevel (logrus .DebugLevel )
32
+ }
33
+ return nil
34
+ },
34
35
35
- RunE : runCmdFunc ,
36
- }
36
+ RunE : runCmdFunc ,
37
+ }
37
38
39
+ func init () {
38
40
rootCmd .Flags ().Bool ("debug" , false , "enable debug logging" )
39
41
rootCmd .Flags ().StringP ("kubeconfig" , "k" , "" , "absolute path to kubeconfig file" )
40
42
rootCmd .Flags ().StringP ("database" , "d" , "bundles.db" , "name of db to output" )
41
43
rootCmd .Flags ().StringP ("configMapName" , "c" , "" , "name of a configmap" )
42
44
rootCmd .Flags ().StringP ("configMapNamespace" , "n" , "" , "namespace of a configmap" )
43
45
rootCmd .Flags ().StringP ("port" , "p" , "50051" , "port number to serve on" )
44
46
rootCmd .Flags ().StringP ("termination-log" , "t" , "/dev/termination-log" , "path to a container termination log file" )
47
+ rootCmd .Flags ().Bool ("permissive" , false , "allow registry load errors" )
45
48
if err := rootCmd .Flags ().MarkHidden ("debug" ); err != nil {
46
49
logrus .Panic (err .Error ())
47
50
}
51
+ }
48
52
53
+ func main () {
49
54
if err := rootCmd .Execute (); err != nil {
50
55
logrus .Panic (err .Error ())
51
56
}
@@ -59,7 +64,7 @@ func runCmdFunc(cmd *cobra.Command, args []string) error {
59
64
}
60
65
err = log .AddDefaultWriterHooks (terminationLogPath )
61
66
if err != nil {
62
- return err
67
+ logrus . WithError ( err ). Warn ( "unable to set termination log path" )
63
68
}
64
69
kubeconfig , err := cmd .Flags ().GetString ("kubeconfig" )
65
70
if err != nil {
@@ -81,12 +86,16 @@ func runCmdFunc(cmd *cobra.Command, args []string) error {
81
86
if err != nil {
82
87
return err
83
88
}
89
+ permissive , err := cmd .Flags ().GetBool ("permissive" )
90
+ if err != nil {
91
+ return err
92
+ }
84
93
logger := logrus .WithFields (logrus.Fields {"configMapName" : configMapName , "configMapNamespace" : configMapNamespace , "port" : port })
85
94
86
95
client := NewClientFromConfig (kubeconfig , logger .Logger )
87
96
configMap , err := client .CoreV1 ().ConfigMaps (configMapNamespace ).Get (configMapName , metav1.GetOptions {})
88
97
if err != nil {
89
- logger .Fatalf ("error getting configmap: %v " , err )
98
+ logger .Fatalf ("error getting configmap: %s " , err )
90
99
}
91
100
92
101
sqlLoader , err := sqlite .NewSQLLiteLoader (dbName )
@@ -96,26 +105,34 @@ func runCmdFunc(cmd *cobra.Command, args []string) error {
96
105
97
106
configMapPopulator := sqlite .NewSQLLoaderForConfigMap (sqlLoader , * configMap )
98
107
if err := configMapPopulator .Populate (); err != nil {
99
- return err
108
+ err = fmt .Errorf ("error loading manifests from configmap: %s" , err )
109
+ if ! permissive {
110
+ logger .WithError (err ).Fatal ("permissive mode disabled" )
111
+ }
112
+ logger .WithError (err ).Warn ("permissive mode enabled" )
100
113
}
101
114
102
- store , err := sqlite .NewSQLLiteQuerier (dbName )
115
+ var store registry.Query
116
+ store , err = sqlite .NewSQLLiteQuerier (dbName )
103
117
if err != nil {
104
- logger .Fatalf ("failed to load db: %v" , err )
118
+ logger .WithError (err ).Warnf ("failed to load db" )
119
+ }
120
+ if store == nil {
121
+ store = registry .NewEmptyQuerier ()
105
122
}
106
123
107
124
// sanity check that the db is available
108
125
tables , err := store .ListTables (context .TODO ())
109
126
if err != nil {
110
- logger .Fatalf ( "couldn't list tables in db, incorrect config: %v" , err )
127
+ logger .WithError ( err ). Warnf ( "couldn't list tables in db" )
111
128
}
112
129
if len (tables ) == 0 {
113
- logger .Fatal ("no tables found in db" )
130
+ logger .Warn ("no tables found in db" )
114
131
}
115
132
116
133
lis , err := net .Listen ("tcp" , ":" + port )
117
134
if err != nil {
118
- logger .Fatalf ("failed to listen: %v " , err )
135
+ logger .Fatalf ("failed to listen: %s " , err )
119
136
}
120
137
s := grpc .NewServer ()
121
138
@@ -125,7 +142,7 @@ func runCmdFunc(cmd *cobra.Command, args []string) error {
125
142
126
143
logger .Info ("serving registry" )
127
144
if err := s .Serve (lis ); err != nil {
128
- logger .Fatalf ("failed to serve: %v " , err )
145
+ logger .Fatalf ("failed to serve: %s " , err )
129
146
}
130
147
return nil
131
148
}
@@ -144,7 +161,7 @@ func NewClientFromConfig(kubeconfig string, logger *logrus.Logger) kubernetes.In
144
161
}
145
162
146
163
if err != nil {
147
- logger .Fatalf ("Cannot load config for REST client: %v " , err )
164
+ logger .Fatalf ("Cannot load config for REST client: %s " , err )
148
165
}
149
166
150
167
return kubernetes .NewForConfigOrDie (config )
0 commit comments