1 | /** |
2 | * Licensed to jclouds, Inc. (jclouds) under one or more |
3 | * contributor license agreements. See the NOTICE file |
4 | * distributed with this work for additional information |
5 | * regarding copyright ownership. jclouds licenses this file |
6 | * to you under the Apache License, Version 2.0 (the |
7 | * "License"); you may not use this file except in compliance |
8 | * with the License. You may obtain a copy of the License at |
9 | * |
10 | * http://www.apache.org/licenses/LICENSE-2.0 |
11 | * |
12 | * Unless required by applicable law or agreed to in writing, |
13 | * software distributed under the License is distributed on an |
14 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
15 | * KIND, either express or implied. See the License for the |
16 | * specific language governing permissions and limitations |
17 | * under the License. |
18 | */ |
19 | package org.jclouds.compute.domain; |
20 | |
21 | import org.jclouds.javax.annotation.Nullable; |
22 | |
23 | import org.jclouds.compute.domain.internal.VolumeImpl; |
24 | |
25 | import com.google.inject.ImplementedBy; |
26 | |
27 | /** |
28 | * Describes what appears as a disk to an {@link OperatingSystem} |
29 | * |
30 | * @author Adrian Cole |
31 | */ |
32 | @ImplementedBy(VolumeImpl.class) |
33 | public interface Volume { |
34 | |
35 | /** |
36 | * Describes the cardinal type of a volume; used to determine scope and exclusivity. |
37 | */ |
38 | public enum Type { |
39 | /** |
40 | * scoped to a node cannot be remounted onto another node. |
41 | */ |
42 | LOCAL, |
43 | |
44 | /** |
45 | * shared mount, non-exclusive by nature, although may happen to be exclusive. |
46 | */ |
47 | NAS, |
48 | /** |
49 | * network storage; exclusive by nature, remountable onto other machines. |
50 | */ |
51 | SAN; |
52 | } |
53 | |
54 | /** |
55 | * Unique identifier. If set, can be used to reference the volume for reorganizing within |
56 | * {@link Hardware} or external commands such as backups. |
57 | * |
58 | */ |
59 | @Nullable |
60 | String getId(); |
61 | |
62 | /** |
63 | * Describes the cardinal type of a volume; used to determine scope and exclusivity. |
64 | */ |
65 | Type getType(); |
66 | |
67 | /** |
68 | * @return capacity in gigabytes, if available |
69 | * |
70 | */ |
71 | @Nullable |
72 | Float getSize(); |
73 | |
74 | /** |
75 | * |
76 | * @return device this volume relates to on an operating system, if available |
77 | */ |
78 | @Nullable |
79 | String getDevice(); |
80 | |
81 | /** |
82 | * |
83 | * @return true if this survives restarts |
84 | */ |
85 | boolean isDurable(); |
86 | |
87 | /** |
88 | * |
89 | * @return true if this is the boot device |
90 | */ |
91 | boolean isBootDevice(); |
92 | |
93 | } |