Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 6 additions & 3 deletions broker/machinebroker/server/machine_create.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,11 @@ import (
"github.com/ironcore-dev/ironcore/broker/common/cleaner"
machinebrokerv1alpha1 "github.com/ironcore-dev/ironcore/broker/machinebroker/api/v1alpha1"
"github.com/ironcore-dev/ironcore/broker/machinebroker/apiutils"
iri "github.com/ironcore-dev/ironcore/iri/apis/machine/v1alpha1"
machinepoolletv1alpha1 "github.com/ironcore-dev/ironcore/poollet/machinepoollet/api/v1alpha1"

poolletutils "github.com/ironcore-dev/ironcore/poollet/common/utils"

iri "github.com/ironcore-dev/ironcore/iri/apis/machine/v1alpha1"
"github.com/ironcore-dev/ironcore/utils/maps"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
Expand Down Expand Up @@ -53,12 +56,12 @@ func (s *Server) prepareIronCoreMachineLabels(machine *iri.Machine) map[string]s
labels := make(map[string]string)

for downwardAPILabelName, defaultLabelName := range s.brokerDownwardAPILabels {
value := machine.GetMetadata().GetLabels()[machinepoolletv1alpha1.DownwardAPILabel(downwardAPILabelName)]
value := machine.GetMetadata().GetLabels()[poolletutils.DownwardAPILabel(machinepoolletv1alpha1.MachineDownwardAPIPrefix, downwardAPILabelName)]
if value == "" {
value = machine.GetMetadata().GetLabels()[defaultLabelName]
}
if value != "" {
labels[machinepoolletv1alpha1.DownwardAPILabel(downwardAPILabelName)] = value
labels[poolletutils.DownwardAPILabel(machinepoolletv1alpha1.MachineDownwardAPIPrefix, downwardAPILabelName)] = value
}
}

Expand Down
7 changes: 4 additions & 3 deletions broker/machinebroker/server/machine_create_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
"github.com/ironcore-dev/ironcore/broker/machinebroker/apiutils"
iri "github.com/ironcore-dev/ironcore/iri/apis/machine/v1alpha1"
irimeta "github.com/ironcore-dev/ironcore/iri/apis/meta/v1alpha1"
poolletutils "github.com/ironcore-dev/ironcore/poollet/common/utils"
machinepoolletv1alpha1 "github.com/ironcore-dev/ironcore/poollet/machinepoollet/api/v1alpha1"
. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
Expand Down Expand Up @@ -47,9 +48,9 @@ var _ = Describe("CreateMachine", func() {

By("inspecting the ironcore machine")
Expect(ironcoreMachine.Labels).To(Equal(map[string]string{
machinepoolletv1alpha1.DownwardAPILabel("root-machine-uid"): "foobar",
machinebrokerv1alpha1.CreatedLabel: "true",
machinebrokerv1alpha1.ManagerLabel: machinebrokerv1alpha1.MachineBrokerManager,
poolletutils.DownwardAPILabel(machinepoolletv1alpha1.MachineDownwardAPIPrefix, "root-machine-uid"): "foobar",
machinebrokerv1alpha1.CreatedLabel: "true",
machinebrokerv1alpha1.ManagerLabel: machinebrokerv1alpha1.MachineBrokerManager,
}))
encodedIRIAnnotations, err := apiutils.EncodeAnnotationsAnnotation(nil)
Expect(err).NotTo(HaveOccurred())
Expand Down
5 changes: 0 additions & 5 deletions broker/volumebroker/apiutils/apiutils.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ import (
"fmt"

"github.com/ironcore-dev/controller-utils/metautils"
storagev1alpha1 "github.com/ironcore-dev/ironcore/api/storage/v1alpha1"
volumebrokerv1alpha1 "github.com/ironcore-dev/ironcore/broker/volumebroker/api/v1alpha1"
irimeta "github.com/ironcore-dev/ironcore/iri/apis/meta/v1alpha1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
Expand Down Expand Up @@ -132,10 +131,6 @@ func GetAnnotationsAnnotation(o metav1.Object) (map[string]string, error) {
return annotations, nil
}

func SetVolumeManagerLabel(volume *storagev1alpha1.Volume, manager string) {
metautils.SetLabel(volume, volumebrokerv1alpha1.ManagerLabel, manager)
}

func IsManagedBy(o metav1.Object, manager string) bool {
actual, ok := o.GetLabels()[volumebrokerv1alpha1.ManagerLabel]
return ok && actual == manager
Expand Down
14 changes: 9 additions & 5 deletions broker/volumebroker/cmd/volumebroker/app/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,9 @@ import (
)

type Options struct {
GetConfigOptions config.GetConfigOptions
Address string
GetConfigOptions config.GetConfigOptions
Address string
BrokerDownwardAPILabels map[string]string

QPS float32
Burst int
Expand All @@ -38,6 +39,8 @@ type Options struct {
func (o *Options) AddFlags(fs *pflag.FlagSet) {
o.GetConfigOptions.BindFlags(fs)
fs.StringVar(&o.Address, "address", "/var/run/iri-volumebroker.sock", "Address to listen on.")
fs.StringToStringVar(&o.BrokerDownwardAPILabels, "broker-downward-api-label", nil, "The labels to broker via downward API. "+
"Example is for instance to broker \"root-volume-uid\" initially obtained via \"volumepoollet.ironcore.dev/volume-uid\".")

fs.StringVar(&o.Namespace, "namespace", o.Namespace, "Target Kubernetes namespace to use.")
fs.StringVar(&o.VolumePoolName, "volume-pool-name", o.VolumePoolName, "Name of the target volume pool to pin volumes to, if any.")
Expand Down Expand Up @@ -86,9 +89,10 @@ func Run(ctx context.Context, opts Options) error {
}

srv, err := server.New(cfg, server.Options{
Namespace: opts.Namespace,
VolumePoolName: opts.VolumePoolName,
VolumePoolSelector: opts.VolumePoolSelector,
BrokerDownwardAPILabels: opts.BrokerDownwardAPILabels,
Namespace: opts.Namespace,
VolumePoolName: opts.VolumePoolName,
VolumePoolSelector: opts.VolumePoolSelector,
})
if err != nil {
return fmt.Errorf("error creating server: %w", err)
Expand Down
26 changes: 17 additions & 9 deletions broker/volumebroker/server/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,8 @@ type Server struct {
client client.Client
idGen idgen.IDGen

brokerDownwardAPILabels map[string]string

namespace string
volumePoolName string
volumePoolSelector map[string]string
Expand Down Expand Up @@ -73,10 +75,15 @@ func (s *Server) setupCleaner(ctx context.Context, log logr.Logger, retErr *erro
}

type Options struct {
Namespace string
VolumePoolName string
VolumePoolSelector map[string]string
IDGen idgen.IDGen
// BrokerDownwardAPILabels specifies which labels to broker via downward API and what the default
// label name is to obtain the value in case there is no value for the downward API.
// Example usage is e.g. to broker the root UID (map "root-volume-uid" to volumepoollet's
// "volumepoollet.ironcore.dev/volume-uid")
BrokerDownwardAPILabels map[string]string
Namespace string
VolumePoolName string
VolumePoolSelector map[string]string
IDGen idgen.IDGen
}

func setOptionsDefaults(o *Options) {
Expand Down Expand Up @@ -105,11 +112,12 @@ func New(cfg *rest.Config, opts Options) (*Server, error) {
}

return &Server{
client: c,
idGen: opts.IDGen,
namespace: opts.Namespace,
volumePoolName: opts.VolumePoolName,
volumePoolSelector: opts.VolumePoolSelector,
brokerDownwardAPILabels: opts.BrokerDownwardAPILabels,
client: c,
idGen: opts.IDGen,
namespace: opts.Namespace,
volumePoolName: opts.VolumePoolName,
volumePoolSelector: opts.VolumePoolSelector,
}, nil
}

Expand Down
4 changes: 4 additions & 0 deletions broker/volumebroker/server/server_suite_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import (
storagev1alpha1 "github.com/ironcore-dev/ironcore/api/storage/v1alpha1"
"github.com/ironcore-dev/ironcore/broker/common/idgen"
"github.com/ironcore-dev/ironcore/broker/volumebroker/server"
volumepoolletv1alpha1 "github.com/ironcore-dev/ironcore/poollet/volumepoollet/api/v1alpha1"
utilsenvtest "github.com/ironcore-dev/ironcore/utils/envtest"
"github.com/ironcore-dev/ironcore/utils/envtest/apiserver"
. "github.com/onsi/ginkgo/v2"
Expand Down Expand Up @@ -140,6 +141,9 @@ func SetupTest() (*corev1.Namespace, *server.Server) {
DeferCleanup(k8sClient.Delete, volumePool)

newSrv, err := server.New(cfg, server.Options{
BrokerDownwardAPILabels: map[string]string{
"root-volume-uid": volumepoolletv1alpha1.VolumeUIDLabel,
},
Namespace: ns.Name,
VolumePoolName: volumePool.Name,
VolumePoolSelector: map[string]string{
Expand Down
26 changes: 25 additions & 1 deletion broker/volumebroker/server/volume_create.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@ import (
volumebrokerv1alpha1 "github.com/ironcore-dev/ironcore/broker/volumebroker/api/v1alpha1"
"github.com/ironcore-dev/ironcore/broker/volumebroker/apiutils"
iri "github.com/ironcore-dev/ironcore/iri/apis/volume/v1alpha1"
poolletutils "github.com/ironcore-dev/ironcore/poollet/common/utils"
volumepoolletv1alpha1 "github.com/ironcore-dev/ironcore/poollet/volumepoollet/api/v1alpha1"

"github.com/ironcore-dev/ironcore/utils/maps"
corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/resource"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
Expand All @@ -25,6 +29,22 @@ type AggregateIronCoreVolume struct {
AccessSecret *corev1.Secret
}

func (s *Server) prepareIronCoreVolumeLabels(volume *iri.Volume) map[string]string {
labels := make(map[string]string)

for downwardAPILabelName, defaultLabelName := range s.brokerDownwardAPILabels {
value := volume.GetMetadata().GetLabels()[poolletutils.DownwardAPILabel(volumepoolletv1alpha1.VolumeDownwardAPIPrefix, downwardAPILabelName)]
if value == "" {
value = volume.GetMetadata().GetLabels()[defaultLabelName]
}
if value != "" {
labels[poolletutils.DownwardAPILabel(volumepoolletv1alpha1.VolumeDownwardAPIPrefix, downwardAPILabelName)] = value
}
}

return labels
}

func (s *Server) getIronCoreVolumeConfig(_ context.Context, volume *iri.Volume) (*AggregateIronCoreVolume, error) {
var volumePoolRef *corev1.LocalObjectReference
if s.volumePoolName != "" {
Expand Down Expand Up @@ -55,10 +75,15 @@ func (s *Server) getIronCoreVolumeConfig(_ context.Context, volume *iri.Volume)
}
}

labels := s.prepareIronCoreVolumeLabels(volume)

ironcoreVolume := &storagev1alpha1.Volume{
ObjectMeta: metav1.ObjectMeta{
Namespace: s.namespace,
Name: s.idGen.Generate(),
Labels: maps.AppendMap(labels, map[string]string{
volumebrokerv1alpha1.ManagerLabel: volumebrokerv1alpha1.VolumeBrokerManager,
}),
},
Spec: storagev1alpha1.VolumeSpec{
VolumeClassRef: &corev1.LocalObjectReference{Name: volume.Spec.Class},
Expand All @@ -75,7 +100,6 @@ func (s *Server) getIronCoreVolumeConfig(_ context.Context, volume *iri.Volume)
if err := apiutils.SetObjectMetadata(ironcoreVolume, volume.Metadata); err != nil {
return nil, err
}
apiutils.SetVolumeManagerLabel(ironcoreVolume, volumebrokerv1alpha1.VolumeBrokerManager)

return &AggregateIronCoreVolume{
Volume: ironcoreVolume,
Expand Down
2 changes: 2 additions & 0 deletions broker/volumebroker/server/volume_create_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
volumebrokerv1alpha1 "github.com/ironcore-dev/ironcore/broker/volumebroker/api/v1alpha1"
irimeta "github.com/ironcore-dev/ironcore/iri/apis/meta/v1alpha1"
iri "github.com/ironcore-dev/ironcore/iri/apis/volume/v1alpha1"
poolletutils "github.com/ironcore-dev/ironcore/poollet/common/utils"
volumepoolletv1alpha1 "github.com/ironcore-dev/ironcore/poollet/volumepoollet/api/v1alpha1"

. "github.com/onsi/ginkgo/v2"
Expand Down Expand Up @@ -49,6 +50,7 @@ var _ = Describe("CreateVolume", func() {

By("inspecting the ironcore volume")
Expect(ironcoreVolume.Labels).To(Equal(map[string]string{
poolletutils.DownwardAPILabel(volumepoolletv1alpha1.VolumeDownwardAPIPrefix, "root-volume-uid"): "foobar",
volumebrokerv1alpha1.CreatedLabel: "true",
volumebrokerv1alpha1.ManagerLabel: volumebrokerv1alpha1.VolumeBrokerManager,
}))
Expand Down
7 changes: 7 additions & 0 deletions config/volumepoollet-broker/manager/manager.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,9 @@ spec:
args:
- --health-probe-bind-address=:8081
- --leader-elect
- --volume-downward-api-label=root-volume-namespace=metadata.labels['downward-api.volumepoollet.ironcore.dev/root-volume-namespace']
- --volume-downward-api-label=root-volume-name=metadata.labels['downward-api.volumepoollet.ironcore.dev/root-volume-name']
- --volume-downward-api-label=root-volume-uid=metadata.labels['downward-api.volumepoollet.ironcore.dev/root-volume-uid']
image: volumepoollet:latest
name: manager
securityContext:
Expand Down Expand Up @@ -62,6 +65,10 @@ spec:
- /volumebroker
image: volumebroker:latest
name: broker
args:
- --broker-downward-api-label=root-volume-namespace=metadata.labels['downward-api.volumepoollet.ironcore.dev/root-volume-namespace']
- --broker-downward-api-label=root-volume-name=metadata.labels['downward-api.volumepoollet.ironcore.dev/root-volume-name']
- --broker-downward-api-label=root-volume-uid=metadata.labels['downward-api.volumepoollet.ironcore.dev/root-volume-uid']
securityContext:
allowPrivilegeEscalation: false
livenessProbe:
Expand Down
4 changes: 2 additions & 2 deletions poollet/bucketpoollet/controllers/bucket_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ import (
bucketpoolletv1alpha1 "github.com/ironcore-dev/ironcore/poollet/bucketpoollet/api/v1alpha1"
"github.com/ironcore-dev/ironcore/poollet/bucketpoollet/bcm"
"github.com/ironcore-dev/ironcore/poollet/bucketpoollet/controllers/events"
poolletproviderid "github.com/ironcore-dev/ironcore/utils/poollet"
poolletutils "github.com/ironcore-dev/ironcore/poollet/common/utils"

ironcoreclient "github.com/ironcore-dev/ironcore/utils/client"
"github.com/ironcore-dev/ironcore/utils/predicates"
Expand Down Expand Up @@ -441,7 +441,7 @@ func (r *BucketReconciler) updateStatus(ctx context.Context, log logr.Logger, bu
base := bucket.DeepCopy()
now := metav1.Now()

bucketID := poolletproviderid.MakeID(r.BucketRuntimeName, iriBucket.Metadata.Id)
bucketID := poolletutils.MakeID(r.BucketRuntimeName, iriBucket.Metadata.Id)

bucket.Status.Access = access
newState, err := r.convertIRIBucketState(iriBucket.Status.State)
Expand Down
4 changes: 2 additions & 2 deletions poollet/bucketpoollet/controllers/bucket_controller_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ import (
storagev1alpha1 "github.com/ironcore-dev/ironcore/api/storage/v1alpha1"
iri "github.com/ironcore-dev/ironcore/iri/apis/bucket/v1alpha1"
testingbucket "github.com/ironcore-dev/ironcore/iri/testing/bucket"
poolletutils "github.com/ironcore-dev/ironcore/poollet/common/utils"
ironcoreclient "github.com/ironcore-dev/ironcore/utils/client"
poolletproviderid "github.com/ironcore-dev/ironcore/utils/poollet"

. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
Expand Down Expand Up @@ -66,7 +66,7 @@ var _ = Describe("BucketController", func() {
Expect(ironcoreclient.PatchAddReconcileAnnotation(ctx, k8sClient, bucket)).Should(Succeed())

By("Waiting for the ironcore bucket Status to be up-to-date")
expectedBucketID := poolletproviderid.MakeID(testingbucket.FakeRuntimeName, iriBucket.Metadata.Id)
expectedBucketID := poolletutils.MakeID(testingbucket.FakeRuntimeName, iriBucket.Metadata.Id)
Eventually(Object(bucket)).Should(SatisfyAll(
HaveField("Status.State", storagev1alpha1.BucketStateAvailable),
HaveField("Status.BucketID", expectedBucketID.String()),
Expand Down
12 changes: 11 additions & 1 deletion utils/poollet/provider_id.go → poollet/common/utils/utils.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// SPDX-FileCopyrightText: 2023 SAP SE or an SAP affiliate company and IronCore contributors
// SPDX-License-Identifier: Apache-2.0

package poollet
package utils

import (
"fmt"
Expand Down Expand Up @@ -40,3 +40,13 @@ func ParseID(s string) (ID, error) {
var id ID
return id, id.UnmarshalText([]byte(s))
}

// DownwardAPILabel makes a downward api label name from the given name.
func DownwardAPILabel(label_prefix, name string) string {
return label_prefix + name
}

// DownwardAPIAnnotation makes a downward api annotation name from the given name.
func DownwardAPIAnnotation(annotation_prefix, name string) string {
return annotation_prefix + name
}
14 changes: 2 additions & 12 deletions poollet/machinepoollet/api/v1alpha1/common_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,20 +23,10 @@ const (
FieldOwner = "machinepoollet.ironcore.dev/field-owner"
MachineFinalizer = "machinepoollet.ironcore.dev/machine"

// DownwardAPIPrefix is the prefix for any downward label.
DownwardAPIPrefix = "downward-api.machinepoollet.ironcore.dev/"
// MachineDownwardAPIPrefix is the prefix for any downward label.
MachineDownwardAPIPrefix = "downward-api.machinepoollet.ironcore.dev/"
)

// DownwardAPILabel makes a downward api label name from the given name.
func DownwardAPILabel(name string) string {
return DownwardAPIPrefix + name
}

// DownwardAPIAnnotation makes a downward api annotation name from the given name.
func DownwardAPIAnnotation(name string) string {
return DownwardAPIPrefix + name
}

// EncodeNetworkInterfaceMapping encodes the given network interface mapping to be used as an annotation.
func EncodeNetworkInterfaceMapping(nicMapping map[string]ObjectUIDRef) (string, error) {
data, err := json.Marshal(nicMapping)
Expand Down
12 changes: 6 additions & 6 deletions poollet/machinepoollet/controllers/machine_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,13 @@ import (
irimachine "github.com/ironcore-dev/ironcore/iri/apis/machine"
iri "github.com/ironcore-dev/ironcore/iri/apis/machine/v1alpha1"
irimeta "github.com/ironcore-dev/ironcore/iri/apis/meta/v1alpha1"
poolletutils "github.com/ironcore-dev/ironcore/poollet/common/utils"
"github.com/ironcore-dev/ironcore/poollet/machinepoollet/api/v1alpha1"
machinepoolletclient "github.com/ironcore-dev/ironcore/poollet/machinepoollet/client"
"github.com/ironcore-dev/ironcore/poollet/machinepoollet/controllers/events"
"github.com/ironcore-dev/ironcore/poollet/machinepoollet/mcm"
utilclient "github.com/ironcore-dev/ironcore/utils/client"
utilmaps "github.com/ironcore-dev/ironcore/utils/maps"
poolletproviderid "github.com/ironcore-dev/ironcore/utils/poollet"
"github.com/ironcore-dev/ironcore/utils/predicates"

"github.com/ironcore-dev/controller-utils/clientutils"
Expand Down Expand Up @@ -332,7 +332,7 @@ func (r *MachineReconciler) reconcile(ctx context.Context, log logr.Logger, mach
}

func (r *MachineReconciler) iriMachineLabels(machine *computev1alpha1.Machine) (map[string]string, error) {
annotations := map[string]string{
labels := map[string]string{
v1alpha1.MachineUIDLabel: string(machine.UID),
v1alpha1.MachineNamespaceLabel: machine.Namespace,
v1alpha1.MachineNameLabel: machine.Name,
Expand All @@ -344,9 +344,9 @@ func (r *MachineReconciler) iriMachineLabels(machine *computev1alpha1.Machine) (
return nil, fmt.Errorf("error extracting downward api label %q: %w", name, err)
}

annotations[v1alpha1.DownwardAPILabel(name)] = value
labels[poolletutils.DownwardAPILabel(v1alpha1.MachineDownwardAPIPrefix, name)] = value
}
return annotations, nil
return labels, nil
}

func (r *MachineReconciler) iriMachineAnnotations(
Expand All @@ -371,7 +371,7 @@ func (r *MachineReconciler) iriMachineAnnotations(
return nil, fmt.Errorf("error extracting downward api annotation %q: %w", name, err)
}

annotations[v1alpha1.DownwardAPIAnnotation(name)] = value
annotations[poolletutils.DownwardAPIAnnotation(v1alpha1.MachineDownwardAPIPrefix, name)] = value
}

return annotations, nil
Expand Down Expand Up @@ -536,7 +536,7 @@ func (r *MachineReconciler) updateMachineStatus(ctx context.Context, machine *co
return err
}

machineID := poolletproviderid.MakeID(r.MachineRuntimeName, iriMachine.Metadata.Id)
machineID := poolletutils.MakeID(r.MachineRuntimeName, iriMachine.Metadata.Id)

state, err := r.convertIRIMachineState(iriMachine.Status.State)
if err != nil {
Expand Down
Loading
Loading