The Achilles SDK offers efficient operator/controller creation by allowing engineers to focus on defining their automation business logic, modeled as transitions between resources states (i.e. an FSM). This significantly lessens the knowledge of controller and Kubernetes plumbing typically required to build controllers. It also forces standardization to ensure consistency amongst controllers at Reddit, providing common functionality such as metrics, logging, reusable API structs, etc..
See the achilles-token-controller repo for a complete, runnable example of an Achilles SDK backed controller.
As an example, assume you wanted to create a declarative API that allows developers to request object storage for their application. The API you wish to expose may look something like:
apiVersion: infra.snooguts.net/v1alpha1
kind: ObjectStorage
metadata:
name: persistent-storage
namespace: web-apps
spec:
encrypted: true
region: us-east
versioning: true
To define this API, you'll use a common-convention with Go structs to automatically generate the CustomResourceDefinition (API). Then you'll define the states and transition logic, such as:

Along with doing the underlying plumbing to support this controller, achilles-sdk is providing you logging, metrics, rate-limiting, and more.
Lastly, in modeling your controller logic this way, you end up with a clean directed graph that models a finite-state-machine (FSM). This can significantly reduce the cognitive overhead of reasoning about what a controller is doing or the state an object is in. More on FSM in the documentation.
Regular releases will be done by maintainers.
After incorporating your changes into the achilles-sdk repository, you can publish a new release to make the updated functionality available for repos that consume achilles-sdk.
major.minor.patch):
$your-tagname-here on publish.”go get github.com/reddit/achilles-sdk@v0.7.1git diff and validate that the changes made to go.mod and go.sum are as expected.Go
99.7%
The Achilles SDK offers efficient operator/controller creation by allowing engineers to focus on defining their automation business logic, modeled as transitions between resources states (i.e. an FSM). This significantly lessens the knowledge of controller and Kubernetes plumbing typically required to build controllers. It also forces standardization to ensure consistency amongst controllers at Reddit, providing common functionality such as metrics, logging, reusable API structs, etc..
See the achilles-token-controller repo for a complete, runnable example of an Achilles SDK backed controller.
As an example, assume you wanted to create a declarative API that allows developers to request object storage for their application. The API you wish to expose may look something like:
apiVersion: infra.snooguts.net/v1alpha1
kind: ObjectStorage
metadata:
name: persistent-storage
namespace: web-apps
spec:
encrypted: true
region: us-east
versioning: true
To define this API, you'll use a common-convention with Go structs to automatically generate the CustomResourceDefinition (API). Then you'll define the states and transition logic, such as:

Along with doing the underlying plumbing to support this controller, achilles-sdk is providing you logging, metrics, rate-limiting, and more.
Lastly, in modeling your controller logic this way, you end up with a clean directed graph that models a finite-state-machine (FSM). This can significantly reduce the cognitive overhead of reasoning about what a controller is doing or the state an object is in. More on FSM in the documentation.
Regular releases will be done by maintainers.
After incorporating your changes into the achilles-sdk repository, you can publish a new release to make the updated functionality available for repos that consume achilles-sdk.
major.minor.patch):
$your-tagname-here on publish.”go get github.com/reddit/achilles-sdk@v0.7.1git diff and validate that the changes made to go.mod and go.sum are as expected.Go
99.7%