mirror of https://github.com/k3s-io/k3s
Added lister expansions for DaemonSet, Deployment, ReplicaSet, and
StatefulSet for apps/v1beta2pull/6/head
parent
ca89308227
commit
5cb7ddbf54
|
@ -10,15 +10,21 @@ go_library(
|
|||
srcs = [
|
||||
"controllerrevision.go",
|
||||
"daemonset.go",
|
||||
"daemonset_expansion.go",
|
||||
"deployment.go",
|
||||
"deployment_expansion.go",
|
||||
"expansion_generated.go",
|
||||
"replicaset.go",
|
||||
"replicaset_expansion.go",
|
||||
"scale.go",
|
||||
"statefulset.go",
|
||||
"statefulset_expansion.go",
|
||||
],
|
||||
deps = [
|
||||
"//vendor/k8s.io/api/apps/v1beta2:go_default_library",
|
||||
"//vendor/k8s.io/api/core/v1:go_default_library",
|
||||
"//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library",
|
||||
"//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
|
||||
"//vendor/k8s.io/apimachinery/pkg/labels:go_default_library",
|
||||
"//vendor/k8s.io/client-go/tools/cache:go_default_library",
|
||||
],
|
||||
|
|
|
@ -0,0 +1,113 @@
|
|||
/*
|
||||
Copyright 2017 The Kubernetes Authors.
|
||||
|
||||
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 v1beta2
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
apps "k8s.io/api/apps/v1beta2"
|
||||
"k8s.io/api/core/v1"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/apimachinery/pkg/labels"
|
||||
)
|
||||
|
||||
// DaemonSetListerExpansion allows custom methods to be added to
|
||||
// DaemonSetLister.
|
||||
type DaemonSetListerExpansion interface {
|
||||
GetPodDaemonSets(pod *v1.Pod) ([]*apps.DaemonSet, error)
|
||||
GetHistoryDaemonSets(history *apps.ControllerRevision) ([]*apps.DaemonSet, error)
|
||||
}
|
||||
|
||||
// DaemonSetNamespaceListerExpansion allows custom methods to be added to
|
||||
// DaemonSetNamespaceLister.
|
||||
type DaemonSetNamespaceListerExpansion interface{}
|
||||
|
||||
// GetPodDaemonSets returns a list of DaemonSets that potentially match a pod.
|
||||
// Only the one specified in the Pod's ControllerRef will actually manage it.
|
||||
// Returns an error only if no matching DaemonSets are found.
|
||||
func (s *daemonSetLister) GetPodDaemonSets(pod *v1.Pod) ([]*apps.DaemonSet, error) {
|
||||
var selector labels.Selector
|
||||
var daemonSet *apps.DaemonSet
|
||||
|
||||
if len(pod.Labels) == 0 {
|
||||
return nil, fmt.Errorf("no daemon sets found for pod %v because it has no labels", pod.Name)
|
||||
}
|
||||
|
||||
list, err := s.DaemonSets(pod.Namespace).List(labels.Everything())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var daemonSets []*apps.DaemonSet
|
||||
for i := range list {
|
||||
daemonSet = list[i]
|
||||
if daemonSet.Namespace != pod.Namespace {
|
||||
continue
|
||||
}
|
||||
selector, err = metav1.LabelSelectorAsSelector(daemonSet.Spec.Selector)
|
||||
if err != nil {
|
||||
// this should not happen if the DaemonSet passed validation
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// If a daemonSet with a nil or empty selector creeps in, it should match nothing, not everything.
|
||||
if selector.Empty() || !selector.Matches(labels.Set(pod.Labels)) {
|
||||
continue
|
||||
}
|
||||
daemonSets = append(daemonSets, daemonSet)
|
||||
}
|
||||
|
||||
if len(daemonSets) == 0 {
|
||||
return nil, fmt.Errorf("could not find daemon set for pod %s in namespace %s with labels: %v", pod.Name, pod.Namespace, pod.Labels)
|
||||
}
|
||||
|
||||
return daemonSets, nil
|
||||
}
|
||||
|
||||
// GetHistoryDaemonSets returns a list of DaemonSets that potentially
|
||||
// match a ControllerRevision. Only the one specified in the ControllerRevision's ControllerRef
|
||||
// will actually manage it.
|
||||
// Returns an error only if no matching DaemonSets are found.
|
||||
func (s *daemonSetLister) GetHistoryDaemonSets(history *apps.ControllerRevision) ([]*apps.DaemonSet, error) {
|
||||
if len(history.Labels) == 0 {
|
||||
return nil, fmt.Errorf("no DaemonSet found for ControllerRevision %s because it has no labels", history.Name)
|
||||
}
|
||||
|
||||
list, err := s.DaemonSets(history.Namespace).List(labels.Everything())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var daemonSets []*apps.DaemonSet
|
||||
for _, ds := range list {
|
||||
selector, err := metav1.LabelSelectorAsSelector(ds.Spec.Selector)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("invalid label selector: %v", err)
|
||||
}
|
||||
// If a DaemonSet with a nil or empty selector creeps in, it should match nothing, not everything.
|
||||
if selector.Empty() || !selector.Matches(labels.Set(history.Labels)) {
|
||||
continue
|
||||
}
|
||||
daemonSets = append(daemonSets, ds)
|
||||
}
|
||||
|
||||
if len(daemonSets) == 0 {
|
||||
return nil, fmt.Errorf("could not find DaemonSets for ControllerRevision %s in namespace %s with labels: %v", history.Name, history.Namespace, history.Labels)
|
||||
}
|
||||
|
||||
return daemonSets, nil
|
||||
}
|
|
@ -0,0 +1,70 @@
|
|||
/*
|
||||
Copyright 2017 The Kubernetes Authors.
|
||||
|
||||
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 v1beta2
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
apps "k8s.io/api/apps/v1beta2"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/apimachinery/pkg/labels"
|
||||
)
|
||||
|
||||
// DeploymentListerExpansion allows custom methods to be added to
|
||||
// DeploymentLister.
|
||||
type DeploymentListerExpansion interface {
|
||||
GetDeploymentsForReplicaSet(rs *apps.ReplicaSet) ([]*apps.Deployment, error)
|
||||
}
|
||||
|
||||
// DeploymentNamespaceListerExpansion allows custom methods to be added to
|
||||
// DeploymentNamespaceLister.
|
||||
type DeploymentNamespaceListerExpansion interface{}
|
||||
|
||||
// GetDeploymentsForReplicaSet returns a list of Deployments that potentially
|
||||
// match a ReplicaSet. Only the one specified in the ReplicaSet's ControllerRef
|
||||
// will actually manage it.
|
||||
// Returns an error only if no matching Deployments are found.
|
||||
func (s *deploymentLister) GetDeploymentsForReplicaSet(rs *apps.ReplicaSet) ([]*apps.Deployment, error) {
|
||||
if len(rs.Labels) == 0 {
|
||||
return nil, fmt.Errorf("no deployments found for ReplicaSet %v because it has no labels", rs.Name)
|
||||
}
|
||||
|
||||
// TODO: MODIFY THIS METHOD so that it checks for the podTemplateSpecHash label
|
||||
dList, err := s.Deployments(rs.Namespace).List(labels.Everything())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var deployments []*apps.Deployment
|
||||
for _, d := range dList {
|
||||
selector, err := metav1.LabelSelectorAsSelector(d.Spec.Selector)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("invalid label selector: %v", err)
|
||||
}
|
||||
// If a deployment with a nil or empty selector creeps in, it should match nothing, not everything.
|
||||
if selector.Empty() || !selector.Matches(labels.Set(rs.Labels)) {
|
||||
continue
|
||||
}
|
||||
deployments = append(deployments, d)
|
||||
}
|
||||
|
||||
if len(deployments) == 0 {
|
||||
return nil, fmt.Errorf("could not find deployments set for ReplicaSet %s in namespace %s with labels: %v", rs.Name, rs.Namespace, rs.Labels)
|
||||
}
|
||||
|
||||
return deployments, nil
|
||||
}
|
|
@ -26,30 +26,6 @@ type ControllerRevisionListerExpansion interface{}
|
|||
// ControllerRevisionNamespaceLister.
|
||||
type ControllerRevisionNamespaceListerExpansion interface{}
|
||||
|
||||
// DaemonSetListerExpansion allows custom methods to be added to
|
||||
// DaemonSetLister.
|
||||
type DaemonSetListerExpansion interface{}
|
||||
|
||||
// DaemonSetNamespaceListerExpansion allows custom methods to be added to
|
||||
// DaemonSetNamespaceLister.
|
||||
type DaemonSetNamespaceListerExpansion interface{}
|
||||
|
||||
// DeploymentListerExpansion allows custom methods to be added to
|
||||
// DeploymentLister.
|
||||
type DeploymentListerExpansion interface{}
|
||||
|
||||
// DeploymentNamespaceListerExpansion allows custom methods to be added to
|
||||
// DeploymentNamespaceLister.
|
||||
type DeploymentNamespaceListerExpansion interface{}
|
||||
|
||||
// ReplicaSetListerExpansion allows custom methods to be added to
|
||||
// ReplicaSetLister.
|
||||
type ReplicaSetListerExpansion interface{}
|
||||
|
||||
// ReplicaSetNamespaceListerExpansion allows custom methods to be added to
|
||||
// ReplicaSetNamespaceLister.
|
||||
type ReplicaSetNamespaceListerExpansion interface{}
|
||||
|
||||
// ScaleListerExpansion allows custom methods to be added to
|
||||
// ScaleLister.
|
||||
type ScaleListerExpansion interface{}
|
||||
|
@ -57,11 +33,3 @@ type ScaleListerExpansion interface{}
|
|||
// ScaleNamespaceListerExpansion allows custom methods to be added to
|
||||
// ScaleNamespaceLister.
|
||||
type ScaleNamespaceListerExpansion interface{}
|
||||
|
||||
// StatefulSetListerExpansion allows custom methods to be added to
|
||||
// StatefulSetLister.
|
||||
type StatefulSetListerExpansion interface{}
|
||||
|
||||
// StatefulSetNamespaceListerExpansion allows custom methods to be added to
|
||||
// StatefulSetNamespaceLister.
|
||||
type StatefulSetNamespaceListerExpansion interface{}
|
||||
|
|
|
@ -0,0 +1,73 @@
|
|||
/*
|
||||
Copyright 2017 The Kubernetes Authors.
|
||||
|
||||
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 v1beta2
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
apps "k8s.io/api/apps/v1beta2"
|
||||
"k8s.io/api/core/v1"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/apimachinery/pkg/labels"
|
||||
)
|
||||
|
||||
// ReplicaSetListerExpansion allows custom methods to be added to
|
||||
// ReplicaSetLister.
|
||||
type ReplicaSetListerExpansion interface {
|
||||
GetPodReplicaSets(pod *v1.Pod) ([]*apps.ReplicaSet, error)
|
||||
}
|
||||
|
||||
// ReplicaSetNamespaceListerExpansion allows custom methods to be added to
|
||||
// ReplicaSetNamespaceLister.
|
||||
type ReplicaSetNamespaceListerExpansion interface{}
|
||||
|
||||
// GetPodReplicaSets returns a list of ReplicaSets that potentially match a pod.
|
||||
// Only the one specified in the Pod's ControllerRef will actually manage it.
|
||||
// Returns an error only if no matching ReplicaSets are found.
|
||||
func (s *replicaSetLister) GetPodReplicaSets(pod *v1.Pod) ([]*apps.ReplicaSet, error) {
|
||||
if len(pod.Labels) == 0 {
|
||||
return nil, fmt.Errorf("no ReplicaSets found for pod %v because it has no labels", pod.Name)
|
||||
}
|
||||
|
||||
list, err := s.ReplicaSets(pod.Namespace).List(labels.Everything())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var rss []*apps.ReplicaSet
|
||||
for _, rs := range list {
|
||||
if rs.Namespace != pod.Namespace {
|
||||
continue
|
||||
}
|
||||
selector, err := metav1.LabelSelectorAsSelector(rs.Spec.Selector)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("invalid selector: %v", err)
|
||||
}
|
||||
|
||||
// If a ReplicaSet with a nil or empty selector creeps in, it should match nothing, not everything.
|
||||
if selector.Empty() || !selector.Matches(labels.Set(pod.Labels)) {
|
||||
continue
|
||||
}
|
||||
rss = append(rss, rs)
|
||||
}
|
||||
|
||||
if len(rss) == 0 {
|
||||
return nil, fmt.Errorf("could not find ReplicaSet for pod %s in namespace %s with labels: %v", pod.Name, pod.Namespace, pod.Labels)
|
||||
}
|
||||
|
||||
return rss, nil
|
||||
}
|
|
@ -0,0 +1,77 @@
|
|||
/*
|
||||
Copyright 2017 The Kubernetes Authors.
|
||||
|
||||
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 v1beta2
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
apps "k8s.io/api/apps/v1beta2"
|
||||
"k8s.io/api/core/v1"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/apimachinery/pkg/labels"
|
||||
)
|
||||
|
||||
// StatefulSetListerExpansion allows custom methods to be added to
|
||||
// StatefulSetLister.
|
||||
type StatefulSetListerExpansion interface {
|
||||
GetPodStatefulSets(pod *v1.Pod) ([]*apps.StatefulSet, error)
|
||||
}
|
||||
|
||||
// StatefulSetNamespaceListerExpansion allows custom methods to be added to
|
||||
// StatefulSetNamespaceLister.
|
||||
type StatefulSetNamespaceListerExpansion interface{}
|
||||
|
||||
// GetPodStatefulSets returns a list of StatefulSets that potentially match a pod.
|
||||
// Only the one specified in the Pod's ControllerRef will actually manage it.
|
||||
// Returns an error only if no matching StatefulSets are found.
|
||||
func (s *statefulSetLister) GetPodStatefulSets(pod *v1.Pod) ([]*apps.StatefulSet, error) {
|
||||
var selector labels.Selector
|
||||
var ps *apps.StatefulSet
|
||||
|
||||
if len(pod.Labels) == 0 {
|
||||
return nil, fmt.Errorf("no StatefulSets found for pod %v because it has no labels", pod.Name)
|
||||
}
|
||||
|
||||
list, err := s.StatefulSets(pod.Namespace).List(labels.Everything())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var psList []*apps.StatefulSet
|
||||
for i := range list {
|
||||
ps = list[i]
|
||||
if ps.Namespace != pod.Namespace {
|
||||
continue
|
||||
}
|
||||
selector, err = metav1.LabelSelectorAsSelector(ps.Spec.Selector)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("invalid selector: %v", err)
|
||||
}
|
||||
|
||||
// If a StatefulSet with a nil or empty selector creeps in, it should match nothing, not everything.
|
||||
if selector.Empty() || !selector.Matches(labels.Set(pod.Labels)) {
|
||||
continue
|
||||
}
|
||||
psList = append(psList, ps)
|
||||
}
|
||||
|
||||
if len(psList) == 0 {
|
||||
return nil, fmt.Errorf("could not find StatefulSet for pod %s in namespace %s with labels: %v", pod.Name, pod.Namespace, pod.Labels)
|
||||
}
|
||||
|
||||
return psList, nil
|
||||
}
|
Loading…
Reference in New Issue