@@ -15,6 +15,12 @@ import (
15
15
const (
16
16
InstanceTypeInstance = "instance"
17
17
InstanceTypeBaremtal = "baremetal"
18
+
19
+ // nodeLabelDisableLifeCycle is a label for nulling cloudprovider.InstancesV2 interface
20
+ nodeLabelDisableLifeCycle = "k8s.scw.cloud/disable-lifcycle"
21
+
22
+ // nodeLabelNodePublicIP is a label to override External-IP of a node
23
+ nodeLabelNodePublicIP = "k8s.scw.cloud/node-public-ip"
18
24
)
19
25
20
26
type Servers interface {
@@ -167,6 +173,10 @@ func (s *servers) GetZoneByNodeName(ctx context.Context, nodeName types.NodeName
167
173
// InstanceExists returns true if the instance for the given node exists according to the cloud provider.
168
174
// Use the node.name or node.spec.providerID field to find the node in the cloud provider.
169
175
func (s * servers ) InstanceExists (ctx context.Context , node * v1.Node ) (bool , error ) {
176
+ if _ , ok := node .Labels [nodeLabelDisableLifeCycle ]; ok {
177
+ return true , nil
178
+ }
179
+
170
180
if node .Spec .ProviderID == "" {
171
181
exists , err := s .instances .InstanceExists (ctx , node )
172
182
if err != nil {
@@ -183,6 +193,10 @@ func (s *servers) InstanceExists(ctx context.Context, node *v1.Node) (bool, erro
183
193
// InstanceShutdown returns true if the instance is shutdown according to the cloud provider.
184
194
// Use the node.name or node.spec.providerID field to find the node in the cloud provider.
185
195
func (s * servers ) InstanceShutdown (ctx context.Context , node * v1.Node ) (bool , error ) {
196
+ if _ , ok := node .Labels [nodeLabelDisableLifeCycle ]; ok {
197
+ return false , nil
198
+ }
199
+
186
200
if node .Spec .ProviderID == "" {
187
201
shutdown , err := s .instances .InstanceShutdown (ctx , node )
188
202
if err == cloudprovider .InstanceNotFound {
@@ -197,6 +211,15 @@ func (s *servers) InstanceShutdown(ctx context.Context, node *v1.Node) (bool, er
197
211
// translated into specific fields in the Node object on registration.
198
212
// Use the node.name or node.spec.providerID field to find the node in the cloud provider.
199
213
func (s * servers ) InstanceMetadata (ctx context.Context , node * v1.Node ) (* cloudprovider.InstanceMetadata , error ) {
214
+ if address , ok := node .Labels [nodeLabelNodePublicIP ]; ok {
215
+ return & cloudprovider.InstanceMetadata {
216
+ NodeAddresses : []v1.NodeAddress {{
217
+ Type : v1 .NodeExternalIP ,
218
+ Address : address ,
219
+ }},
220
+ }, nil
221
+ }
222
+
200
223
if node .Spec .ProviderID == "" {
201
224
metadata , err := s .instances .InstanceMetadata (ctx , node )
202
225
if err == cloudprovider .InstanceNotFound {
0 commit comments