runtime

package
v0.0.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 22, 2021 License: Apache-2.0 Imports: 27 Imported by: 2

README

pkg/runtime

This package contains a set of concrete structs and helper functions that provide a common controller implementation for an AWS service.

The top-level container struct in the package is ServiceController. A single instance of ServiceController is created (using NewServiceController()) from the cmd/controller/main.go file that contains the ACK controller entrypoint for a specific AWS service API.

ServiceController primarily serves as a way to glue the upstream sigs.k8s.io/controller-runtime (here on called ctrlrt for short since that alias we use in the ACK codebase to refer to that upstream repository) machinery together with ACK types that handle communication with the AWS service API.

The main ctrlrt types that ServiceController glues together are the ctrlrt.Manager and ctrlrt.Reconciler types. The ctrlrt.Manager type is used to bind a bunch of sigs.k8s.io/client-go and sigs.k8s.io/apimachinery infrastructure together into a common network server/listener structure. The ctrlrt.Reconciler type is an interface that provides a single Reconcile() method whose job is to reconcile the state of a single custom resource (CR) object.

The ServiceController.BindControllerManager() method accepts a ctrlrt.Manager object and is responsible for creating a reconciler for each kind of CR that the service controller will handle.

But how does the ServiceController know what kinds of CRs that it will handle?

There is a ServiceController.WithResourceManagerFactories() method that sets the ServiceController's collection of objects that implement the types.AWSResourceManagerFactory interface.

These resource manager factories produce objects that implement the types.AWSResourceManager interface, which is basic CRUD+L operations for a particular AWS resource against the backend AWS service API. The types.AWSResourceManagerFactory.For() method returns a types.AWSResourceManager object that has been created to handle a specific AWS service API resources for one AWS account. In this way, the single service controller can manage resources across multiple AWS accounts.

Resource manager factories are registered with a Registry object that is package-scoped to the individual service controller's services/{service}/pkg/resource package. See the example service's pkg/resource/registry.go file for how this package-scoped registry works. Individual resource manager factories are registered with this package-scoped Registry object using an init() call within a file named {resource}_manager_factory.go. For example, the Book resource in the example service's pkg/resource package has its resource manager factory registered in the init() function in the pkg/resource/book_resource_manager_factory.go file.

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func IsAdopted

func IsAdopted(res acktypes.AWSResource) bool

IsAdopted returns true if the supplied AWSResource was created with a non-nil ARN annotation, which indicates that the Kubernetes user who created the CR for the resource expects the ACK service controller to "adopt" a pre-existing resource and bring it under ACK management.

func IsSynced

func IsSynced(res acktypes.AWSResource) bool

IsSynced returns true if the supplied AWSResource's CR and associated backend AWS service API resource are in sync.

func NewReconciler

NewReconciler returns a new reconciler object that

func NewSession

func NewSession(
	region ackv1alpha1.AWSRegion,
	assumeRoleARN ackv1alpha1.AWSResourceName,
	groupVersionKind schema.GroupVersionKind,
) (*session.Session, error)

NewSession returns a new session object. Buy default the returned session is created using pod IRSA environment variables. If assumeRoleARN is not empty, NewSession will call STS::AssumeRole and use the returned credentials to create the session.

Types

type Registry

type Registry struct {
	sync.RWMutex
	// contains filtered or unexported fields
}

func NewRegistry

func NewRegistry() *Registry

NewRegistry returns a thread-safe Registry object

func (*Registry) GetResourceManagerFactories

func (r *Registry) GetResourceManagerFactories() []types.AWSResourceManagerFactory

GetResourceManagerFactories returns AWSResourceManagerFactories that are registered with the RegistryA

func (*Registry) RegisterResourceManagerFactory

func (r *Registry) RegisterResourceManagerFactory(f types.AWSResourceManagerFactory)

RegisterResourceManagerFactory registers a resource manager factory with the package's registry

type ServiceController

type ServiceController struct {

	// ServiceAlias is a string with the alias of the service API, e.g. "s3"
	ServiceAlias string
	// ServiceAPIGroup is a string with the full DNS-correct API group that
	// this service controller manages, e.g. "s3.services.k8s.aws"
	ServiceAPIGroup string
	// contains filtered or unexported fields
}

ServiceController wraps a number of `controller-runtime.Reconciler` that are related to a specific AWS service API.

func NewServiceController

func NewServiceController(
	svcAlias string,
	svcAPIGroup string,
) *ServiceController

NewServiceController returns a new ServiceController instance

func (*ServiceController) BindControllerManager

func (c *ServiceController) BindControllerManager(mgr ctrlrt.Manager, cfg ackcfg.Config) error

BindControllerManager takes a `controller-runtime.Manager`, creates all the AWSResourceReconcilers needed for the service and binds all of the reconcilers within the service controller with that manager

func (*ServiceController) GetReconcilers

func (c *ServiceController) GetReconcilers() []acktypes.AWSResourceReconciler

GetReconcilers returns a slice of types.AWSResourceReconcilers associated with this service controller

func (*ServiceController) WithLogger

func (c *ServiceController) WithLogger(log logr.Logger) *ServiceController

WithLogger sets up the service controller with the supplied logger

func (*ServiceController) WithPrometheusRegistry added in v0.0.2

func (c *ServiceController) WithPrometheusRegistry(
	reg prometheus.Registerer,
) *ServiceController

WithPrometheusRegistry registers all ACK service controller metrics with the supplied prometheus Registry

func (*ServiceController) WithResourceManagerFactories

func (c *ServiceController) WithResourceManagerFactories(
	rmfs []acktypes.AWSResourceManagerFactory,
) *ServiceController

WithResourceManagerFactories sets the controller up to manage resources with a set of supplied factories

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL