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
d0938094
Commit
d0938094
authored
Aug 08, 2016
by
Hongchao Deng
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
move new etcd storage into cacher
parent
2b349887
Hide whitespace changes
Inline
Side-by-side
Showing
88 changed files
with
188 additions
and
173 deletions
+188
-173
server.go
cmd/kube-apiserver/app/server.go
+4
-4
apiserver.go
examples/apiserver/apiserver.go
+3
-3
reststorage.go
examples/apiserver/rest/reststorage.go
+3
-2
server.go
federation/cmd/federation-apiserver/app/server.go
+3
-3
etcd.go
federation/registry/cluster/etcd/etcd.go
+1
-1
etcd_test.go
federation/registry/cluster/etcd/etcd_test.go
+2
-2
tokengetter.go
pkg/controller/serviceaccount/tokengetter.go
+4
-4
storage_factory.go
pkg/genericapiserver/storage_factory.go
+4
-14
storage_factory_test.go
pkg/genericapiserver/storage_factory_test.go
+6
-15
master.go
pkg/master/master.go
+9
-9
master_test.go
pkg/master/master_test.go
+15
-11
etcd.go
pkg/registry/certificates/etcd/etcd.go
+1
-1
etcd.go
pkg/registry/clusterrole/etcd/etcd.go
+1
-1
etcd.go
pkg/registry/clusterrolebinding/etcd/etcd.go
+1
-1
etcd.go
pkg/registry/configmap/etcd/etcd.go
+1
-1
etcd_test.go
pkg/registry/configmap/etcd/etcd_test.go
+1
-1
etcd.go
pkg/registry/controller/etcd/etcd.go
+1
-1
etcd_test.go
pkg/registry/controller/etcd/etcd_test.go
+1
-1
etcd.go
pkg/registry/daemonset/etcd/etcd.go
+1
-1
etcd_test.go
pkg/registry/daemonset/etcd/etcd_test.go
+1
-1
etcd.go
pkg/registry/deployment/etcd/etcd.go
+1
-1
etcd_test.go
pkg/registry/deployment/etcd/etcd_test.go
+1
-1
etcd.go
pkg/registry/endpoint/etcd/etcd.go
+1
-1
etcd_test.go
pkg/registry/endpoint/etcd/etcd_test.go
+1
-1
etcd.go
pkg/registry/event/etcd/etcd.go
+1
-1
etcd_test.go
pkg/registry/event/etcd/etcd_test.go
+1
-1
etcd_test.go
pkg/registry/experimental/controller/etcd/etcd_test.go
+2
-2
options.go
pkg/registry/generic/options.go
+2
-4
storage_factory.go
pkg/registry/generic/registry/storage_factory.go
+11
-7
storage_decorator.go
pkg/registry/generic/storage_decorator.go
+17
-3
etcd.go
pkg/registry/horizontalpodautoscaler/etcd/etcd.go
+1
-1
etcd_test.go
pkg/registry/horizontalpodautoscaler/etcd/etcd_test.go
+1
-1
etcd.go
pkg/registry/ingress/etcd/etcd.go
+1
-1
etcd_test.go
pkg/registry/ingress/etcd/etcd_test.go
+1
-1
etcd.go
pkg/registry/job/etcd/etcd.go
+1
-1
etcd_test.go
pkg/registry/job/etcd/etcd_test.go
+1
-1
etcd.go
pkg/registry/limitrange/etcd/etcd.go
+1
-1
etcd_test.go
pkg/registry/limitrange/etcd/etcd_test.go
+1
-1
etcd.go
pkg/registry/namespace/etcd/etcd.go
+1
-1
etcd_test.go
pkg/registry/namespace/etcd/etcd_test.go
+1
-1
etcd.go
pkg/registry/networkpolicy/etcd/etcd.go
+1
-1
etcd_test.go
pkg/registry/networkpolicy/etcd/etcd_test.go
+1
-1
etcd.go
pkg/registry/node/etcd/etcd.go
+1
-1
etcd_test.go
pkg/registry/node/etcd/etcd_test.go
+1
-1
etcd.go
pkg/registry/persistentvolume/etcd/etcd.go
+1
-1
etcd_test.go
pkg/registry/persistentvolume/etcd/etcd_test.go
+1
-1
etcd.go
pkg/registry/persistentvolumeclaim/etcd/etcd.go
+1
-1
etcd_test.go
pkg/registry/persistentvolumeclaim/etcd/etcd_test.go
+1
-1
etcd.go
pkg/registry/petset/etcd/etcd.go
+1
-1
etcd_test.go
pkg/registry/petset/etcd/etcd_test.go
+1
-1
etcd.go
pkg/registry/pod/etcd/etcd.go
+1
-1
etcd_test.go
pkg/registry/pod/etcd/etcd_test.go
+3
-3
log_test.go
pkg/registry/pod/rest/log_test.go
+2
-1
etcd.go
pkg/registry/poddisruptionbudget/etcd/etcd.go
+1
-1
etcd_test.go
pkg/registry/poddisruptionbudget/etcd/etcd_test.go
+1
-1
etcd.go
pkg/registry/podsecuritypolicy/etcd/etcd.go
+1
-1
etcd_test.go
pkg/registry/podsecuritypolicy/etcd/etcd_test.go
+1
-1
etcd.go
pkg/registry/podtemplate/etcd/etcd.go
+1
-1
etcd_test.go
pkg/registry/podtemplate/etcd/etcd_test.go
+1
-1
etcd.go
pkg/registry/registrytest/etcd.go
+10
-4
etcd.go
pkg/registry/replicaset/etcd/etcd.go
+1
-1
etcd_test.go
pkg/registry/replicaset/etcd/etcd_test.go
+1
-1
etcd.go
pkg/registry/resourcequota/etcd/etcd.go
+1
-1
etcd_test.go
pkg/registry/resourcequota/etcd/etcd_test.go
+1
-1
etcd.go
pkg/registry/role/etcd/etcd.go
+1
-1
etcd.go
pkg/registry/rolebinding/etcd/etcd.go
+1
-1
etcd.go
pkg/registry/scheduledjob/etcd/etcd.go
+1
-1
etcd_test.go
pkg/registry/scheduledjob/etcd/etcd_test.go
+1
-1
etcd.go
pkg/registry/secret/etcd/etcd.go
+1
-1
etcd_test.go
pkg/registry/secret/etcd/etcd_test.go
+1
-1
etcd.go
pkg/registry/service/allocator/etcd/etcd.go
+4
-1
etcd_test.go
pkg/registry/service/allocator/etcd/etcd_test.go
+6
-5
etcd.go
pkg/registry/service/etcd/etcd.go
+1
-1
etcd_test.go
pkg/registry/service/etcd/etcd_test.go
+1
-1
etcd_test.go
pkg/registry/service/ipallocator/etcd/etcd_test.go
+2
-1
etcd.go
pkg/registry/serviceaccount/etcd/etcd.go
+1
-1
etcd_test.go
pkg/registry/serviceaccount/etcd/etcd_test.go
+1
-1
etcd.go
pkg/registry/storageclass/etcd/etcd.go
+1
-1
etcd_test.go
pkg/registry/storageclass/etcd/etcd_test.go
+1
-1
etcd.go
pkg/registry/thirdpartyresource/etcd/etcd.go
+1
-1
etcd_test.go
pkg/registry/thirdpartyresource/etcd/etcd_test.go
+1
-1
etcd.go
pkg/registry/thirdpartyresourcedata/etcd/etcd.go
+1
-1
etcd_test.go
pkg/registry/thirdpartyresourcedata/etcd/etcd_test.go
+1
-1
config.go
pkg/storage/storagebackend/config.go
+4
-0
etcd2.go
pkg/storage/storagebackend/factory/etcd2.go
+2
-3
etcd3.go
pkg/storage/storagebackend/factory/etcd3.go
+2
-3
factory.go
pkg/storage/storagebackend/factory/factory.go
+3
-4
rbac_test.go
test/integration/auth/rbac_test.go
+2
-2
No files found.
cmd/kube-apiserver/app/server.go
View file @
d0938094
...
...
@@ -186,11 +186,11 @@ func Run(s *options.APIServer) error {
if
s
.
ServiceAccountLookup
{
// If we need to look up service accounts and tokens,
// go directly to etcd to avoid recursive auth insanity
storage
,
err
:=
storageFactory
.
New
(
api
.
Resource
(
"serviceaccounts"
))
storage
Config
,
err
:=
storageFactory
.
NewConfig
(
api
.
Resource
(
"serviceaccounts"
))
if
err
!=
nil
{
glog
.
Fatalf
(
"Unable to get serviceaccounts storage: %v"
,
err
)
}
serviceAccountGetter
=
serviceaccountcontroller
.
NewGetterFromStorageInterface
(
storage
,
storageFactory
.
ResourcePrefix
(
api
.
Resource
(
"serviceaccounts"
)),
storageFactory
.
ResourcePrefix
(
api
.
Resource
(
"secrets"
)))
serviceAccountGetter
=
serviceaccountcontroller
.
NewGetterFromStorageInterface
(
storage
Config
,
storageFactory
.
ResourcePrefix
(
api
.
Resource
(
"serviceaccounts"
)),
storageFactory
.
ResourcePrefix
(
api
.
Resource
(
"secrets"
)))
}
authenticator
,
err
:=
authenticator
.
New
(
authenticator
.
AuthenticatorConfig
{
...
...
@@ -227,11 +227,11 @@ func Run(s *options.APIServer) error {
if
modeEnabled
(
apiserver
.
ModeRBAC
)
{
mustGetRESTOptions
:=
func
(
resource
string
)
generic
.
RESTOptions
{
s
,
err
:=
storageFactory
.
New
(
rbac
.
Resource
(
resource
))
config
,
err
:=
storageFactory
.
NewConfig
(
rbac
.
Resource
(
resource
))
if
err
!=
nil
{
glog
.
Fatalf
(
"Unable to get %s storage: %v"
,
resource
,
err
)
}
return
generic
.
RESTOptions
{
Storage
:
s
,
Decorator
:
generic
.
UndecoratedStorage
,
ResourcePrefix
:
storageFactory
.
ResourcePrefix
(
rbac
.
Resource
(
resource
))}
return
generic
.
RESTOptions
{
Storage
Config
:
config
,
Decorator
:
generic
.
UndecoratedStorage
,
ResourcePrefix
:
storageFactory
.
ResourcePrefix
(
rbac
.
Resource
(
resource
))}
}
// For initial bootstrapping go directly to etcd to avoid privillege escalation check.
...
...
examples/apiserver/apiserver.go
View file @
d0938094
...
...
@@ -78,13 +78,13 @@ func Run(serverOptions *genericoptions.ServerRunOptions) error {
return
fmt
.
Errorf
(
"%v"
,
err
)
}
storageFactory
:=
newStorageFactory
()
storage
,
err
:=
storageFactory
.
New
(
unversioned
.
GroupResource
{
Group
:
groupName
,
Resource
:
"testtype"
})
storage
Config
,
err
:=
storageFactory
.
NewConfig
(
unversioned
.
GroupResource
{
Group
:
groupName
,
Resource
:
"testtype"
})
if
err
!=
nil
{
return
fmt
.
Errorf
(
"Unable to get storage: %v"
,
err
)
return
fmt
.
Errorf
(
"Unable to get storage
config
: %v"
,
err
)
}
restStorageMap
:=
map
[
string
]
rest
.
Storage
{
"testtypes"
:
testgroupetcd
.
NewREST
(
storage
,
s
.
StorageDecorator
()),
"testtypes"
:
testgroupetcd
.
NewREST
(
storage
Config
,
s
.
StorageDecorator
()),
}
apiGroupInfo
:=
genericapiserver
.
APIGroupInfo
{
GroupMeta
:
*
groupMeta
,
...
...
examples/apiserver/rest/reststorage.go
View file @
d0938094
...
...
@@ -25,6 +25,7 @@ import (
"k8s.io/kubernetes/pkg/registry/generic/registry"
"k8s.io/kubernetes/pkg/runtime"
"k8s.io/kubernetes/pkg/storage"
"k8s.io/kubernetes/pkg/storage/storagebackend"
)
type
REST
struct
{
...
...
@@ -32,13 +33,13 @@ type REST struct {
}
// NewREST returns a RESTStorage object that will work with testtype.
func
NewREST
(
s
storage
.
Interface
,
storageDecorator
generic
.
StorageDecorator
)
*
REST
{
func
NewREST
(
config
*
storagebackend
.
Config
,
storageDecorator
generic
.
StorageDecorator
)
*
REST
{
prefix
:=
"/testtype"
newListFunc
:=
func
()
runtime
.
Object
{
return
&
testgroup
.
TestTypeList
{}
}
// Usually you should reuse your RESTCreateStrategy.
strategy
:=
&
NotNamespaceScoped
{}
storageInterface
:=
storageDecorator
(
s
,
100
,
&
testgroup
.
TestType
{},
prefix
,
strategy
,
newListFunc
,
storage
.
NoTriggerPublisher
)
config
,
100
,
&
testgroup
.
TestType
{},
prefix
,
strategy
,
newListFunc
,
storage
.
NoTriggerPublisher
)
store
:=
&
registry
.
Store
{
NewFunc
:
func
()
runtime
.
Object
{
return
&
testgroup
.
TestType
{}
},
// NewListFunc returns an object capable of storing results of an etcd list.
...
...
federation/cmd/federation-apiserver/app/server.go
View file @
d0938094
...
...
@@ -162,12 +162,12 @@ func Run(s *options.ServerRunOptions) error {
}
func
createRESTOptionsOrDie
(
s
*
options
.
ServerRunOptions
,
g
*
genericapiserver
.
GenericAPIServer
,
f
genericapiserver
.
StorageFactory
,
resource
unversioned
.
GroupResource
)
generic
.
RESTOptions
{
storage
,
err
:=
f
.
New
(
resource
)
config
,
err
:=
f
.
NewConfig
(
resource
)
if
err
!=
nil
{
glog
.
Fatalf
(
"Unable to find storage
destination
for %v, due to %v"
,
resource
,
err
.
Error
())
glog
.
Fatalf
(
"Unable to find storage
config
for %v, due to %v"
,
resource
,
err
.
Error
())
}
return
generic
.
RESTOptions
{
Storage
:
storage
,
Storage
Config
:
config
,
Decorator
:
g
.
StorageDecorator
(),
DeleteCollectionWorkers
:
s
.
DeleteCollectionWorkers
,
ResourcePrefix
:
f
.
ResourcePrefix
(
resource
),
...
...
federation/registry/cluster/etcd/etcd.go
View file @
d0938094
...
...
@@ -50,7 +50,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) {
newListFunc
:=
func
()
runtime
.
Object
{
return
&
federation
.
ClusterList
{}
}
storageInterface
:=
opts
.
Decorator
(
opts
.
Storage
,
opts
.
Storage
Config
,
100
,
&
federation
.
Cluster
{},
prefix
,
...
...
federation/registry/cluster/etcd/etcd_test.go
View file @
d0938094
...
...
@@ -30,9 +30,9 @@ import (
)
func
newStorage
(
t
*
testing
.
T
)
(
*
REST
,
*
etcdtesting
.
EtcdTestServer
)
{
etcdStorage
,
server
:=
registrytest
.
NewEtcdStorage
(
t
,
federation
.
GroupName
)
storageConfig
,
server
:=
registrytest
.
NewEtcdStorage
(
t
,
federation
.
GroupName
)
restOptions
:=
generic
.
RESTOptions
{
Storage
:
etcdStorage
,
Storage
Config
:
storageConfig
,
Decorator
:
generic
.
UndecoratedStorage
,
DeleteCollectionWorkers
:
1
}
storage
,
_
:=
NewREST
(
restOptions
)
...
...
pkg/controller/serviceaccount/tokengetter.go
View file @
d0938094
...
...
@@ -25,7 +25,7 @@ import (
serviceaccountregistry
"k8s.io/kubernetes/pkg/registry/serviceaccount"
serviceaccountetcd
"k8s.io/kubernetes/pkg/registry/serviceaccount/etcd"
"k8s.io/kubernetes/pkg/serviceaccount"
"k8s.io/kubernetes/pkg/storage"
"k8s.io/kubernetes/pkg/storage
/storagebackend
"
)
// clientGetter implements ServiceAccountTokenGetter using a clientset.Interface
...
...
@@ -69,9 +69,9 @@ func (r *registryGetter) GetSecret(namespace, name string) (*api.Secret, error)
// NewGetterFromStorageInterface returns a ServiceAccountTokenGetter that
// uses the specified storage to retrieve service accounts and secrets.
func
NewGetterFromStorageInterface
(
s
storage
.
Interface
,
saPrefix
,
secretPrefix
string
)
serviceaccount
.
ServiceAccountTokenGetter
{
func
NewGetterFromStorageInterface
(
config
*
storagebackend
.
Config
,
saPrefix
,
secretPrefix
string
)
serviceaccount
.
ServiceAccountTokenGetter
{
return
NewGetterFromRegistries
(
serviceaccountregistry
.
NewRegistry
(
serviceaccountetcd
.
NewREST
(
generic
.
RESTOptions
{
Storage
:
s
,
Decorator
:
generic
.
UndecoratedStorage
,
ResourcePrefix
:
saPrefix
})),
secret
.
NewRegistry
(
secretetcd
.
NewREST
(
generic
.
RESTOptions
{
Storage
:
s
,
Decorator
:
generic
.
UndecoratedStorage
,
ResourcePrefix
:
secretPrefix
})),
serviceaccountregistry
.
NewRegistry
(
serviceaccountetcd
.
NewREST
(
generic
.
RESTOptions
{
Storage
Config
:
config
,
Decorator
:
generic
.
UndecoratedStorage
,
ResourcePrefix
:
saPrefix
})),
secret
.
NewRegistry
(
secretetcd
.
NewREST
(
generic
.
RESTOptions
{
Storage
Config
:
config
,
Decorator
:
generic
.
UndecoratedStorage
,
ResourcePrefix
:
secretPrefix
})),
)
}
pkg/genericapiserver/storage_factory.go
View file @
d0938094
...
...
@@ -25,9 +25,7 @@ import (
"k8s.io/kubernetes/pkg/runtime"
"k8s.io/kubernetes/pkg/runtime/serializer/recognizer"
"k8s.io/kubernetes/pkg/runtime/serializer/versioning"
"k8s.io/kubernetes/pkg/storage"
"k8s.io/kubernetes/pkg/storage/storagebackend"
storagebackendfactory
"k8s.io/kubernetes/pkg/storage/storagebackend/factory"
"k8s.io/kubernetes/pkg/util/sets"
"github.com/golang/glog"
...
...
@@ -37,7 +35,7 @@ import (
type
StorageFactory
interface
{
// New finds the storage destination for the given group and resource. It will
// return an error if the group has no storage destination configured.
New
(
groupResource
unversioned
.
GroupResource
)
(
storage
.
Interface
,
error
)
New
Config
(
groupResource
unversioned
.
GroupResource
)
(
*
storagebackend
.
Config
,
error
)
// ResourcePrefix returns the overridden resource prefix for the GroupResource
// This allows for cohabitation of resources with different native types and provides
...
...
@@ -76,9 +74,6 @@ type DefaultStorageFactory struct {
// newStorageCodecFn exists to be overwritten for unit testing.
newStorageCodecFn
func
(
storageMediaType
string
,
ns
runtime
.
StorageSerializer
,
storageVersion
,
memoryVersion
unversioned
.
GroupVersion
,
config
storagebackend
.
Config
)
(
codec
runtime
.
Codec
,
err
error
)
// newStorageFn exists to be overwritten for unit testing.
newStorageFn
func
(
config
storagebackend
.
Config
,
codec
runtime
.
Codec
)
(
etcdStorage
storage
.
Interface
,
err
error
)
}
type
groupResourceOverrides
struct
{
...
...
@@ -118,7 +113,6 @@ func NewDefaultStorageFactory(config storagebackend.Config, defaultMediaType str
APIResourceConfigSource
:
resourceConfig
,
newStorageCodecFn
:
NewStorageCodec
,
newStorageFn
:
newStorage
,
}
}
...
...
@@ -173,7 +167,7 @@ func (s *DefaultStorageFactory) getStorageGroupResource(groupResource unversione
// New finds the storage destination for the given group and resource. It will
// return an error if the group has no storage destination configured.
func
(
s
*
DefaultStorageFactory
)
New
(
groupResource
unversioned
.
GroupResource
)
(
storage
.
Interface
,
error
)
{
func
(
s
*
DefaultStorageFactory
)
New
Config
(
groupResource
unversioned
.
GroupResource
)
(
*
storagebackend
.
Config
,
error
)
{
chosenStorageResource
:=
s
.
getStorageGroupResource
(
groupResource
)
groupOverride
:=
s
.
Overrides
[
getAllResourcesAlias
(
chosenStorageResource
)]
...
...
@@ -232,12 +226,8 @@ func (s *DefaultStorageFactory) New(groupResource unversioned.GroupResource) (st
}
glog
.
V
(
3
)
.
Infof
(
"storing %v in %v, reading as %v from %v"
,
groupResource
,
storageEncodingVersion
,
internalVersion
,
config
)
return
s
.
newStorageFn
(
config
,
codec
)
}
// newStorage is the default implementation for creating a storage backend.
func
newStorage
(
config
storagebackend
.
Config
,
codec
runtime
.
Codec
)
(
etcdStorage
storage
.
Interface
,
err
error
)
{
return
storagebackendfactory
.
Create
(
config
,
codec
)
config
.
Codec
=
codec
return
&
config
,
nil
}
// Get all backends for all registered storage destinations.
...
...
pkg/genericapiserver/storage_factory_test.go
View file @
d0938094
...
...
@@ -24,8 +24,6 @@ import (
"k8s.io/kubernetes/pkg/api/unversioned"
"k8s.io/kubernetes/pkg/apis/extensions"
"k8s.io/kubernetes/pkg/genericapiserver/options"
"k8s.io/kubernetes/pkg/runtime"
"k8s.io/kubernetes/pkg/storage"
"k8s.io/kubernetes/pkg/storage/storagebackend"
)
...
...
@@ -50,38 +48,31 @@ func TestUpdateEtcdOverrides(t *testing.T) {
defaultEtcdLocation
:=
[]
string
{
"http://127.0.0.1"
}
for
i
,
test
:=
range
testCases
{
actualConfig
:=
storagebackend
.
Config
{}
newStorageFn
:=
func
(
config
storagebackend
.
Config
,
codec
runtime
.
Codec
)
(
_
storage
.
Interface
,
err
error
)
{
actualConfig
=
config
return
nil
,
nil
}
defaultConfig
:=
storagebackend
.
Config
{
Prefix
:
options
.
DefaultEtcdPathPrefix
,
ServerList
:
defaultEtcdLocation
,
}
storageFactory
:=
NewDefaultStorageFactory
(
defaultConfig
,
""
,
api
.
Codecs
,
NewDefaultResourceEncodingConfig
(),
NewResourceConfig
())
storageFactory
.
newStorageFn
=
newStorageFn
storageFactory
.
SetEtcdLocation
(
test
.
resource
,
test
.
servers
)
var
err
error
_
,
err
=
storageFactory
.
New
(
test
.
resource
)
config
,
err
:=
storageFactory
.
NewConfig
(
test
.
resource
)
if
err
!=
nil
{
t
.
Errorf
(
"%d: unexpected error %v"
,
i
,
err
)
continue
}
if
!
reflect
.
DeepEqual
(
actualC
onfig
.
ServerList
,
test
.
servers
)
{
t
.
Errorf
(
"%d: expected %v, got %v"
,
i
,
test
.
servers
,
actualC
onfig
.
ServerList
)
if
!
reflect
.
DeepEqual
(
c
onfig
.
ServerList
,
test
.
servers
)
{
t
.
Errorf
(
"%d: expected %v, got %v"
,
i
,
test
.
servers
,
c
onfig
.
ServerList
)
continue
}
_
,
err
=
storageFactory
.
New
(
unversioned
.
GroupResource
{
Group
:
api
.
GroupName
,
Resource
:
"unlikely"
})
config
,
err
=
storageFactory
.
NewConfig
(
unversioned
.
GroupResource
{
Group
:
api
.
GroupName
,
Resource
:
"unlikely"
})
if
err
!=
nil
{
t
.
Errorf
(
"%d: unexpected error %v"
,
i
,
err
)
continue
}
if
!
reflect
.
DeepEqual
(
actualC
onfig
.
ServerList
,
defaultEtcdLocation
)
{
t
.
Errorf
(
"%d: expected %v, got %v"
,
i
,
defaultEtcdLocation
,
actualC
onfig
.
ServerList
)
if
!
reflect
.
DeepEqual
(
c
onfig
.
ServerList
,
defaultEtcdLocation
)
{
t
.
Errorf
(
"%d: expected %v, got %v"
,
i
,
defaultEtcdLocation
,
c
onfig
.
ServerList
)
continue
}
...
...
pkg/master/master.go
View file @
d0938094
...
...
@@ -82,9 +82,9 @@ import (
"k8s.io/kubernetes/pkg/registry/thirdpartyresourcedata"
thirdpartyresourcedataetcd
"k8s.io/kubernetes/pkg/registry/thirdpartyresourcedata/etcd"
"k8s.io/kubernetes/pkg/runtime"
"k8s.io/kubernetes/pkg/storage"
etcdmetrics
"k8s.io/kubernetes/pkg/storage/etcd/metrics"
etcdutil
"k8s.io/kubernetes/pkg/storage/etcd/util"
"k8s.io/kubernetes/pkg/storage/storagebackend"
"k8s.io/kubernetes/pkg/util/sets"
"github.com/golang/glog"
...
...
@@ -142,7 +142,7 @@ type Master struct {
serviceNodePortAllocator
rangeallocation
.
RangeRegistry
// storage for third party objects
thirdPartyStorage
storage
.
Interface
thirdPartyStorage
Config
*
storagebackend
.
Config
// map from api path to a tuple of (storage for the objects, APIGroup)
thirdPartyResources
map
[
string
]
thirdPartyEntry
// protects the map
...
...
@@ -276,7 +276,7 @@ func (m *Master) InstallAPIs(c *Config) {
// TODO seems like this bit ought to be unconditional and the REST API is controlled by the config
if
c
.
APIResourceConfigSource
.
ResourceEnabled
(
extensionsapiv1beta1
.
SchemeGroupVersion
.
WithResource
(
"thirdpartyresources"
))
{
var
err
error
m
.
thirdPartyStorage
,
err
=
c
.
StorageFactory
.
New
(
extensions
.
Resource
(
"thirdpartyresources"
))
m
.
thirdPartyStorage
Config
,
err
=
c
.
StorageFactory
.
NewConfig
(
extensions
.
Resource
(
"thirdpartyresources"
))
if
err
!=
nil
{
glog
.
Fatalf
(
"Error getting third party storage: %v"
,
err
)
}
...
...
@@ -349,7 +349,7 @@ func (m *Master) initV1ResourcesStorage(c *Config) {
return
}
serviceStorage
,
err
:=
c
.
StorageFactory
.
New
(
api
.
Resource
(
"services"
))
serviceStorage
Config
,
err
:=
c
.
StorageFactory
.
NewConfig
(
api
.
Resource
(
"services"
))
if
err
!=
nil
{
glog
.
Fatal
(
err
.
Error
())
}
...
...
@@ -357,7 +357,7 @@ func (m *Master) initV1ResourcesStorage(c *Config) {
serviceClusterIPAllocator
:=
ipallocator
.
NewAllocatorCIDRRange
(
serviceClusterIPRange
,
func
(
max
int
,
rangeSpec
string
)
allocator
.
Interface
{
mem
:=
allocator
.
NewAllocationMap
(
max
,
rangeSpec
)
// TODO etcdallocator package to return a storage interface via the storageFactory
etcd
:=
etcdallocator
.
NewEtcd
(
mem
,
"/ranges/serviceips"
,
api
.
Resource
(
"serviceipallocations"
),
serviceStorage
)
etcd
:=
etcdallocator
.
NewEtcd
(
mem
,
"/ranges/serviceips"
,
api
.
Resource
(
"serviceipallocations"
),
serviceStorage
Config
)
serviceClusterIPRegistry
=
etcd
return
etcd
})
...
...
@@ -367,7 +367,7 @@ func (m *Master) initV1ResourcesStorage(c *Config) {
serviceNodePortAllocator
:=
portallocator
.
NewPortAllocatorCustom
(
m
.
ServiceNodePortRange
,
func
(
max
int
,
rangeSpec
string
)
allocator
.
Interface
{
mem
:=
allocator
.
NewAllocationMap
(
max
,
rangeSpec
)
// TODO etcdallocator package to return a storage interface via the storageFactory
etcd
:=
etcdallocator
.
NewEtcd
(
mem
,
"/ranges/servicenodeports"
,
api
.
Resource
(
"servicenodeportallocations"
),
serviceStorage
)
etcd
:=
etcdallocator
.
NewEtcd
(
mem
,
"/ranges/servicenodeports"
,
api
.
Resource
(
"servicenodeportallocations"
),
serviceStorage
Config
)
serviceNodePortRegistry
=
etcd
return
etcd
})
...
...
@@ -648,7 +648,7 @@ func (m *Master) InstallThirdPartyResource(rsrc *extensions.ThirdPartyResource)
func
(
m
*
Master
)
thirdpartyapi
(
group
,
kind
,
version
,
pluralResource
string
)
*
apiserver
.
APIGroupVersion
{
resourceStorage
:=
thirdpartyresourcedataetcd
.
NewREST
(
generic
.
RESTOptions
{
Storage
:
m
.
thirdPartyStorage
,
Storage
Config
:
m
.
thirdPartyStorageConfig
,
Decorator
:
generic
.
UndecoratedStorage
,
DeleteCollectionWorkers
:
m
.
deleteCollectionWorkers
,
},
...
...
@@ -691,13 +691,13 @@ func (m *Master) thirdpartyapi(group, kind, version, pluralResource string) *api
}
func
(
m
*
Master
)
GetRESTOptionsOrDie
(
c
*
Config
,
resource
unversioned
.
GroupResource
)
generic
.
RESTOptions
{
storage
,
err
:=
c
.
StorageFactory
.
New
(
resource
)
storage
Config
,
err
:=
c
.
StorageFactory
.
NewConfig
(
resource
)
if
err
!=
nil
{
glog
.
Fatalf
(
"Unable to find storage destination for %v, due to %v"
,
resource
,
err
.
Error
())
}
return
generic
.
RESTOptions
{
Storage
:
storage
,
Storage
Config
:
storageConfig
,
Decorator
:
m
.
StorageDecorator
(),
DeleteCollectionWorkers
:
m
.
deleteCollectionWorkers
,
ResourcePrefix
:
c
.
StorageFactory
.
ResourcePrefix
(
resource
),
...
...
pkg/master/master_test.go
View file @
d0938094
...
...
@@ -51,6 +51,7 @@ import (
"k8s.io/kubernetes/pkg/genericapiserver"
"k8s.io/kubernetes/pkg/kubelet/client"
"k8s.io/kubernetes/pkg/registry/endpoint"
"k8s.io/kubernetes/pkg/registry/generic"
"k8s.io/kubernetes/pkg/registry/namespace"
"k8s.io/kubernetes/pkg/registry/registrytest"
"k8s.io/kubernetes/pkg/registry/thirdpartyresourcedata"
...
...
@@ -700,7 +701,8 @@ func testInstallThirdPartyAPIListVersion(t *testing.T, version string) {
})
if
test
.
items
!=
nil
{
err
:=
createThirdPartyList
(
master
.
thirdPartyStorage
,
err
:=
createThirdPartyList
(
generic
.
NewRawStorage
(
master
.
thirdPartyStorageConfig
),
fmt
.
Sprintf
(
"/ThirdPartyResourceData/%s/%s/default"
,
group
,
plural
.
Resource
),
test
.
items
)
if
!
assert
.
NoError
(
err
,
test
.
test
)
{
...
...
@@ -823,7 +825,8 @@ func testInstallThirdPartyAPIGetVersion(t *testing.T, version string) {
SomeField
:
"test field"
,
OtherField
:
10
,
}
if
!
assert
.
NoError
(
createThirdPartyObject
(
master
.
thirdPartyStorage
,
"/ThirdPartyResourceData/company.com/foos/default/test"
,
"test"
,
expectedObj
))
{
s
:=
generic
.
NewRawStorage
(
master
.
thirdPartyStorageConfig
)
if
!
assert
.
NoError
(
createThirdPartyObject
(
s
,
"/ThirdPartyResourceData/company.com/foos/default/test"
,
"test"
,
expectedObj
))
{
t
.
FailNow
()
return
}
...
...
@@ -899,9 +902,8 @@ func testInstallThirdPartyAPIPostForVersion(t *testing.T, version string) {
}
thirdPartyObj
:=
extensions
.
ThirdPartyResourceData
{}
err
=
master
.
thirdPartyStorage
.
Get
(
context
.
TODO
(),
etcdtest
.
AddPrefix
(
"/ThirdPartyResourceData/company.com/foos/default/test"
),
&
thirdPartyObj
,
false
)
s
:=
generic
.
NewRawStorage
(
master
.
thirdPartyStorageConfig
)
err
=
s
.
Get
(
context
.
TODO
(),
etcdtest
.
AddPrefix
(
"/ThirdPartyResourceData/company.com/foos/default/test"
),
&
thirdPartyObj
,
false
)
if
!
assert
.
NoError
(
err
)
{
t
.
FailNow
()
}
...
...
@@ -936,7 +938,8 @@ func testInstallThirdPartyAPIDeleteVersion(t *testing.T, version string) {
SomeField
:
"test field"
,
OtherField
:
10
,
}
if
!
assert
.
NoError
(
createThirdPartyObject
(
master
.
thirdPartyStorage
,
"/ThirdPartyResourceData/company.com/foos/default/test"
,
"test"
,
expectedObj
))
{
s
:=
generic
.
NewRawStorage
(
master
.
thirdPartyStorageConfig
)
if
!
assert
.
NoError
(
createThirdPartyObject
(
s
,
"/ThirdPartyResourceData/company.com/foos/default/test"
,
"test"
,
expectedObj
))
{
t
.
FailNow
()
return
}
...
...
@@ -975,8 +978,7 @@ func testInstallThirdPartyAPIDeleteVersion(t *testing.T, version string) {
expectedDeletedKey
:=
etcdtest
.
AddPrefix
(
"ThirdPartyResourceData/company.com/foos/default/test"
)
thirdPartyObj
:=
extensions
.
ThirdPartyResourceData
{}
err
=
master
.
thirdPartyStorage
.
Get
(
context
.
TODO
(),
expectedDeletedKey
,
&
thirdPartyObj
,
false
)
err
=
s
.
Get
(
context
.
TODO
(),
expectedDeletedKey
,
&
thirdPartyObj
,
false
)
if
!
storage
.
IsNotFound
(
err
)
{
t
.
Errorf
(
"expected deletion didn't happen: %v"
,
err
)
}
...
...
@@ -1044,13 +1046,14 @@ func testInstallThirdPartyResourceRemove(t *testing.T, version string) {
SomeField
:
"test field"
,
OtherField
:
10
,
}
if
!
assert
.
NoError
(
createThirdPartyObject
(
master
.
thirdPartyStorage
,
"/ThirdPartyResourceData/company.com/foos/default/test"
,
"test"
,
expectedObj
))
{
s
:=
generic
.
NewRawStorage
(
master
.
thirdPartyStorageConfig
)
if
!
assert
.
NoError
(
createThirdPartyObject
(
s
,
"/ThirdPartyResourceData/company.com/foos/default/test"
,
"test"
,
expectedObj
))
{
t
.
FailNow
()
return
}
secondObj
:=
expectedObj
secondObj
.
Name
=
"bar"
if
!
assert
.
NoError
(
createThirdPartyObject
(
master
.
thirdPartyStorage
,
"/ThirdPartyResourceData/company.com/foos/default/bar"
,
"bar"
,
secondObj
))
{
if
!
assert
.
NoError
(
createThirdPartyObject
(
s
,
"/ThirdPartyResourceData/company.com/foos/default/bar"
,
"bar"
,
secondObj
))
{
t
.
FailNow
()
return
}
...
...
@@ -1095,7 +1098,8 @@ func testInstallThirdPartyResourceRemove(t *testing.T, version string) {
}
for
_
,
key
:=
range
expectedDeletedKeys
{
thirdPartyObj
:=
extensions
.
ThirdPartyResourceData
{}
err
:=
master
.
thirdPartyStorage
.
Get
(
context
.
TODO
(),
key
,
&
thirdPartyObj
,
false
)
s
:=
generic
.
NewRawStorage
(
master
.
thirdPartyStorageConfig
)
err
:=
s
.
Get
(
context
.
TODO
(),
key
,
&
thirdPartyObj
,
false
)
if
!
storage
.
IsNotFound
(
err
)
{
t
.
Errorf
(
"expected deletion didn't happen: %v"
,
err
)
}
...
...
pkg/registry/certificates/etcd/etcd.go
View file @
d0938094
...
...
@@ -41,7 +41,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST, *ApprovalREST) {
newListFunc
:=
func
()
runtime
.
Object
{
return
&
certificates
.
CertificateSigningRequestList
{}
}
storageInterface
:=
opts
.
Decorator
(
opts
.
Storage
,
opts
.
Storage
Config
,
cachesize
.
GetWatchCacheSizeByResource
(
cachesize
.
CertificateSigningRequests
),
&
certificates
.
CertificateSigningRequest
{},
prefix
,
...
...
pkg/registry/clusterrole/etcd/etcd.go
View file @
d0938094
...
...
@@ -38,7 +38,7 @@ func NewREST(opts generic.RESTOptions) *REST {
newListFunc
:=
func
()
runtime
.
Object
{
return
&
rbac
.
ClusterRoleList
{}
}
storageInterface
:=
opts
.
Decorator
(
opts
.
Storage
,
opts
.
Storage
Config
,
cachesize
.
GetWatchCacheSizeByResource
(
cachesize
.
ClusterRoles
),
&
rbac
.
ClusterRole
{},
prefix
,
...
...
pkg/registry/clusterrolebinding/etcd/etcd.go
View file @
d0938094
...
...
@@ -38,7 +38,7 @@ func NewREST(opts generic.RESTOptions) *REST {
newListFunc
:=
func
()
runtime
.
Object
{
return
&
rbac
.
ClusterRoleBindingList
{}
}
storageInterface
:=
opts
.
Decorator
(
opts
.
Storage
,
opts
.
Storage
Config
,
cachesize
.
GetWatchCacheSizeByResource
(
cachesize
.
ClusterRoleBindings
),
&
rbac
.
ClusterRoleBinding
{},
prefix
,
...
...
pkg/registry/configmap/etcd/etcd.go
View file @
d0938094
...
...
@@ -37,7 +37,7 @@ func NewREST(opts generic.RESTOptions) *REST {
newListFunc
:=
func
()
runtime
.
Object
{
return
&
api
.
ConfigMapList
{}
}
storageInterface
:=
opts
.
Decorator
(
opts
.
Storage
,
opts
.
Storage
Config
,
cachesize
.
GetWatchCacheSizeByResource
(
cachesize
.
ConfigMaps
),
&
api
.
ConfigMap
{},
prefix
,
...
...
pkg/registry/configmap/etcd/etcd_test.go
View file @
d0938094
...
...
@@ -30,7 +30,7 @@ import (
func
newStorage
(
t
*
testing
.
T
)
(
*
REST
,
*
etcdtesting
.
EtcdTestServer
)
{
etcdStorage
,
server
:=
registrytest
.
NewEtcdStorage
(
t
,
""
)
restOptions
:=
generic
.
RESTOptions
{
Storage
:
etcdStorage
,
Decorator
:
generic
.
UndecoratedStorage
,
DeleteCollectionWorkers
:
1
}
restOptions
:=
generic
.
RESTOptions
{
Storage
Config
:
etcdStorage
,
Decorator
:
generic
.
UndecoratedStorage
,
DeleteCollectionWorkers
:
1
}
return
NewREST
(
restOptions
),
server
}
...
...
pkg/registry/controller/etcd/etcd.go
View file @
d0938094
...
...
@@ -63,7 +63,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) {
newListFunc
:=
func
()
runtime
.
Object
{
return
&
api
.
ReplicationControllerList
{}
}
storageInterface
:=
opts
.
Decorator
(
opts
.
Storage
,
opts
.
Storage
Config
,
cachesize
.
GetWatchCacheSizeByResource
(
cachesize
.
Controllers
),
&
api
.
ReplicationController
{},
prefix
,
...
...
pkg/registry/controller/etcd/etcd_test.go
View file @
d0938094
...
...
@@ -39,7 +39,7 @@ const (
func
newStorage
(
t
*
testing
.
T
)
(
ControllerStorage
,
*
etcdtesting
.
EtcdTestServer
)
{
etcdStorage
,
server
:=
registrytest
.
NewEtcdStorage
(
t
,
""
)
restOptions
:=
generic
.
RESTOptions
{
Storage
:
etcdStorage
,
Decorator
:
generic
.
UndecoratedStorage
,
DeleteCollectionWorkers
:
1
}
restOptions
:=
generic
.
RESTOptions
{
Storage
Config
:
etcdStorage
,
Decorator
:
generic
.
UndecoratedStorage
,
DeleteCollectionWorkers
:
1
}
storage
:=
NewStorage
(
restOptions
)
return
storage
,
server
}
...
...
pkg/registry/daemonset/etcd/etcd.go
View file @
d0938094
...
...
@@ -39,7 +39,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) {
newListFunc
:=
func
()
runtime
.
Object
{
return
&
extensions
.
DaemonSetList
{}
}
storageInterface
:=
opts
.
Decorator
(
opts
.
Storage
,
opts
.
Storage
Config
,
cachesize
.
GetWatchCacheSizeByResource
(
cachesize
.
Daemonsets
),
&
extensions
.
DaemonSet
{},
prefix
,
...
...
pkg/registry/daemonset/etcd/etcd_test.go
View file @
d0938094
...
...
@@ -32,7 +32,7 @@ import (
func
newStorage
(
t
*
testing
.
T
)
(
*
REST
,
*
StatusREST
,
*
etcdtesting
.
EtcdTestServer
)
{
etcdStorage
,
server
:=
registrytest
.
NewEtcdStorage
(
t
,
extensions
.
GroupName
)
restOptions
:=
generic
.
RESTOptions
{
Storage
:
etcdStorage
,
Decorator
:
generic
.
UndecoratedStorage
,
DeleteCollectionWorkers
:
1
}
restOptions
:=
generic
.
RESTOptions
{
Storage
Config
:
etcdStorage
,
Decorator
:
generic
.
UndecoratedStorage
,
DeleteCollectionWorkers
:
1
}
daemonSetStorage
,
statusStorage
:=
NewREST
(
restOptions
)
return
daemonSetStorage
,
statusStorage
,
server
}
...
...
pkg/registry/deployment/etcd/etcd.go
View file @
d0938094
...
...
@@ -63,7 +63,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST, *RollbackREST) {
newListFunc
:=
func
()
runtime
.
Object
{
return
&
extensions
.
DeploymentList
{}
}
storageInterface
:=
opts
.
Decorator
(
opts
.
Storage
,
opts
.
Storage
Config
,
cachesize
.
GetWatchCacheSizeByResource
(
cachesize
.
Deployments
),
&
extensions
.
Deployment
{},
prefix
,
...
...
pkg/registry/deployment/etcd/etcd_test.go
View file @
d0938094
...
...
@@ -41,7 +41,7 @@ const defaultReplicas = 100
func
newStorage
(
t
*
testing
.
T
)
(
*
DeploymentStorage
,
*
etcdtesting
.
EtcdTestServer
)
{
etcdStorage
,
server
:=
registrytest
.
NewEtcdStorage
(
t
,
extensions
.
GroupName
)
restOptions
:=
generic
.
RESTOptions
{
Storage
:
etcdStorage
,
Decorator
:
generic
.
UndecoratedStorage
,
DeleteCollectionWorkers
:
1
,
ResourcePrefix
:
"deployments"
}
restOptions
:=
generic
.
RESTOptions
{
Storage
Config
:
etcdStorage
,
Decorator
:
generic
.
UndecoratedStorage
,
DeleteCollectionWorkers
:
1
,
ResourcePrefix
:
"deployments"
}
deploymentStorage
:=
NewStorage
(
restOptions
)
return
&
deploymentStorage
,
server
}
...
...
pkg/registry/endpoint/etcd/etcd.go
View file @
d0938094
...
...
@@ -36,7 +36,7 @@ func NewREST(opts generic.RESTOptions) *REST {
newListFunc
:=
func
()
runtime
.
Object
{
return
&
api
.
EndpointsList
{}
}
storageInterface
:=
opts
.
Decorator
(
opts
.
Storage
,
opts
.
Storage
Config
,
cachesize
.
GetWatchCacheSizeByResource
(
cachesize
.
Endpoints
),
&
api
.
Endpoints
{},
prefix
,
...
...
pkg/registry/endpoint/etcd/etcd_test.go
View file @
d0938094
...
...
@@ -30,7 +30,7 @@ import (
func
newStorage
(
t
*
testing
.
T
)
(
*
REST
,
*
etcdtesting
.
EtcdTestServer
)
{
etcdStorage
,
server
:=
registrytest
.
NewEtcdStorage
(
t
,
""
)
restOptions
:=
generic
.
RESTOptions
{
Storage
:
etcdStorage
,
Decorator
:
generic
.
UndecoratedStorage
,
DeleteCollectionWorkers
:
1
}
restOptions
:=
generic
.
RESTOptions
{
Storage
Config
:
etcdStorage
,
Decorator
:
generic
.
UndecoratedStorage
,
DeleteCollectionWorkers
:
1
}
return
NewREST
(
restOptions
),
server
}
...
...
pkg/registry/event/etcd/etcd.go
View file @
d0938094
...
...
@@ -34,7 +34,7 @@ func NewREST(opts generic.RESTOptions, ttl uint64) *REST {
// We explicitly do NOT do any decoration here - switching on Cacher
// for events will lead to too high memory consumption.
storageInterface
:=
opts
.
Storage
storageInterface
:=
generic
.
NewRawStorage
(
opts
.
StorageConfig
)
store
:=
&
registry
.
Store
{
NewFunc
:
func
()
runtime
.
Object
{
return
&
api
.
Event
{}
},
...
...
pkg/registry/event/etcd/etcd_test.go
View file @
d0938094
...
...
@@ -30,7 +30,7 @@ var testTTL uint64 = 60
func
newStorage
(
t
*
testing
.
T
)
(
*
REST
,
*
etcdtesting
.
EtcdTestServer
)
{
etcdStorage
,
server
:=
registrytest
.
NewEtcdStorage
(
t
,
""
)
restOptions
:=
generic
.
RESTOptions
{
Storage
:
etcdStorage
,
Decorator
:
generic
.
UndecoratedStorage
,
DeleteCollectionWorkers
:
1
}
restOptions
:=
generic
.
RESTOptions
{
Storage
Config
:
etcdStorage
,
Decorator
:
generic
.
UndecoratedStorage
,
DeleteCollectionWorkers
:
1
}
return
NewREST
(
restOptions
,
testTTL
),
server
}
...
...
pkg/registry/experimental/controller/etcd/etcd_test.go
View file @
d0938094
...
...
@@ -32,8 +32,8 @@ import (
func
newStorage
(
t
*
testing
.
T
)
(
*
ScaleREST
,
*
etcdtesting
.
EtcdTestServer
,
storage
.
Interface
)
{
etcdStorage
,
server
:=
registrytest
.
NewEtcdStorage
(
t
,
""
)
restOptions
:=
generic
.
RESTOptions
{
Storage
:
etcdStorage
,
Decorator
:
generic
.
UndecoratedStorage
,
DeleteCollectionWorkers
:
1
,
ResourcePrefix
:
"controllers"
}
return
NewStorage
(
restOptions
)
.
Scale
,
server
,
etcdStorage
restOptions
:=
generic
.
RESTOptions
{
Storage
Config
:
etcdStorage
,
Decorator
:
generic
.
UndecoratedStorage
,
DeleteCollectionWorkers
:
1
,
ResourcePrefix
:
"controllers"
}
return
NewStorage
(
restOptions
)
.
Scale
,
server
,
generic
.
NewRawStorage
(
etcdStorage
)
}
var
validPodTemplate
=
api
.
PodTemplate
{
...
...
pkg/registry/generic/options.go
View file @
d0938094
...
...
@@ -16,13 +16,11 @@ limitations under the License.
package
generic
import
(
pkgstorage
"k8s.io/kubernetes/pkg/storage"
)
import
"k8s.io/kubernetes/pkg/storage/storagebackend"
// RESTOptions is set of configuration options to generic registries.
type
RESTOptions
struct
{
Storage
pkgstorage
.
Interface
Storage
Config
*
storagebackend
.
Config
Decorator
StorageDecorator
DeleteCollectionWorkers
int
...
...
pkg/registry/generic/registry/storage_factory.go
View file @
d0938094
...
...
@@ -18,14 +18,16 @@ package registry
import
(
"k8s.io/kubernetes/pkg/api/rest"
"k8s.io/kubernetes/pkg/registry/generic"
"k8s.io/kubernetes/pkg/runtime"
"k8s.io/kubernetes/pkg/storage"
etcdstorage
"k8s.io/kubernetes/pkg/storage/etcd"
"k8s.io/kubernetes/pkg/storage/storagebackend"
)
// Creates a cacher
on top of the given 'storageInterface'
.
// Creates a cacher
based given storageConfig
.
func
StorageWithCacher
(
storage
Interface
storage
.
Interface
,
storage
Config
*
storagebackend
.
Config
,
capacity
int
,
objectType
runtime
.
Object
,
resourcePrefix
string
,
...
...
@@ -33,9 +35,11 @@ func StorageWithCacher(
newListFunc
func
()
runtime
.
Object
,
triggerFunc
storage
.
TriggerPublisherFunc
)
storage
.
Interface
{
config
:=
storage
.
CacherConfig
{
// TODO: we would change this later to make storage always have cacher and hide low level KV layer inside.
// Currently it has two layers of same storage interface -- cacher and low level kv.
cacherConfig
:=
storage
.
CacherConfig
{
CacheCapacity
:
capacity
,
Storage
:
storageInterface
,
Storage
:
generic
.
NewRawStorage
(
storageConfig
)
,
Versioner
:
etcdstorage
.
APIObjectVersioner
{},
Type
:
objectType
,
ResourcePrefix
:
resourcePrefix
,
...
...
@@ -43,14 +47,14 @@ func StorageWithCacher(
TriggerPublisherFunc
:
triggerFunc
,
}
if
scopeStrategy
.
NamespaceScoped
()
{
config
.
KeyFunc
=
func
(
obj
runtime
.
Object
)
(
string
,
error
)
{
c
acherC
onfig
.
KeyFunc
=
func
(
obj
runtime
.
Object
)
(
string
,
error
)
{
return
storage
.
NamespaceKeyFunc
(
resourcePrefix
,
obj
)
}
}
else
{
config
.
KeyFunc
=
func
(
obj
runtime
.
Object
)
(
string
,
error
)
{
c
acherC
onfig
.
KeyFunc
=
func
(
obj
runtime
.
Object
)
(
string
,
error
)
{
return
storage
.
NoNamespaceKeyFunc
(
resourcePrefix
,
obj
)
}
}
return
storage
.
NewCacherFromConfig
(
config
)
return
storage
.
NewCacherFromConfig
(
c
acherC
onfig
)
}
pkg/registry/generic/storage_decorator.go
View file @
d0938094
...
...
@@ -17,15 +17,18 @@ limitations under the License.
package
generic
import
(
"github.com/golang/glog"
"k8s.io/kubernetes/pkg/api/rest"
"k8s.io/kubernetes/pkg/runtime"
"k8s.io/kubernetes/pkg/storage"
"k8s.io/kubernetes/pkg/storage/storagebackend"
"k8s.io/kubernetes/pkg/storage/storagebackend/factory"
)
// StorageDecorator is a function signature for producing
// a storage.Interface from given parameters.
type
StorageDecorator
func
(
storageInterface
storage
.
Interface
,
config
*
storagebackend
.
Config
,
capacity
int
,
objectType
runtime
.
Object
,
resourcePrefix
string
,
...
...
@@ -35,12 +38,23 @@ type StorageDecorator func(
// Returns given 'storageInterface' without any decoration.
func
UndecoratedStorage
(
storageInterface
storage
.
Interface
,
config
*
storagebackend
.
Config
,
capacity
int
,
objectType
runtime
.
Object
,
resourcePrefix
string
,
scopeStrategy
rest
.
NamespaceScopedStrategy
,
newListFunc
func
()
runtime
.
Object
,
trigger
storage
.
TriggerPublisherFunc
)
storage
.
Interface
{
return
storageInterface
return
NewRawStorage
(
config
)
}
// NewRawStorage creates the low level kv storage. This is a work-around for current
// two layer of same storage interface.
// TODO: Once cacher is enabled on all registries (event registry is special), we will remove this method.
func
NewRawStorage
(
config
*
storagebackend
.
Config
)
storage
.
Interface
{
s
,
err
:=
factory
.
Create
(
*
config
)
if
err
!=
nil
{
glog
.
Fatalf
(
"Unable to create storage backend: config (%v), err (%v)"
,
config
,
err
)
}
return
s
}
pkg/registry/horizontalpodautoscaler/etcd/etcd.go
View file @
d0938094
...
...
@@ -38,7 +38,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) {
newListFunc
:=
func
()
runtime
.
Object
{
return
&
autoscaling
.
HorizontalPodAutoscalerList
{}
}
storageInterface
:=
opts
.
Decorator
(
opts
.
Storage
,
opts
.
Storage
Config
,
cachesize
.
GetWatchCacheSizeByResource
(
cachesize
.
HorizontalPodAutoscalers
),
&
autoscaling
.
HorizontalPodAutoscaler
{},
prefix
,
...
...
pkg/registry/horizontalpodautoscaler/etcd/etcd_test.go
View file @
d0938094
...
...
@@ -33,7 +33,7 @@ import (
func
newStorage
(
t
*
testing
.
T
)
(
*
REST
,
*
StatusREST
,
*
etcdtesting
.
EtcdTestServer
)
{
etcdStorage
,
server
:=
registrytest
.
NewEtcdStorage
(
t
,
autoscaling
.
GroupName
)
restOptions
:=
generic
.
RESTOptions
{
Storage
:
etcdStorage
,
Decorator
:
generic
.
UndecoratedStorage
,
DeleteCollectionWorkers
:
1
}
restOptions
:=
generic
.
RESTOptions
{
Storage
Config
:
etcdStorage
,
Decorator
:
generic
.
UndecoratedStorage
,
DeleteCollectionWorkers
:
1
}
horizontalPodAutoscalerStorage
,
statusStorage
:=
NewREST
(
restOptions
)
return
horizontalPodAutoscalerStorage
,
statusStorage
,
server
}
...
...
pkg/registry/ingress/etcd/etcd.go
View file @
d0938094
...
...
@@ -39,7 +39,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) {
newListFunc
:=
func
()
runtime
.
Object
{
return
&
extensions
.
IngressList
{}
}
storageInterface
:=
opts
.
Decorator
(
opts
.
Storage
,
opts
.
Storage
Config
,
cachesize
.
GetWatchCacheSizeByResource
(
cachesize
.
Ingress
),
&
extensions
.
Ingress
{},
prefix
,
...
...
pkg/registry/ingress/etcd/etcd_test.go
View file @
d0938094
...
...
@@ -32,7 +32,7 @@ import (
func
newStorage
(
t
*
testing
.
T
)
(
*
REST
,
*
StatusREST
,
*
etcdtesting
.
EtcdTestServer
)
{
etcdStorage
,
server
:=
registrytest
.
NewEtcdStorage
(
t
,
extensions
.
GroupName
)
restOptions
:=
generic
.
RESTOptions
{
Storage
:
etcdStorage
,
Decorator
:
generic
.
UndecoratedStorage
,
DeleteCollectionWorkers
:
1
}
restOptions
:=
generic
.
RESTOptions
{
Storage
Config
:
etcdStorage
,
Decorator
:
generic
.
UndecoratedStorage
,
DeleteCollectionWorkers
:
1
}
ingressStorage
,
statusStorage
:=
NewREST
(
restOptions
)
return
ingressStorage
,
statusStorage
,
server
}
...
...
pkg/registry/job/etcd/etcd.go
View file @
d0938094
...
...
@@ -39,7 +39,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) {
newListFunc
:=
func
()
runtime
.
Object
{
return
&
batch
.
JobList
{}
}
storageInterface
:=
opts
.
Decorator
(
opts
.
Storage
,
opts
.
Storage
Config
,
cachesize
.
GetWatchCacheSizeByResource
(
cachesize
.
Jobs
),
&
batch
.
Job
{},
prefix
,
...
...
pkg/registry/job/etcd/etcd_test.go
View file @
d0938094
...
...
@@ -33,7 +33,7 @@ import (
func
newStorage
(
t
*
testing
.
T
)
(
*
REST
,
*
StatusREST
,
*
etcdtesting
.
EtcdTestServer
)
{
etcdStorage
,
server
:=
registrytest
.
NewEtcdStorage
(
t
,
extensions
.
GroupName
)
restOptions
:=
generic
.
RESTOptions
{
Storage
:
etcdStorage
,
Decorator
:
generic
.
UndecoratedStorage
,
DeleteCollectionWorkers
:
1
}
restOptions
:=
generic
.
RESTOptions
{
Storage
Config
:
etcdStorage
,
Decorator
:
generic
.
UndecoratedStorage
,
DeleteCollectionWorkers
:
1
}
jobStorage
,
statusStorage
:=
NewREST
(
restOptions
)
return
jobStorage
,
statusStorage
,
server
}
...
...
pkg/registry/limitrange/etcd/etcd.go
View file @
d0938094
...
...
@@ -36,7 +36,7 @@ func NewREST(opts generic.RESTOptions) *REST {
newListFunc
:=
func
()
runtime
.
Object
{
return
&
api
.
LimitRangeList
{}
}
storageInterface
:=
opts
.
Decorator
(
opts
.
Storage
,
opts
.
Storage
Config
,
cachesize
.
GetWatchCacheSizeByResource
(
cachesize
.
LimitRanges
),
&
api
.
LimitRange
{},
prefix
,
...
...
pkg/registry/limitrange/etcd/etcd_test.go
View file @
d0938094
...
...
@@ -31,7 +31,7 @@ import (
func
newStorage
(
t
*
testing
.
T
)
(
*
REST
,
*
etcdtesting
.
EtcdTestServer
)
{
etcdStorage
,
server
:=
registrytest
.
NewEtcdStorage
(
t
,
""
)
restOptions
:=
generic
.
RESTOptions
{
Storage
:
etcdStorage
,
Decorator
:
generic
.
UndecoratedStorage
,
DeleteCollectionWorkers
:
1
}
restOptions
:=
generic
.
RESTOptions
{
Storage
Config
:
etcdStorage
,
Decorator
:
generic
.
UndecoratedStorage
,
DeleteCollectionWorkers
:
1
}
return
NewREST
(
restOptions
),
server
}
...
...
pkg/registry/namespace/etcd/etcd.go
View file @
d0938094
...
...
@@ -54,7 +54,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST, *FinalizeREST) {
newListFunc
:=
func
()
runtime
.
Object
{
return
&
api
.
NamespaceList
{}
}
storageInterface
:=
opts
.
Decorator
(
opts
.
Storage
,
opts
.
Storage
Config
,
cachesize
.
GetWatchCacheSizeByResource
(
cachesize
.
Namespaces
),
&
api
.
Namespace
{},
prefix
,
...
...
pkg/registry/namespace/etcd/etcd_test.go
View file @
d0938094
...
...
@@ -31,7 +31,7 @@ import (
func
newStorage
(
t
*
testing
.
T
)
(
*
REST
,
*
etcdtesting
.
EtcdTestServer
)
{
etcdStorage
,
server
:=
registrytest
.
NewEtcdStorage
(
t
,
""
)
restOptions
:=
generic
.
RESTOptions
{
Storage
:
etcdStorage
,
Decorator
:
generic
.
UndecoratedStorage
,
DeleteCollectionWorkers
:
1
,
ResourcePrefix
:
"namespaces"
}
restOptions
:=
generic
.
RESTOptions
{
Storage
Config
:
etcdStorage
,
Decorator
:
generic
.
UndecoratedStorage
,
DeleteCollectionWorkers
:
1
,
ResourcePrefix
:
"namespaces"
}
namespaceStorage
,
_
,
_
:=
NewREST
(
restOptions
)
return
namespaceStorage
,
server
}
...
...
pkg/registry/networkpolicy/etcd/etcd.go
View file @
d0938094
...
...
@@ -38,7 +38,7 @@ func NewREST(opts generic.RESTOptions) *REST {
newListFunc
:=
func
()
runtime
.
Object
{
return
&
extensionsapi
.
NetworkPolicyList
{}
}
storageInterface
:=
opts
.
Decorator
(
opts
.
Storage
,
opts
.
Storage
Config
,
cachesize
.
GetWatchCacheSizeByResource
(
cachesize
.
NetworkPolicys
),
&
extensionsapi
.
NetworkPolicy
{},
prefix
,
...
...
pkg/registry/networkpolicy/etcd/etcd_test.go
View file @
d0938094
...
...
@@ -33,7 +33,7 @@ import (
func
newStorage
(
t
*
testing
.
T
)
(
*
REST
,
*
etcdtesting
.
EtcdTestServer
)
{
etcdStorage
,
server
:=
registrytest
.
NewEtcdStorage
(
t
,
"extensions"
)
restOptions
:=
generic
.
RESTOptions
{
Storage
:
etcdStorage
,
Decorator
:
generic
.
UndecoratedStorage
,
DeleteCollectionWorkers
:
1
}
restOptions
:=
generic
.
RESTOptions
{
Storage
Config
:
etcdStorage
,
Decorator
:
generic
.
UndecoratedStorage
,
DeleteCollectionWorkers
:
1
}
return
NewREST
(
restOptions
),
server
}
...
...
pkg/registry/node/etcd/etcd.go
View file @
d0938094
...
...
@@ -70,7 +70,7 @@ func NewStorage(opts generic.RESTOptions, connection client.ConnectionInfoGetter
newListFunc
:=
func
()
runtime
.
Object
{
return
&
api
.
NodeList
{}
}
storageInterface
:=
opts
.
Decorator
(
opts
.
Storage
,
opts
.
Storage
Config
,
cachesize
.
GetWatchCacheSizeByResource
(
cachesize
.
Nodes
),
&
api
.
Node
{},
prefix
,
...
...
pkg/registry/node/etcd/etcd_test.go
View file @
d0938094
...
...
@@ -39,7 +39,7 @@ func (fakeConnectionInfoGetter) GetConnectionInfo(ctx api.Context, nodeName stri
func
newStorage
(
t
*
testing
.
T
)
(
*
REST
,
*
etcdtesting
.
EtcdTestServer
)
{
etcdStorage
,
server
:=
registrytest
.
NewEtcdStorage
(
t
,
""
)
restOptions
:=
generic
.
RESTOptions
{
Storage
:
etcdStorage
,
Decorator
:
generic
.
UndecoratedStorage
,
DeleteCollectionWorkers
:
1
}
restOptions
:=
generic
.
RESTOptions
{
Storage
Config
:
etcdStorage
,
Decorator
:
generic
.
UndecoratedStorage
,
DeleteCollectionWorkers
:
1
}
storage
:=
NewStorage
(
restOptions
,
fakeConnectionInfoGetter
{},
nil
)
return
storage
.
Node
,
server
}
...
...
pkg/registry/persistentvolume/etcd/etcd.go
View file @
d0938094
...
...
@@ -37,7 +37,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) {
newListFunc
:=
func
()
runtime
.
Object
{
return
&
api
.
PersistentVolumeList
{}
}
storageInterface
:=
opts
.
Decorator
(
opts
.
Storage
,
opts
.
Storage
Config
,
cachesize
.
GetWatchCacheSizeByResource
(
cachesize
.
PersistentVolumes
),
&
api
.
PersistentVolume
{},
prefix
,
...
...
pkg/registry/persistentvolume/etcd/etcd_test.go
View file @
d0938094
...
...
@@ -34,7 +34,7 @@ import (
func
newStorage
(
t
*
testing
.
T
)
(
*
REST
,
*
StatusREST
,
*
etcdtesting
.
EtcdTestServer
)
{
etcdStorage
,
server
:=
registrytest
.
NewEtcdStorage
(
t
,
""
)
restOptions
:=
generic
.
RESTOptions
{
Storage
:
etcdStorage
,
Decorator
:
generic
.
UndecoratedStorage
,
DeleteCollectionWorkers
:
1
}
restOptions
:=
generic
.
RESTOptions
{
Storage
Config
:
etcdStorage
,
Decorator
:
generic
.
UndecoratedStorage
,
DeleteCollectionWorkers
:
1
}
persistentVolumeStorage
,
statusStorage
:=
NewREST
(
restOptions
)
return
persistentVolumeStorage
,
statusStorage
,
server
}
...
...
pkg/registry/persistentvolumeclaim/etcd/etcd.go
View file @
d0938094
...
...
@@ -37,7 +37,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) {
newListFunc
:=
func
()
runtime
.
Object
{
return
&
api
.
PersistentVolumeClaimList
{}
}
storageInterface
:=
opts
.
Decorator
(
opts
.
Storage
,
opts
.
Storage
Config
,
cachesize
.
GetWatchCacheSizeByResource
(
cachesize
.
PersistentVolumeClaims
),
&
api
.
PersistentVolumeClaim
{},
prefix
,
...
...
pkg/registry/persistentvolumeclaim/etcd/etcd_test.go
View file @
d0938094
...
...
@@ -34,7 +34,7 @@ import (
func
newStorage
(
t
*
testing
.
T
)
(
*
REST
,
*
StatusREST
,
*
etcdtesting
.
EtcdTestServer
)
{
etcdStorage
,
server
:=
registrytest
.
NewEtcdStorage
(
t
,
""
)
restOptions
:=
generic
.
RESTOptions
{
Storage
:
etcdStorage
,
Decorator
:
generic
.
UndecoratedStorage
,
DeleteCollectionWorkers
:
1
}
restOptions
:=
generic
.
RESTOptions
{
Storage
Config
:
etcdStorage
,
Decorator
:
generic
.
UndecoratedStorage
,
DeleteCollectionWorkers
:
1
}
persistentVolumeClaimStorage
,
statusStorage
:=
NewREST
(
restOptions
)
return
persistentVolumeClaimStorage
,
statusStorage
,
server
}
...
...
pkg/registry/petset/etcd/etcd.go
View file @
d0938094
...
...
@@ -39,7 +39,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) {
newListFunc
:=
func
()
runtime
.
Object
{
return
&
appsapi
.
PetSetList
{}
}
storageInterface
:=
opts
.
Decorator
(
opts
.
Storage
,
opts
.
Storage
Config
,
cachesize
.
GetWatchCacheSizeByResource
(
cachesize
.
PetSet
),
&
appsapi
.
PetSet
{},
prefix
,
...
...
pkg/registry/petset/etcd/etcd_test.go
View file @
d0938094
...
...
@@ -33,7 +33,7 @@ import (
func
newStorage
(
t
*
testing
.
T
)
(
*
REST
,
*
StatusREST
,
*
etcdtesting
.
EtcdTestServer
)
{
etcdStorage
,
server
:=
registrytest
.
NewEtcdStorage
(
t
,
apps
.
GroupName
)
restOptions
:=
generic
.
RESTOptions
{
Storage
:
etcdStorage
,
Decorator
:
generic
.
UndecoratedStorage
,
DeleteCollectionWorkers
:
1
,
ResourcePrefix
:
"petsets"
}
restOptions
:=
generic
.
RESTOptions
{
Storage
Config
:
etcdStorage
,
Decorator
:
generic
.
UndecoratedStorage
,
DeleteCollectionWorkers
:
1
,
ResourcePrefix
:
"petsets"
}
petSetStorage
,
statusStorage
:=
NewREST
(
restOptions
)
return
petSetStorage
,
statusStorage
,
server
}
...
...
pkg/registry/pod/etcd/etcd.go
View file @
d0938094
...
...
@@ -61,7 +61,7 @@ func NewStorage(opts generic.RESTOptions, k client.ConnectionInfoGetter, proxyTr
newListFunc
:=
func
()
runtime
.
Object
{
return
&
api
.
PodList
{}
}
storageInterface
:=
opts
.
Decorator
(
opts
.
Storage
,
opts
.
Storage
Config
,
cachesize
.
GetWatchCacheSizeByResource
(
cachesize
.
Pods
),
&
api
.
Pod
{},
prefix
,
...
...
pkg/registry/pod/etcd/etcd_test.go
View file @
d0938094
...
...
@@ -39,7 +39,7 @@ import (
func
newStorage
(
t
*
testing
.
T
)
(
*
REST
,
*
BindingREST
,
*
StatusREST
,
*
etcdtesting
.
EtcdTestServer
)
{
etcdStorage
,
server
:=
registrytest
.
NewEtcdStorage
(
t
,
""
)
restOptions
:=
generic
.
RESTOptions
{
Storage
:
etcdStorage
,
Decorator
:
generic
.
UndecoratedStorage
,
DeleteCollectionWorkers
:
3
}
restOptions
:=
generic
.
RESTOptions
{
Storage
Config
:
etcdStorage
,
Decorator
:
generic
.
UndecoratedStorage
,
DeleteCollectionWorkers
:
3
}
storage
:=
NewStorage
(
restOptions
,
nil
,
nil
)
return
storage
.
Pod
,
storage
.
Binding
,
storage
.
Status
,
server
}
...
...
@@ -144,9 +144,9 @@ func (f FailDeletionStorage) Delete(ctx context.Context, key string, out runtime
func
newFailDeleteStorage
(
t
*
testing
.
T
,
called
*
bool
)
(
*
REST
,
*
etcdtesting
.
EtcdTestServer
)
{
etcdStorage
,
server
:=
registrytest
.
NewEtcdStorage
(
t
,
""
)
failDeleteStorage
:=
FailDeletionStorage
{
etcdStorage
,
called
}
restOptions
:=
generic
.
RESTOptions
{
Storage
:
failDeleteStorage
,
Decorator
:
generic
.
UndecoratedStorage
,
DeleteCollectionWorkers
:
3
}
restOptions
:=
generic
.
RESTOptions
{
StorageConfig
:
etcdStorage
,
Decorator
:
generic
.
UndecoratedStorage
,
DeleteCollectionWorkers
:
3
}
storage
:=
NewStorage
(
restOptions
,
nil
,
nil
)
storage
.
Pod
.
Store
.
Storage
=
FailDeletionStorage
{
storage
.
Pod
.
Store
.
Storage
,
called
}
return
storage
.
Pod
,
server
}
...
...
pkg/registry/pod/rest/log_test.go
View file @
d0938094
...
...
@@ -21,6 +21,7 @@ import (
"k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/api/errors"
"k8s.io/kubernetes/pkg/registry/generic"
"k8s.io/kubernetes/pkg/registry/generic/registry"
"k8s.io/kubernetes/pkg/registry/registrytest"
)
...
...
@@ -28,7 +29,7 @@ import (
func
TestPodLogValidates
(
t
*
testing
.
T
)
{
etcdStorage
,
_
:=
registrytest
.
NewEtcdStorage
(
t
,
""
)
store
:=
&
registry
.
Store
{
Storage
:
etcdStorage
,
Storage
:
generic
.
NewRawStorage
(
etcdStorage
)
,
}
logRest
:=
&
LogREST
{
Store
:
store
,
KubeletConn
:
nil
}
...
...
pkg/registry/poddisruptionbudget/etcd/etcd.go
View file @
d0938094
...
...
@@ -39,7 +39,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) {
newListFunc
:=
func
()
runtime
.
Object
{
return
&
policyapi
.
PodDisruptionBudgetList
{}
}
storageInterface
:=
opts
.
Decorator
(
opts
.
Storage
,
opts
.
Storage
Config
,
cachesize
.
GetWatchCacheSizeByResource
(
cachesize
.
PodDisruptionBudget
),
&
policyapi
.
PodDisruptionBudget
{},
prefix
,
...
...
pkg/registry/poddisruptionbudget/etcd/etcd_test.go
View file @
d0938094
...
...
@@ -34,7 +34,7 @@ import (
func
newStorage
(
t
*
testing
.
T
)
(
*
REST
,
*
StatusREST
,
*
etcdtesting
.
EtcdTestServer
)
{
etcdStorage
,
server
:=
registrytest
.
NewEtcdStorage
(
t
,
policy
.
GroupName
)
restOptions
:=
generic
.
RESTOptions
{
Storage
:
etcdStorage
,
Decorator
:
generic
.
UndecoratedStorage
,
DeleteCollectionWorkers
:
1
,
ResourcePrefix
:
"poddisruptionbudgets"
}
restOptions
:=
generic
.
RESTOptions
{
Storage
Config
:
etcdStorage
,
Decorator
:
generic
.
UndecoratedStorage
,
DeleteCollectionWorkers
:
1
,
ResourcePrefix
:
"poddisruptionbudgets"
}
podDisruptionBudgetStorage
,
statusStorage
:=
NewREST
(
restOptions
)
return
podDisruptionBudgetStorage
,
statusStorage
,
server
}
...
...
pkg/registry/podsecuritypolicy/etcd/etcd.go
View file @
d0938094
...
...
@@ -38,7 +38,7 @@ func NewREST(opts generic.RESTOptions) *REST {
newListFunc
:=
func
()
runtime
.
Object
{
return
&
extensions
.
PodSecurityPolicyList
{}
}
storageInterface
:=
opts
.
Decorator
(
opts
.
Storage
,
opts
.
Storage
Config
,
cachesize
.
GetWatchCacheSizeByResource
(
cachesize
.
PodSecurityPolicies
),
&
extensions
.
PodSecurityPolicy
{},
prefix
,
...
...
pkg/registry/podsecuritypolicy/etcd/etcd_test.go
View file @
d0938094
...
...
@@ -33,7 +33,7 @@ import (
func
newStorage
(
t
*
testing
.
T
)
(
*
REST
,
*
etcdtesting
.
EtcdTestServer
)
{
etcdStorage
,
server
:=
registrytest
.
NewEtcdStorage
(
t
,
"extensions"
)
restOptions
:=
generic
.
RESTOptions
{
Storage
:
etcdStorage
,
Decorator
:
generic
.
UndecoratedStorage
,
DeleteCollectionWorkers
:
1
}
restOptions
:=
generic
.
RESTOptions
{
Storage
Config
:
etcdStorage
,
Decorator
:
generic
.
UndecoratedStorage
,
DeleteCollectionWorkers
:
1
}
return
NewREST
(
restOptions
),
server
}
...
...
pkg/registry/podtemplate/etcd/etcd.go
View file @
d0938094
...
...
@@ -36,7 +36,7 @@ func NewREST(opts generic.RESTOptions) *REST {
newListFunc
:=
func
()
runtime
.
Object
{
return
&
api
.
PodTemplateList
{}
}
storageInterface
:=
opts
.
Decorator
(
opts
.
Storage
,
opts
.
Storage
Config
,
cachesize
.
GetWatchCacheSizeByResource
(
cachesize
.
PodTemplates
),
&
api
.
PodTemplate
{},
prefix
,
...
...
pkg/registry/podtemplate/etcd/etcd_test.go
View file @
d0938094
...
...
@@ -30,7 +30,7 @@ import (
func
newStorage
(
t
*
testing
.
T
)
(
*
REST
,
*
etcdtesting
.
EtcdTestServer
)
{
etcdStorage
,
server
:=
registrytest
.
NewEtcdStorage
(
t
,
""
)
restOptions
:=
generic
.
RESTOptions
{
Storage
:
etcdStorage
,
Decorator
:
generic
.
UndecoratedStorage
,
DeleteCollectionWorkers
:
1
}
restOptions
:=
generic
.
RESTOptions
{
Storage
Config
:
etcdStorage
,
Decorator
:
generic
.
UndecoratedStorage
,
DeleteCollectionWorkers
:
1
}
return
NewREST
(
restOptions
),
server
}
...
...
pkg/registry/registrytest/etcd.go
View file @
d0938094
...
...
@@ -29,17 +29,23 @@ import (
"k8s.io/kubernetes/pkg/labels"
"k8s.io/kubernetes/pkg/registry/generic/registry"
"k8s.io/kubernetes/pkg/runtime"
"k8s.io/kubernetes/pkg/storage"
etcdstorage
"k8s.io/kubernetes/pkg/storage/etcd"
"k8s.io/kubernetes/pkg/storage/etcd/etcdtest"
etcdtesting
"k8s.io/kubernetes/pkg/storage/etcd/testing"
"k8s.io/kubernetes/pkg/storage/storagebackend"
storagetesting
"k8s.io/kubernetes/pkg/storage/testing"
)
func
NewEtcdStorage
(
t
*
testing
.
T
,
group
string
)
(
storage
.
Interface
,
*
etcdtesting
.
EtcdTestServer
)
{
func
NewEtcdStorage
(
t
*
testing
.
T
,
group
string
)
(
*
storagebackend
.
Config
,
*
etcdtesting
.
EtcdTestServer
)
{
server
:=
etcdtesting
.
NewUnsecuredEtcdTestClientServer
(
t
)
storage
:=
etcdstorage
.
NewEtcdStorage
(
server
.
Client
,
testapi
.
Groups
[
group
]
.
StorageCodec
(),
etcdtest
.
PathPrefix
(),
false
,
etcdtest
.
DeserializationCacheSize
)
return
storage
,
server
config
:=
&
storagebackend
.
Config
{
Type
:
"etcd2"
,
Prefix
:
etcdtest
.
PathPrefix
(),
ServerList
:
server
.
Client
.
Endpoints
(),
DeserializationCacheSize
:
etcdtest
.
DeserializationCacheSize
,
Codec
:
testapi
.
Groups
[
group
]
.
StorageCodec
(),
}
return
config
,
server
}
type
Tester
struct
{
...
...
pkg/registry/replicaset/etcd/etcd.go
View file @
d0938094
...
...
@@ -62,7 +62,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) {
newListFunc
:=
func
()
runtime
.
Object
{
return
&
extensions
.
ReplicaSetList
{}
}
storageInterface
:=
opts
.
Decorator
(
opts
.
Storage
,
opts
.
Storage
Config
,
cachesize
.
GetWatchCacheSizeByResource
(
cachesize
.
Replicasets
),
&
extensions
.
ReplicaSet
{},
prefix
,
...
...
pkg/registry/replicaset/etcd/etcd_test.go
View file @
d0938094
...
...
@@ -38,7 +38,7 @@ const defaultReplicas = 100
func
newStorage
(
t
*
testing
.
T
)
(
*
ReplicaSetStorage
,
*
etcdtesting
.
EtcdTestServer
)
{
etcdStorage
,
server
:=
registrytest
.
NewEtcdStorage
(
t
,
"extensions"
)
restOptions
:=
generic
.
RESTOptions
{
Storage
:
etcdStorage
,
Decorator
:
generic
.
UndecoratedStorage
,
DeleteCollectionWorkers
:
1
,
ResourcePrefix
:
"replicasets"
}
restOptions
:=
generic
.
RESTOptions
{
Storage
Config
:
etcdStorage
,
Decorator
:
generic
.
UndecoratedStorage
,
DeleteCollectionWorkers
:
1
,
ResourcePrefix
:
"replicasets"
}
replicaSetStorage
:=
NewStorage
(
restOptions
)
return
&
replicaSetStorage
,
server
}
...
...
pkg/registry/resourcequota/etcd/etcd.go
View file @
d0938094
...
...
@@ -37,7 +37,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) {
newListFunc
:=
func
()
runtime
.
Object
{
return
&
api
.
ResourceQuotaList
{}
}
storageInterface
:=
opts
.
Decorator
(
opts
.
Storage
,
opts
.
Storage
Config
,
cachesize
.
GetWatchCacheSizeByResource
(
cachesize
.
ResourceQuotas
),
&
api
.
ResourceQuota
{},
prefix
,
...
...
pkg/registry/resourcequota/etcd/etcd_test.go
View file @
d0938094
...
...
@@ -33,7 +33,7 @@ import (
func
newStorage
(
t
*
testing
.
T
)
(
*
REST
,
*
StatusREST
,
*
etcdtesting
.
EtcdTestServer
)
{
etcdStorage
,
server
:=
registrytest
.
NewEtcdStorage
(
t
,
""
)
restOptions
:=
generic
.
RESTOptions
{
Storage
:
etcdStorage
,
Decorator
:
generic
.
UndecoratedStorage
,
DeleteCollectionWorkers
:
1
}
restOptions
:=
generic
.
RESTOptions
{
Storage
Config
:
etcdStorage
,
Decorator
:
generic
.
UndecoratedStorage
,
DeleteCollectionWorkers
:
1
}
resourceQuotaStorage
,
statusStorage
:=
NewREST
(
restOptions
)
return
resourceQuotaStorage
,
statusStorage
,
server
}
...
...
pkg/registry/role/etcd/etcd.go
View file @
d0938094
...
...
@@ -38,7 +38,7 @@ func NewREST(opts generic.RESTOptions) *REST {
newListFunc
:=
func
()
runtime
.
Object
{
return
&
rbac
.
RoleList
{}
}
storageInterface
:=
opts
.
Decorator
(
opts
.
Storage
,
opts
.
Storage
Config
,
cachesize
.
GetWatchCacheSizeByResource
(
cachesize
.
Roles
),
&
rbac
.
Role
{},
prefix
,
...
...
pkg/registry/rolebinding/etcd/etcd.go
View file @
d0938094
...
...
@@ -38,7 +38,7 @@ func NewREST(opts generic.RESTOptions) *REST {
newListFunc
:=
func
()
runtime
.
Object
{
return
&
rbac
.
RoleBindingList
{}
}
storageInterface
:=
opts
.
Decorator
(
opts
.
Storage
,
opts
.
Storage
Config
,
cachesize
.
GetWatchCacheSizeByResource
(
cachesize
.
RoleBindings
),
&
rbac
.
RoleBinding
{},
prefix
,
...
...
pkg/registry/scheduledjob/etcd/etcd.go
View file @
d0938094
...
...
@@ -39,7 +39,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) {
newListFunc
:=
func
()
runtime
.
Object
{
return
&
batch
.
ScheduledJobList
{}
}
storageInterface
:=
opts
.
Decorator
(
opts
.
Storage
,
opts
.
Storage
Config
,
cachesize
.
GetWatchCacheSizeByResource
(
cachesize
.
ScheduledJobs
),
&
batch
.
ScheduledJob
{},
prefix
,
...
...
pkg/registry/scheduledjob/etcd/etcd_test.go
View file @
d0938094
...
...
@@ -33,7 +33,7 @@ import (
func
newStorage
(
t
*
testing
.
T
)
(
*
REST
,
*
StatusREST
,
*
etcdtesting
.
EtcdTestServer
)
{
etcdStorage
,
server
:=
registrytest
.
NewEtcdStorage
(
t
,
batch
.
GroupName
)
restOptions
:=
generic
.
RESTOptions
{
Storage
:
etcdStorage
,
Decorator
:
generic
.
UndecoratedStorage
,
DeleteCollectionWorkers
:
1
}
restOptions
:=
generic
.
RESTOptions
{
Storage
Config
:
etcdStorage
,
Decorator
:
generic
.
UndecoratedStorage
,
DeleteCollectionWorkers
:
1
}
storage
,
statusStorage
:=
NewREST
(
restOptions
)
return
storage
,
statusStorage
,
server
}
...
...
pkg/registry/secret/etcd/etcd.go
View file @
d0938094
...
...
@@ -36,7 +36,7 @@ func NewREST(opts generic.RESTOptions) *REST {
newListFunc
:=
func
()
runtime
.
Object
{
return
&
api
.
SecretList
{}
}
storageInterface
:=
opts
.
Decorator
(
opts
.
Storage
,
opts
.
Storage
Config
,
cachesize
.
GetWatchCacheSizeByResource
(
cachesize
.
Secrets
),
&
api
.
Secret
{},
prefix
,
...
...
pkg/registry/secret/etcd/etcd_test.go
View file @
d0938094
...
...
@@ -30,7 +30,7 @@ import (
func
newStorage
(
t
*
testing
.
T
)
(
*
REST
,
*
etcdtesting
.
EtcdTestServer
)
{
etcdStorage
,
server
:=
registrytest
.
NewEtcdStorage
(
t
,
""
)
restOptions
:=
generic
.
RESTOptions
{
Storage
:
etcdStorage
,
Decorator
:
generic
.
UndecoratedStorage
,
DeleteCollectionWorkers
:
1
}
restOptions
:=
generic
.
RESTOptions
{
Storage
Config
:
etcdStorage
,
Decorator
:
generic
.
UndecoratedStorage
,
DeleteCollectionWorkers
:
1
}
return
NewREST
(
restOptions
),
server
}
...
...
pkg/registry/service/allocator/etcd/etcd.go
View file @
d0938094
...
...
@@ -25,10 +25,12 @@ import (
k8serr
"k8s.io/kubernetes/pkg/api/errors"
storeerr
"k8s.io/kubernetes/pkg/api/errors/storage"
"k8s.io/kubernetes/pkg/api/unversioned"
"k8s.io/kubernetes/pkg/registry/generic"
"k8s.io/kubernetes/pkg/registry/rangeallocation"
"k8s.io/kubernetes/pkg/registry/service/allocator"
"k8s.io/kubernetes/pkg/runtime"
"k8s.io/kubernetes/pkg/storage"
"k8s.io/kubernetes/pkg/storage/storagebackend"
"golang.org/x/net/context"
)
...
...
@@ -58,7 +60,8 @@ var _ rangeallocation.RangeRegistry = &Etcd{}
// NewEtcd returns an allocator that is backed by Etcd and can manage
// persisting the snapshot state of allocation after each allocation is made.
func
NewEtcd
(
alloc
allocator
.
Snapshottable
,
baseKey
string
,
resource
unversioned
.
GroupResource
,
storage
storage
.
Interface
)
*
Etcd
{
func
NewEtcd
(
alloc
allocator
.
Snapshottable
,
baseKey
string
,
resource
unversioned
.
GroupResource
,
config
*
storagebackend
.
Config
)
*
Etcd
{
storage
:=
generic
.
NewRawStorage
(
config
)
return
&
Etcd
{
alloc
:
alloc
,
storage
:
storage
,
...
...
pkg/registry/service/allocator/etcd/etcd_test.go
View file @
d0938094
...
...
@@ -25,15 +25,16 @@ import (
"k8s.io/kubernetes/pkg/registry/service/allocator"
"k8s.io/kubernetes/pkg/storage/etcd/etcdtest"
etcdtesting
"k8s.io/kubernetes/pkg/storage/etcd/testing"
"k8s.io/kubernetes/pkg/storage/storagebackend"
"golang.org/x/net/context"
)
func
newStorage
(
t
*
testing
.
T
)
(
*
Etcd
,
*
etcdtesting
.
EtcdTestServer
,
allocator
.
Interface
)
{
func
newStorage
(
t
*
testing
.
T
)
(
*
Etcd
,
*
etcdtesting
.
EtcdTestServer
,
allocator
.
Interface
,
*
storagebackend
.
Config
)
{
etcdStorage
,
server
:=
registrytest
.
NewEtcdStorage
(
t
,
""
)
mem
:=
allocator
.
NewAllocationMap
(
100
,
"rangeSpecValue"
)
etcd
:=
NewEtcd
(
mem
,
"/ranges/serviceips"
,
api
.
Resource
(
"serviceipallocations"
),
etcdStorage
)
return
etcd
,
server
,
mem
return
etcd
,
server
,
mem
,
etcdStorage
}
func
validNewRangeAllocation
()
*
api
.
RangeAllocation
{
...
...
@@ -48,7 +49,7 @@ func key() string {
}
func
TestEmpty
(
t
*
testing
.
T
)
{
storage
,
server
,
_
:=
newStorage
(
t
)
storage
,
server
,
_
,
_
:=
newStorage
(
t
)
defer
server
.
Terminate
(
t
)
if
_
,
err
:=
storage
.
Allocate
(
1
);
!
strings
.
Contains
(
err
.
Error
(),
"cannot allocate resources of type serviceipallocations at this time"
)
{
t
.
Fatal
(
err
)
...
...
@@ -56,7 +57,7 @@ func TestEmpty(t *testing.T) {
}
func
TestStore
(
t
*
testing
.
T
)
{
storage
,
server
,
backing
:=
newStorage
(
t
)
storage
,
server
,
backing
,
config
:=
newStorage
(
t
)
defer
server
.
Terminate
(
t
)
if
err
:=
storage
.
storage
.
Create
(
context
.
TODO
(),
key
(),
validNewRangeAllocation
(),
nil
,
0
);
err
!=
nil
{
t
.
Fatalf
(
"unexpected error: %v"
,
err
)
...
...
@@ -93,7 +94,7 @@ func TestStore(t *testing.T) {
}
other
=
allocator
.
NewAllocationMap
(
100
,
"rangeSpecValue"
)
otherStorage
:=
NewEtcd
(
other
,
"/ranges/serviceips"
,
api
.
Resource
(
"serviceipallocations"
),
storage
.
storage
)
otherStorage
:=
NewEtcd
(
other
,
"/ranges/serviceips"
,
api
.
Resource
(
"serviceipallocations"
),
config
)
if
ok
,
err
:=
otherStorage
.
Allocate
(
2
);
ok
||
err
!=
nil
{
t
.
Fatal
(
err
)
}
...
...
pkg/registry/service/etcd/etcd.go
View file @
d0938094
...
...
@@ -37,7 +37,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) {
newListFunc
:=
func
()
runtime
.
Object
{
return
&
api
.
ServiceList
{}
}
storageInterface
:=
opts
.
Decorator
(
opts
.
Storage
,
opts
.
Storage
Config
,
cachesize
.
GetWatchCacheSizeByResource
(
cachesize
.
Services
),
&
api
.
Service
{},
prefix
,
...
...
pkg/registry/service/etcd/etcd_test.go
View file @
d0938094
...
...
@@ -31,7 +31,7 @@ import (
func
newStorage
(
t
*
testing
.
T
)
(
*
REST
,
*
StatusREST
,
*
etcdtesting
.
EtcdTestServer
)
{
etcdStorage
,
server
:=
registrytest
.
NewEtcdStorage
(
t
,
""
)
restOptions
:=
generic
.
RESTOptions
{
Storage
:
etcdStorage
,
Decorator
:
generic
.
UndecoratedStorage
,
DeleteCollectionWorkers
:
1
}
restOptions
:=
generic
.
RESTOptions
{
Storage
Config
:
etcdStorage
,
Decorator
:
generic
.
UndecoratedStorage
,
DeleteCollectionWorkers
:
1
}
serviceStorage
,
statusStorage
:=
NewREST
(
restOptions
)
return
serviceStorage
,
statusStorage
,
server
}
...
...
pkg/registry/service/ipallocator/etcd/etcd_test.go
View file @
d0938094
...
...
@@ -22,6 +22,7 @@ import (
"testing"
"k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/registry/generic"
"k8s.io/kubernetes/pkg/registry/registrytest"
"k8s.io/kubernetes/pkg/registry/service/allocator"
allocatoretcd
"k8s.io/kubernetes/pkg/registry/service/allocator/etcd"
...
...
@@ -48,7 +49,7 @@ func newStorage(t *testing.T) (*etcdtesting.EtcdTestServer, ipallocator.Interfac
return
etcd
})
return
server
,
storage
,
backing
,
etcdStorage
return
server
,
storage
,
backing
,
generic
.
NewRawStorage
(
etcdStorage
)
}
func
validNewRangeAllocation
()
*
api
.
RangeAllocation
{
...
...
pkg/registry/serviceaccount/etcd/etcd.go
View file @
d0938094
...
...
@@ -36,7 +36,7 @@ func NewREST(opts generic.RESTOptions) *REST {
newListFunc
:=
func
()
runtime
.
Object
{
return
&
api
.
ServiceAccountList
{}
}
storageInterface
:=
opts
.
Decorator
(
opts
.
Storage
,
opts
.
Storage
Config
,
cachesize
.
GetWatchCacheSizeByResource
(
cachesize
.
ServiceAccounts
),
&
api
.
ServiceAccount
{},
prefix
,
...
...
pkg/registry/serviceaccount/etcd/etcd_test.go
View file @
d0938094
...
...
@@ -30,7 +30,7 @@ import (
func
newStorage
(
t
*
testing
.
T
)
(
*
REST
,
*
etcdtesting
.
EtcdTestServer
)
{
etcdStorage
,
server
:=
registrytest
.
NewEtcdStorage
(
t
,
""
)
restOptions
:=
generic
.
RESTOptions
{
Storage
:
etcdStorage
,
Decorator
:
generic
.
UndecoratedStorage
,
DeleteCollectionWorkers
:
1
}
restOptions
:=
generic
.
RESTOptions
{
Storage
Config
:
etcdStorage
,
Decorator
:
generic
.
UndecoratedStorage
,
DeleteCollectionWorkers
:
1
}
return
NewREST
(
restOptions
),
server
}
...
...
pkg/registry/storageclass/etcd/etcd.go
View file @
d0938094
...
...
@@ -37,7 +37,7 @@ func NewREST(opts generic.RESTOptions) *REST {
newListFunc
:=
func
()
runtime
.
Object
{
return
&
extensions
.
StorageClassList
{}
}
storageInterface
:=
opts
.
Decorator
(
opts
.
Storage
,
opts
.
Storage
Config
,
cachesize
.
GetWatchCacheSizeByResource
(
cachesize
.
StorageClasses
),
&
extensions
.
StorageClass
{},
prefix
,
...
...
pkg/registry/storageclass/etcd/etcd_test.go
View file @
d0938094
...
...
@@ -31,7 +31,7 @@ import (
func
newStorage
(
t
*
testing
.
T
)
(
*
REST
,
*
etcdtesting
.
EtcdTestServer
)
{
etcdStorage
,
server
:=
registrytest
.
NewEtcdStorage
(
t
,
extensions
.
GroupName
)
restOptions
:=
generic
.
RESTOptions
{
Storage
:
etcdStorage
,
Decorator
:
generic
.
UndecoratedStorage
,
DeleteCollectionWorkers
:
1
}
restOptions
:=
generic
.
RESTOptions
{
Storage
Config
:
etcdStorage
,
Decorator
:
generic
.
UndecoratedStorage
,
DeleteCollectionWorkers
:
1
}
storageClassStorage
:=
NewREST
(
restOptions
)
return
storageClassStorage
,
server
}
...
...
pkg/registry/thirdpartyresource/etcd/etcd.go
View file @
d0938094
...
...
@@ -35,7 +35,7 @@ func NewREST(opts generic.RESTOptions) *REST {
prefix
:=
"/"
+
opts
.
ResourcePrefix
// We explicitly do NOT do any decoration here yet.
storageInterface
:=
opts
.
Storage
storageInterface
:=
generic
.
NewRawStorage
(
opts
.
StorageConfig
)
store
:=
&
registry
.
Store
{
NewFunc
:
func
()
runtime
.
Object
{
return
&
extensions
.
ThirdPartyResource
{}
},
...
...
pkg/registry/thirdpartyresource/etcd/etcd_test.go
View file @
d0938094
...
...
@@ -34,7 +34,7 @@ import (
func
newStorage
(
t
*
testing
.
T
)
(
*
REST
,
*
etcdtesting
.
EtcdTestServer
)
{
etcdStorage
,
server
:=
registrytest
.
NewEtcdStorage
(
t
,
extensions
.
GroupName
)
restOptions
:=
generic
.
RESTOptions
{
Storage
:
etcdStorage
,
Decorator
:
generic
.
UndecoratedStorage
,
DeleteCollectionWorkers
:
1
}
restOptions
:=
generic
.
RESTOptions
{
Storage
Config
:
etcdStorage
,
Decorator
:
generic
.
UndecoratedStorage
,
DeleteCollectionWorkers
:
1
}
return
NewREST
(
restOptions
),
server
}
...
...
pkg/registry/thirdpartyresourcedata/etcd/etcd.go
View file @
d0938094
...
...
@@ -38,7 +38,7 @@ func NewREST(opts generic.RESTOptions, group, kind string) *REST {
prefix
:=
"/ThirdPartyResourceData/"
+
group
+
"/"
+
strings
.
ToLower
(
kind
)
+
"s"
// We explicitly do NOT do any decoration here yet.
storageInterface
:=
opts
.
Storage
storageInterface
:=
generic
.
NewRawStorage
(
opts
.
StorageConfig
)
store
:=
&
registry
.
Store
{
NewFunc
:
func
()
runtime
.
Object
{
return
&
extensions
.
ThirdPartyResourceData
{}
},
...
...
pkg/registry/thirdpartyresourcedata/etcd/etcd_test.go
View file @
d0938094
...
...
@@ -33,7 +33,7 @@ import (
func
newStorage
(
t
*
testing
.
T
)
(
*
REST
,
*
etcdtesting
.
EtcdTestServer
)
{
etcdStorage
,
server
:=
registrytest
.
NewEtcdStorage
(
t
,
extensions
.
GroupName
)
restOptions
:=
generic
.
RESTOptions
{
Storage
:
etcdStorage
,
Decorator
:
generic
.
UndecoratedStorage
,
DeleteCollectionWorkers
:
1
}
restOptions
:=
generic
.
RESTOptions
{
Storage
Config
:
etcdStorage
,
Decorator
:
generic
.
UndecoratedStorage
,
DeleteCollectionWorkers
:
1
}
return
NewREST
(
restOptions
,
"foo"
,
"bar"
),
server
}
...
...
pkg/storage/storagebackend/config.go
View file @
d0938094
...
...
@@ -16,6 +16,8 @@ limitations under the License.
package
storagebackend
import
"k8s.io/kubernetes/pkg/runtime"
const
(
StorageTypeUnset
=
""
StorageTypeETCD2
=
"etcd2"
...
...
@@ -40,4 +42,6 @@ type Config struct {
// Currently this is only supported in etcd2.
// We will drop the cache once using protobuf.
DeserializationCacheSize
int
Codec
runtime
.
Codec
}
pkg/storage/storagebackend/factory/etcd2.go
View file @
d0938094
...
...
@@ -24,14 +24,13 @@ import (
etcd2client
"github.com/coreos/etcd/client"
"github.com/coreos/etcd/pkg/transport"
"k8s.io/kubernetes/pkg/runtime"
"k8s.io/kubernetes/pkg/storage"
"k8s.io/kubernetes/pkg/storage/etcd"
"k8s.io/kubernetes/pkg/storage/storagebackend"
utilnet
"k8s.io/kubernetes/pkg/util/net"
)
func
newETCD2Storage
(
c
storagebackend
.
Config
,
codec
runtime
.
Codec
)
(
storage
.
Interface
,
error
)
{
func
newETCD2Storage
(
c
storagebackend
.
Config
)
(
storage
.
Interface
,
error
)
{
tr
,
err
:=
newTransportForETCD2
(
c
.
CertFile
,
c
.
KeyFile
,
c
.
CAFile
)
if
err
!=
nil
{
return
nil
,
err
...
...
@@ -40,7 +39,7 @@ func newETCD2Storage(c storagebackend.Config, codec runtime.Codec) (storage.Inte
if
err
!=
nil
{
return
nil
,
err
}
return
etcd
.
NewEtcdStorage
(
client
,
codec
,
c
.
Prefix
,
c
.
Quorum
,
c
.
DeserializationCacheSize
),
nil
return
etcd
.
NewEtcdStorage
(
client
,
c
.
C
odec
,
c
.
Prefix
,
c
.
Quorum
,
c
.
DeserializationCacheSize
),
nil
}
func
newETCD2Client
(
tr
*
http
.
Transport
,
serverList
[]
string
)
(
etcd2client
.
Client
,
error
)
{
...
...
pkg/storage/storagebackend/factory/etcd3.go
View file @
d0938094
...
...
@@ -22,13 +22,12 @@ import (
"github.com/coreos/etcd/clientv3"
"golang.org/x/net/context"
"k8s.io/kubernetes/pkg/runtime"
"k8s.io/kubernetes/pkg/storage"
"k8s.io/kubernetes/pkg/storage/etcd3"
"k8s.io/kubernetes/pkg/storage/storagebackend"
)
func
newETCD3Storage
(
c
storagebackend
.
Config
,
codec
runtime
.
Codec
)
(
storage
.
Interface
,
error
)
{
func
newETCD3Storage
(
c
storagebackend
.
Config
)
(
storage
.
Interface
,
error
)
{
endpoints
:=
c
.
ServerList
for
i
,
s
:=
range
endpoints
{
endpoints
[
i
]
=
strings
.
TrimLeft
(
s
,
"http://"
)
...
...
@@ -41,5 +40,5 @@ func newETCD3Storage(c storagebackend.Config, codec runtime.Codec) (storage.Inte
return
nil
,
err
}
etcd3
.
StartCompactor
(
context
.
Background
(),
client
)
return
etcd3
.
New
(
client
,
codec
,
c
.
Prefix
),
nil
return
etcd3
.
New
(
client
,
c
.
C
odec
,
c
.
Prefix
),
nil
}
pkg/storage/storagebackend/factory/factory.go
View file @
d0938094
...
...
@@ -19,22 +19,21 @@ package factory
import
(
"fmt"
"k8s.io/kubernetes/pkg/runtime"
"k8s.io/kubernetes/pkg/storage"
"k8s.io/kubernetes/pkg/storage/storagebackend"
)
// Create creates a storage backend based on given config.
func
Create
(
c
storagebackend
.
Config
,
codec
runtime
.
Codec
)
(
storage
.
Interface
,
error
)
{
func
Create
(
c
storagebackend
.
Config
)
(
storage
.
Interface
,
error
)
{
switch
c
.
Type
{
case
storagebackend
.
StorageTypeUnset
,
storagebackend
.
StorageTypeETCD2
:
return
newETCD2Storage
(
c
,
codec
)
return
newETCD2Storage
(
c
)
case
storagebackend
.
StorageTypeETCD3
:
// TODO: We have the following features to implement:
// - Support secure connection by using key, cert, and CA files.
// - Honor "https" scheme to support secure connection in gRPC.
// - Support non-quorum read.
return
newETCD3Storage
(
c
,
codec
)
return
newETCD3Storage
(
c
)
default
:
return
nil
,
fmt
.
Errorf
(
"unknown storage type: %s"
,
c
.
Type
)
}
...
...
test/integration/auth/rbac_test.go
View file @
d0938094
...
...
@@ -77,11 +77,11 @@ func clientForUser(user string) *http.Client {
func
newRBACAuthorizer
(
t
*
testing
.
T
,
superUser
string
,
config
*
master
.
Config
)
authorizer
.
Authorizer
{
newRESTOptions
:=
func
(
resource
string
)
generic
.
RESTOptions
{
storage
Interface
,
err
:=
config
.
StorageFactory
.
New
(
rbacapi
.
Resource
(
resource
))
storage
Config
,
err
:=
config
.
StorageFactory
.
NewConfig
(
rbacapi
.
Resource
(
resource
))
if
err
!=
nil
{
t
.
Fatalf
(
"failed to get storage: %v"
,
err
)
}
return
generic
.
RESTOptions
{
Storage
:
storageInterface
,
Decorator
:
generic
.
UndecoratedStorage
,
ResourcePrefix
:
resource
}
return
generic
.
RESTOptions
{
Storage
Config
:
storageConfig
,
Decorator
:
generic
.
UndecoratedStorage
,
ResourcePrefix
:
resource
}
}
roleRegistry
:=
role
.
NewRegistry
(
roleetcd
.
NewREST
(
newRESTOptions
(
"roles"
)))
...
...
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