mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-23 11:50:44 +00:00
implement InstanceShutdownByProviderID to aws cloudprovider
changes according what was asked use string do not delete instance if it is in any other state than running use constants fix
This commit is contained in:
parent
113872798d
commit
a68cbd65b7
@ -1336,7 +1336,7 @@ func (c *Cloud) NodeAddressesByProviderID(ctx context.Context, providerID string
|
|||||||
return extractNodeAddresses(instance)
|
return extractNodeAddresses(instance)
|
||||||
}
|
}
|
||||||
|
|
||||||
// InstanceExistsByProviderID returns true if the instance with the given provider id still exists and is running.
|
// InstanceExistsByProviderID returns true if the instance with the given provider id still exists.
|
||||||
// If false is returned with no error, the instance will be immediately deleted by the cloud controller manager.
|
// If false is returned with no error, the instance will be immediately deleted by the cloud controller manager.
|
||||||
func (c *Cloud) InstanceExistsByProviderID(ctx context.Context, providerID string) (bool, error) {
|
func (c *Cloud) InstanceExistsByProviderID(ctx context.Context, providerID string) (bool, error) {
|
||||||
instanceID, err := kubernetesInstanceID(providerID).mapToAWSInstanceID()
|
instanceID, err := kubernetesInstanceID(providerID).mapToAWSInstanceID()
|
||||||
@ -1359,18 +1359,41 @@ func (c *Cloud) InstanceExistsByProviderID(ctx context.Context, providerID strin
|
|||||||
return false, fmt.Errorf("multiple instances found for instance: %s", instanceID)
|
return false, fmt.Errorf("multiple instances found for instance: %s", instanceID)
|
||||||
}
|
}
|
||||||
|
|
||||||
state := instances[0].State.Name
|
|
||||||
if *state != "running" {
|
|
||||||
glog.Warningf("the instance %s is not running", instanceID)
|
|
||||||
return false, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
return true, nil
|
return true, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// InstanceShutdownByProviderID returns true if the instance is in safe state to detach volumes
|
// InstanceShutdownByProviderID returns true if the instance is in safe state to detach volumes
|
||||||
func (c *Cloud) InstanceShutdownByProviderID(ctx context.Context, providerID string) (bool, error) {
|
func (c *Cloud) InstanceShutdownByProviderID(ctx context.Context, providerID string) (bool, error) {
|
||||||
return false, cloudprovider.NotImplemented
|
instanceID, err := kubernetesInstanceID(providerID).mapToAWSInstanceID()
|
||||||
|
if err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
|
||||||
|
request := &ec2.DescribeInstancesInput{
|
||||||
|
InstanceIds: []*string{instanceID.awsString()},
|
||||||
|
}
|
||||||
|
|
||||||
|
instances, err := c.ec2.DescribeInstances(request)
|
||||||
|
if err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
if len(instances) == 0 {
|
||||||
|
glog.Warningf("the instance %s does not exist anymore", providerID)
|
||||||
|
return true, nil
|
||||||
|
}
|
||||||
|
if len(instances) > 1 {
|
||||||
|
return false, fmt.Errorf("multiple instances found for instance: %s", instanceID)
|
||||||
|
}
|
||||||
|
|
||||||
|
instance := instances[0]
|
||||||
|
if instance.State != nil {
|
||||||
|
state := aws.StringValue(instance.State.Name)
|
||||||
|
// valid state for detaching volumes
|
||||||
|
if state == ec2.InstanceStateNameStopped || state == ec2.InstanceStateNameTerminated {
|
||||||
|
return true, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// InstanceID returns the cloud provider ID of the node with the specified nodeName.
|
// InstanceID returns the cloud provider ID of the node with the specified nodeName.
|
||||||
|
Loading…
Reference in New Issue
Block a user