mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-29 22:46:12 +00:00
Merge pull request #730 from lavalamp/rename
Begin systemizing files in pkg/registry
This commit is contained in:
commit
8b2b325103
82
pkg/registry/minionregistry.go
Normal file
82
pkg/registry/minionregistry.go
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2014 Google Inc. 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 registry
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"sort"
|
||||||
|
"sync"
|
||||||
|
|
||||||
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/util"
|
||||||
|
)
|
||||||
|
|
||||||
|
var ErrDoesNotExist = fmt.Errorf("The requested resource does not exist.")
|
||||||
|
|
||||||
|
// Keep track of a set of minions. Safe for concurrent reading/writing.
|
||||||
|
type MinionRegistry interface {
|
||||||
|
List() (currentMinions []string, err error)
|
||||||
|
Insert(minion string) error
|
||||||
|
Delete(minion string) error
|
||||||
|
Contains(minion string) (bool, error)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Initialize a minion registry with a list of minions.
|
||||||
|
func MakeMinionRegistry(minions []string) MinionRegistry {
|
||||||
|
m := &minionList{
|
||||||
|
minions: util.StringSet{},
|
||||||
|
}
|
||||||
|
for _, minion := range minions {
|
||||||
|
m.minions.Insert(minion)
|
||||||
|
}
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
type minionList struct {
|
||||||
|
minions util.StringSet
|
||||||
|
lock sync.Mutex
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *minionList) List() (currentMinions []string, err error) {
|
||||||
|
m.lock.Lock()
|
||||||
|
defer m.lock.Unlock()
|
||||||
|
// Convert from map to []string
|
||||||
|
for minion := range m.minions {
|
||||||
|
currentMinions = append(currentMinions, minion)
|
||||||
|
}
|
||||||
|
sort.StringSlice(currentMinions).Sort()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *minionList) Insert(newMinion string) error {
|
||||||
|
m.lock.Lock()
|
||||||
|
defer m.lock.Unlock()
|
||||||
|
m.minions.Insert(newMinion)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *minionList) Delete(minion string) error {
|
||||||
|
m.lock.Lock()
|
||||||
|
defer m.lock.Unlock()
|
||||||
|
m.minions.Delete(minion)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *minionList) Contains(minion string) (bool, error) {
|
||||||
|
m.lock.Lock()
|
||||||
|
defer m.lock.Unlock()
|
||||||
|
return m.minions.Has(minion), nil
|
||||||
|
}
|
57
pkg/registry/minionregistry_test.go
Normal file
57
pkg/registry/minionregistry_test.go
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2014 Google Inc. 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 registry
|
||||||
|
|
||||||
|
import (
|
||||||
|
"reflect"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestMinionRegistry(t *testing.T) {
|
||||||
|
m := MakeMinionRegistry([]string{"foo", "bar"})
|
||||||
|
if has, err := m.Contains("foo"); !has || err != nil {
|
||||||
|
t.Errorf("missing expected object")
|
||||||
|
}
|
||||||
|
if has, err := m.Contains("bar"); !has || err != nil {
|
||||||
|
t.Errorf("missing expected object")
|
||||||
|
}
|
||||||
|
if has, err := m.Contains("baz"); has || err != nil {
|
||||||
|
t.Errorf("has unexpected object")
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := m.Insert("baz"); err != nil {
|
||||||
|
t.Errorf("insert failed")
|
||||||
|
}
|
||||||
|
if has, err := m.Contains("baz"); !has || err != nil {
|
||||||
|
t.Errorf("insert didn't actually insert")
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := m.Delete("bar"); err != nil {
|
||||||
|
t.Errorf("delete failed")
|
||||||
|
}
|
||||||
|
if has, err := m.Contains("bar"); has || err != nil {
|
||||||
|
t.Errorf("delete didn't actually delete")
|
||||||
|
}
|
||||||
|
|
||||||
|
list, err := m.List()
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("got error calling List")
|
||||||
|
}
|
||||||
|
if !reflect.DeepEqual(list, []string{"baz", "foo"}) {
|
||||||
|
t.Errorf("Unexpected list value: %#v", list)
|
||||||
|
}
|
||||||
|
}
|
@ -18,72 +18,12 @@ package registry
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"sort"
|
|
||||||
"sync"
|
|
||||||
|
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/apiserver"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/apiserver"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/labels"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/labels"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/util"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var ErrDoesNotExist = fmt.Errorf("The requested resource does not exist.")
|
|
||||||
|
|
||||||
// Keep track of a set of minions. Safe for concurrent reading/writing.
|
|
||||||
type MinionRegistry interface {
|
|
||||||
List() (currentMinions []string, err error)
|
|
||||||
Insert(minion string) error
|
|
||||||
Delete(minion string) error
|
|
||||||
Contains(minion string) (bool, error)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Initialize a minion registry with a list of minions.
|
|
||||||
func MakeMinionRegistry(minions []string) MinionRegistry {
|
|
||||||
m := &minionList{
|
|
||||||
minions: util.StringSet{},
|
|
||||||
}
|
|
||||||
for _, minion := range minions {
|
|
||||||
m.minions.Insert(minion)
|
|
||||||
}
|
|
||||||
return m
|
|
||||||
}
|
|
||||||
|
|
||||||
type minionList struct {
|
|
||||||
minions util.StringSet
|
|
||||||
lock sync.Mutex
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *minionList) List() (currentMinions []string, err error) {
|
|
||||||
m.lock.Lock()
|
|
||||||
defer m.lock.Unlock()
|
|
||||||
// Convert from map to []string
|
|
||||||
for minion := range m.minions {
|
|
||||||
currentMinions = append(currentMinions, minion)
|
|
||||||
}
|
|
||||||
sort.StringSlice(currentMinions).Sort()
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *minionList) Insert(newMinion string) error {
|
|
||||||
m.lock.Lock()
|
|
||||||
defer m.lock.Unlock()
|
|
||||||
m.minions.Insert(newMinion)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *minionList) Delete(minion string) error {
|
|
||||||
m.lock.Lock()
|
|
||||||
defer m.lock.Unlock()
|
|
||||||
m.minions.Delete(minion)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *minionList) Contains(minion string) (bool, error) {
|
|
||||||
m.lock.Lock()
|
|
||||||
defer m.lock.Unlock()
|
|
||||||
return m.minions.Has(minion), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// MinionRegistryStorage implements the RESTStorage interface, backed by a MinionRegistry.
|
// MinionRegistryStorage implements the RESTStorage interface, backed by a MinionRegistry.
|
||||||
type MinionRegistryStorage struct {
|
type MinionRegistryStorage struct {
|
||||||
registry MinionRegistry
|
registry MinionRegistry
|
@ -24,41 +24,6 @@ import (
|
|||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/labels"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/labels"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestMinionRegistry(t *testing.T) {
|
|
||||||
m := MakeMinionRegistry([]string{"foo", "bar"})
|
|
||||||
if has, err := m.Contains("foo"); !has || err != nil {
|
|
||||||
t.Errorf("missing expected object")
|
|
||||||
}
|
|
||||||
if has, err := m.Contains("bar"); !has || err != nil {
|
|
||||||
t.Errorf("missing expected object")
|
|
||||||
}
|
|
||||||
if has, err := m.Contains("baz"); has || err != nil {
|
|
||||||
t.Errorf("has unexpected object")
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := m.Insert("baz"); err != nil {
|
|
||||||
t.Errorf("insert failed")
|
|
||||||
}
|
|
||||||
if has, err := m.Contains("baz"); !has || err != nil {
|
|
||||||
t.Errorf("insert didn't actually insert")
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := m.Delete("bar"); err != nil {
|
|
||||||
t.Errorf("delete failed")
|
|
||||||
}
|
|
||||||
if has, err := m.Contains("bar"); has || err != nil {
|
|
||||||
t.Errorf("delete didn't actually delete")
|
|
||||||
}
|
|
||||||
|
|
||||||
list, err := m.List()
|
|
||||||
if err != nil {
|
|
||||||
t.Errorf("got error calling List")
|
|
||||||
}
|
|
||||||
if !reflect.DeepEqual(list, []string{"baz", "foo"}) {
|
|
||||||
t.Errorf("Unexpected list value: %#v", list)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestMinionRegistryStorage(t *testing.T) {
|
func TestMinionRegistryStorage(t *testing.T) {
|
||||||
m := MakeMinionRegistry([]string{"foo", "bar"})
|
m := MakeMinionRegistry([]string{"foo", "bar"})
|
||||||
ms := MakeMinionRegistryStorage(m)
|
ms := MakeMinionRegistryStorage(m)
|
@ -353,7 +353,6 @@ func TestMakePodStatus(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
func TestPodStorageValidatesCreate(t *testing.T) {
|
func TestPodStorageValidatesCreate(t *testing.T) {
|
||||||
mockRegistry := &MockPodStorageRegistry{
|
mockRegistry := &MockPodStorageRegistry{
|
||||||
MockPodRegistry: MockPodRegistry{err: fmt.Errorf("test error")},
|
MockPodRegistry: MockPodRegistry{err: fmt.Errorf("test error")},
|
@ -28,12 +28,14 @@ import (
|
|||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/util"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// ServiceRegistryStorage adapts a service registry into apiserver's RESTStorage model.
|
||||||
type ServiceRegistryStorage struct {
|
type ServiceRegistryStorage struct {
|
||||||
registry ServiceRegistry
|
registry ServiceRegistry
|
||||||
cloud cloudprovider.Interface
|
cloud cloudprovider.Interface
|
||||||
machines MinionRegistry
|
machines MinionRegistry
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MakeServiceRegistryStorage makes a new ServiceRegistryStorage.
|
||||||
func MakeServiceRegistryStorage(registry ServiceRegistry, cloud cloudprovider.Interface, machines MinionRegistry) apiserver.RESTStorage {
|
func MakeServiceRegistryStorage(registry ServiceRegistry, cloud cloudprovider.Interface, machines MinionRegistry) apiserver.RESTStorage {
|
||||||
return &ServiceRegistryStorage{
|
return &ServiceRegistryStorage{
|
||||||
registry: registry,
|
registry: registry,
|
||||||
@ -50,7 +52,7 @@ func makeLinkVariables(service api.Service, machine string) []api.EnvVar {
|
|||||||
} else {
|
} else {
|
||||||
port = strconv.Itoa(service.ContainerPort.IntVal)
|
port = strconv.Itoa(service.ContainerPort.IntVal)
|
||||||
}
|
}
|
||||||
portPrefix := prefix + "_PORT_" + strings.ToUpper(strings.Replace(port,"-","_",-1)) + "_TCP"
|
portPrefix := prefix + "_PORT_" + strings.ToUpper(strings.Replace(port, "-", "_", -1)) + "_TCP"
|
||||||
return []api.EnvVar{
|
return []api.EnvVar{
|
||||||
{
|
{
|
||||||
Name: prefix + "_PORT",
|
Name: prefix + "_PORT",
|
@ -219,10 +219,10 @@ func TestServiceRegistryDeleteExternal(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestServiceRegistryMakeLinkVariables(t *testing.T) {
|
func TestServiceRegistryMakeLinkVariables(t *testing.T) {
|
||||||
service := api.Service {
|
service := api.Service{
|
||||||
JSONBase: api.JSONBase{ID: "foo"},
|
JSONBase: api.JSONBase{ID: "foo"},
|
||||||
Selector: map[string]string{"bar": "baz"},
|
Selector: map[string]string{"bar": "baz"},
|
||||||
ContainerPort: util.IntOrString { Kind: util.IntstrString, StrVal: "a-b-c" },
|
ContainerPort: util.IntOrString{Kind: util.IntstrString, StrVal: "a-b-c"},
|
||||||
}
|
}
|
||||||
vars := makeLinkVariables(service, "mars")
|
vars := makeLinkVariables(service, "mars")
|
||||||
for _, v := range vars {
|
for _, v := range vars {
|
Loading…
Reference in New Issue
Block a user