Create an Application views that summarize the status of an application. These views will live in a new module: Applications. The goal of these views to give users one place to look when viewing their applications instead of of having to know all the indvidual components.
The Application View is wanted because it will give users a single location to see all the components of their application. This will reduce the amount of work required to know if their application is working correctly.
Objects can declare their membership to an application by using labels. The labels are based on the document at https://kubernetes.io/docs/concepts/overview/working-with-objects/common-labels
Four labels are used to determine membership to an application:
app.kubernetes.io/name
: The name of the applicationapp.kubernetes.io/part-of
: The name of a higher level application this one is part ofapp.kubernetes.io/instance
: A unique name identifying the instance of an applicationapp.kubernetes.io/version
: The current version of the application. This should is optional.name
and instance
will be required to unique identify an application. Components with part-of
should be added to the root application. (i.e. If foo
is part-of bar
which part of baz
, all the components in foo
and bar
will be identified as application baz
)
An application can exist only if there if a pod exists.
Additionally, there are other labels of signficance:
app.kubernetes.io/managed-by
: Item which manages this application. This is used by Helm and possibly others.Create an Application module to house the Application view. The Application module's home page will consist of a list of applications in the current namespace. The applications can be shown as a list or icons.
In the list view, has the following columns:
In the icon view, show an icon with the application's name, instance, state, version, and pod count. When selecting an application, the user will be forwarded to a new view which contains tabs for Application Detail and the Application Resource Viewer.
An application detail consists of an overview style list of objects separated by their type. The existing printers can be reused for this purpose. The user will be redirected to the overview module when they select an object from the overview list.
A new version of the resource viewer will need to be constructed that contains all the objects in the current application. This differs from the overview/cluster overview as they only show the relationships from a single object. The existing resource viewer code can be repurposed for this work.
The existing resource viewer should be moved to a top level internal namespace so the code can be shared with multiple modules.
The existing object visitor should be moved to a top level internal namespace so the code can be shared with multiple modules.
The printers currently live under the overview module. They will need to be moved to a top level internal namespace. This will signify they can be used by multiple modules.
The object printer should be updated to provide a link back to the Application an object belongs to.