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