]> git.argeo.org Git - gpl/argeo-slc.git/blob - legacy/org.argeo.slc.support/src/org/argeo/slc/lib/vbox/VBoxManager.java
Clarify overall project structure.
[gpl/argeo-slc.git] / legacy / org.argeo.slc.support / src / org / argeo / slc / lib / vbox / VBoxManager.java
1 package org.argeo.slc.lib.vbox;
2
3 import java.io.IOException;
4 import java.util.ArrayList;
5 import java.util.List;
6
7 import org.apache.commons.logging.Log;
8 import org.apache.commons.logging.LogFactory;
9 import org.argeo.slc.SlcException;
10 import org.argeo.slc.core.execution.tasks.SystemCall;
11 import org.springframework.core.io.Resource;
12
13 public class VBoxManager {
14 private final static Log log = LogFactory.getLog(VBoxManager.class);
15
16 private VBoxMachine vm;
17 private String executable = "VBoxManage";
18
19 private List<VBoxNat> nats = new ArrayList<VBoxNat>();
20
21 public void importOvf(Resource ovfDefinition) {
22 try {
23 List<Object> cmd = new ArrayList<Object>();
24 cmd.add(executable);
25 cmd.add("import");
26 cmd.add(ovfDefinition.getFile().getCanonicalPath());
27 cmd.add("--vsys 0 --vmname <name>");
28 cmd.add("0");
29 cmd.add("--vmname");
30 cmd.add(vm.getName());
31 new SystemCall(cmd).run();
32 } catch (IOException e) {
33 throw new SlcException("Cannot import OVF appliance "
34 + ovfDefinition, e);
35 }
36 }
37
38 public void startVm() {
39 startVm("gui");
40 }
41
42 public void startVmHeadless() {
43 startVm("vrdp");
44 }
45
46 public void startVm(String type) {
47 List<Object> cmd = new ArrayList<Object>();
48 cmd.add(executable);
49 cmd.add("startvm");
50 cmd.add(vm.getName());
51 cmd.add("--type");
52 cmd.add(type);
53 new SystemCall(cmd).run();
54 }
55
56 public void applyNats() {
57 StringBuffer script = new StringBuffer("");
58 for (VBoxNat vBoxNat : nats) {
59 for (String id : vBoxNat.getMappings().keySet()) {
60 VBoxPortMapping mapping = vBoxNat.getMappings().get(id);
61
62 // Try to delete rule first
63 try {
64 StringBuffer delCmd = new StringBuffer(
65 "VBoxManage modifyvm");
66 delCmd.append(" \"").append(vm.getName()).append("\"");
67 delCmd.append(" --natpf").append(vBoxNat.getDevice())
68 .append(" ");
69 delCmd.append(" delete ");
70 delCmd.append("\"").append(id).append("\"");
71 new SystemCall(delCmd.toString()).run();
72 script.append(delCmd).append("\n");
73 } catch (Exception e) {
74 // silent
75 }
76
77 StringBuffer cmd = new StringBuffer("VBoxManage modifyvm");
78 cmd.append(" \"").append(vm.getName()).append("\"");
79 cmd.append(" --natpf").append(vBoxNat.getDevice()).append(" ");
80 cmd.append("\"");
81 cmd.append(id).append(",");
82 cmd.append(mapping.getProtocol()).append(",");
83 cmd.append(",");
84 cmd.append(mapping.getHostPort()).append(",");
85 cmd.append(vBoxNat.getGuestIp()).append(",");
86 cmd.append(mapping.getGuestPort());
87 cmd.append("\"");
88
89 new SystemCall(cmd.toString()).run();
90 script.append(cmd).append("\n");
91
92 // Older VirtualBox
93 // new SystemCall(createNatCommand(id, vBoxNat.getDevice(),
94 // "Protocol", mapping.getProtocol(), script)).run();
95 // script.append('\n');
96 // new SystemCall(createNatCommand(id, vBoxNat.getDevice(),
97 // "GuestPort", mapping.getGuest(), script)).run();
98 // script.append('\n');
99 // new SystemCall(createNatCommand(id, vBoxNat.getDevice(),
100 // "HostPort", mapping.getHost(), script)).run();
101 // script.append('\n');
102 // script.append('\n');
103 }
104 script.append('\n');
105 }
106
107 if (log.isDebugEnabled())
108 log.debug("Port setting script:\n" + script);
109 }
110
111 protected List<Object> createNatCommand(String id, String device,
112 String cfgKey, String value, StringBuffer script) {
113 List<Object> cmd = new ArrayList<Object>();
114 cmd.add(executable);
115 cmd.add("setextradata");
116 cmd.add(vm.getName());
117 cmd.add("VBoxInternal/Devices/" + device + "/0/LUN#0/Config/" + id
118 + "/" + cfgKey);
119 cmd.add(value);
120
121 for (Object arg : cmd) {
122 script.append(arg).append(' ');
123 }
124
125 return cmd;
126 }
127
128 public String getExecutable() {
129 return executable;
130 }
131
132 public void setExecutable(String executable) {
133 this.executable = executable;
134 }
135
136 public List<VBoxNat> getNats() {
137 return nats;
138 }
139
140 public void setNats(List<VBoxNat> boxNats) {
141 nats = boxNats;
142 }
143
144 public void setVm(VBoxMachine vm) {
145 this.vm = vm;
146 }
147
148 }