Skip to content

Commit

Permalink
Add more status to types
Browse files Browse the repository at this point in the history
  • Loading branch information
ibuildthecloud committed Aug 28, 2020
1 parent ec72c99 commit 4207d5d
Show file tree
Hide file tree
Showing 11 changed files with 155 additions and 23 deletions.
11 changes: 11 additions & 0 deletions pkg/apis/fleet.cattle.io/v1alpha1/bundle.go
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,11 @@ type BundleStatus struct {
MaxUnavailablePartitions int `json:"maxUnavailablePartitions,omitempty"`
MaxNew int `json:"maxNew,omitempty"`
PartitionStatus []PartitionStatus `json:"partitions,omitempty"`
Display BundleDisplay `json:"display,omitempty"`
}

type BundleDisplay struct {
ReadyClusters string `json:"readyClusters,omitempty"`
}

type PartitionStatus struct {
Expand Down Expand Up @@ -181,6 +186,12 @@ type BundleDeploymentStatus struct {
NonModified bool `json:"nonModified,omitempty"`
NonReadyStatus []NonReadyStatus `json:"nonReadyStatus,omitempty"`
ModifiedStatus []ModifiedStatus `json:"modifiedStatus,omitempty"`
Display BundleDeploymentDisplay `json:"display,omitempty"`
}

type BundleDeploymentDisplay struct {
Deployed string `json:"deployed,omitempty"`
Monitored string `json:"monitored,omitempty"`
}

type NonReadyStatus struct {
Expand Down
6 changes: 6 additions & 0 deletions pkg/apis/fleet.cattle.io/v1alpha1/git.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,5 +51,11 @@ type GitTarget struct {

type GitRepoStatus struct {
Commit string `json:"commit,omitempty"`
Summary BundleSummary `json:"summary,omitempty"`
Display GitRepoDisplay `json:"display,omitempty"`
Conditions []genericcondition.GenericCondition `json:"conditions,omitempty"`
}

type GitRepoDisplay struct {
ReadyBundles string `json:"readyBundles,omitempty"`
}
6 changes: 6 additions & 0 deletions pkg/apis/fleet.cattle.io/v1alpha1/target.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,12 @@ type ClusterGroupStatus struct {
NonReadyClusters []string `json:"nonReadyClusters,omitempty"`
Conditions []genericcondition.GenericCondition `json:"conditions,omitempty"`
Summary BundleSummary `json:"summary,omitempty"`
Display ClusterGroupDisplay `json:"display,omitempty"`
}

type ClusterGroupDisplay struct {
ReadyClusters string `json:"readyClusters,omitempty"`
ReadyBundles string `json:"readyBundles,omitempty"`
}

// +genclient
Expand Down
2 changes: 1 addition & 1 deletion pkg/controllers/bundle/controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ func (h *handler) OnBundleChange(bundle *fleet.Bundle, status fleet.BundleStatus
return nil, status, err
}

summary.SetReadyConditions(&status, status.Summary)
summary.SetReadyConditions(&status, "Cluster", status.Summary)
return toRuntimeObjects(targets), status, nil
}

Expand Down
2 changes: 1 addition & 1 deletion pkg/controllers/cluster/controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ func (h *handler) OnClusterChanged(cluster *fleet.Cluster, status fleet.ClusterS
status.Summary.DesiredReady++
}

summary.SetReadyConditions(&status, status.Summary)
summary.SetReadyConditions(&status, "Bundle", status.Summary)
return []runtime.Object{
&v1.Namespace{
ObjectMeta: metav1.ObjectMeta{
Expand Down
2 changes: 1 addition & 1 deletion pkg/controllers/clustergroup/controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,6 @@ func (h *handler) OnClusterGroup(clusterGroup *fleet.ClusterGroup, status fleet.
}
}

summary.SetReadyConditions(&status, status.Summary)
summary.SetReadyConditions(&status, "Bundle", status.Summary)
return status, nil
}
9 changes: 8 additions & 1 deletion pkg/controllers/controllers.go
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,7 @@ func Register(ctx context.Context, systemNamespace string, cfg clientcmd.ClientC
appCtx.Core.Namespace()),
appCtx.Core.Secret(),
appCtx.Core.ServiceAccount(),
appCtx.BundleDeployment(),
appCtx.RBAC.Role(),
appCtx.RBAC.RoleBinding(),
appCtx.RBAC.ClusterRole(),
Expand All @@ -177,8 +178,10 @@ func Register(ctx context.Context, systemNamespace string, cfg clientcmd.ClientC
appCtx.RBAC.Role(),
appCtx.RBAC.RoleBinding(),
appCtx.GitJob.GitJob(),
appCtx.Core.ConfigMap(),
appCtx.Core.ServiceAccount()),
appCtx.GitJob.GitJob(),
appCtx.BundleDeployment().Cache(),
appCtx.GitRepo())

bootstrap.Register(ctx,
Expand All @@ -194,7 +197,11 @@ func Register(ctx context.Context, systemNamespace string, cfg clientcmd.ClientC
appCtx.Core.Secret().Cache())

display.Register(ctx,
appCtx.Cluster())
appCtx.Cluster(),
appCtx.ClusterGroup(),
appCtx.GitRepo(),
appCtx.BundleDeployment(),
appCtx.Bundle())

leader.RunOrDie(ctx, systemNamespace, "fleet-controller-lock", appCtx.K8s, func(ctx context.Context) {
if err := appCtx.start(ctx); err != nil {
Expand Down
69 changes: 68 additions & 1 deletion pkg/controllers/display/displaycontrollers.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,36 @@ package display
import (
"context"
"fmt"
"strings"

fleet "github.com/rancher/fleet/pkg/apis/fleet.cattle.io/v1alpha1"
fleetcontrollers "github.com/rancher/fleet/pkg/generated/controllers/fleet.cattle.io/v1alpha1"
"github.com/rancher/wrangler/pkg/genericcondition"
)

type handler struct {
}

func Register(ctx context.Context, clusters fleetcontrollers.ClusterController) {
func Register(ctx context.Context,
clusters fleetcontrollers.ClusterController,
clustergroups fleetcontrollers.ClusterGroupController,
gitrepos fleetcontrollers.GitRepoController,
bundledeployments fleetcontrollers.BundleDeploymentController,
bundles fleetcontrollers.BundleController) {
h := &handler{}

fleetcontrollers.RegisterClusterStatusHandler(ctx, clusters, "", "cluster-display", h.OnClusterChange)
fleetcontrollers.RegisterClusterGroupStatusHandler(ctx, clustergroups, "", "clustergroup-display", h.OnClusterGroupChange)
fleetcontrollers.RegisterGitRepoStatusHandler(ctx, gitrepos, "", "gitrepo-display", h.OnRepoChange)
fleetcontrollers.RegisterBundleDeploymentStatusHandler(ctx, bundledeployments, "", "bundledeployment-display", h.OnBundleDeploymentChange)
fleetcontrollers.RegisterBundleStatusHandler(ctx, bundles, "", "bundle-display", h.OnBundleChange)
}

func (h *handler) OnBundleChange(_ *fleet.Bundle, status fleet.BundleStatus) (fleet.BundleStatus, error) {
status.Display.ReadyClusters = fmt.Sprintf("%d/%d",
status.Summary.Ready,
status.Summary.DesiredReady)
return status, nil
}

func (h *handler) OnClusterChange(cluster *fleet.Cluster, status fleet.ClusterStatus) (fleet.ClusterStatus, error) {
Expand All @@ -28,6 +46,55 @@ func (h *handler) OnClusterChange(cluster *fleet.Cluster, status fleet.ClusterSt
return status, nil
}

func (h *handler) OnClusterGroupChange(cluster *fleet.ClusterGroup, status fleet.ClusterGroupStatus) (fleet.ClusterGroupStatus, error) {
status.Display.ReadyBundles = fmt.Sprintf("%d/%d",
cluster.Status.Summary.Ready,
cluster.Status.Summary.DesiredReady)
status.Display.ReadyClusters = fmt.Sprintf("%d/%d",
cluster.Status.ClusterCount-cluster.Status.NonReadyClusterCount,
cluster.Status.ClusterCount)
if len(cluster.Status.NonReadyClusters) > 0 {
status.Display.ReadyClusters += " (" + strings.Join(cluster.Status.NonReadyClusters, ",") + ")"
}
return status, nil
}

func (h *handler) OnRepoChange(gitrepo *fleet.GitRepo, status fleet.GitRepoStatus) (fleet.GitRepoStatus, error) {
status.Display.ReadyBundles = fmt.Sprintf("%d/%d",
gitrepo.Status.Summary.Ready,
gitrepo.Status.Summary.DesiredReady)
return status, nil
}

func (h *handler) OnBundleDeploymentChange(_ *fleet.BundleDeployment, status fleet.BundleDeploymentStatus) (fleet.BundleDeploymentStatus, error) {
var (
deployed, monitored string
)

for _, cond := range status.Conditions {
switch cond.Type {
case "Deployed":
deployed = conditionToMessage(cond)
case "Monitored":
monitored = conditionToMessage(cond)
}
}

status.Display = fleet.BundleDeploymentDisplay{
Deployed: deployed,
Monitored: monitored,
}

return status, nil
}

func conditionToMessage(cond genericcondition.GenericCondition) string {
if cond.Reason == "Error" {
return "Error: " + cond.Message
}
return string(cond.Status)
}

func sampleNode(status fleet.ClusterStatus) string {
if len(status.Agent.ReadyNodeNames) > 0 {
return status.Agent.ReadyNodeNames[0]
Expand Down
38 changes: 37 additions & 1 deletion pkg/controllers/git/git.go
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,13 @@ func (h *handler) getConfig(repo *fleet.GitRepo) (*corev1.ConfigMap, error) {
}

func (h *handler) OnChange(gitrepo *fleet.GitRepo, status fleet.GitRepoStatus) ([]runtime.Object, fleet.GitRepoStatus, error) {
status.Conditions = nil

status, err := h.setBundleDeploymentStatus(gitrepo, status)
if err != nil {
return nil, status, err
}

dirs := gitrepo.Spec.BundleDirs
if len(dirs) == 0 {
dirs = []string{"."}
Expand All @@ -75,7 +82,7 @@ func (h *handler) OnChange(gitrepo *fleet.GitRepo, status fleet.GitRepoStatus) (
gitJob, err := h.gitjobCache.Get(gitrepo.Namespace, gitrepo.Name)
if err == nil {
status.Commit = gitJob.Status.Commit
status.Conditions = gitJob.Status.Conditions
status.Conditions = append(status.Conditions, gitJob.Status.Conditions...)
} else {
status.Commit = ""
status.Conditions = nil
Expand Down Expand Up @@ -202,3 +209,32 @@ func (h *handler) OnChange(gitrepo *fleet.GitRepo, status fleet.GitRepoStatus) (
},
}, status, nil
}

func (h *handler) setBundleDeploymentStatus(gitrepo *fleet.GitRepo, status fleet.GitRepoStatus) (fleet.GitRepoStatus, error) {
if gitrepo.DeletionTimestamp != nil {
return status, nil
}

bundleDeployments, err := h.bundleDeployments.List("", labels.SelectorFromSet(labels.Set{
RepoLabel: gitrepo.Name,
"fleet.cattle.io/bundle-namespace": gitrepo.Namespace,
}))
if err != nil {
return status, err
}

status.Summary = fleet.BundleSummary{}

sort.Slice(bundleDeployments, func(i, j int) bool {
return bundleDeployments[i].Name < bundleDeployments[j].Name
})

for _, app := range bundleDeployments {
state := summary.GetDeploymentState(app)
summary.IncrementState(&status.Summary, app.Name, state, summary.MessageFromDeployment(app))
status.Summary.DesiredReady++
}

summary.SetReadyConditions(&status, "Bundle", status.Summary)
return status, nil
}
22 changes: 12 additions & 10 deletions pkg/crd/crds.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,25 +57,24 @@ func List() []crd.CRD {
return []crd.CRD{
newCRD(&fleet.Bundle{}, func(c crd.CRD) crd.CRD {
return c.
WithCategories("fleet").
WithColumn("Clusters-Ready", ".status.summary.ready").
WithColumn("Clusters-Desired", ".status.summary.desiredReady").
WithColumn("BundleDeployments-Ready", ".status.display.readyClusters").
WithColumn("Status", ".status.conditions[?(@.type==\"Ready\")].message")
}),
newCRD(&fleet.BundleDeployment{}, func(c crd.CRD) crd.CRD {
return c.
WithColumn("Deployed", ".status.conditions[?(@.type==\"Deployed\")].message").
WithColumn("Monitored", ".status.conditions[?(@.type==\"Monitored\")].message").
WithColumn("Deployed", ".status.display.deployed").
WithColumn("Monitored", ".status.display.monitored").
WithColumn("Status", ".status.conditions[?(@.type==\"Ready\")].message")
}),
newCRD(&fleet.BundleNamespaceMapping{}, func(c crd.CRD) crd.CRD {
return c
}),
newCRD(&fleet.ClusterGroup{}, func(c crd.CRD) crd.CRD {
return c.
WithCategories("fleet").
WithColumn("Cluster-Count", ".status.clusterCount").
WithColumn("Bundles-Ready", ".status.summary.ready").
WithColumn("Bundles-Desired", ".status.summary.desiredReady").
WithColumn("Clusters-Ready", ".status.display.readyClusters").
WithColumn("Bundles-Ready", ".status.display.readyBundles").
WithColumn("Status", ".status.conditions[?(@.type==\"Ready\")].message")

}),
newCRD(&fleet.Cluster{}, func(c crd.CRD) crd.CRD {
return c.
Expand All @@ -91,8 +90,11 @@ func List() []crd.CRD {
}),
newCRD(&fleet.GitRepo{}, func(c crd.CRD) crd.CRD {
return c.
WithCategories("fleet").
WithColumn("Repo", ".spec.repo").
WithColumn("Commit", ".status.commit")
WithColumn("Commit", ".status.commit").
WithColumn("Bundles-Ready", ".status.display.readyBundles").
WithColumn("Status", ".status.conditions[?(@.type==\"Ready\")].message")
}),
newCRD(&fleet.ClusterRegistration{}, func(c crd.CRD) crd.CRD {
return c.
Expand Down
11 changes: 4 additions & 7 deletions pkg/summary/summary.go
Original file line number Diff line number Diff line change
Expand Up @@ -76,12 +76,12 @@ func GetDeploymentState(bundleDeployment *fleet.BundleDeployment) fleet.BundleSt
}
}

func SetReadyConditions(obj interface{}, summary fleet.BundleSummary) {
func SetReadyConditions(obj interface{}, referencedKind string, summary fleet.BundleSummary) {
if reflect.ValueOf(obj).Kind() != reflect.Ptr {
panic("obj passed must be a pointer")
}
c := condition.Cond("Ready")
msg := ReadyMessage(summary)
msg := ReadyMessage(summary, referencedKind)
c.SetStatusBool(obj, len(msg) == 0)
c.Message(obj, msg)
}
Expand All @@ -106,7 +106,7 @@ func MessageFromDeployment(deployment *fleet.BundleDeployment) string {
return message
}

func ReadyMessage(summary fleet.BundleSummary) string {
func ReadyMessage(summary fleet.BundleSummary, referencedKind string) string {
var messages []string
for msg, count := range map[fleet.BundleState]int{
fleet.OutOfSync: summary.OutOfSync,
Expand All @@ -122,10 +122,7 @@ func ReadyMessage(summary fleet.BundleSummary) string {
for _, v := range summary.NonReadyResources {
name := v.Name
if v.State == msg {
if count > 1 {
name += "..."
}
messages = append(messages, fmt.Sprintf("%s: %d (%s %s)", msg, count, name, v.Message))
messages = append(messages, fmt.Sprintf("%s(%d) [%s %s: %s]", msg, count, referencedKind, name, v.Message))
break
}
}
Expand Down

0 comments on commit 4207d5d

Please sign in to comment.