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
0ab152dd
Commit
0ab152dd
authored
Jan 20, 2016
by
nikhiljindal
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Adding an example apiserver
parent
0b00928c
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
193 additions
and
2 deletions
+193
-2
install.go
...idl/client-gen/testdata/apis/testgroup/install/install.go
+1
-1
register.go
.../go2idl/client-gen/testdata/apis/testgroup/v1/register.go
+4
-1
README.md
examples/apiserver/README.md
+45
-0
reststorage.go
examples/apiserver/rest/reststorage.go
+65
-0
server.go
examples/apiserver/server.go
+78
-0
No files found.
cmd/libs/go2idl/client-gen/testdata/apis/testgroup/install/install.go
View file @
0ab152dd
...
@@ -34,7 +34,7 @@ import (
...
@@ -34,7 +34,7 @@ import (
"k8s.io/kubernetes/pkg/util/sets"
"k8s.io/kubernetes/pkg/util/sets"
)
)
const
importPrefix
=
"k8s.io/kubernetes/
pkg
/apis/testgroup"
const
importPrefix
=
"k8s.io/kubernetes/
cmd/libs/go2idl/client-gen/testdata
/apis/testgroup"
var
accessor
=
meta
.
NewAccessor
()
var
accessor
=
meta
.
NewAccessor
()
...
...
cmd/libs/go2idl/client-gen/testdata/apis/testgroup/v1/register.go
View file @
0ab152dd
...
@@ -40,7 +40,10 @@ func addKnownTypes(scheme *runtime.Scheme) {
...
@@ -40,7 +40,10 @@ func addKnownTypes(scheme *runtime.Scheme) {
)
)
scheme
.
AddKnownTypes
(
SchemeGroupVersion
,
scheme
.
AddKnownTypes
(
SchemeGroupVersion
,
&
v1
.
ListOptions
{})
&
v1
.
ListOptions
{},
&
v1
.
DeleteOptions
{},
&
unversioned
.
Status
{},
&
v1
.
ExportOptions
{})
}
}
func
(
obj
*
TestType
)
GetObjectKind
()
unversioned
.
ObjectKind
{
return
&
obj
.
TypeMeta
}
func
(
obj
*
TestType
)
GetObjectKind
()
unversioned
.
ObjectKind
{
return
&
obj
.
TypeMeta
}
...
...
examples/apiserver/README.md
0 → 100644
View file @
0ab152dd
<!-- BEGIN MUNGE: UNVERSIONED_WARNING -->
<!-- BEGIN STRIP_FOR_RELEASE -->
<img src="http://kubernetes.io/img/warning.png" alt="WARNING"
width="25" height="25">
<img src="http://kubernetes.io/img/warning.png" alt="WARNING"
width="25" height="25">
<img src="http://kubernetes.io/img/warning.png" alt="WARNING"
width="25" height="25">
<img src="http://kubernetes.io/img/warning.png" alt="WARNING"
width="25" height="25">
<img src="http://kubernetes.io/img/warning.png" alt="WARNING"
width="25" height="25">
<h2>
PLEASE NOTE: This document applies to the HEAD of the source tree
</h2>
If you are using a released version of Kubernetes, you should
refer to the docs that go with that version.
Documentation for other releases can be found at
[
releases.k8s.io
](
http://releases.k8s.io
)
.
</strong>
--
<!-- END STRIP_FOR_RELEASE -->
<!-- END MUNGE: UNVERSIONED_WARNING -->
# API Server
This is a work in progress example for an API Server.
We are working on isolating the generic api server code from kubernetes specific
API objects. Some relevant issues:
*
https://github.com/kubernetes/kubernetes/issues/17412
*
https://github.com/kubernetes/kubernetes/issues/2742
*
https://github.com/kubernetes/kubernetes/issues/13541
This code here is to examplify what it takes to write your own API server.
<!-- BEGIN MUNGE: GENERATED_ANALYTICS -->
[

]()
<!-- END MUNGE: GENERATED_ANALYTICS -->
examples/apiserver/rest/reststorage.go
0 → 100644
View file @
0ab152dd
/*
Copyright 2016 The Kubernetes Authors All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package
rest
import
(
"k8s.io/kubernetes/cmd/libs/go2idl/client-gen/testdata/apis/testgroup"
"k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/fields"
"k8s.io/kubernetes/pkg/labels"
"k8s.io/kubernetes/pkg/registry/generic"
etcdgeneric
"k8s.io/kubernetes/pkg/registry/generic/etcd"
"k8s.io/kubernetes/pkg/runtime"
"k8s.io/kubernetes/pkg/storage"
)
type
REST
struct
{
*
etcdgeneric
.
Etcd
}
// NewREST returns a RESTStorage object that will work with testtype.
func
NewREST
(
s
storage
.
Interface
,
storageDecorator
generic
.
StorageDecorator
)
*
REST
{
prefix
:=
"/testtype"
newListFunc
:=
func
()
runtime
.
Object
{
return
&
testgroup
.
TestTypeList
{}
}
storageInterface
:=
storageDecorator
(
s
,
100
,
&
testgroup
.
TestType
{},
prefix
,
false
,
newListFunc
)
store
:=
&
etcdgeneric
.
Etcd
{
NewFunc
:
func
()
runtime
.
Object
{
return
&
testgroup
.
TestType
{}
},
// NewListFunc returns an object capable of storing results of an etcd list.
NewListFunc
:
newListFunc
,
// Produces a path that etcd understands, to the root of the resource
// by combining the namespace in the context with the given prefix.
KeyRootFunc
:
func
(
ctx
api
.
Context
)
string
{
return
etcdgeneric
.
NamespaceKeyRootFunc
(
ctx
,
prefix
)
},
// Produces a path that etcd understands, to the resource by combining
// the namespace in the context with the given prefix.
KeyFunc
:
func
(
ctx
api
.
Context
,
name
string
)
(
string
,
error
)
{
return
etcdgeneric
.
NamespaceKeyFunc
(
ctx
,
prefix
,
name
)
},
// Retrieve the name field of the resource.
ObjectNameFunc
:
func
(
obj
runtime
.
Object
)
(
string
,
error
)
{
return
obj
.
(
*
testgroup
.
TestType
)
.
Name
,
nil
},
// Used to match objects based on labels/fields for list.
PredicateFunc
:
func
(
label
labels
.
Selector
,
field
fields
.
Selector
)
generic
.
Matcher
{
return
generic
.
MatcherFunc
(
nil
)
},
Storage
:
storageInterface
,
}
return
&
REST
{
store
}
}
examples/apiserver/server.go
0 → 100644
View file @
0ab152dd
/*
Copyright 2016 The Kubernetes Authors All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package
main
import
(
"github.com/golang/glog"
"k8s.io/kubernetes/cmd/libs/go2idl/client-gen/testdata/apis/testgroup/v1"
testgroupetcd
"k8s.io/kubernetes/examples/apiserver/rest"
"k8s.io/kubernetes/pkg/api/rest"
"k8s.io/kubernetes/pkg/apimachinery"
"k8s.io/kubernetes/pkg/apimachinery/registered"
"k8s.io/kubernetes/pkg/genericapiserver"
etcdstorage
"k8s.io/kubernetes/pkg/storage/etcd"
// Install the testgroup API
_
"k8s.io/kubernetes/cmd/libs/go2idl/client-gen/testdata/apis/testgroup/install"
)
func
newStorageDestinations
(
groupName
string
,
groupMeta
*
apimachinery
.
GroupMeta
)
(
*
genericapiserver
.
StorageDestinations
,
error
)
{
storageDestinations
:=
genericapiserver
.
NewStorageDestinations
()
var
storageConfig
etcdstorage
.
EtcdConfig
storageConfig
.
ServerList
=
[]
string
{
"http://127.0.0.1:4001"
}
storageConfig
.
Prefix
=
genericapiserver
.
DefaultEtcdPathPrefix
storageConfig
.
Codec
=
groupMeta
.
Codec
storageInterface
,
err
:=
storageConfig
.
NewStorage
()
if
err
!=
nil
{
return
nil
,
err
}
storageDestinations
.
AddAPIGroup
(
groupName
,
storageInterface
)
return
&
storageDestinations
,
nil
}
func
main
()
{
config
:=
genericapiserver
.
Config
{
EnableIndex
:
true
,
APIPrefix
:
"/api"
,
APIGroupPrefix
:
"/apis"
,
}
s
:=
genericapiserver
.
New
(
&
config
)
groupVersion
:=
v1
.
SchemeGroupVersion
groupName
:=
groupVersion
.
Group
groupMeta
,
err
:=
registered
.
Group
(
groupName
)
if
err
!=
nil
{
glog
.
Fatalf
(
"%v"
,
err
)
}
storageDestinations
,
err
:=
newStorageDestinations
(
groupName
,
groupMeta
)
if
err
!=
nil
{
glog
.
Fatalf
(
"Unable to init etcd: %v"
,
err
)
}
restStorageMap
:=
map
[
string
]
rest
.
Storage
{
"testtypes"
:
testgroupetcd
.
NewREST
(
storageDestinations
.
Get
(
groupName
,
"testtype"
),
s
.
StorageDecorator
()),
}
apiGroupInfo
:=
genericapiserver
.
APIGroupInfo
{
GroupMeta
:
*
groupMeta
,
VersionedResourcesStorageMap
:
map
[
string
]
map
[
string
]
rest
.
Storage
{
groupVersion
.
Version
:
restStorageMap
,
},
}
if
err
:=
s
.
InstallAPIGroups
([]
genericapiserver
.
APIGroupInfo
{
apiGroupInfo
});
err
!=
nil
{
glog
.
Fatalf
(
"Error in installing API: %v"
,
err
)
}
s
.
Run
(
genericapiserver
.
NewServerRunOptions
())
}
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