state_functions.go raw

   1  // Copyright 2022-2025 The sacloud/iaas-api-go Authors
   2  //
   3  // Licensed under the Apache License, Version 2.0 (the "License");
   4  // you may not use this file except in compliance with the License.
   5  // You may obtain a copy of the License at
   6  //
   7  //      http://www.apache.org/licenses/LICENSE-2.0
   8  //
   9  // Unless required by applicable law or agreed to in writing, software
  10  // distributed under the License is distributed on an "AS IS" BASIS,
  11  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12  // See the License for the specific language governing permissions and
  13  // limitations under the License.
  14  
  15  package iaas
  16  
  17  import (
  18  	"github.com/sacloud/iaas-api-go/types"
  19  	"github.com/sacloud/packages-go/wait"
  20  )
  21  
  22  // WaiterForUp 起動完了まで待つためのStateWaiterを返す
  23  func WaiterForUp(readFunc wait.StateReadFunc) wait.StateWaiter {
  24  	return &StatePollingWaiter{
  25  		ReadFunc: readFunc,
  26  		TargetAvailability: []types.EAvailability{
  27  			types.Availabilities.Available,
  28  		},
  29  		PendingAvailability: []types.EAvailability{
  30  			types.Availabilities.Unknown,
  31  			types.Availabilities.Migrating,
  32  			types.Availabilities.Uploading,
  33  			types.Availabilities.Transferring,
  34  			types.Availabilities.Discontinued,
  35  		},
  36  		TargetInstanceStatus: []types.EServerInstanceStatus{
  37  			types.ServerInstanceStatuses.Up,
  38  		},
  39  		PendingInstanceStatus: []types.EServerInstanceStatus{
  40  			types.ServerInstanceStatuses.Unknown,
  41  			types.ServerInstanceStatuses.Cleaning,
  42  			types.ServerInstanceStatuses.Down,
  43  		},
  44  	}
  45  }
  46  
  47  // WaiterForApplianceUp 起動完了まで待つためのStateWaiterを返す
  48  //
  49  // アプライアンス向けに404発生時のリトライを設定可能
  50  func WaiterForApplianceUp(readFunc wait.StateReadFunc, notFoundRetry int) wait.StateWaiter {
  51  	return &StatePollingWaiter{
  52  		ReadFunc: readFunc,
  53  		TargetAvailability: []types.EAvailability{
  54  			types.Availabilities.Available,
  55  		},
  56  		PendingAvailability: []types.EAvailability{
  57  			types.Availabilities.Unknown,
  58  			types.Availabilities.Migrating,
  59  			types.Availabilities.Uploading,
  60  			types.Availabilities.Transferring,
  61  			types.Availabilities.Discontinued,
  62  		},
  63  		TargetInstanceStatus: []types.EServerInstanceStatus{
  64  			types.ServerInstanceStatuses.Up,
  65  		},
  66  		PendingInstanceStatus: []types.EServerInstanceStatus{
  67  			types.ServerInstanceStatuses.Unknown,
  68  			types.ServerInstanceStatuses.Cleaning,
  69  			types.ServerInstanceStatuses.Down,
  70  		},
  71  		NotFoundRetry: notFoundRetry,
  72  	}
  73  }
  74  
  75  // WaiterForDown シャットダウン完了まで待つためのStateWaiterを返す
  76  func WaiterForDown(readFunc wait.StateReadFunc) wait.StateWaiter {
  77  	return &StatePollingWaiter{
  78  		ReadFunc: readFunc,
  79  		TargetAvailability: []types.EAvailability{
  80  			types.Availabilities.Available,
  81  		},
  82  		PendingAvailability: []types.EAvailability{
  83  			types.Availabilities.Unknown,
  84  		},
  85  		TargetInstanceStatus: []types.EServerInstanceStatus{
  86  			types.ServerInstanceStatuses.Down,
  87  		},
  88  		PendingInstanceStatus: []types.EServerInstanceStatus{
  89  			types.ServerInstanceStatuses.Up,
  90  			types.ServerInstanceStatuses.Cleaning,
  91  			types.ServerInstanceStatuses.Unknown,
  92  		},
  93  	}
  94  }
  95  
  96  // WaiterForReady リソースの利用準備完了まで待つためのStateWaiterを返す
  97  func WaiterForReady(readFunc wait.StateReadFunc) wait.StateWaiter {
  98  	return &StatePollingWaiter{
  99  		ReadFunc: readFunc,
 100  		TargetAvailability: []types.EAvailability{
 101  			types.Availabilities.Available,
 102  		},
 103  		PendingAvailability: []types.EAvailability{
 104  			types.Availabilities.Unknown,
 105  			types.Availabilities.Migrating,
 106  			types.Availabilities.Uploading,
 107  			types.Availabilities.Transferring,
 108  			types.Availabilities.Discontinued,
 109  		},
 110  	}
 111  }
 112