# Functions
NewController returns a new gameserver crd controller.
NewExtensions binds the handlers to the webhook outside the initialization of the controller initializes a new logger for extensions.
NewHealthController returns a HealthController.
NewMigrationController returns a MigrationController.
NewMissingPodController returns a MissingPodController.
NewPerNodeCounter returns a new PerNodeCounter.
# Structs
Controller is a the main GameServer crd controller
nolint:govet // ignore fieldalignment, singleton.
Extensions struct contains what is needed to bind webhook handlers.
HealthController watches Pods, and applies an Unhealthy state if certain pods crash, or can't be assigned a port, and other similar type conditions.
MigrationController watches for if a Pod is migrated/a maintenance event happens on a node, and a Pod is recreated with a new Address for a GameServer.
MissingPodController makes sure that any GameServer that isn't in a Scheduled or Unhealthy state and is missing a Pod is moved to Unhealthy.
NodeCount is just a convenience data structure for keeping relevant GameServer counts about Nodes.
PerNodeCounter counts how many Allocated and Ready GameServers currently exist on each node.