代码拉取完成,页面将自动刷新
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
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。