Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
K
k3s
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Jacklull
k3s
Commits
349cd3b8
Commit
349cd3b8
authored
Mar 11, 2024
by
Brad Davidson
Committed by
Brad Davidson
Apr 11, 2024
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Move error response generation code into util
Signed-off-by:
Brad Davidson
<
brad.davidson@rancher.com
>
(cherry picked from commit
7a2a2d07
)
parent
01461afd
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
91 additions
and
100 deletions
+91
-100
tunnel.go
pkg/daemons/control/tunnel.go
+3
-28
auth.go
pkg/server/auth.go
+6
-33
router.go
pkg/server/router.go
+11
-39
apierrors.go
pkg/util/apierrors.go
+71
-0
No files found.
pkg/daemons/control/tunnel.go
View file @
349cd3b8
...
@@ -13,7 +13,6 @@ import (
...
@@ -13,7 +13,6 @@ import (
"github.com/k3s-io/k3s/pkg/daemons/config"
"github.com/k3s-io/k3s/pkg/daemons/config"
"github.com/k3s-io/k3s/pkg/daemons/control/proxy"
"github.com/k3s-io/k3s/pkg/daemons/control/proxy"
"github.com/k3s-io/k3s/pkg/generated/clientset/versioned/scheme"
"github.com/k3s-io/k3s/pkg/nodeconfig"
"github.com/k3s-io/k3s/pkg/nodeconfig"
"github.com/k3s-io/k3s/pkg/util"
"github.com/k3s-io/k3s/pkg/util"
"github.com/k3s-io/k3s/pkg/version"
"github.com/k3s-io/k3s/pkg/version"
...
@@ -22,10 +21,6 @@ import (
...
@@ -22,10 +21,6 @@ import (
"github.com/sirupsen/logrus"
"github.com/sirupsen/logrus"
"github.com/yl2chen/cidranger"
"github.com/yl2chen/cidranger"
v1
"k8s.io/api/core/v1"
v1
"k8s.io/api/core/v1"
apierrors
"k8s.io/apimachinery/pkg/api/errors"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/apiserver/pkg/endpoints/handlers/responsewriters"
"k8s.io/apiserver/pkg/endpoints/request"
"k8s.io/apiserver/pkg/endpoints/request"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/kubernetes"
)
)
...
@@ -173,29 +168,20 @@ func (t *TunnelServer) onChangePod(podName string, pod *v1.Pod) (*v1.Pod, error)
...
@@ -173,29 +168,20 @@ func (t *TunnelServer) onChangePod(podName string, pod *v1.Pod) (*v1.Pod, error)
func
(
t
*
TunnelServer
)
serveConnect
(
resp
http
.
ResponseWriter
,
req
*
http
.
Request
)
{
func
(
t
*
TunnelServer
)
serveConnect
(
resp
http
.
ResponseWriter
,
req
*
http
.
Request
)
{
bconn
,
err
:=
t
.
dialBackend
(
req
.
Context
(),
req
.
Host
)
bconn
,
err
:=
t
.
dialBackend
(
req
.
Context
(),
req
.
Host
)
if
err
!=
nil
{
if
err
!=
nil
{
responsewriters
.
ErrorNegotiated
(
util
.
SendError
(
err
,
resp
,
req
,
http
.
StatusBadGateway
)
newBadGateway
(
err
.
Error
()),
scheme
.
Codecs
.
WithoutConversion
(),
schema
.
GroupVersion
{},
resp
,
req
,
)
return
return
}
}
hijacker
,
ok
:=
resp
.
(
http
.
Hijacker
)
hijacker
,
ok
:=
resp
.
(
http
.
Hijacker
)
if
!
ok
{
if
!
ok
{
responsewriters
.
ErrorNegotiated
(
util
.
SendError
(
errors
.
New
(
"hijacking not supported"
),
resp
,
req
,
http
.
StatusInternalServerError
)
apierrors
.
NewInternalError
(
errors
.
New
(
"hijacking not supported"
)),
scheme
.
Codecs
.
WithoutConversion
(),
schema
.
GroupVersion
{},
resp
,
req
,
)
return
return
}
}
resp
.
WriteHeader
(
http
.
StatusOK
)
resp
.
WriteHeader
(
http
.
StatusOK
)
rconn
,
bufrw
,
err
:=
hijacker
.
Hijack
()
rconn
,
bufrw
,
err
:=
hijacker
.
Hijack
()
if
err
!=
nil
{
if
err
!=
nil
{
responsewriters
.
ErrorNegotiated
(
util
.
SendError
(
err
,
resp
,
req
,
http
.
StatusInternalServerError
)
apierrors
.
NewInternalError
(
err
),
scheme
.
Codecs
.
WithoutConversion
(),
schema
.
GroupVersion
{},
resp
,
req
,
)
return
return
}
}
...
@@ -301,14 +287,3 @@ func (crw *connReadWriteCloser) Close() (err error) {
...
@@ -301,14 +287,3 @@ func (crw *connReadWriteCloser) Close() (err error) {
crw
.
once
.
Do
(
func
()
{
err
=
crw
.
conn
.
Close
()
})
crw
.
once
.
Do
(
func
()
{
err
=
crw
.
conn
.
Close
()
})
return
return
}
}
func
newBadGateway
(
message
string
)
*
apierrors
.
StatusError
{
return
&
apierrors
.
StatusError
{
ErrStatus
:
metav1
.
Status
{
Status
:
metav1
.
StatusFailure
,
Code
:
http
.
StatusBadGateway
,
Reason
:
metav1
.
StatusReasonInternalError
,
Message
:
message
,
},
}
}
pkg/server/auth.go
View file @
349cd3b8
...
@@ -5,12 +5,9 @@ import (
...
@@ -5,12 +5,9 @@ import (
"github.com/gorilla/mux"
"github.com/gorilla/mux"
"github.com/k3s-io/k3s/pkg/daemons/config"
"github.com/k3s-io/k3s/pkg/daemons/config"
"github.com/k3s-io/k3s/pkg/generated/clientset/versioned/scheme"
"github.com/k3s-io/k3s/pkg/util"
"github.com/pkg/errors"
"github.com/sirupsen/logrus"
"github.com/sirupsen/logrus"
apierrors
"k8s.io/apimachinery/pkg/api/errors"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/apiserver/pkg/endpoints/handlers/responsewriters"
"k8s.io/apiserver/pkg/endpoints/request"
"k8s.io/apiserver/pkg/endpoints/request"
)
)
...
@@ -29,23 +26,23 @@ func doAuth(roles []string, serverConfig *config.Control, next http.Handler, rw
...
@@ -29,23 +26,23 @@ func doAuth(roles []string, serverConfig *config.Control, next http.Handler, rw
switch
{
switch
{
case
serverConfig
==
nil
:
case
serverConfig
==
nil
:
logrus
.
Errorf
(
"Authenticate not initialized: serverConfig is nil"
)
logrus
.
Errorf
(
"Authenticate not initialized: serverConfig is nil"
)
u
nauthorized
(
rw
,
req
)
u
til
.
SendError
(
errors
.
New
(
"not authorized"
),
rw
,
req
,
http
.
StatusUnauthorized
)
return
return
case
serverConfig
.
Runtime
.
Authenticator
==
nil
:
case
serverConfig
.
Runtime
.
Authenticator
==
nil
:
logrus
.
Errorf
(
"Authenticate not initialized: serverConfig.Runtime.Authenticator is nil"
)
logrus
.
Errorf
(
"Authenticate not initialized: serverConfig.Runtime.Authenticator is nil"
)
u
nauthorized
(
rw
,
req
)
u
til
.
SendError
(
errors
.
New
(
"not authorized"
),
rw
,
req
,
http
.
StatusUnauthorized
)
return
return
}
}
resp
,
ok
,
err
:=
serverConfig
.
Runtime
.
Authenticator
.
AuthenticateRequest
(
req
)
resp
,
ok
,
err
:=
serverConfig
.
Runtime
.
Authenticator
.
AuthenticateRequest
(
req
)
if
err
!=
nil
{
if
err
!=
nil
{
logrus
.
Errorf
(
"Failed to authenticate request from %s: %v"
,
req
.
RemoteAddr
,
err
)
logrus
.
Errorf
(
"Failed to authenticate request from %s: %v"
,
req
.
RemoteAddr
,
err
)
u
nauthorized
(
rw
,
req
)
u
til
.
SendError
(
errors
.
New
(
"not authorized"
),
rw
,
req
,
http
.
StatusUnauthorized
)
return
return
}
}
if
!
ok
||
!
hasRole
(
roles
,
resp
.
User
.
GetGroups
())
{
if
!
ok
||
!
hasRole
(
roles
,
resp
.
User
.
GetGroups
())
{
forbidden
(
rw
,
req
)
util
.
SendError
(
errors
.
New
(
"forbidden"
),
rw
,
req
,
http
.
StatusForbidden
)
return
return
}
}
...
@@ -61,27 +58,3 @@ func authMiddleware(serverConfig *config.Control, roles ...string) mux.Middlewar
...
@@ -61,27 +58,3 @@ func authMiddleware(serverConfig *config.Control, roles ...string) mux.Middlewar
})
})
}
}
}
}
func
unauthorized
(
resp
http
.
ResponseWriter
,
req
*
http
.
Request
)
{
responsewriters
.
ErrorNegotiated
(
&
apierrors
.
StatusError
{
ErrStatus
:
metav1
.
Status
{
Status
:
metav1
.
StatusFailure
,
Code
:
http
.
StatusUnauthorized
,
Reason
:
metav1
.
StatusReasonUnauthorized
,
Message
:
"not authorized"
,
}},
scheme
.
Codecs
.
WithoutConversion
(),
schema
.
GroupVersion
{},
resp
,
req
,
)
}
func
forbidden
(
resp
http
.
ResponseWriter
,
req
*
http
.
Request
)
{
responsewriters
.
ErrorNegotiated
(
&
apierrors
.
StatusError
{
ErrStatus
:
metav1
.
Status
{
Status
:
metav1
.
StatusFailure
,
Code
:
http
.
StatusForbidden
,
Reason
:
metav1
.
StatusReasonForbidden
,
Message
:
"forbidden"
,
}},
scheme
.
Codecs
.
WithoutConversion
(),
schema
.
GroupVersion
{},
resp
,
req
,
)
}
pkg/server/router.go
View file @
349cd3b8
...
@@ -19,7 +19,6 @@ import (
...
@@ -19,7 +19,6 @@ import (
"github.com/k3s-io/k3s/pkg/bootstrap"
"github.com/k3s-io/k3s/pkg/bootstrap"
"github.com/k3s-io/k3s/pkg/cli/cmds"
"github.com/k3s-io/k3s/pkg/cli/cmds"
"github.com/k3s-io/k3s/pkg/daemons/config"
"github.com/k3s-io/k3s/pkg/daemons/config"
"github.com/k3s-io/k3s/pkg/generated/clientset/versioned/scheme"
"github.com/k3s-io/k3s/pkg/nodepassword"
"github.com/k3s-io/k3s/pkg/nodepassword"
"github.com/k3s-io/k3s/pkg/util"
"github.com/k3s-io/k3s/pkg/util"
"github.com/k3s-io/k3s/pkg/version"
"github.com/k3s-io/k3s/pkg/version"
...
@@ -28,14 +27,11 @@ import (
...
@@ -28,14 +27,11 @@ import (
coreclient
"github.com/rancher/wrangler/pkg/generated/controllers/core/v1"
coreclient
"github.com/rancher/wrangler/pkg/generated/controllers/core/v1"
"github.com/sirupsen/logrus"
"github.com/sirupsen/logrus"
corev1
"k8s.io/api/core/v1"
corev1
"k8s.io/api/core/v1"
apierrors
"k8s.io/apimachinery/pkg/api/errors"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/apimachinery/pkg/types"
"k8s.io/apimachinery/pkg/types"
"k8s.io/apimachinery/pkg/util/json"
"k8s.io/apimachinery/pkg/util/json"
"k8s.io/apimachinery/pkg/util/wait"
"k8s.io/apimachinery/pkg/util/wait"
"k8s.io/apiserver/pkg/authentication/user"
"k8s.io/apiserver/pkg/authentication/user"
"k8s.io/apiserver/pkg/endpoints/handlers/responsewriters"
"k8s.io/apiserver/pkg/endpoints/request"
"k8s.io/apiserver/pkg/endpoints/request"
bootstrapapi
"k8s.io/cluster-bootstrap/token/api"
bootstrapapi
"k8s.io/cluster-bootstrap/token/api"
"k8s.io/kubernetes/pkg/auth/nodeidentifier"
"k8s.io/kubernetes/pkg/auth/nodeidentifier"
...
@@ -108,20 +104,14 @@ func apiserver(runtime *config.ControlRuntime) http.Handler {
...
@@ -108,20 +104,14 @@ func apiserver(runtime *config.ControlRuntime) http.Handler {
if
runtime
!=
nil
&&
runtime
.
APIServer
!=
nil
{
if
runtime
!=
nil
&&
runtime
.
APIServer
!=
nil
{
runtime
.
APIServer
.
ServeHTTP
(
resp
,
req
)
runtime
.
APIServer
.
ServeHTTP
(
resp
,
req
)
}
else
{
}
else
{
responsewriters
.
ErrorNegotiated
(
util
.
SendError
(
util
.
ErrNotReady
,
resp
,
req
,
http
.
StatusServiceUnavailable
)
apierrors
.
NewServiceUnavailable
(
"apiserver not ready"
),
scheme
.
Codecs
.
WithoutConversion
(),
schema
.
GroupVersion
{},
resp
,
req
,
)
}
}
})
})
}
}
func
apiserverDisabled
()
http
.
Handler
{
func
apiserverDisabled
()
http
.
Handler
{
return
http
.
HandlerFunc
(
func
(
resp
http
.
ResponseWriter
,
req
*
http
.
Request
)
{
return
http
.
HandlerFunc
(
func
(
resp
http
.
ResponseWriter
,
req
*
http
.
Request
)
{
responsewriters
.
ErrorNegotiated
(
util
.
SendError
(
errors
.
New
(
"apiserver disabled"
),
resp
,
req
,
http
.
StatusServiceUnavailable
)
apierrors
.
NewServiceUnavailable
(
"apiserver disabled"
),
scheme
.
Codecs
.
WithoutConversion
(),
schema
.
GroupVersion
{},
resp
,
req
,
)
})
})
}
}
...
@@ -131,10 +121,7 @@ func bootstrapHandler(runtime *config.ControlRuntime) http.Handler {
...
@@ -131,10 +121,7 @@ func bootstrapHandler(runtime *config.ControlRuntime) http.Handler {
}
}
return
http
.
HandlerFunc
(
func
(
resp
http
.
ResponseWriter
,
req
*
http
.
Request
)
{
return
http
.
HandlerFunc
(
func
(
resp
http
.
ResponseWriter
,
req
*
http
.
Request
)
{
logrus
.
Warnf
(
"Received HTTP bootstrap request from %s, but embedded etcd is not enabled."
,
req
.
RemoteAddr
)
logrus
.
Warnf
(
"Received HTTP bootstrap request from %s, but embedded etcd is not enabled."
,
req
.
RemoteAddr
)
responsewriters
.
ErrorNegotiated
(
util
.
SendError
(
errors
.
New
(
"etcd disabled"
),
resp
,
req
,
http
.
StatusBadRequest
)
apierrors
.
NewBadRequest
(
"etcd disabled"
),
scheme
.
Codecs
.
WithoutConversion
(),
schema
.
GroupVersion
{},
resp
,
req
,
)
})
})
}
}
...
@@ -145,7 +132,7 @@ func cacerts(serverCA string) http.Handler {
...
@@ -145,7 +132,7 @@ func cacerts(serverCA string) http.Handler {
var
err
error
var
err
error
ca
,
err
=
os
.
ReadFile
(
serverCA
)
ca
,
err
=
os
.
ReadFile
(
serverCA
)
if
err
!=
nil
{
if
err
!=
nil
{
s
endError
(
err
,
resp
,
req
)
util
.
S
endError
(
err
,
resp
,
req
)
return
return
}
}
}
}
...
@@ -220,13 +207,13 @@ func servingKubeletCert(server *config.Control, keyFile string, auth nodePassBoo
...
@@ -220,13 +207,13 @@ func servingKubeletCert(server *config.Control, keyFile string, auth nodePassBoo
nodeName
,
errCode
,
err
:=
auth
(
req
)
nodeName
,
errCode
,
err
:=
auth
(
req
)
if
err
!=
nil
{
if
err
!=
nil
{
s
endError
(
err
,
resp
,
req
,
errCode
)
util
.
S
endError
(
err
,
resp
,
req
,
errCode
)
return
return
}
}
caCerts
,
caKey
,
key
,
err
:=
getCACertAndKeys
(
server
.
Runtime
.
ServerCA
,
server
.
Runtime
.
ServerCAKey
,
server
.
Runtime
.
ServingKubeletKey
)
caCerts
,
caKey
,
key
,
err
:=
getCACertAndKeys
(
server
.
Runtime
.
ServerCA
,
server
.
Runtime
.
ServerCAKey
,
server
.
Runtime
.
ServingKubeletKey
)
if
err
!=
nil
{
if
err
!=
nil
{
s
endError
(
err
,
resp
,
req
)
util
.
S
endError
(
err
,
resp
,
req
)
return
return
}
}
...
@@ -236,7 +223,7 @@ func servingKubeletCert(server *config.Control, keyFile string, auth nodePassBoo
...
@@ -236,7 +223,7 @@ func servingKubeletCert(server *config.Control, keyFile string, auth nodePassBoo
for
_
,
v
:=
range
strings
.
Split
(
nodeIP
,
","
)
{
for
_
,
v
:=
range
strings
.
Split
(
nodeIP
,
","
)
{
ip
:=
net
.
ParseIP
(
v
)
ip
:=
net
.
ParseIP
(
v
)
if
ip
==
nil
{
if
ip
==
nil
{
s
endError
(
fmt
.
Errorf
(
"invalid node IP address %s"
,
ip
),
resp
,
req
)
util
.
S
endError
(
fmt
.
Errorf
(
"invalid node IP address %s"
,
ip
),
resp
,
req
)
return
return
}
}
ips
=
append
(
ips
,
ip
)
ips
=
append
(
ips
,
ip
)
...
@@ -252,7 +239,7 @@ func servingKubeletCert(server *config.Control, keyFile string, auth nodePassBoo
...
@@ -252,7 +239,7 @@ func servingKubeletCert(server *config.Control, keyFile string, auth nodePassBoo
},
},
},
key
,
caCerts
[
0
],
caKey
)
},
key
,
caCerts
[
0
],
caKey
)
if
err
!=
nil
{
if
err
!=
nil
{
s
endError
(
err
,
resp
,
req
)
util
.
S
endError
(
err
,
resp
,
req
)
return
return
}
}
...
@@ -276,13 +263,13 @@ func clientKubeletCert(server *config.Control, keyFile string, auth nodePassBoot
...
@@ -276,13 +263,13 @@ func clientKubeletCert(server *config.Control, keyFile string, auth nodePassBoot
nodeName
,
errCode
,
err
:=
auth
(
req
)
nodeName
,
errCode
,
err
:=
auth
(
req
)
if
err
!=
nil
{
if
err
!=
nil
{
s
endError
(
err
,
resp
,
req
,
errCode
)
util
.
S
endError
(
err
,
resp
,
req
,
errCode
)
return
return
}
}
caCerts
,
caKey
,
key
,
err
:=
getCACertAndKeys
(
server
.
Runtime
.
ClientCA
,
server
.
Runtime
.
ClientCAKey
,
server
.
Runtime
.
ClientKubeletKey
)
caCerts
,
caKey
,
key
,
err
:=
getCACertAndKeys
(
server
.
Runtime
.
ClientCA
,
server
.
Runtime
.
ClientCAKey
,
server
.
Runtime
.
ClientKubeletKey
)
if
err
!=
nil
{
if
err
!=
nil
{
s
endError
(
err
,
resp
,
req
)
util
.
S
endError
(
err
,
resp
,
req
)
return
return
}
}
...
@@ -292,7 +279,7 @@ func clientKubeletCert(server *config.Control, keyFile string, auth nodePassBoot
...
@@ -292,7 +279,7 @@ func clientKubeletCert(server *config.Control, keyFile string, auth nodePassBoot
Usages
:
[]
x509
.
ExtKeyUsage
{
x509
.
ExtKeyUsageClientAuth
},
Usages
:
[]
x509
.
ExtKeyUsage
{
x509
.
ExtKeyUsageClientAuth
},
},
key
,
caCerts
[
0
],
caKey
)
},
key
,
caCerts
[
0
],
caKey
)
if
err
!=
nil
{
if
err
!=
nil
{
s
endError
(
err
,
resp
,
req
)
util
.
S
endError
(
err
,
resp
,
req
)
return
return
}
}
...
@@ -402,21 +389,6 @@ func serveStatic(urlPrefix, staticDir string) http.Handler {
...
@@ -402,21 +389,6 @@ func serveStatic(urlPrefix, staticDir string) http.Handler {
return
http
.
StripPrefix
(
urlPrefix
,
http
.
FileServer
(
http
.
Dir
(
staticDir
)))
return
http
.
StripPrefix
(
urlPrefix
,
http
.
FileServer
(
http
.
Dir
(
staticDir
)))
}
}
func
sendError
(
err
error
,
resp
http
.
ResponseWriter
,
req
*
http
.
Request
,
status
...
int
)
{
var
code
int
if
len
(
status
)
==
1
{
code
=
status
[
0
]
}
if
code
==
0
||
code
==
http
.
StatusOK
{
code
=
http
.
StatusInternalServerError
}
logrus
.
Errorf
(
"Sending HTTP %d response to %s: %v"
,
code
,
req
.
RemoteAddr
,
err
)
responsewriters
.
ErrorNegotiated
(
apierrors
.
NewGenericServerResponse
(
code
,
req
.
Method
,
schema
.
GroupResource
{},
req
.
URL
.
Path
,
err
.
Error
(),
0
,
true
),
scheme
.
Codecs
.
WithoutConversion
(),
schema
.
GroupVersion
{},
resp
,
req
,
)
}
// nodePassBootstrapper returns a node name, or http error code and error
// nodePassBootstrapper returns a node name, or http error code and error
type
nodePassBootstrapper
func
(
req
*
http
.
Request
)
(
string
,
int
,
error
)
type
nodePassBootstrapper
func
(
req
*
http
.
Request
)
(
string
,
int
,
error
)
...
...
pkg/util/apierrors.go
0 → 100644
View file @
349cd3b8
package
util
import
(
"net/http"
"github.com/k3s-io/k3s/pkg/generated/clientset/versioned/scheme"
"github.com/pkg/errors"
"github.com/sirupsen/logrus"
apierrors
"k8s.io/apimachinery/pkg/api/errors"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/apiserver/pkg/endpoints/handlers/responsewriters"
)
var
ErrNotReady
=
errors
.
New
(
"apiserver not ready"
)
// SendError sends a properly formatted error response
func
SendError
(
err
error
,
resp
http
.
ResponseWriter
,
req
*
http
.
Request
,
status
...
int
)
{
var
code
int
if
len
(
status
)
==
1
{
code
=
status
[
0
]
}
if
code
==
0
||
code
==
http
.
StatusOK
{
code
=
http
.
StatusInternalServerError
}
// Don't log "apiserver not ready" errors, they are frequent during startup
if
!
errors
.
Is
(
err
,
ErrNotReady
)
{
logrus
.
Errorf
(
"Sending HTTP %d response to %s: %v"
,
code
,
req
.
RemoteAddr
,
err
)
}
var
serr
*
apierrors
.
StatusError
switch
code
{
case
http
.
StatusBadRequest
:
serr
=
apierrors
.
NewBadRequest
(
err
.
Error
())
case
http
.
StatusUnauthorized
:
serr
=
apierrors
.
NewUnauthorized
(
err
.
Error
())
case
http
.
StatusForbidden
:
serr
=
newForbidden
(
err
)
case
http
.
StatusInternalServerError
:
serr
=
apierrors
.
NewInternalError
(
err
)
case
http
.
StatusBadGateway
:
serr
=
newBadGateway
(
err
)
case
http
.
StatusServiceUnavailable
:
serr
=
apierrors
.
NewServiceUnavailable
(
err
.
Error
())
default
:
serr
=
apierrors
.
NewGenericServerResponse
(
code
,
req
.
Method
,
schema
.
GroupResource
{},
req
.
URL
.
Path
,
err
.
Error
(),
0
,
true
)
}
responsewriters
.
ErrorNegotiated
(
serr
,
scheme
.
Codecs
.
WithoutConversion
(),
schema
.
GroupVersion
{},
resp
,
req
)
}
func
newForbidden
(
err
error
)
*
apierrors
.
StatusError
{
return
&
apierrors
.
StatusError
{
ErrStatus
:
metav1
.
Status
{
Status
:
metav1
.
StatusFailure
,
Code
:
http
.
StatusForbidden
,
Reason
:
metav1
.
StatusReasonForbidden
,
Message
:
err
.
Error
(),
}}
}
func
newBadGateway
(
err
error
)
*
apierrors
.
StatusError
{
return
&
apierrors
.
StatusError
{
ErrStatus
:
metav1
.
Status
{
Status
:
metav1
.
StatusFailure
,
Code
:
http
.
StatusBadGateway
,
Reason
:
metav1
.
StatusReasonInternalError
,
Message
:
err
.
Error
(),
}}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment