Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
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/utils/poollet"

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 @@ -10,6 +10,7 @@ import (
iri "github.com/ironcore-dev/ironcore/iri/apis/machine/v1alpha1"
irimeta "github.com/ironcore-dev/ironcore/iri/apis/meta/v1alpha1"
machinepoolletv1alpha1 "github.com/ironcore-dev/ironcore/poollet/machinepoollet/api/v1alpha1"
poolletutils "github.com/ironcore-dev/ironcore/utils/poollet"
. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
"sigs.k8s.io/controller-runtime/pkg/client"
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"
volumepoolletv1alpha1 "github.com/ironcore-dev/ironcore/poollet/volumepoollet/api/v1alpha1"
poolletutils "github.com/ironcore-dev/ironcore/utils/poollet"

"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 @@ -10,6 +10,7 @@ import (
irimeta "github.com/ironcore-dev/ironcore/iri/apis/meta/v1alpha1"
iri "github.com/ironcore-dev/ironcore/iri/apis/volume/v1alpha1"
volumepoolletv1alpha1 "github.com/ironcore-dev/ironcore/poollet/volumepoollet/api/v1alpha1"
poolletutils "github.com/ironcore-dev/ironcore/utils/poollet"

. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
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/utils/poollet"

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 @@ -10,7 +10,7 @@ import (
iri "github.com/ironcore-dev/ironcore/iri/apis/bucket/v1alpha1"
testingbucket "github.com/ironcore-dev/ironcore/iri/testing/bucket"
ironcoreclient "github.com/ironcore-dev/ironcore/utils/client"
poolletproviderid "github.com/ironcore-dev/ironcore/utils/poollet"
poolletutils "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
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 @@ -27,7 +27,7 @@ import (
"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"
poolletutils "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