Skip to content

Commit

Permalink
Merge branch 'main' into vimystic/feat/446-nodeselector-in-instance-o…
Browse files Browse the repository at this point in the history
…verrides
  • Loading branch information
vimystic authored Feb 13, 2025
2 parents d4569f6 + 2cf0dbf commit 56b6ac2
Show file tree
Hide file tree
Showing 17 changed files with 499 additions and 495 deletions.
11 changes: 0 additions & 11 deletions config/rbac/role.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -28,17 +28,6 @@ rules:
- create
- patch
- update
- apiGroups:
- ""
resources:
- secrets
verbs:
- create
- get
- list
- patch
- update
- watch
- apiGroups:
- batch
resources:
Expand Down
13 changes: 6 additions & 7 deletions controllers/cosmosfullnode_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ type CosmosFullNodeReconciler struct {

cacheController *cosmos.CacheController
configMapControl fullnode.ConfigMapControl
nodeKeyControl fullnode.NodeKeyControl
nodeKeyCollector *fullnode.NodeKeyCollector
peerCollector *fullnode.PeerCollector
podControl fullnode.PodControl
pvcControl fullnode.PVCControl
Expand All @@ -69,7 +69,7 @@ func NewFullNode(

cacheController: cacheController,
configMapControl: fullnode.NewConfigMapControl(client),
nodeKeyControl: fullnode.NewNodeKeyControl(client),
nodeKeyCollector: fullnode.NewNodeKeyCollector(client),
peerCollector: fullnode.NewPeerCollector(client),
podControl: fullnode.NewPodControl(client, cacheController),
pvcControl: fullnode.NewPVCControl(client),
Expand All @@ -93,7 +93,6 @@ var (
// Generate RBAC roles to watch and update resources. IMPORTANT!!!! All resource names must be lowercase or cluster role will not work.
//+kubebuilder:rbac:groups="",resources=pods;persistentvolumeclaims;services;serviceaccounts;configmaps,verbs=get;list;watch;create;update;patch;delete
//+kubebuilder:rbac:groups="rbac.authorization.k8s.io",resources=roles;rolebindings,verbs=get;list;watch;create;update;patch;delete;bind;escalate
//+kubebuilder:rbac:groups="",resources=secrets,verbs=get;list;watch;create;update;patch
//+kubebuilder:rbac:groups="",resources=events,verbs=create;update;patch

// Reconcile is part of the main kubernetes reconciliation loop which aims to
Expand Down Expand Up @@ -136,21 +135,21 @@ func (r *CosmosFullNodeReconciler) Reconcile(ctx context.Context, req ctrl.Reque
errs.Append(err)
}

// Reconcile Secrets.
err = r.nodeKeyControl.Reconcile(ctx, reporter, crd)
// Node keys are required for peers but created in config maps. Since config maps require peers, we need to resolve node keys first and pass them to both.
nodeKeys, err := r.nodeKeyCollector.Collect(ctx, crd)
if err != nil {
errs.Append(err)
}

// Find peer information that's used downstream.
peers, perr := r.peerCollector.Collect(ctx, crd)
peers, perr := r.peerCollector.Collect(ctx, crd, nodeKeys)
if perr != nil {
peers = peers.Default()
errs.Append(perr)
}

// Reconcile ConfigMaps.
configCksums, err := r.configMapControl.Reconcile(ctx, reporter, crd, peers)
configCksums, err := r.configMapControl.Reconcile(ctx, reporter, crd, peers, nodeKeys)
if err != nil {
errs.Append(err)
}
Expand Down
16 changes: 14 additions & 2 deletions internal/fullnode/configmap_builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,16 +14,18 @@ import (
"github.com/strangelove-ventures/cosmos-operator/internal/diff"
"github.com/strangelove-ventures/cosmos-operator/internal/kube"
corev1 "k8s.io/api/core/v1"
"sigs.k8s.io/controller-runtime/pkg/client"
)

const (
configOverlayFile = "config-overlay.toml"
appOverlayFile = "app-overlay.toml"
nodeKeyFile = "node_key.json"
)

// BuildConfigMaps creates a ConfigMap with configuration to be mounted as files into containers.
// Currently, the config.toml (for Comet) and app.toml (for the Cosmos SDK).
func BuildConfigMaps(crd *cosmosv1.CosmosFullNode, peers Peers) ([]diff.Resource[*corev1.ConfigMap], error) {
// Currently, the config.toml (for Comet), app.toml (for the Cosmos SDK) and node_key.json.
func BuildConfigMaps(crd *cosmosv1.CosmosFullNode, peers Peers, nodeKeys NodeKeys) ([]diff.Resource[*corev1.ConfigMap], error) {
var (
buf = bufPool.Get().(*bytes.Buffer)
cms = make([]diff.Resource[*corev1.ConfigMap], 0, crd.Spec.Replicas)
Expand Down Expand Up @@ -66,6 +68,16 @@ func BuildConfigMaps(crd *cosmosv1.CosmosFullNode, peers Peers) ([]diff.Resource
}
buf.Reset()

nodeKey, ok := nodeKeys[client.ObjectKey{Name: instanceName(crd, i), Namespace: crd.Namespace}]

if !ok {
return nil, kube.UnrecoverableError(fmt.Errorf("node key not found for %s", instanceName(crd, i)))
}

nodeKeyValue := string(nodeKey.MarshaledNodeKey)

data[nodeKeyFile] = nodeKeyValue

var cm corev1.ConfigMap
cm.Name = instanceName(crd, i)
cm.Namespace = crd.Namespace
Expand Down
Loading

0 comments on commit 56b6ac2

Please sign in to comment.