root / doc / design-device-uuid-name.rst @ 513c5e25
History | View | Annotate | Download (2.8 kB)
1 | f1a84264 | Christos Stavrakakis | ========================================== |
---|---|---|---|
2 | f1a84264 | Christos Stavrakakis | Design for adding UUID and name to devices |
3 | f1a84264 | Christos Stavrakakis | ========================================== |
4 | f1a84264 | Christos Stavrakakis | |
5 | f1a84264 | Christos Stavrakakis | .. contents:: :depth: 4 |
6 | f1a84264 | Christos Stavrakakis | |
7 | f1a84264 | Christos Stavrakakis | This is a design document about adding UUID and name to instance devices |
8 | f1a84264 | Christos Stavrakakis | (Disks/NICs) and the ability to reference them by those identifiers. |
9 | f1a84264 | Christos Stavrakakis | |
10 | f1a84264 | Christos Stavrakakis | |
11 | f1a84264 | Christos Stavrakakis | Current state and shortcomings |
12 | f1a84264 | Christos Stavrakakis | ============================== |
13 | f1a84264 | Christos Stavrakakis | |
14 | f1a84264 | Christos Stavrakakis | Currently, the only way to refer to a device (Disk/NIC) is by its index |
15 | f1a84264 | Christos Stavrakakis | inside the VM (e.g. gnt-instance modify --disk 2:remove). |
16 | f1a84264 | Christos Stavrakakis | |
17 | f1a84264 | Christos Stavrakakis | Using indices as identifiers has the drawback that addition/removal of a |
18 | f1a84264 | Christos Stavrakakis | device results in changing the identifiers(indices) of other devices and |
19 | f1a84264 | Christos Stavrakakis | makes the net effect of commands depend on their strict ordering. A |
20 | f1a84264 | Christos Stavrakakis | device reference is not absolute, meaning an external entity controlling |
21 | f1a84264 | Christos Stavrakakis | Ganeti, e.g., over RAPI, cannot keep permanent identifiers for referring |
22 | f1a84264 | Christos Stavrakakis | to devices, nor can it have more than one outstanding commands, since |
23 | f1a84264 | Christos Stavrakakis | their order of execution is not guaranteed. |
24 | f1a84264 | Christos Stavrakakis | |
25 | f1a84264 | Christos Stavrakakis | |
26 | f1a84264 | Christos Stavrakakis | Proposed Changes |
27 | f1a84264 | Christos Stavrakakis | ================ |
28 | f1a84264 | Christos Stavrakakis | |
29 | f1a84264 | Christos Stavrakakis | To be able to reference a device in a unique way, we propose to extend |
30 | f1a84264 | Christos Stavrakakis | Disks and NICs by assigning to them a UUID and a name. The UUID will be |
31 | f1a84264 | Christos Stavrakakis | assigned by Ganeti upon creation, while the name will be an optional |
32 | f1a84264 | Christos Stavrakakis | user parameter. Renaming a device will also be supported. |
33 | f1a84264 | Christos Stavrakakis | |
34 | f1a84264 | Christos Stavrakakis | Commands (e.g. `gnt-instance modify`) will be able to reference each |
35 | f1a84264 | Christos Stavrakakis | device by its index, UUID, or name. To be able to refer to devices by |
36 | f1a84264 | Christos Stavrakakis | name, we must guarantee that device names are unique. Unlike other |
37 | f1a84264 | Christos Stavrakakis | objects (instances, networks, nodegroups, etc.), NIC and Disk objects |
38 | f1a84264 | Christos Stavrakakis | will not have unique names across the cluster, since they are still not |
39 | f1a84264 | Christos Stavrakakis | independent entities, but rather part of the instance object. This makes |
40 | f1a84264 | Christos Stavrakakis | global uniqueness of names hard to achieve at this point. Instead their |
41 | f1a84264 | Christos Stavrakakis | names will be unique at instance level. |
42 | f1a84264 | Christos Stavrakakis | |
43 | f1a84264 | Christos Stavrakakis | Apart from unique device names, we must also guarantee that a device |
44 | f1a84264 | Christos Stavrakakis | name can not be the UUID of another device. Also, to remove ambiguity |
45 | f1a84264 | Christos Stavrakakis | while supporting both indices and names as identifiers, we forbid purely |
46 | f1a84264 | Christos Stavrakakis | numeric device names. |
47 | f1a84264 | Christos Stavrakakis | |
48 | f1a84264 | Christos Stavrakakis | |
49 | f1a84264 | Christos Stavrakakis | Implementation Details |
50 | f1a84264 | Christos Stavrakakis | ====================== |
51 | f1a84264 | Christos Stavrakakis | |
52 | f1a84264 | Christos Stavrakakis | Modify OpInstanceSetParams to accept not only indexes, but also device |
53 | f1a84264 | Christos Stavrakakis | names and UUIDs. So, the accepted NIC and disk modifications will have |
54 | f1a84264 | Christos Stavrakakis | the following format: |
55 | f1a84264 | Christos Stavrakakis | |
56 | f1a84264 | Christos Stavrakakis | identifier:action,key=value |
57 | f1a84264 | Christos Stavrakakis | |
58 | f1a84264 | Christos Stavrakakis | where, from now on, identifier can be an index (-1 for the last device), |
59 | f1a84264 | Christos Stavrakakis | UUID, or name and action should be add, modify, or remove. |
60 | f1a84264 | Christos Stavrakakis | |
61 | f1a84264 | Christos Stavrakakis | Configuration Changes |
62 | f1a84264 | Christos Stavrakakis | ~~~~~~~~~~~~~~~~~~~~~ |
63 | f1a84264 | Christos Stavrakakis | |
64 | f1a84264 | Christos Stavrakakis | Disk and NIC config objects get two extra slots: |
65 | f1a84264 | Christos Stavrakakis | |
66 | f1a84264 | Christos Stavrakakis | - uuid |
67 | f1a84264 | Christos Stavrakakis | - name |
68 | f1a84264 | Christos Stavrakakis | |
69 | f1a84264 | Christos Stavrakakis | Instance Queries |
70 | f1a84264 | Christos Stavrakakis | ~~~~~~~~~~~~~~~~~ |
71 | f1a84264 | Christos Stavrakakis | |
72 | f1a84264 | Christos Stavrakakis | We will extend the query mechanism to expose names and UUIDs of NICs and |
73 | f1a84264 | Christos Stavrakakis | Disks. |
74 | f1a84264 | Christos Stavrakakis | |
75 | f1a84264 | Christos Stavrakakis | Hook Variables |
76 | f1a84264 | Christos Stavrakakis | ~~~~~~~~~~~~~~ |
77 | f1a84264 | Christos Stavrakakis | |
78 | f1a84264 | Christos Stavrakakis | We will expose the name of NICs and Disks to the hook environment of |
79 | f1a84264 | Christos Stavrakakis | instance-related operations: |
80 | f1a84264 | Christos Stavrakakis | |
81 | f1a84264 | Christos Stavrakakis | ``INSTANCE_NIC%d_NAME`` |
82 | f1a84264 | Christos Stavrakakis | ``INSTANCE_DISK%d_NAME`` |
83 | f1a84264 | Christos Stavrakakis | |
84 | f1a84264 | Christos Stavrakakis | .. vim: set textwidth=72 : |
85 | f1a84264 | Christos Stavrakakis | .. Local Variables: |
86 | f1a84264 | Christos Stavrakakis | .. mode: rst |
87 | f1a84264 | Christos Stavrakakis | .. fill-column: 72 |
88 | f1a84264 | Christos Stavrakakis | .. End: |