~ knotless Search/
↑↓ move↵ open⇧↵ all results
0
0
main
47 lines · 1.1 KB Raw History
package kcpclient

import (
	"context"

	"github.com/johnandersen777/socialweb-computer-kcp/api/v1alpha1"
)

func gateOf(cl *v1alpha1.Cluster) ClusterGate {
	return ClusterGate{Account: cl.Spec.Account,
		Serving: cl.Status.Phase == v1alpha1.ClusterReady && cl.DeletionTimestamp == nil}
}

func (c *Client) FollowClusterGate(ctx context.Context, home, name string, on func(ClusterGate)) error {
	r, err := c.resource(home, socialwebResource)
	if err != nil {
		return err
	}
	src := source[v1alpha1.Cluster]{r: r, resource: "clusters", field: "metadata.name=" + name, where: home}
	resync := func(items []v1alpha1.Cluster) error {
		g := ClusterGate{}
		for i := range items {
			if items[i].Name == name {
				g = gateOf(&items[i])
			}
		}
		on(g)
		return nil
	}
	items, rv, err := src.list(ctx)
	if err != nil {
		return err
	}
	if err := resync(items); err != nil {
		return err
	}
	return follow(ctx, src, rv, func(deleted bool, cl v1alpha1.Cluster) error {
		switch {
		case cl.Name != name:
		case deleted:
			on(ClusterGate{})
		default:
			on(gateOf(&cl))
		}
		return nil
	}, resync)
}