1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
|
package org.openslx.util.vm;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map.Entry;
import org.openslx.bwlp.thrift.iface.OperatingSystem;
/**
* Describes a configured virtual machine. This class is parsed from a machine description, like a
* *.vmx for VMware machines.
*/
public abstract class VmMetaData
{
/*
* Helper types
*/
public static enum DriveBusType
{
SCSI,
IDE,
SATA;
}
public static class HardDisk
{
public final String chipsetDriver;
public final DriveBusType bus;
public final String diskImage;
public HardDisk( String chipsetDriver, DriveBusType bus, String diskImage )
{
this.chipsetDriver = chipsetDriver;
this.bus = bus;
this.diskImage = diskImage;
}
}
/*
* Members
*/
protected final List<HardDisk> hdds = new ArrayList<>();
private final List<OperatingSystem> osList;
private OperatingSystem os = null;
protected String displayName = null;
/*
* Guettas
*/
/**
* Get operating system of this VM.
*/
public OperatingSystem getOs()
{
return os;
}
/**
* Get all hard disks of this VM.
*/
public List<HardDisk> getHdds()
{
return Collections.unmodifiableList( hdds );
}
/**
* Get display name of VM.
*/
public String getDisplayName()
{
return displayName;
}
/**
* This method should return a minimal representation of the input meta data. The representation
* is platform dependent, and should be stripped of all non-essential configuration, such as
* CD/DVD/FLoppy drives, serial or parallel ports, shared folders, or anything else that could be
* considered sensible information (absolute paths containing the local user's name).
*/
public abstract String getFilteredDefinition();
/*
* Methods
*/
public VmMetaData( List<OperatingSystem> osList )
{
this.osList = osList;
}
/**
* Called from subclass to set the OS. If the OS cannot be determined from the given parameters,
* it will not be set.
*
* @param virtId virtualizer, eg "vmware" for VMware
* @param virtOsId the os identifier used by the virtualizer, eg. windows7-64 for 64bit Windows 7
* on VMware
*/
protected final void setOs( String virtId, String virtOsId )
{
OperatingSystem lazyMatch = null;
for ( OperatingSystem os : osList ) {
for ( Entry<String, String> entry : os.getVirtualizerOsId().entrySet() ) {
if ( !entry.getValue().equals( virtOsId ) )
continue;
if ( entry.getKey().equals( virtId ) ) {
this.os = os;
return;
} else {
lazyMatch = os;
}
}
}
this.os = lazyMatch;
}
}
|