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
6 changes: 6 additions & 0 deletions ccm/cloud/vm.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ type VM struct {
NetID *string
SubnetID *string
VmType string
Roles []string

cloudVm *osc.Vm
}
Expand All @@ -44,6 +45,11 @@ func FromOscVm(vm *osc.Vm) *VM {
SubRegion: vm.Placement.SubregionName,
cloudVm: vm,
}
for _, t := range vm.Tags {
if after, ok := strings.CutPrefix(t.Key, tags.RolePrefix); ok {
v.Roles = append(v.Roles, after)
}
}
v.Region = v.SubRegion[:len(v.SubRegion)-1]
return v
}
Expand Down
2 changes: 2 additions & 0 deletions ccm/helpers_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,8 @@ var (
Tags: []osc.ResourceTag{{
Key: tags.VmNodeName,
Value: vmNodeName,
}, {
Key: tags.RoleKey("worker"),
}},
SubnetId: ptr.To("subnet-bar"),
NetId: ptr.To("net-bar"),
Expand Down
13 changes: 12 additions & 1 deletion ccm/instances_v2.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,11 @@ import (
"k8s.io/klog/v2"
)

const (
NetLabel = "topology.outscale.com/net"
RoleLabelPrefix = "role.outscale.com/"
)

// InstanceExists indicates whether a given node exists according to the cloud provider
func (c *Provider) InstanceExists(ctx context.Context, node *v1.Node) (bool, error) {
vm, err := c.getVmByNodeName(ctx, node.Name)
Expand Down Expand Up @@ -47,7 +52,7 @@ func (c *Provider) InstanceMetadata(ctx context.Context, node *v1.Node) (*cloudp
if err != nil {
return nil, err
}
labels := make(map[string]string, len(c.opts.NodeLabels))
labels := make(map[string]string, len(c.opts.NodeLabels)+2)
for k, v := range c.opts.nodeLabelTemplates {
str := strings.Builder{}
err := v.Execute(&str, vm)
Expand All @@ -57,6 +62,12 @@ func (c *Provider) InstanceMetadata(ctx context.Context, node *v1.Node) (*cloudp
}
labels[k] = str.String()
}
if vm.NetID != nil {
labels[NetLabel] = *vm.NetID
}
for _, role := range vm.Roles {
labels[RoleLabelPrefix+role] = ""
}
return &cloudprovider.InstanceMetadata{
ProviderID: vm.ProviderID(),
InstanceType: vm.VmType,
Expand Down
6 changes: 5 additions & 1 deletion ccm/instances_v2_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,10 @@ func TestInstanceMetadata(t *testing.T) {
{Type: v1.NodeInternalDNS, Address: "10.0.0.10.eu-west-2.compute.internal"},
{Type: v1.NodeHostName, Address: "10.0.0.10.eu-west-2.compute.internal"},
},
AdditionalLabels: map[string]string{},
AdditionalLabels: map[string]string{
ccm.NetLabel: "net-bar",
ccm.RoleLabelPrefix + "worker": "",
},
}, meta)
})
t.Run("Additional labels can be set", func(t *testing.T) {
Expand All @@ -106,6 +109,7 @@ func TestInstanceMetadata(t *testing.T) {
"label.foo": "foo",
"label.bar": "barbar",
"label.SubRegion": "eu-west-2a",
ccm.NetLabel: "net-bar",
}, meta.AdditionalLabels)
})
}
11 changes: 11 additions & 0 deletions tests/e2e/node.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (

. "github.com/onsi/ginkgo/v2" //nolint: staticcheck
"github.com/onsi/gomega"
"github.com/outscale/cloud-provider-osc/ccm"
"github.com/outscale/cloud-provider-osc/labeler"
e2eutils "github.com/outscale/cloud-provider-osc/tests/e2e/utils"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
Expand All @@ -25,6 +26,16 @@ var _ = Describe("[e2e][node] Adding labels to nodes", func() {
gomega.Expect(node.Labels).To(gomega.HaveKey("clilabel"))
}
})

It("sets the net label", func() {
cl := f.ClientSet.CoreV1().Nodes()
lst, err := cl.List(context.Background(), metav1.ListOptions{})
framework.ExpectNoError(err)
for _, node := range lst.Items {
// The CI does not set roles on nodes
gomega.Expect(node.Labels).To(gomega.HaveKey(ccm.NetLabel))
}
})
})

var _ = Describe("[e2e][node] The node labeler works", func() {
Expand Down
Loading