github.com/sacloud/iaas-api-go@v1.12.0/fake/ops_archive.go (about) 1 // Copyright 2022-2023 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 fake 16 17 import ( 18 "context" 19 "fmt" 20 21 "github.com/sacloud/iaas-api-go" 22 "github.com/sacloud/iaas-api-go/types" 23 ) 24 25 // Find is fake implementation 26 func (o *ArchiveOp) Find(ctx context.Context, zone string, conditions *iaas.FindCondition) (*iaas.ArchiveFindResult, error) { 27 results, _ := find(o.key, zone, conditions) 28 var values []*iaas.Archive 29 for _, res := range results { 30 dest := &iaas.Archive{} 31 copySameNameField(res, dest) 32 values = append(values, dest) 33 } 34 return &iaas.ArchiveFindResult{ 35 Total: len(results), 36 Count: len(results), 37 From: 0, 38 Archives: values, 39 }, nil 40 } 41 42 // Create is fake implementation 43 func (o *ArchiveOp) Create(ctx context.Context, zone string, param *iaas.ArchiveCreateRequest) (*iaas.Archive, error) { 44 result := &iaas.Archive{} 45 46 copySameNameField(param, result) 47 fill(result, fillID, fillCreatedAt, fillScope) 48 49 if !param.SourceArchiveID.IsEmpty() { 50 source, err := o.Read(ctx, zone, param.SourceArchiveID) 51 if err != nil { 52 return nil, newErrorBadRequest(o.key, types.ID(0), "SourceArchive is not found") 53 } 54 result.SourceArchiveAvailability = source.Availability 55 } 56 if !param.SourceDiskID.IsEmpty() { 57 diskOp := NewDiskOp() 58 source, err := diskOp.Read(ctx, zone, param.SourceDiskID) 59 if err != nil { 60 return nil, newErrorBadRequest(o.key, types.ID(0), "SourceDisk is not found") 61 } 62 result.SourceDiskAvailability = source.Availability 63 } 64 65 result.DisplayOrder = int64(random(100)) 66 result.Availability = types.Availabilities.Migrating 67 result.DiskPlanID = types.DiskPlans.HDD 68 result.DiskPlanName = "標準プラン" 69 result.DiskPlanStorageClass = "iscsi9999" 70 71 putArchive(zone, result) 72 73 id := result.ID 74 startDiskCopy(o.key, zone, func() (interface{}, error) { 75 return o.Read(context.Background(), zone, id) 76 }) 77 78 return result, nil 79 } 80 81 // CreateBlank is fake implementation 82 func (o *ArchiveOp) CreateBlank(ctx context.Context, zone string, param *iaas.ArchiveCreateBlankRequest) (*iaas.Archive, *iaas.FTPServer, error) { 83 result := &iaas.Archive{} 84 copySameNameField(param, result) 85 fill(result, fillID, fillCreatedAt, fillScope) 86 87 result.Availability = types.Availabilities.Uploading 88 89 putArchive(zone, result) 90 91 return result, &iaas.FTPServer{ 92 HostName: fmt.Sprintf("sac-%s-ftp.example.jp", zone), 93 IPAddress: "192.0.2.1", 94 User: fmt.Sprintf("archive%d", result.ID), 95 Password: "password-is-not-a-password", 96 }, nil 97 } 98 99 // Read is fake implementation 100 func (o *ArchiveOp) Read(ctx context.Context, zone string, id types.ID) (*iaas.Archive, error) { 101 value := getArchiveByID(zone, id) 102 if value == nil { 103 return nil, newErrorNotFound(o.key, id) 104 } 105 dest := &iaas.Archive{} 106 copySameNameField(value, dest) 107 return dest, nil 108 } 109 110 // Update is fake implementation 111 func (o *ArchiveOp) Update(ctx context.Context, zone string, id types.ID, param *iaas.ArchiveUpdateRequest) (*iaas.Archive, error) { 112 value, err := o.Read(ctx, zone, id) 113 if err != nil { 114 return nil, err 115 } 116 copySameNameField(param, value) 117 fill(value, fillModifiedAt) 118 return value, nil 119 } 120 121 // Delete is fake implementation 122 func (o *ArchiveOp) Delete(ctx context.Context, zone string, id types.ID) error { 123 _, err := o.Read(ctx, zone, id) 124 if err != nil { 125 return err 126 } 127 ds().Delete(o.key, zone, id) 128 return nil 129 } 130 131 // OpenFTP is fake implementation 132 func (o *ArchiveOp) OpenFTP(ctx context.Context, zone string, id types.ID, openOption *iaas.OpenFTPRequest) (*iaas.FTPServer, error) { 133 value, err := o.Read(ctx, zone, id) 134 if err != nil { 135 return nil, err 136 } 137 138 value.SetAvailability(types.Availabilities.Uploading) 139 putArchive(zone, value) 140 141 return &iaas.FTPServer{ 142 HostName: fmt.Sprintf("sac-%s-ftp.example.jp", zone), 143 IPAddress: "192.0.2.1", 144 User: fmt.Sprintf("archive%d", id), 145 Password: "password-is-not-a-password", 146 }, nil 147 } 148 149 // CloseFTP is fake implementation 150 func (o *ArchiveOp) CloseFTP(ctx context.Context, zone string, id types.ID) error { 151 value, err := o.Read(ctx, zone, id) 152 if err != nil { 153 return err 154 } 155 156 if !value.Availability.IsUploading() { 157 value.SetAvailability(types.Availabilities.Available) 158 } 159 putArchive(zone, value) 160 return nil 161 } 162 163 // Share is fake implementation 164 func (o *ArchiveOp) Share(ctx context.Context, zone string, id types.ID) (*iaas.ArchiveShareInfo, error) { 165 value, err := o.Read(ctx, zone, id) 166 if err != nil { 167 return nil, err 168 } 169 170 value.SetAvailability(types.Availabilities.Uploading) 171 putArchive(zone, value) 172 173 return &iaas.ArchiveShareInfo{ 174 SharedKey: types.ArchiveShareKey(fmt.Sprintf("%s:%s:%s", zone, id.String(), "xxx")), 175 }, nil 176 } 177 178 // CreateFromShared is fake implementation 179 func (o *ArchiveOp) CreateFromShared(ctx context.Context, zone string, sourceArchiveID types.ID, zoneID types.ID, param *iaas.ArchiveCreateRequestFromShared) (*iaas.Archive, error) { 180 result := &iaas.Archive{} 181 182 var destZone string 183 for name, id := range zoneIDs { 184 if id == zoneID { 185 destZone = name 186 break 187 } 188 } 189 190 copySameNameField(param, result) 191 fill(result, fillID, fillCreatedAt, fillScope) 192 193 result.DisplayOrder = int64(random(100)) 194 result.Availability = types.Availabilities.Transferring 195 result.DiskPlanID = types.DiskPlans.HDD 196 result.DiskPlanName = "標準プラン" 197 result.DiskPlanStorageClass = "iscsi9999" 198 199 putArchive(destZone, result) 200 201 id := result.ID 202 startDiskCopy(o.key, destZone, func() (interface{}, error) { 203 return o.Read(context.Background(), destZone, id) 204 }) 205 206 return result, nil 207 } 208 209 // Transfer is fake implementation 210 func (o *ArchiveOp) Transfer(ctx context.Context, zone string, sourceArchiveID types.ID, destZoneID types.ID, param *iaas.ArchiveTransferRequest) (*iaas.Archive, error) { 211 result := &iaas.Archive{} 212 213 var destZone string 214 for name, id := range zoneIDs { 215 if id == destZoneID { 216 destZone = name 217 break 218 } 219 } 220 221 copySameNameField(param, result) 222 fill(result, fillID, fillCreatedAt, fillScope) 223 224 result.DisplayOrder = int64(random(100)) 225 result.Availability = types.Availabilities.Transferring 226 result.DiskPlanID = types.DiskPlans.HDD 227 result.DiskPlanName = "標準プラン" 228 result.DiskPlanStorageClass = "iscsi9999" 229 230 putArchive(destZone, result) 231 232 id := result.ID 233 startDiskCopy(o.key, destZone, func() (interface{}, error) { 234 return o.Read(context.Background(), destZone, id) 235 }) 236 237 return result, nil 238 }