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 ¶
- func GetDefaultTags(config *ackconfig.Config, metadata *acktypes.RuntimeMetaObject) map[string]string
- func IsAdopted(res acktypes.AWSResource) bool
- func IsSynced(res acktypes.AWSResource) bool
- func NewAdoptionReconciler(sc acktypes.ServiceController, log logr.Logger, cfg ackcfg.Config, ...) acktypes.Reconciler
- func NewReconciler(sc acktypes.ServiceController, rmf acktypes.AWSResourceManagerFactory, ...) acktypes.AWSResourceReconciler
- func NewReconcilerWithClient(sc acktypes.ServiceController, kc client.Client, ...) acktypes.AWSResourceReconciler
- func NewServiceController(svcAlias string, svcAPIGroup string, svcEndpointsID string, ...) acktypes.ServiceController
- type Registry
- type VersionInfo
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func GetDefaultTags ¶
func GetDefaultTags( config *ackconfig.Config, metadata *acktypes.RuntimeMetaObject, ) map[string]string
GetDefaultTags provides Default tags (key value pairs) for given resource
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 NewAdoptionReconciler ¶ added in v0.1.0
func NewAdoptionReconciler( sc acktypes.ServiceController, log logr.Logger, cfg ackcfg.Config, metrics *ackmetrics.Metrics, cache ackrtcache.Caches, ) acktypes.Reconciler
NewAdoptionReconciler returns a new adoptionReconciler object
func NewReconciler ¶
func NewReconciler( sc acktypes.ServiceController, rmf acktypes.AWSResourceManagerFactory, log logr.Logger, cfg ackcfg.Config, metrics *ackmetrics.Metrics, cache ackrtcache.Caches, ) acktypes.AWSResourceReconciler
NewReconciler returns a new reconciler object
func NewReconcilerWithClient ¶ added in v0.7.0
func NewReconcilerWithClient( sc acktypes.ServiceController, kc client.Client, rmf acktypes.AWSResourceManagerFactory, log logr.Logger, cfg ackcfg.Config, metrics *ackmetrics.Metrics, cache ackrtcache.Caches, ) acktypes.AWSResourceReconciler
NewReconcilerWithClient returns a new reconciler object with Client(controller-runtime/pkg/client) already set.
func NewServiceController ¶
func NewServiceController( svcAlias string, svcAPIGroup string, svcEndpointsID string, versionInfo VersionInfo, ) acktypes.ServiceController
NewServiceController returns a new serviceController instance
Types ¶
type Registry ¶
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 VersionInfo ¶
type VersionInfo struct { // GitCommit is the SHA1 commit for the service controller's code GitCommit string // GitVersion is the latest Git tag from the service controller's code GitVersion string // BuildDate is a timestamp of when the code was built BuildDate string }
VersionInfo contains information about the version of the runtime and service controller in use