mirror of https://github.com/knative/pkg.git
take 2 (#1755)
This commit is contained in:
parent
a371418524
commit
1e373a9e5d
|
@ -41,7 +41,7 @@ func configOrDie() *rest.Config {
|
||||||
|
|
||||||
cfg, err := getConfig(*serverURL, *kubeconfig)
|
cfg, err := getConfig(*serverURL, *kubeconfig)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(fmt.Sprintf("Error building kubeconfig: %v", err))
|
panic(fmt.Sprint("Error building kubeconfig:", err))
|
||||||
}
|
}
|
||||||
|
|
||||||
return cfg
|
return cfg
|
||||||
|
|
|
@ -50,9 +50,9 @@ func main() {
|
||||||
logger.Infof("Migrating %d group resources", len(grs))
|
logger.Infof("Migrating %d group resources", len(grs))
|
||||||
|
|
||||||
for _, gr := range grs {
|
for _, gr := range grs {
|
||||||
logger.Infof("Migrating group resource %s", gr)
|
logger.Info("Migrating group resource ", gr)
|
||||||
if err := migrator.Migrate(ctx, gr); err != nil {
|
if err := migrator.Migrate(ctx, gr); err != nil {
|
||||||
logger.Fatalf("Failed to migrate: %s", err)
|
logger.Fatal("Failed to migrate: ", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,25 +17,25 @@ limitations under the License.
|
||||||
package apis
|
package apis
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"reflect"
|
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/google/go-cmp/cmp"
|
||||||
corev1 "k8s.io/api/core/v1"
|
corev1 "k8s.io/api/core/v1"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestValidateObjectMetadata(t *testing.T) {
|
func TestValidateObjectMetadata(t *testing.T) {
|
||||||
cases := []struct {
|
tests := []struct {
|
||||||
name string
|
name string
|
||||||
objectMeta metav1.Object
|
objectMeta metav1.Object
|
||||||
expectErr error
|
want error
|
||||||
}{{
|
}{{
|
||||||
name: "invalid name - dots",
|
name: "invalid name - dots",
|
||||||
objectMeta: &metav1.ObjectMeta{
|
objectMeta: &metav1.ObjectMeta{
|
||||||
Name: "do.not.use.dots",
|
Name: "do.not.use.dots",
|
||||||
},
|
},
|
||||||
expectErr: &FieldError{
|
want: &FieldError{
|
||||||
Message: "not a DNS 1035 label: [a DNS-1035 label must consist of lower case alphanumeric characters or '-', start with an alphabetic character, and end with an alphanumeric character (e.g. 'my-name', or 'abc-123', regex used for validation is '[a-z]([-a-z0-9]*[a-z0-9])?')]",
|
Message: "not a DNS 1035 label: [a DNS-1035 label must consist of lower case alphanumeric characters or '-', start with an alphabetic character, and end with an alphanumeric character (e.g. 'my-name', or 'abc-123', regex used for validation is '[a-z]([-a-z0-9]*[a-z0-9])?')]",
|
||||||
Paths: []string{"name"},
|
Paths: []string{"name"},
|
||||||
},
|
},
|
||||||
|
@ -44,7 +44,7 @@ func TestValidateObjectMetadata(t *testing.T) {
|
||||||
objectMeta: &metav1.ObjectMeta{
|
objectMeta: &metav1.ObjectMeta{
|
||||||
Name: strings.Repeat("a", 64),
|
Name: strings.Repeat("a", 64),
|
||||||
},
|
},
|
||||||
expectErr: &FieldError{
|
want: &FieldError{
|
||||||
Message: "not a DNS 1035 label: [must be no more than 63 characters]",
|
Message: "not a DNS 1035 label: [must be no more than 63 characters]",
|
||||||
Paths: []string{"name"},
|
Paths: []string{"name"},
|
||||||
},
|
},
|
||||||
|
@ -53,7 +53,7 @@ func TestValidateObjectMetadata(t *testing.T) {
|
||||||
objectMeta: &metav1.ObjectMeta{
|
objectMeta: &metav1.ObjectMeta{
|
||||||
Name: "some-name-",
|
Name: "some-name-",
|
||||||
},
|
},
|
||||||
expectErr: &FieldError{
|
want: &FieldError{
|
||||||
Message: "not a DNS 1035 label: [a DNS-1035 label must consist of lower case alphanumeric characters or '-', start with an alphabetic character, and end with an alphanumeric character (e.g. 'my-name', or 'abc-123', regex used for validation is '[a-z]([-a-z0-9]*[a-z0-9])?')]",
|
Message: "not a DNS 1035 label: [a DNS-1035 label must consist of lower case alphanumeric characters or '-', start with an alphabetic character, and end with an alphanumeric character (e.g. 'my-name', or 'abc-123', regex used for validation is '[a-z]([-a-z0-9]*[a-z0-9])?')]",
|
||||||
Paths: []string{"name"},
|
Paths: []string{"name"},
|
||||||
},
|
},
|
||||||
|
@ -62,19 +62,19 @@ func TestValidateObjectMetadata(t *testing.T) {
|
||||||
objectMeta: &metav1.ObjectMeta{
|
objectMeta: &metav1.ObjectMeta{
|
||||||
GenerateName: "some-name",
|
GenerateName: "some-name",
|
||||||
},
|
},
|
||||||
expectErr: (*FieldError)(nil),
|
want: (*FieldError)(nil),
|
||||||
}, {
|
}, {
|
||||||
name: "valid generateName - trailing dash",
|
name: "valid generateName - trailing dash",
|
||||||
objectMeta: &metav1.ObjectMeta{
|
objectMeta: &metav1.ObjectMeta{
|
||||||
GenerateName: "some-name-",
|
GenerateName: "some-name-",
|
||||||
},
|
},
|
||||||
expectErr: (*FieldError)(nil),
|
want: (*FieldError)(nil),
|
||||||
}, {
|
}, {
|
||||||
name: "invalid generateName - dots",
|
name: "invalid generateName - dots",
|
||||||
objectMeta: &metav1.ObjectMeta{
|
objectMeta: &metav1.ObjectMeta{
|
||||||
GenerateName: "do.not.use.dots",
|
GenerateName: "do.not.use.dots",
|
||||||
},
|
},
|
||||||
expectErr: &FieldError{
|
want: &FieldError{
|
||||||
Message: "not a DNS 1035 label prefix: [a DNS-1035 label must consist of lower case alphanumeric characters or '-', start with an alphabetic character, and end with an alphanumeric character (e.g. 'my-name', or 'abc-123', regex used for validation is '[a-z]([-a-z0-9]*[a-z0-9])?')]",
|
Message: "not a DNS 1035 label prefix: [a DNS-1035 label must consist of lower case alphanumeric characters or '-', start with an alphabetic character, and end with an alphanumeric character (e.g. 'my-name', or 'abc-123', regex used for validation is '[a-z]([-a-z0-9]*[a-z0-9])?')]",
|
||||||
Paths: []string{"generateName"},
|
Paths: []string{"generateName"},
|
||||||
},
|
},
|
||||||
|
@ -83,26 +83,24 @@ func TestValidateObjectMetadata(t *testing.T) {
|
||||||
objectMeta: &metav1.ObjectMeta{
|
objectMeta: &metav1.ObjectMeta{
|
||||||
GenerateName: strings.Repeat("a", 64),
|
GenerateName: strings.Repeat("a", 64),
|
||||||
},
|
},
|
||||||
expectErr: &FieldError{
|
want: &FieldError{
|
||||||
Message: "not a DNS 1035 label prefix: [must be no more than 63 characters]",
|
Message: "not a DNS 1035 label prefix: [must be no more than 63 characters]",
|
||||||
Paths: []string{"generateName"},
|
Paths: []string{"generateName"},
|
||||||
},
|
},
|
||||||
}, {
|
}, {
|
||||||
name: "missing name and generateName",
|
name: "missing name and generateName",
|
||||||
objectMeta: &metav1.ObjectMeta{},
|
objectMeta: &metav1.ObjectMeta{},
|
||||||
expectErr: &FieldError{
|
want: &FieldError{
|
||||||
Message: "name or generateName is required",
|
Message: "name or generateName is required",
|
||||||
Paths: []string{"name"},
|
Paths: []string{"name"},
|
||||||
},
|
},
|
||||||
}}
|
}}
|
||||||
|
|
||||||
for _, c := range cases {
|
for _, tc := range tests {
|
||||||
t.Run(c.name, func(t *testing.T) {
|
t.Run(tc.name, func(t *testing.T) {
|
||||||
|
if err := ValidateObjectMetadata(tc.objectMeta); !cmp.Equal(tc.want.Error(), err.Error()) {
|
||||||
err := ValidateObjectMetadata(c.objectMeta)
|
t.Errorf("Expected: '%#v', Got: '%#v', diff(-want,+got)\n%s", tc.want, err,
|
||||||
|
cmp.Diff(tc.want.Error(), err.Error()))
|
||||||
if !reflect.DeepEqual(c.expectErr, err) {
|
|
||||||
t.Errorf("Expected: '%#v', Got: '%#v'", c.expectErr, err)
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -171,8 +169,8 @@ func TestServiceAnnotationUpdate(t *testing.T) {
|
||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
t.Run(test.name, func(t *testing.T) {
|
t.Run(test.name, func(t *testing.T) {
|
||||||
err := ValidateCreatorAndModifier(test.prev, test.this, test.oldAnnotation, test.newAnnotation, groupName)
|
err := ValidateCreatorAndModifier(test.prev, test.this, test.oldAnnotation, test.newAnnotation, groupName)
|
||||||
if !reflect.DeepEqual(test.want.Error(), err.Error()) {
|
if !cmp.Equal(test.want.Error(), err.Error()) {
|
||||||
t.Errorf("Expected: '%#v', Got: '%#v'", test.want, err)
|
t.Errorf("Expected: '%#v', Got: '%#v', diff(-want,+got)\n%s", test.want, err, cmp.Diff(test.want, err))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -60,7 +60,7 @@ func (g *clientGenerator) Imports(c *generator.Context) (imports []string) {
|
||||||
func (g *clientGenerator) GenerateType(c *generator.Context, t *types.Type, w io.Writer) error {
|
func (g *clientGenerator) GenerateType(c *generator.Context, t *types.Type, w io.Writer) error {
|
||||||
sw := generator.NewSnippetWriter(w, c, "{{", "}}")
|
sw := generator.NewSnippetWriter(w, c, "{{", "}}")
|
||||||
|
|
||||||
klog.V(5).Infof("processing type %v", t)
|
klog.V(5).Info("processing type ", t)
|
||||||
|
|
||||||
m := map[string]interface{}{
|
m := map[string]interface{}{
|
||||||
"clientSetNewForConfigOrDie": c.Universe.Function(types.Name{Package: g.clientSetPackage, Name: "NewForConfigOrDie"}),
|
"clientSetNewForConfigOrDie": c.Universe.Function(types.Name{Package: g.clientSetPackage, Name: "NewForConfigOrDie"}),
|
||||||
|
|
|
@ -74,7 +74,7 @@ func (g *duckGenerator) Imports(c *generator.Context) (imports []string) {
|
||||||
func (g *duckGenerator) GenerateType(c *generator.Context, t *types.Type, w io.Writer) error {
|
func (g *duckGenerator) GenerateType(c *generator.Context, t *types.Type, w io.Writer) error {
|
||||||
sw := generator.NewSnippetWriter(w, c, "{{", "}}")
|
sw := generator.NewSnippetWriter(w, c, "{{", "}}")
|
||||||
|
|
||||||
klog.V(5).Infof("processing type %v", t)
|
klog.V(5).Info("processing type ", t)
|
||||||
|
|
||||||
m := map[string]interface{}{
|
m := map[string]interface{}{
|
||||||
"group": namer.IC(g.groupGoName),
|
"group": namer.IC(g.groupGoName),
|
||||||
|
|
|
@ -61,7 +61,7 @@ func (g *factoryGenerator) Imports(c *generator.Context) (imports []string) {
|
||||||
func (g *factoryGenerator) GenerateType(c *generator.Context, t *types.Type, w io.Writer) error {
|
func (g *factoryGenerator) GenerateType(c *generator.Context, t *types.Type, w io.Writer) error {
|
||||||
sw := generator.NewSnippetWriter(w, c, "{{", "}}")
|
sw := generator.NewSnippetWriter(w, c, "{{", "}}")
|
||||||
|
|
||||||
klog.V(5).Infof("processing type %v", t)
|
klog.V(5).Info("processing type ", t)
|
||||||
|
|
||||||
m := map[string]interface{}{
|
m := map[string]interface{}{
|
||||||
"cachingClientGet": c.Universe.Type(types.Name{Package: g.cachingClientSetPackage, Name: "Get"}),
|
"cachingClientGet": c.Universe.Type(types.Name{Package: g.cachingClientSetPackage, Name: "Get"}),
|
||||||
|
|
|
@ -62,7 +62,7 @@ func (g *fakeClientGenerator) Imports(c *generator.Context) (imports []string) {
|
||||||
func (g *fakeClientGenerator) GenerateType(c *generator.Context, t *types.Type, w io.Writer) error {
|
func (g *fakeClientGenerator) GenerateType(c *generator.Context, t *types.Type, w io.Writer) error {
|
||||||
sw := generator.NewSnippetWriter(w, c, "{{", "}}")
|
sw := generator.NewSnippetWriter(w, c, "{{", "}}")
|
||||||
|
|
||||||
klog.V(5).Infof("processing type %v", t)
|
klog.V(5).Info("processing type ", t)
|
||||||
|
|
||||||
m := map[string]interface{}{
|
m := map[string]interface{}{
|
||||||
"clientKey": c.Universe.Type(types.Name{Package: g.clientInjectionPkg, Name: "Key"}),
|
"clientKey": c.Universe.Type(types.Name{Package: g.clientInjectionPkg, Name: "Key"}),
|
||||||
|
|
|
@ -76,7 +76,7 @@ func (g *fakeDuckGenerator) Imports(c *generator.Context) (imports []string) {
|
||||||
func (g *fakeDuckGenerator) GenerateType(c *generator.Context, t *types.Type, w io.Writer) error {
|
func (g *fakeDuckGenerator) GenerateType(c *generator.Context, t *types.Type, w io.Writer) error {
|
||||||
sw := generator.NewSnippetWriter(w, c, "{{", "}}")
|
sw := generator.NewSnippetWriter(w, c, "{{", "}}")
|
||||||
|
|
||||||
klog.V(5).Infof("processing type %v", t)
|
klog.V(5).Info("processing type ", t)
|
||||||
|
|
||||||
m := map[string]interface{}{
|
m := map[string]interface{}{
|
||||||
"withDuck": c.Universe.Type(types.Name{Package: g.duckInjectionPkg, Name: "WithDuck"}),
|
"withDuck": c.Universe.Type(types.Name{Package: g.duckInjectionPkg, Name: "WithDuck"}),
|
||||||
|
|
|
@ -63,7 +63,7 @@ func (g *fakeFactoryGenerator) Imports(c *generator.Context) (imports []string)
|
||||||
func (g *fakeFactoryGenerator) GenerateType(c *generator.Context, t *types.Type, w io.Writer) error {
|
func (g *fakeFactoryGenerator) GenerateType(c *generator.Context, t *types.Type, w io.Writer) error {
|
||||||
sw := generator.NewSnippetWriter(w, c, "{{", "}}")
|
sw := generator.NewSnippetWriter(w, c, "{{", "}}")
|
||||||
|
|
||||||
klog.V(5).Infof("processing type %v", t)
|
klog.V(5).Info("processing type ", t)
|
||||||
|
|
||||||
m := map[string]interface{}{
|
m := map[string]interface{}{
|
||||||
"factoryKey": c.Universe.Type(types.Name{Package: g.factoryInjectionPkg, Name: "Key"}),
|
"factoryKey": c.Universe.Type(types.Name{Package: g.factoryInjectionPkg, Name: "Key"}),
|
||||||
|
|
|
@ -77,7 +77,7 @@ func (g *fakeInformerGenerator) Imports(c *generator.Context) (imports []string)
|
||||||
func (g *fakeInformerGenerator) GenerateType(c *generator.Context, t *types.Type, w io.Writer) error {
|
func (g *fakeInformerGenerator) GenerateType(c *generator.Context, t *types.Type, w io.Writer) error {
|
||||||
sw := generator.NewSnippetWriter(w, c, "{{", "}}")
|
sw := generator.NewSnippetWriter(w, c, "{{", "}}")
|
||||||
|
|
||||||
klog.V(5).Infof("processing type %v", t)
|
klog.V(5).Info("processing type ", t)
|
||||||
|
|
||||||
m := map[string]interface{}{
|
m := map[string]interface{}{
|
||||||
"informerKey": c.Universe.Type(types.Name{Package: g.informerInjectionPkg, Name: "Key"}),
|
"informerKey": c.Universe.Type(types.Name{Package: g.informerInjectionPkg, Name: "Key"}),
|
||||||
|
|
|
@ -76,7 +76,7 @@ func (g *injectionGenerator) Imports(c *generator.Context) (imports []string) {
|
||||||
func (g *injectionGenerator) GenerateType(c *generator.Context, t *types.Type, w io.Writer) error {
|
func (g *injectionGenerator) GenerateType(c *generator.Context, t *types.Type, w io.Writer) error {
|
||||||
sw := generator.NewSnippetWriter(w, c, "{{", "}}")
|
sw := generator.NewSnippetWriter(w, c, "{{", "}}")
|
||||||
|
|
||||||
klog.V(5).Infof("processing type %v", t)
|
klog.V(5).Info("processing type ", t)
|
||||||
|
|
||||||
m := map[string]interface{}{
|
m := map[string]interface{}{
|
||||||
"group": namer.IC(g.groupGoName),
|
"group": namer.IC(g.groupGoName),
|
||||||
|
|
|
@ -63,7 +63,7 @@ func (g *reconcilerControllerGenerator) Imports(c *generator.Context) (imports [
|
||||||
func (g *reconcilerControllerGenerator) GenerateType(c *generator.Context, t *types.Type, w io.Writer) error {
|
func (g *reconcilerControllerGenerator) GenerateType(c *generator.Context, t *types.Type, w io.Writer) error {
|
||||||
sw := generator.NewSnippetWriter(w, c, "{{", "}}")
|
sw := generator.NewSnippetWriter(w, c, "{{", "}}")
|
||||||
|
|
||||||
klog.V(5).Infof("processing type %v", t)
|
klog.V(5).Info("processing type ", t)
|
||||||
|
|
||||||
m := map[string]interface{}{
|
m := map[string]interface{}{
|
||||||
"type": t,
|
"type": t,
|
||||||
|
|
|
@ -60,7 +60,7 @@ func (g *reconcilerControllerStubGenerator) Imports(c *generator.Context) (impor
|
||||||
func (g *reconcilerControllerStubGenerator) GenerateType(c *generator.Context, t *types.Type, w io.Writer) error {
|
func (g *reconcilerControllerStubGenerator) GenerateType(c *generator.Context, t *types.Type, w io.Writer) error {
|
||||||
sw := generator.NewSnippetWriter(w, c, "{{", "}}")
|
sw := generator.NewSnippetWriter(w, c, "{{", "}}")
|
||||||
|
|
||||||
klog.V(5).Infof("processing type %v", t)
|
klog.V(5).Info("processing type ", t)
|
||||||
|
|
||||||
m := map[string]interface{}{
|
m := map[string]interface{}{
|
||||||
"type": t,
|
"type": t,
|
||||||
|
|
|
@ -67,7 +67,7 @@ func (g *reconcilerReconcilerGenerator) Imports(c *generator.Context) (imports [
|
||||||
func (g *reconcilerReconcilerGenerator) GenerateType(c *generator.Context, t *types.Type, w io.Writer) error {
|
func (g *reconcilerReconcilerGenerator) GenerateType(c *generator.Context, t *types.Type, w io.Writer) error {
|
||||||
sw := generator.NewSnippetWriter(w, c, "{{", "}}")
|
sw := generator.NewSnippetWriter(w, c, "{{", "}}")
|
||||||
|
|
||||||
klog.V(5).Infof("processing type %v", t)
|
klog.V(5).Info("processing type ", t)
|
||||||
|
|
||||||
m := map[string]interface{}{
|
m := map[string]interface{}{
|
||||||
"type": t,
|
"type": t,
|
||||||
|
|
|
@ -57,7 +57,7 @@ func (g *reconcilerReconcilerStubGenerator) Imports(c *generator.Context) (impor
|
||||||
func (g *reconcilerReconcilerStubGenerator) GenerateType(c *generator.Context, t *types.Type, w io.Writer) error {
|
func (g *reconcilerReconcilerStubGenerator) GenerateType(c *generator.Context, t *types.Type, w io.Writer) error {
|
||||||
sw := generator.NewSnippetWriter(w, c, "{{", "}}")
|
sw := generator.NewSnippetWriter(w, c, "{{", "}}")
|
||||||
|
|
||||||
klog.V(5).Infof("processing type %v", t)
|
klog.V(5).Info("processing type ", t)
|
||||||
|
|
||||||
m := map[string]interface{}{
|
m := map[string]interface{}{
|
||||||
"type": t,
|
"type": t,
|
||||||
|
|
|
@ -54,7 +54,7 @@ func (g *reconcilerStateGenerator) Imports(c *generator.Context) (imports []stri
|
||||||
func (g *reconcilerStateGenerator) GenerateType(c *generator.Context, t *types.Type, w io.Writer) error {
|
func (g *reconcilerStateGenerator) GenerateType(c *generator.Context, t *types.Type, w io.Writer) error {
|
||||||
sw := generator.NewSnippetWriter(w, c, "{{", "}}")
|
sw := generator.NewSnippetWriter(w, c, "{{", "}}")
|
||||||
|
|
||||||
klog.V(5).Infof("processing type %v", t)
|
klog.V(5).Info("processing type ", t)
|
||||||
|
|
||||||
m := map[string]interface{}{
|
m := map[string]interface{}{
|
||||||
"type": t,
|
"type": t,
|
||||||
|
|
|
@ -239,7 +239,7 @@ func MainWithConfig(ctx context.Context, component string, cfg *rest.Config, cto
|
||||||
// Set up leader election config
|
// Set up leader election config
|
||||||
leaderElectionConfig, err := GetLeaderElectionConfig(ctx)
|
leaderElectionConfig, err := GetLeaderElectionConfig(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Fatalf("Error loading leader election configuration: %v", err)
|
logger.Fatal("Error loading leader election configuration: ", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if !IsHADisabled(ctx) {
|
if !IsHADisabled(ctx) {
|
||||||
|
|
|
@ -200,7 +200,7 @@ func newStackdriverExporter(config *metricsConfig, logger *zap.SugaredLogger) (v
|
||||||
logger.Errorw("Failed to create the Stackdriver exporter: ", zap.Error(err))
|
logger.Errorw("Failed to create the Stackdriver exporter: ", zap.Error(err))
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
logger.Infof("Created Opencensus Stackdriver exporter with config %v", config)
|
logger.Info("Created Opencensus Stackdriver exporter with config ", config)
|
||||||
// We have to return a ResourceExporterFactory here to enable tracking resources, even though we always poll for them.
|
// We have to return a ResourceExporterFactory here to enable tracking resources, even though we always poll for them.
|
||||||
return &pollOnlySDExporter{e},
|
return &pollOnlySDExporter{e},
|
||||||
func(r *resource.Resource) (view.Exporter, error) { return &pollOnlySDExporter{}, nil },
|
func(r *resource.Resource) (view.Exporter, error) { return &pollOnlySDExporter{}, nil },
|
||||||
|
|
|
@ -56,7 +56,7 @@ func NewHandler(logger *zap.SugaredLogger, enableProfiling bool) *Handler {
|
||||||
mux.HandleFunc(pprofPrefix+"symbol", pprof.Symbol)
|
mux.HandleFunc(pprofPrefix+"symbol", pprof.Symbol)
|
||||||
mux.HandleFunc(pprofPrefix+"trace", pprof.Trace)
|
mux.HandleFunc(pprofPrefix+"trace", pprof.Trace)
|
||||||
|
|
||||||
logger.Infof("Profiling enabled: %t", enableProfiling)
|
logger.Info("Profiling enabled: ", enableProfiling)
|
||||||
return &Handler{
|
return &Handler{
|
||||||
enabled: atomic.NewBool(enableProfiling),
|
enabled: atomic.NewBool(enableProfiling),
|
||||||
handler: mux,
|
handler: mux,
|
||||||
|
|
|
@ -57,7 +57,7 @@ func Retrying(rc spoof.ResponseChecker, codes ...int) spoof.ResponseChecker {
|
||||||
for _, code := range codes {
|
for _, code := range codes {
|
||||||
if resp.StatusCode == code {
|
if resp.StatusCode == code {
|
||||||
// Returning (false, nil) causes SpoofingClient.Poll to retry.
|
// Returning (false, nil) causes SpoofingClient.Poll to retry.
|
||||||
// sc.logger.Infof("Retrying for code %v", resp.StatusCode)
|
// sc.logger.Info("Retrying for code ", resp.StatusCode)
|
||||||
return false, nil
|
return false, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -211,7 +211,7 @@ type TimeoutError struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *TimeoutError) Error() string {
|
func (t *TimeoutError) Error() string {
|
||||||
return fmt.Sprintf("timeout getting JSONTrace, most recent error: %v", t.lastErr)
|
return fmt.Sprint("timeout getting JSONTrace, most recent error:", t.lastErr)
|
||||||
}
|
}
|
||||||
|
|
||||||
// jsonTrace gets a trace from Zipkin and returns it. Errors returned from this function should be
|
// jsonTrace gets a trace from Zipkin and returns it. Errors returned from this function should be
|
||||||
|
|
|
@ -90,7 +90,7 @@ func admissionHandler(rootLogger *zap.SugaredLogger, stats StatsReporter, c Admi
|
||||||
|
|
||||||
var review admissionv1.AdmissionReview
|
var review admissionv1.AdmissionReview
|
||||||
if err := json.NewDecoder(r.Body).Decode(&review); err != nil {
|
if err := json.NewDecoder(r.Body).Decode(&review); err != nil {
|
||||||
http.Error(w, fmt.Sprintf("could not decode body: %v", err), http.StatusBadRequest)
|
http.Error(w, fmt.Sprint("could not decode body:", err), http.StatusBadRequest)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -132,7 +132,7 @@ func admissionHandler(rootLogger *zap.SugaredLogger, stats StatsReporter, c Admi
|
||||||
logger.Debugf("AdmissionReview patch={ type: %s, body: %s }", patchType, string(reviewResponse.Patch))
|
logger.Debugf("AdmissionReview patch={ type: %s, body: %s }", patchType, string(reviewResponse.Patch))
|
||||||
|
|
||||||
if err := json.NewEncoder(w).Encode(response); err != nil {
|
if err := json.NewEncoder(w).Encode(response); err != nil {
|
||||||
http.Error(w, fmt.Sprintf("could not encode response: %v", err), http.StatusInternalServerError)
|
http.Error(w, fmt.Sprint("could not encode response:", err), http.StatusInternalServerError)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -83,11 +83,11 @@ func (r *reconciler) reconcileCertificate(ctx context.Context) error {
|
||||||
// Check the expiration date of the certificate to see if it needs to be updated
|
// Check the expiration date of the certificate to see if it needs to be updated
|
||||||
cert, err := tls.X509KeyPair(secret.Data[certresources.ServerCert], secret.Data[certresources.ServerKey])
|
cert, err := tls.X509KeyPair(secret.Data[certresources.ServerCert], secret.Data[certresources.ServerKey])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Warnf("Error creating pem from certificate and key: %v", err)
|
logger.Warn("Error creating pem from certificate and key: ", err)
|
||||||
} else {
|
} else {
|
||||||
certData, err := x509.ParseCertificate(cert.Certificate[0])
|
certData, err := x509.ParseCertificate(cert.Certificate[0])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Errorf("Error parsing certificate: %v", err)
|
logger.Error("Error parsing certificate: ", err)
|
||||||
} else if time.Now().Add(oneWeek).Before(certData.NotAfter) {
|
} else if time.Now().Add(oneWeek).Before(certData.NotAfter) {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -77,7 +77,7 @@ func (ac *reconciler) Reconcile(ctx context.Context, key string) error {
|
||||||
|
|
||||||
secret, err := ac.secretlister.Secrets(system.Namespace()).Get(ac.secretName)
|
secret, err := ac.secretlister.Secrets(system.Namespace()).Get(ac.secretName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Errorf("Error fetching secret: %v", err)
|
logger.Error("Error fetching secret: ", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -100,7 +100,7 @@ func (ac *reconciler) Admit(ctx context.Context, request *admissionv1.AdmissionR
|
||||||
switch request.Operation {
|
switch request.Operation {
|
||||||
case admissionv1.Create, admissionv1.Update:
|
case admissionv1.Create, admissionv1.Update:
|
||||||
default:
|
default:
|
||||||
logger.Infof("Unhandled webhook operation, letting it through %v", request.Operation)
|
logger.Info("Unhandled webhook operation, letting it through ", request.Operation)
|
||||||
return &admissionv1.AdmissionResponse{Allowed: true}
|
return &admissionv1.AdmissionResponse{Allowed: true}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -182,7 +182,7 @@ func (ac *reconciler) validate(ctx context.Context, req *admissionv1.AdmissionRe
|
||||||
|
|
||||||
resourceGVK := corev1.SchemeGroupVersion.WithKind("ConfigMap")
|
resourceGVK := corev1.SchemeGroupVersion.WithKind("ConfigMap")
|
||||||
if gvk != resourceGVK {
|
if gvk != resourceGVK {
|
||||||
logger.Errorf("Unhandled kind: %v", gvk)
|
logger.Error("Unhandled kind: ", gvk)
|
||||||
return fmt.Errorf("unhandled kind: %v", gvk)
|
return fmt.Errorf("unhandled kind: %v", gvk)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -43,7 +43,7 @@ func conversionHandler(rootLogger *zap.SugaredLogger, _ StatsReporter, c Convers
|
||||||
|
|
||||||
var review apixv1.ConversionReview
|
var review apixv1.ConversionReview
|
||||||
if err := json.NewDecoder(r.Body).Decode(&review); err != nil {
|
if err := json.NewDecoder(r.Body).Decode(&review); err != nil {
|
||||||
http.Error(w, fmt.Sprintf("could not decode body: %v", err), http.StatusBadRequest)
|
http.Error(w, fmt.Sprint("could not decode body:", err), http.StatusBadRequest)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -62,7 +62,7 @@ func conversionHandler(rootLogger *zap.SugaredLogger, _ StatsReporter, c Convers
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := json.NewEncoder(w).Encode(response); err != nil {
|
if err := json.NewEncoder(w).Encode(response); err != nil {
|
||||||
http.Error(w, fmt.Sprintf("could not encode response: %v", err), http.StatusInternalServerError)
|
http.Error(w, fmt.Sprint("could not encode response:", err), http.StatusInternalServerError)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -164,7 +164,7 @@ func (ac *Reconciler) Reconcile(ctx context.Context, key string) error {
|
||||||
// Look up the webhook secret, and fetch the CA cert bundle.
|
// Look up the webhook secret, and fetch the CA cert bundle.
|
||||||
secret, err := ac.SecretLister.Secrets(system.Namespace()).Get(ac.SecretName)
|
secret, err := ac.SecretLister.Secrets(system.Namespace()).Get(ac.SecretName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logging.FromContext(ctx).Errorf("Error fetching secret: %v", err)
|
logging.FromContext(ctx).Error("Error fetching secret: ", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
caCert, ok := secret.Data[certresources.CACert]
|
caCert, ok := secret.Data[certresources.CACert]
|
||||||
|
@ -186,7 +186,7 @@ func (ac *Reconciler) Admit(ctx context.Context, request *admissionv1.AdmissionR
|
||||||
switch request.Operation {
|
switch request.Operation {
|
||||||
case admissionv1.Create, admissionv1.Update:
|
case admissionv1.Create, admissionv1.Update:
|
||||||
default:
|
default:
|
||||||
logging.FromContext(ctx).Infof("Unhandled webhook operation, letting it through %v", request.Operation)
|
logging.FromContext(ctx).Info("Unhandled webhook operation, letting it through ", request.Operation)
|
||||||
return &admissionv1.AdmissionResponse{Allowed: true}
|
return &admissionv1.AdmissionResponse{Allowed: true}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -110,7 +110,7 @@ func (r *BaseReconciler) Reconcile(ctx context.Context, key string) error {
|
||||||
// Convert the namespace/name string into a distinct namespace and name
|
// Convert the namespace/name string into a distinct namespace and name
|
||||||
namespace, name, err := cache.SplitMetaNamespaceKey(key)
|
namespace, name, err := cache.SplitMetaNamespaceKey(key)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logging.FromContext(ctx).Errorf("invalid resource key: %s", key)
|
logging.FromContext(ctx).Error("invalid resource key: ", key)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -207,7 +207,7 @@ func (r *BaseReconciler) ReconcileDeletion(ctx context.Context, fb Bindable) err
|
||||||
|
|
||||||
// If it is our turn to finalize the Binding, then first undo the effect
|
// If it is our turn to finalize the Binding, then first undo the effect
|
||||||
// of our Binding on the resource.
|
// of our Binding on the resource.
|
||||||
logging.FromContext(ctx).Infof("Removing the binding for %s", fb.GetName())
|
logging.FromContext(ctx).Info("Removing the binding for ", fb.GetName())
|
||||||
if err := r.ReconcileSubject(ctx, fb, fb.Undo); apierrs.IsNotFound(err) || apierrs.IsForbidden(err) {
|
if err := r.ReconcileSubject(ctx, fb, fb.Undo); apierrs.IsNotFound(err) || apierrs.IsForbidden(err) {
|
||||||
// If the subject has been deleted, then there is nothing to undo.
|
// If the subject has been deleted, then there is nothing to undo.
|
||||||
} else if err != nil {
|
} else if err != nil {
|
||||||
|
@ -279,10 +279,10 @@ func (r *BaseReconciler) labelNamespace(ctx context.Context, subject tracker.Ref
|
||||||
|
|
||||||
namespaceObject, err := r.NamespaceLister.Get(subject.Namespace)
|
namespaceObject, err := r.NamespaceLister.Get(subject.Namespace)
|
||||||
if apierrs.IsNotFound(err) {
|
if apierrs.IsNotFound(err) {
|
||||||
logging.FromContext(ctx).Infof("Error getting namespace (not found): %v", err)
|
logging.FromContext(ctx).Info("Error getting namespace (not found): ", err)
|
||||||
return err
|
return err
|
||||||
} else if err != nil {
|
} else if err != nil {
|
||||||
logging.FromContext(ctx).Infof("Error getting namespace: %v", err)
|
logging.FromContext(ctx).Info("Error getting namespace: ", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -435,19 +435,19 @@ func (r *BaseReconciler) ReconcileSubject(ctx context.Context, fb Bindable, muta
|
||||||
func (r *BaseReconciler) UpdateStatus(ctx context.Context, desired Bindable) error {
|
func (r *BaseReconciler) UpdateStatus(ctx context.Context, desired Bindable) error {
|
||||||
actual, err := r.Get(desired.GetNamespace(), desired.GetName())
|
actual, err := r.Get(desired.GetNamespace(), desired.GetName())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logging.FromContext(ctx).Errorf("Error fetching actual: %v", err)
|
logging.FromContext(ctx).Error("Error fetching actual: ", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Convert to unstructured for use with the dynamic client.
|
// Convert to unstructured for use with the dynamic client.
|
||||||
ua, err := duck.ToUnstructured(actual)
|
ua, err := duck.ToUnstructured(actual)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logging.FromContext(ctx).Errorf("Error converting actual: %v", err)
|
logging.FromContext(ctx).Error("Error converting actual: ", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
ud, err := duck.ToUnstructured(desired)
|
ud, err := duck.ToUnstructured(desired)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logging.FromContext(ctx).Errorf("Error converting desired: %v", err)
|
logging.FromContext(ctx).Error("Error converting desired: ", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -56,7 +56,7 @@ func (r *reconciler) Convert(
|
||||||
for _, obj := range req.Objects {
|
for _, obj := range req.Objects {
|
||||||
converted, err := r.convert(ctx, obj, req.DesiredAPIVersion)
|
converted, err := r.convert(ctx, obj, req.DesiredAPIVersion)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logging.FromContext(ctx).Errorf("Conversion failed: %v", err)
|
logging.FromContext(ctx).Error("Conversion failed: ", err)
|
||||||
res.Result.Status = metav1.StatusFailure
|
res.Result.Status = metav1.StatusFailure
|
||||||
res.Result.Message = err.Error()
|
res.Result.Message = err.Error()
|
||||||
break
|
break
|
||||||
|
|
|
@ -71,7 +71,7 @@ func (r *reconciler) Reconcile(ctx context.Context, key string) error {
|
||||||
// Look up the webhook secret, and fetch the CA cert bundle.
|
// Look up the webhook secret, and fetch the CA cert bundle.
|
||||||
secret, err := r.secretLister.Secrets(system.Namespace()).Get(r.secretName)
|
secret, err := r.secretLister.Secrets(system.Namespace()).Get(r.secretName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Errorf("Error fetching secret: %v", err)
|
logger.Error("Error fetching secret: ", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -87,7 +87,7 @@ func (ac *reconciler) Reconcile(ctx context.Context, key string) error {
|
||||||
// Look up the webhook secret, and fetch the CA cert bundle.
|
// Look up the webhook secret, and fetch the CA cert bundle.
|
||||||
secret, err := ac.secretlister.Secrets(system.Namespace()).Get(ac.secretName)
|
secret, err := ac.secretlister.Secrets(system.Namespace()).Get(ac.secretName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Errorf("Error fetching secret: %v", err)
|
logger.Error("Error fetching secret: ", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
caCert, ok := secret.Data[certresources.CACert]
|
caCert, ok := secret.Data[certresources.CACert]
|
||||||
|
@ -114,7 +114,7 @@ func (ac *reconciler) Admit(ctx context.Context, request *admissionv1.AdmissionR
|
||||||
switch request.Operation {
|
switch request.Operation {
|
||||||
case admissionv1.Create, admissionv1.Update:
|
case admissionv1.Create, admissionv1.Update:
|
||||||
default:
|
default:
|
||||||
logger.Infof("Unhandled webhook operation, letting it through %v", request.Operation)
|
logger.Info("Unhandled webhook operation, letting it through ", request.Operation)
|
||||||
return &admissionv1.AdmissionResponse{Allowed: true}
|
return &admissionv1.AdmissionResponse{Allowed: true}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -228,7 +228,7 @@ func (ac *reconciler) mutate(ctx context.Context, req *admissionv1.AdmissionRequ
|
||||||
logger := logging.FromContext(ctx)
|
logger := logging.FromContext(ctx)
|
||||||
handler, ok := ac.handlers[gvk]
|
handler, ok := ac.handlers[gvk]
|
||||||
if !ok {
|
if !ok {
|
||||||
logger.Errorf("Unhandled kind: %v", gvk)
|
logger.Error("Unhandled kind: ", gvk)
|
||||||
return nil, fmt.Errorf("unhandled kind: %v", gvk)
|
return nil, fmt.Errorf("unhandled kind: %v", gvk)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -99,7 +99,7 @@ func (ac *reconciler) decodeRequestAndPrepareContext(
|
||||||
logger := logging.FromContext(ctx)
|
logger := logging.FromContext(ctx)
|
||||||
handler, ok := ac.handlers[gvk]
|
handler, ok := ac.handlers[gvk]
|
||||||
if !ok {
|
if !ok {
|
||||||
logger.Errorf("Unhandled kind: %v", gvk)
|
logger.Error("Unhandled kind: ", gvk)
|
||||||
return ctx, nil, fmt.Errorf("unhandled kind: %v", gvk)
|
return ctx, nil, fmt.Errorf("unhandled kind: %v", gvk)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -164,7 +164,7 @@ func validate(ctx context.Context, resource resourcesemantics.GenericCRD, req *a
|
||||||
case admissionv1.Delete:
|
case admissionv1.Delete:
|
||||||
return nil // Validation handled by optional Callback, but not validatable.
|
return nil // Validation handled by optional Callback, but not validatable.
|
||||||
default:
|
default:
|
||||||
logger.Infof("Unhandled webhook validation operation, letting it through %v", req.Operation)
|
logger.Info("Unhandled webhook validation operation, letting it through ", req.Operation)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -140,7 +140,7 @@ func New(
|
||||||
}
|
}
|
||||||
|
|
||||||
webhook.mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
|
webhook.mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
|
||||||
http.Error(w, fmt.Sprintf("no controller registered for: %s", r.URL.Path), http.StatusBadRequest)
|
http.Error(w, fmt.Sprint("no controller registered for: ", r.URL.Path), http.StatusBadRequest)
|
||||||
})
|
})
|
||||||
|
|
||||||
for _, controller := range controllers {
|
for _, controller := range controllers {
|
||||||
|
|
Loading…
Reference in New Issue