@@ -37,10 +37,10 @@ func (i instances) AddClient(datacenterId string, token []byte) error {
3737
3838// no caching
3939func (i instances ) discoverNode (ctx context.Context , node * v1.Node ) (* cloudprovider.InstanceMetadata , error ) {
40+ providerID := GetUUIDFromNode (node )
4041 for _ , client := range i .ionosClients {
4142 var err error
4243 var server * cloudprovider.InstanceMetadata
43- providerID := GetUUIDFromNode (node )
4444 klog .Infof ("discoverNode (datacenterId %s) %s %s" , client .DatacenterId , node .Name , providerID )
4545 if providerID != "" {
4646 server , err = client .GetServer (ctx , providerID )
@@ -55,7 +55,7 @@ func (i instances) discoverNode(ctx context.Context, node *v1.Node) (*cloudprovi
5555 }
5656 return server , nil
5757 }
58- return nil , errors . New ( "failed to discoverNode" )
58+ return nil , nil
5959}
6060
6161func (i instances ) InstanceExists (ctx context.Context , node * v1.Node ) (bool , error ) {
@@ -65,15 +65,33 @@ func (i instances) InstanceExists(ctx context.Context, node *v1.Node) (bool, err
6565 return server != nil , err
6666}
6767
68- func (i instances ) InstanceShutdown (_ context.Context , node * v1.Node ) (bool , error ) {
68+ func (i instances ) InstanceShutdown (ctx context.Context , node * v1.Node ) (bool , error ) {
6969 klog .Infof ("InstanceShutdown %s" , node .Name )
70- // TODO check here for mounted volumes
71- return true , nil
70+ providerID := GetUUIDFromNode (node )
71+ if providerID == "" {
72+ return false , nil
73+ }
74+ for _ , client := range i .ionosClients {
75+ serverState , err := client .GetServerState (ctx , providerID )
76+ if err != nil {
77+ continue
78+ }
79+ if serverState == "" {
80+ continue
81+ }
82+ if serverState != "RUNNING" && serverState != "NOSTATE" && serverState != "BLOCKED" {
83+ return true , nil
84+ }
85+ }
86+ return false , nil
7287}
7388
7489func (i instances ) InstanceMetadata (ctx context.Context , node * v1.Node ) (* cloudprovider.InstanceMetadata , error ) {
7590 klog .Infof ("InstanceMetadata %s" , node .Name )
7691 server , err := i .discoverNode (ctx , node )
92+ if server == nil && err == nil {
93+ return nil , errors .New ("failed to discoverNode" )
94+ }
7795 klog .InfoDepth (1 , server )
7896 return server , err
7997}
0 commit comments