| 347 | |
| 348 | |
| 349 | Try<ActionObject> ActionObject::destroyDisk( |
| 350 | const Offer::Operation::DestroyDisk& destroyDisk) |
| 351 | { |
| 352 | const Resource& resource = destroyDisk.source(); |
| 353 | |
| 354 | auto action = ([&resource]() -> Option<authorization::Action> { |
| 355 | switch (resource.disk().source().type()) { |
| 356 | case Resource::DiskInfo::Source::MOUNT: |
| 357 | return authorization::DESTROY_MOUNT_DISK; |
| 358 | case Resource::DiskInfo::Source::BLOCK: |
| 359 | return authorization::DESTROY_BLOCK_DISK; |
| 360 | case Resource::DiskInfo::Source::RAW: |
| 361 | return authorization::DESTROY_RAW_DISK; |
| 362 | case Resource::DiskInfo::Source::UNKNOWN: |
| 363 | case Resource::DiskInfo::Source::PATH: |
| 364 | return None(); |
| 365 | } |
| 366 | |
| 367 | return None(); |
| 368 | })(); |
| 369 | |
| 370 | if (action.isNone()) { |
| 371 | return Error( |
| 372 | "Unsupported disk type: " + stringify(resource.disk().source().type())); |
| 373 | } |
| 374 | |
| 375 | return fromResourceWithLegacyValue( |
| 376 | *action, resource, getReservationRole(resource)); |
| 377 | } |
| 378 | |
| 379 | |
| 380 | ostream& operator<<(ostream& stream, const ActionObject& actionObject) |