go - try - error redefinido bandera glog
kubectl get nodes (4)
Estoy usando glog flag log_dir en mi proyecto. Recientemente importé la biblioteca kubernetes y comencé a tener este pánico en el tiempo de ejecución
panic: ./aaa.test indicador redefinido: log_dir
May 16 23:51:35 ecmdev03-core01 docker[26867]: goroutine 1 [running]:
May 16 23:51:35 ecmdev03-core01 docker[26867]: panic(0x15ebc60, 0xc8201aae90)
May 16 23:51:35 ecmdev03-core01 docker[26867]: /usr/local/go/src/runtime/panic.go:464 +0x3e6
May 16 23:51:35 ecmdev03-core01 docker[26867]: flag.(*FlagSet).Var(0xc8200160c0, 0x7f561118c1c0, 0xc8201aae40, 0x1bddd70, 0x7, 0x1d75860, 0x2f)
May 16 23:51:35 ecmdev03-core01 docker[26867]: /usr/local/go/src/flag/flag.go:776 +0x454
May 16 23:51:35 ecmdev03-core01 docker[26867]: flag.(*FlagSet).StringVar(0xc8200160c0, 0xc8201aae40, 0x1bddd70, 0x7, 0x0, 0x0, 0x1d75860, 0x2f)
May 16 23:51:35 ecmdev03-core01 docker[26867]: /usr/local/go/src/flag/flag.go:679 +0xc7
May 16 23:51:35 ecmdev03-core01 docker[26867]: flag.(*FlagSet).String(0xc8200160c0, 0x1bddd70, 0x7, 0x0, 0x0, 0x1d75860, 0x2f, 0xc8201aae30)
May 16 23:51:35 ecmdev03-core01 docker[26867]: /usr/local/go/src/flag/flag.go:692 +0x83
May 16 23:51:35 ecmdev03-core01 docker[26867]: flag.String(0x1bddd70, 0x7, 0x0, 0x0, 0x1d75860, 0x2f, 0xba3950)
May 16 23:51:35 ecmdev03-core01 docker[26867]: /usr/local/go/src/flag/flag.go:699 +0x5f
May 16 23:51:35 ecmdev03-core01 docker[26867]: k8s.io/kubernetes/vendor/github.com/golang/glog.init()
May 16 23:51:35 ecmdev03-core01 docker[26867]: /src/ecm_infra/go/src/k8s.io/kubernetes/vendor/github.com/golang/glog/glog_file.go:41 +0x13e
May 16 23:51:35 ecmdev03-core01 docker[26867]: k8s.io/kubernetes/pkg/labels.init()
May 16 23:51:35 ecmdev03-core01 docker[26867]: /src/ecm_infra/go/src/k8s.io/kubernetes/pkg/labels/selector.go:810 +0x6b
May 16 23:51:35 ecmdev03-core01 docker[26867]: k8s.io/kubernetes/pkg/api/unversioned.init()
May 16 23:51:35 ecmdev03-core01 docker[26867]: /src/ecm_infra/go/src/k8s.io/kubernetes/pkg/api/unversioned/well_known_labels.go:30 +0x6f
May 16 23:51:35 ecmdev03-core01 docker[26867]: k8s.io/kubernetes/pkg/api.init()
May 16 23:51:35 ecmdev03-core01 docker[26867]: /src/ecm_infra/go/src/k8s.io/kubernetes/pkg/api/types.go:2731 +0x64
Parece que la biblioteca de glog que es vendida por k8s está en conflicto con la que estoy usando. ¿La introducción del directorio de proveedores es una solución para este problema? ¿Debo usar bibliotecas de vendedores como glide, govendor, gb, etc? Si es así, ¿cuál es el preferido?
Ese error no tiene que ver con bibliotecas en conflicto, es un indicador en conflicto ( log_dir
). Significa que estás agregando una bandera "--log_dir", y la biblioteca de glog utilizada por kubernetes también tiene una bandera log_dir
. Este es un problema con la adición de indicadores en las bibliotecas durante el inicio del paquete. Lamentablemente la venta no cambiará nada. Es posible que pueda evitar esto al manipular el flag.CommandLine
variable global de la línea de flag.CommandLine
para apuntar a un flag.FlagSet
diferente. flag.FlagSet
al importar su biblioteca de registros o kubernetes, pero eso será complicado ya que depende del orden de importación.
Estaba viendo la flag redefined: log_dir
error flag redefined: log_dir
y la traza de la pila apuntaban a glog/glog_file.go:41 +0xd3
.
La causa raíz del problema fue el GOPATH
.
Tuve dos copias del mismo repositorio en diferentes lugares. Al intentar ejecutar pruebas en una de las copias, el paquete go fue seleccionado del otro repositorio. Así que tenía dos definiciones de todo en glog
.
Cambié el nombre del otro repositorio a un nombre nuevo y luego comenzó a funcionar.
Por lo tanto, compruebe su GOPATH
y asegúrese de que no está importando bibliotecas de otro lugar.
Me enfrenté a un problema similar cuando vendí mis dependencias usando glide.
Según https://github.com/kubernetes/kubernetes/issues/25572 kubernetes no tiene un glide.lock / glide.yml, el aplanamiento de la dependencia no se produce y al final el glog se define dos veces desde que el proveedor / k8s.io / kubernetes / vendedor también se incluye.
La solución del enlace mencionado anteriormente me funcionó bien:
glide install --strip-vendor --strip-vcs
Utilizo la biblioteca k8s y la marca de cara flag redefined: log_dir
problema flag redefined: log_dir
. Encontré que varios paquetes de kubernetes no están en mi proveedor. govendor add
, el govendor add
y luego se solucionó.
Supongo que se construyeron dos copias de glog (una en mi carpeta de proveedores, una en k8s.io/kubernetes/vendor en mi $ GOPATH) cuando esos paquetes no se encuentran en mi carpeta de proveedores.
¿Cómo encontrar paquetes faltantes? Utilizo la forma estúpida, cambio el nombre de $ GOPATH / src / k8s.io a otra cosa y compilo mi proyecto, vea lo que no se encontró. Luego agréguelo ~