Overview

The Core API is the main API for Cluster management. The Core API includes resources such as Services, Namespaces, Users, Groups, Policies, Devices, ClusterConfig among other resource types.

Applying Changes

The Cluster is designed to be managed, using the octeliumctl CLI, in a centralized and declarative way that is very similar to Kubernetes via the octeliumctl apply command, through which you can apply all changes of your resources and (re)produce the state of your Cluster with a single command.

You can define one or more resources in a single yaml file and then apply all changes as follows:

octeliumctl apply </PATH/TO/RESOURCES.yaml>

As your Cluster's resources grow, you might want to define your resources in multiple yaml files and even organize them into further subdirectories. In a fairly complex system with at least tens or hundreds of resources, it's much better to organize your configuration into multiple files and subdirectories. Here is an example:

1
octelium
2
├── policies
3
├── http.yaml
4
├── devops.yaml
5
├── services
6
├── dbs
7
├── aws.yaml
8
├── azure.yaml
9
├── apis.yaml
10
├── ssh.yaml
11
├── users
12
├── contractors.yaml
13
├── employees
14
├── dev.yaml
15
├── ops.yaml

In such case, you similarly use the octeliumctl apply command as follows:

octeliumctl apply </PATH/TO/RESOURCES_ROOT_DIR>

You can also apply changes to only a certain subdirectory or even a certain file. Here are some examples:

# Only apply changes in /policies directory
octeliumctl apply </PATH/TO/RESOURCES_ROOT_DIR>/policies
# Only apply changes in /services/dbs directory
octeliumctl apply </PATH/TO/RESOURCES_ROOT_DIR>/services/dbs
# Only apply changes in /users/employees/ops.yaml file
octeliumctl apply </PATH/TO/RESOURCES_ROOT_DIR>/users/employees/ops.yaml

By default, the octelium apply command only applies changes to create or update exiting resources but does not delete nonexistent resources. If you want to completely synchronize the state described in your file/directory and prune all additional resources in the Cluster that no longer exist in the current configuration, you can add the --prune flag as follows:

octeliumctl apply --prune </PATH/TO/RESOURCES_ROOT_DIR>

By default changes to all Resource types, except for Secret resources which are meant to be mainly managed in an imperative way (read more here), are applied. You can also choose to apply changes for certain Resource types instead of applying changes to all types. For example, you can apply changes for User and IdentityProvider resources only as follows:

octeliumctl apply --include User --include IdentityProvider </PATH/TO/RESOURCES_ROOT_DIR>

Now, only changes to User and IdentityProvider resources are applied.

You can also exclude one or more types as follows:

octeliumctl apply --exclude Service </PATH/TO/RESOURCES_ROOT_DIR>

You can also include Secret resources via the --include-secret flag as follows:

octeliumctl apply --include-secret </PATH/TO/RESOURCES_ROOT_DIR>

Listing Resources

You can list the different Cluster resources via the octeliumctl get command. For example, you can list the Cluster's Services as follows:

octeliumctl get service
# Or simply
octeliumctl get svc
# Or list by a certain Namespace
octeliumctl get svc --namespace default
# Or simply
octeliumctl get svc -n production
# Show a certain Service
octeliumctl get svc nginx.production

You can also set the page and number of items per page for the list as follows:

octeliumctl get svc --items-per-page 10 --page 2

By default, the list is ordered by the creation date. You can, however, set order the list by name as follows:

octeliumctl get svc --order-by-name

You can also reverse the order of the list as follows:

octeliumctl get svc --order-reverse

By default, the output of a octeliumctl get command is formatted as a table. You can force the output to be formatted as YAML as follows:

octeliumctl get svc -o yaml
# OR
octeliumctl get svc -o yml

You can also force the output to be formatted as JSON as follows:

octeliumctl get svc -o json
# You can also use jq
octeliumctl get svc -o json | jq
octeliumctl get sess -o json | jq -r .items[0].metadata.uid
© 2025 octelium.comOctelium Labs, LLCAll rights reserved
Octelium and Octelium logo are trademarks of Octelium Labs, LLC.
WireGuard is a registered trademark of Jason A. Donenfeld