mirror of
https://github.com/ceph/ceph-csi.git
synced 2025-06-13 10:33:35 +00:00
rebase: update kubernetes to 1.30
updating kubernetes to 1.30 release Signed-off-by: Madhu Rajanna <madhupr007@gmail.com>
This commit is contained in:
committed by
mergify[bot]
parent
62ddcf715b
commit
e727bd351e
154
vendor/k8s.io/klog/v2/textlogger/options.go
generated
vendored
Normal file
154
vendor/k8s.io/klog/v2/textlogger/options.go
generated
vendored
Normal file
@ -0,0 +1,154 @@
|
||||
/*
|
||||
Copyright 2021 The Kubernetes Authors.
|
||||
|
||||
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 textlogger
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"io"
|
||||
"os"
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
"k8s.io/klog/v2/internal/verbosity"
|
||||
)
|
||||
|
||||
// Config influences logging in a text logger. To make this configurable via
|
||||
// command line flags, instantiate this once per program and use AddFlags to
|
||||
// bind command line flags to the instance before passing it to NewTestContext.
|
||||
//
|
||||
// Must be constructed with NewConfig.
|
||||
type Config struct {
|
||||
vstate *verbosity.VState
|
||||
co configOptions
|
||||
}
|
||||
|
||||
// Verbosity returns a value instance that can be used to query (via String) or
|
||||
// modify (via Set) the verbosity threshold. This is thread-safe and can be
|
||||
// done at runtime.
|
||||
func (c *Config) Verbosity() flag.Value {
|
||||
return c.vstate.V()
|
||||
}
|
||||
|
||||
// VModule returns a value instance that can be used to query (via String) or
|
||||
// modify (via Set) the vmodule settings. This is thread-safe and can be done
|
||||
// at runtime.
|
||||
func (c *Config) VModule() flag.Value {
|
||||
return c.vstate.VModule()
|
||||
}
|
||||
|
||||
// ConfigOption implements functional parameters for NewConfig.
|
||||
type ConfigOption func(co *configOptions)
|
||||
|
||||
type configOptions struct {
|
||||
verbosityFlagName string
|
||||
vmoduleFlagName string
|
||||
verbosityDefault int
|
||||
fixedTime *time.Time
|
||||
unwind func(int) (string, int)
|
||||
output io.Writer
|
||||
}
|
||||
|
||||
// VerbosityFlagName overrides the default -v for the verbosity level.
|
||||
func VerbosityFlagName(name string) ConfigOption {
|
||||
return func(co *configOptions) {
|
||||
|
||||
co.verbosityFlagName = name
|
||||
}
|
||||
}
|
||||
|
||||
// VModulFlagName overrides the default -vmodule for the per-module
|
||||
// verbosity levels.
|
||||
func VModuleFlagName(name string) ConfigOption {
|
||||
return func(co *configOptions) {
|
||||
co.vmoduleFlagName = name
|
||||
}
|
||||
}
|
||||
|
||||
// Verbosity overrides the default verbosity level of 0.
|
||||
// See https://github.com/kubernetes/community/blob/9406b4352fe2d5810cb21cc3cb059ce5886de157/contributors/devel/sig-instrumentation/logging.md#logging-conventions
|
||||
// for log level conventions in Kubernetes.
|
||||
func Verbosity(level int) ConfigOption {
|
||||
return func(co *configOptions) {
|
||||
co.verbosityDefault = level
|
||||
}
|
||||
}
|
||||
|
||||
// Output overrides stderr as the output stream.
|
||||
func Output(output io.Writer) ConfigOption {
|
||||
return func(co *configOptions) {
|
||||
co.output = output
|
||||
}
|
||||
}
|
||||
|
||||
// FixedTime overrides the actual time with a fixed time. Useful only for testing.
|
||||
//
|
||||
// # Experimental
|
||||
//
|
||||
// Notice: This function is EXPERIMENTAL and may be changed or removed in a
|
||||
// later release.
|
||||
func FixedTime(ts time.Time) ConfigOption {
|
||||
return func(co *configOptions) {
|
||||
co.fixedTime = &ts
|
||||
}
|
||||
}
|
||||
|
||||
// Backtrace overrides the default mechanism for determining the call site.
|
||||
// The callback is invoked with the number of function calls between itself
|
||||
// and the call site. It must return the file name and line number. An empty
|
||||
// file name indicates that the information is unknown.
|
||||
//
|
||||
// # Experimental
|
||||
//
|
||||
// Notice: This function is EXPERIMENTAL and may be changed or removed in a
|
||||
// later release.
|
||||
func Backtrace(unwind func(skip int) (filename string, line int)) ConfigOption {
|
||||
return func(co *configOptions) {
|
||||
co.unwind = unwind
|
||||
}
|
||||
}
|
||||
|
||||
// NewConfig returns a configuration with recommended defaults and optional
|
||||
// modifications. Command line flags are not bound to any FlagSet yet.
|
||||
func NewConfig(opts ...ConfigOption) *Config {
|
||||
c := &Config{
|
||||
vstate: verbosity.New(),
|
||||
co: configOptions{
|
||||
verbosityFlagName: "v",
|
||||
vmoduleFlagName: "vmodule",
|
||||
verbosityDefault: 0,
|
||||
unwind: runtimeBacktrace,
|
||||
output: os.Stderr,
|
||||
},
|
||||
}
|
||||
for _, opt := range opts {
|
||||
opt(&c.co)
|
||||
}
|
||||
|
||||
// Cannot fail for this input.
|
||||
_ = c.Verbosity().Set(strconv.FormatInt(int64(c.co.verbosityDefault), 10))
|
||||
return c
|
||||
}
|
||||
|
||||
// AddFlags registers the command line flags that control the configuration.
|
||||
//
|
||||
// The default flag names are the same as in klog, so unless those defaults
|
||||
// are changed, either klog.InitFlags or Config.AddFlags can be used for the
|
||||
// same flag set, but not both.
|
||||
func (c *Config) AddFlags(fs *flag.FlagSet) {
|
||||
fs.Var(c.Verbosity(), c.co.verbosityFlagName, "number for the log level verbosity of the testing logger")
|
||||
fs.Var(c.VModule(), c.co.vmoduleFlagName, "comma-separated list of pattern=N log level settings for files matching the patterns")
|
||||
}
|
187
vendor/k8s.io/klog/v2/textlogger/textlogger.go
generated
vendored
Normal file
187
vendor/k8s.io/klog/v2/textlogger/textlogger.go
generated
vendored
Normal file
@ -0,0 +1,187 @@
|
||||
/*
|
||||
Copyright 2019 The Kubernetes Authors.
|
||||
Copyright 2020 Intel Coporation.
|
||||
|
||||
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 textlogger contains an implementation of the logr interface which is
|
||||
// producing the exact same output as klog. It does not route output through
|
||||
// klog (i.e. ignores [k8s.io/klog/v2.InitFlags]). Instead, all settings must be
|
||||
// configured through its own [NewConfig] and [Config.AddFlags].
|
||||
package textlogger
|
||||
|
||||
import (
|
||||
"runtime"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/go-logr/logr"
|
||||
|
||||
"k8s.io/klog/v2/internal/buffer"
|
||||
"k8s.io/klog/v2/internal/serialize"
|
||||
"k8s.io/klog/v2/internal/severity"
|
||||
"k8s.io/klog/v2/internal/verbosity"
|
||||
)
|
||||
|
||||
var (
|
||||
// TimeNow is used to retrieve the current time. May be changed for testing.
|
||||
TimeNow = time.Now
|
||||
)
|
||||
|
||||
const (
|
||||
// nameKey is used to log the `WithName` values as an additional attribute.
|
||||
nameKey = "logger"
|
||||
)
|
||||
|
||||
// NewLogger constructs a new logger.
|
||||
//
|
||||
// Verbosity can be modified at any time through the Config.V and
|
||||
// Config.VModule API.
|
||||
func NewLogger(c *Config) logr.Logger {
|
||||
return logr.New(&tlogger{
|
||||
values: nil,
|
||||
config: c,
|
||||
})
|
||||
}
|
||||
|
||||
type tlogger struct {
|
||||
callDepth int
|
||||
|
||||
// hasPrefix is true if the first entry in values is the special
|
||||
// nameKey key/value. Such an entry gets added and later updated in
|
||||
// WithName.
|
||||
hasPrefix bool
|
||||
|
||||
values []interface{}
|
||||
groups string
|
||||
config *Config
|
||||
}
|
||||
|
||||
func (l *tlogger) Init(info logr.RuntimeInfo) {
|
||||
l.callDepth = info.CallDepth
|
||||
}
|
||||
|
||||
func (l *tlogger) WithCallDepth(depth int) logr.LogSink {
|
||||
newLogger := *l
|
||||
newLogger.callDepth += depth
|
||||
return &newLogger
|
||||
}
|
||||
|
||||
func (l *tlogger) Enabled(level int) bool {
|
||||
return l.config.vstate.Enabled(verbosity.Level(level), 1+l.callDepth)
|
||||
}
|
||||
|
||||
func (l *tlogger) Info(_ int, msg string, kvList ...interface{}) {
|
||||
l.print(nil, severity.InfoLog, msg, kvList)
|
||||
}
|
||||
|
||||
func (l *tlogger) Error(err error, msg string, kvList ...interface{}) {
|
||||
l.print(err, severity.ErrorLog, msg, kvList)
|
||||
}
|
||||
|
||||
func (l *tlogger) print(err error, s severity.Severity, msg string, kvList []interface{}) {
|
||||
// Determine caller.
|
||||
// +1 for this frame, +1 for Info/Error.
|
||||
skip := l.callDepth + 2
|
||||
file, line := l.config.co.unwind(skip)
|
||||
if file == "" {
|
||||
file = "???"
|
||||
line = 1
|
||||
} else if slash := strings.LastIndex(file, "/"); slash >= 0 {
|
||||
file = file[slash+1:]
|
||||
}
|
||||
l.printWithInfos(file, line, time.Now(), err, s, msg, kvList)
|
||||
}
|
||||
|
||||
func runtimeBacktrace(skip int) (string, int) {
|
||||
_, file, line, ok := runtime.Caller(skip + 1)
|
||||
if !ok {
|
||||
return "", 0
|
||||
}
|
||||
return file, line
|
||||
}
|
||||
|
||||
func (l *tlogger) printWithInfos(file string, line int, now time.Time, err error, s severity.Severity, msg string, kvList []interface{}) {
|
||||
// Only create a new buffer if we don't have one cached.
|
||||
b := buffer.GetBuffer()
|
||||
defer buffer.PutBuffer(b)
|
||||
|
||||
// Format header.
|
||||
if l.config.co.fixedTime != nil {
|
||||
now = *l.config.co.fixedTime
|
||||
}
|
||||
b.FormatHeader(s, file, line, now)
|
||||
|
||||
// The message is always quoted, even if it contains line breaks.
|
||||
// If developers want multi-line output, they should use a small, fixed
|
||||
// message and put the multi-line output into a value.
|
||||
b.WriteString(strconv.Quote(msg))
|
||||
if err != nil {
|
||||
serialize.KVFormat(&b.Buffer, "err", err)
|
||||
}
|
||||
serialize.MergeAndFormatKVs(&b.Buffer, l.values, kvList)
|
||||
if b.Len() == 0 || b.Bytes()[b.Len()-1] != '\n' {
|
||||
b.WriteByte('\n')
|
||||
}
|
||||
_, _ = l.config.co.output.Write(b.Bytes())
|
||||
}
|
||||
|
||||
func (l *tlogger) WriteKlogBuffer(data []byte) {
|
||||
_, _ = l.config.co.output.Write(data)
|
||||
}
|
||||
|
||||
// WithName returns a new logr.Logger with the specified name appended. klogr
|
||||
// uses '/' characters to separate name elements. Callers should not pass '/'
|
||||
// in the provided name string, but this library does not actually enforce that.
|
||||
func (l *tlogger) WithName(name string) logr.LogSink {
|
||||
clone := *l
|
||||
if l.hasPrefix {
|
||||
// Copy slice and modify value. No length checks and type
|
||||
// assertions are needed because hasPrefix is only true if the
|
||||
// first two elements exist and are key/value strings.
|
||||
v := make([]interface{}, 0, len(l.values))
|
||||
v = append(v, l.values...)
|
||||
prefix, _ := v[1].(string)
|
||||
v[1] = prefix + "." + name
|
||||
clone.values = v
|
||||
} else {
|
||||
// Preprend new key/value pair.
|
||||
v := make([]interface{}, 0, 2+len(l.values))
|
||||
v = append(v, nameKey, name)
|
||||
v = append(v, l.values...)
|
||||
clone.values = v
|
||||
clone.hasPrefix = true
|
||||
}
|
||||
return &clone
|
||||
}
|
||||
|
||||
func (l *tlogger) WithValues(kvList ...interface{}) logr.LogSink {
|
||||
clone := *l
|
||||
clone.values = serialize.WithValues(l.values, kvList)
|
||||
return &clone
|
||||
}
|
||||
|
||||
// KlogBufferWriter is implemented by the textlogger LogSink.
|
||||
type KlogBufferWriter interface {
|
||||
// WriteKlogBuffer takes a pre-formatted buffer prepared by klog and
|
||||
// writes it unchanged to the output stream. Can be used with
|
||||
// klog.WriteKlogBuffer when setting a logger through
|
||||
// klog.SetLoggerWithOptions.
|
||||
WriteKlogBuffer([]byte)
|
||||
}
|
||||
|
||||
var _ logr.LogSink = &tlogger{}
|
||||
var _ logr.CallDepthLogSink = &tlogger{}
|
||||
var _ KlogBufferWriter = &tlogger{}
|
52
vendor/k8s.io/klog/v2/textlogger/textlogger_slog.go
generated
vendored
Normal file
52
vendor/k8s.io/klog/v2/textlogger/textlogger_slog.go
generated
vendored
Normal file
@ -0,0 +1,52 @@
|
||||
//go:build go1.21
|
||||
// +build go1.21
|
||||
|
||||
/*
|
||||
Copyright 2023 The Kubernetes Authors.
|
||||
|
||||
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 textlogger
|
||||
|
||||
import (
|
||||
"context"
|
||||
"log/slog"
|
||||
|
||||
"github.com/go-logr/logr"
|
||||
|
||||
"k8s.io/klog/v2/internal/serialize"
|
||||
"k8s.io/klog/v2/internal/sloghandler"
|
||||
)
|
||||
|
||||
func (l *tlogger) Handle(ctx context.Context, record slog.Record) error {
|
||||
return sloghandler.Handle(ctx, record, l.groups, l.printWithInfos)
|
||||
}
|
||||
|
||||
func (l *tlogger) WithAttrs(attrs []slog.Attr) logr.SlogSink {
|
||||
clone := *l
|
||||
clone.values = serialize.WithValues(l.values, sloghandler.Attrs2KVList(l.groups, attrs))
|
||||
return &clone
|
||||
}
|
||||
|
||||
func (l *tlogger) WithGroup(name string) logr.SlogSink {
|
||||
clone := *l
|
||||
if clone.groups != "" {
|
||||
clone.groups += "." + name
|
||||
} else {
|
||||
clone.groups = name
|
||||
}
|
||||
return &clone
|
||||
}
|
||||
|
||||
var _ logr.SlogSink = &tlogger{}
|
Reference in New Issue
Block a user