1 Star 0 Fork 0

不平凡的平凡 / dogo

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
daemonset.go 2.39 KB
一键复制 编辑 原始数据 按行查看 历史
lixueping 提交于 2022-10-18 01:10 . 新增常用公共方法
package daemonset
import (
"context"
"strings"
appsv1 "k8s.io/api/apps/v1"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/types"
"gitee.com/lflxp/dogo/plugin/apicache/pkg/api"
"gitee.com/lflxp/dogo/plugin/apicache/pkg/apiserver/query"
v1alpha3 "gitee.com/lflxp/dogo/plugin/apicache/pkg/resources/v1"
"sigs.k8s.io/controller-runtime/pkg/client"
)
const (
statusStopped = "stopped"
statusRunning = "running"
statusUpdating = "updating"
)
type daemonSetGetter struct {
client client.Client
}
func New(client client.Client) v1alpha3.Interface {
return &daemonSetGetter{client: client}
}
func (d *daemonSetGetter) Get(namespace, name string) (runtime.Object, error) {
ctx := context.Background()
ds := &appsv1.DaemonSet{}
err := d.client.Get(ctx, types.NamespacedName{Name: name}, ds)
return ds, err
}
func (d *daemonSetGetter) List(namespace string, query *query.Query) (*api.ListResult, error) {
ctx := context.Background()
list := &appsv1.DaemonSetList{}
options := client.ListOptions{
Namespace: namespace,
LabelSelector: query.Selector(),
}
// first retrieves all tenant within given namespace
err := d.client.List(ctx, list, &options)
if err != nil {
return nil, err
}
var result []runtime.Object
for _, daemonSet := range list.Items {
tmp := daemonSet
result = append(result, &tmp)
}
return v1alpha3.DefaultList(result, query, d.compare, d.filter), nil
}
func (d *daemonSetGetter) compare(left runtime.Object, right runtime.Object, field query.Field) bool {
leftDaemonSet, ok := left.(*appsv1.DaemonSet)
if !ok {
return false
}
rightDaemonSet, ok := right.(*appsv1.DaemonSet)
if !ok {
return false
}
return v1alpha3.DefaultObjectMetaCompare(leftDaemonSet.ObjectMeta, rightDaemonSet.ObjectMeta, field)
}
func (d *daemonSetGetter) filter(object runtime.Object, filter query.Filter) bool {
daemonSet, ok := object.(*appsv1.DaemonSet)
if !ok {
return false
}
switch filter.Field {
case query.FieldStatus:
return strings.Compare(daemonsetStatus(&daemonSet.Status), string(filter.Value)) == 0
default:
return v1alpha3.DefaultObjectMetaFilter(daemonSet.ObjectMeta, filter)
}
}
func daemonsetStatus(status *appsv1.DaemonSetStatus) string {
if status.DesiredNumberScheduled == 0 && status.NumberReady == 0 {
return statusStopped
} else if status.DesiredNumberScheduled == status.NumberReady {
return statusRunning
} else {
return statusUpdating
}
}
1
https://gitee.com/lflxp/dogo.git
git@gitee.com:lflxp/dogo.git
lflxp
dogo
dogo
v0.1.0

搜索帮助