]> git.argeo.org Git - gpl/argeo-slc.git/blob - runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/lib/vbox/VBoxManager.java
Introduce ssh file deployment
[gpl/argeo-slc.git] / runtime / org.argeo.slc.support.simple / src / main / java / 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 startVm(String type) {
43 List<Object> cmd = new ArrayList<Object>();
44 cmd.add(executable);
45 cmd.add("startvm");
46 cmd.add(vm.getName());
47 cmd.add("--type");
48 cmd.add(type);
49 new SystemCall(cmd).run();
50 }
51
52 public void applyNats() {
53 StringBuffer script = new StringBuffer("");
54 for (VBoxNat vBoxNat : nats) {
55 for (String id : vBoxNat.getMappings().keySet()) {
56 VBoxPortMapping mapping = vBoxNat.getMappings().get(id);
57 new SystemCall(createNatCommand(id, vBoxNat.getDevice(),
58 "Protocol", mapping.getProtocol(), script)).run();
59 script.append('\n');
60 new SystemCall(createNatCommand(id, vBoxNat.getDevice(),
61 "GuestPort", mapping.getGuest(), script)).run();
62 script.append('\n');
63 new SystemCall(createNatCommand(id, vBoxNat.getDevice(),
64 "HostPort", mapping.getHost(), script)).run();
65 script.append('\n');
66 script.append('\n');
67 }
68 script.append('\n');
69 }
70
71 if (log.isDebugEnabled())
72 log.debug("Port setting script:\n" + script);
73 }
74
75 protected List<Object> createNatCommand(String id, String device,
76 String cfgKey, String value, StringBuffer script) {
77 List<Object> cmd = new ArrayList<Object>();
78 cmd.add(executable);
79 cmd.add("setextradata");
80 cmd.add(vm.getName());
81 cmd.add("VBoxInternal/Devices/" + device + "/0/LUN#0/Config/" + id
82 + "/" + cfgKey);
83 cmd.add(value);
84
85 for (Object arg : cmd) {
86 script.append(arg).append(' ');
87 }
88
89 return cmd;
90 }
91
92 public String getExecutable() {
93 return executable;
94 }
95
96 public void setExecutable(String executable) {
97 this.executable = executable;
98 }
99
100 public List<VBoxNat> getNats() {
101 return nats;
102 }
103
104 public void setNats(List<VBoxNat> boxNats) {
105 nats = boxNats;
106 }
107
108 public void setVm(VBoxMachine vm) {
109 this.vm = vm;
110 }
111
112 }