]>
git.argeo.org Git - gpl/argeo-slc.git/blob - legacy/org.argeo.slc.support/src/org/argeo/slc/lib/vbox/VBoxManager.java
1 package org
.argeo
.slc
.lib
.vbox
;
3 import java
.io
.IOException
;
4 import java
.util
.ArrayList
;
7 import org
.argeo
.api
.cms
.CmsLog
;
8 import org
.argeo
.slc
.SlcException
;
9 import org
.argeo
.slc
.core
.execution
.tasks
.SystemCall
;
10 import org
.springframework
.core
.io
.Resource
;
12 public class VBoxManager
{
13 private final static CmsLog log
= CmsLog
.getLog(VBoxManager
.class);
15 private VBoxMachine vm
;
16 private String executable
= "VBoxManage";
18 private List
<VBoxNat
> nats
= new ArrayList
<VBoxNat
>();
20 public void importOvf(Resource ovfDefinition
) {
22 List
<Object
> cmd
= new ArrayList
<Object
>();
25 cmd
.add(ovfDefinition
.getFile().getCanonicalPath());
26 cmd
.add("--vsys 0 --vmname <name>");
29 cmd
.add(vm
.getName());
30 new SystemCall(cmd
).run();
31 } catch (IOException e
) {
32 throw new SlcException("Cannot import OVF appliance "
37 public void startVm() {
41 public void startVmHeadless() {
45 public void startVm(String type
) {
46 List
<Object
> cmd
= new ArrayList
<Object
>();
49 cmd
.add(vm
.getName());
52 new SystemCall(cmd
).run();
55 public void applyNats() {
56 StringBuffer script
= new StringBuffer("");
57 for (VBoxNat vBoxNat
: nats
) {
58 for (String id
: vBoxNat
.getMappings().keySet()) {
59 VBoxPortMapping mapping
= vBoxNat
.getMappings().get(id
);
61 // Try to delete rule first
63 StringBuffer delCmd
= new StringBuffer(
64 "VBoxManage modifyvm");
65 delCmd
.append(" \"").append(vm
.getName()).append("\"");
66 delCmd
.append(" --natpf").append(vBoxNat
.getDevice())
68 delCmd
.append(" delete ");
69 delCmd
.append("\"").append(id
).append("\"");
70 new SystemCall(delCmd
.toString()).run();
71 script
.append(delCmd
).append("\n");
72 } catch (Exception e
) {
76 StringBuffer cmd
= new StringBuffer("VBoxManage modifyvm");
77 cmd
.append(" \"").append(vm
.getName()).append("\"");
78 cmd
.append(" --natpf").append(vBoxNat
.getDevice()).append(" ");
80 cmd
.append(id
).append(",");
81 cmd
.append(mapping
.getProtocol()).append(",");
83 cmd
.append(mapping
.getHostPort()).append(",");
84 cmd
.append(vBoxNat
.getGuestIp()).append(",");
85 cmd
.append(mapping
.getGuestPort());
88 new SystemCall(cmd
.toString()).run();
89 script
.append(cmd
).append("\n");
92 // new SystemCall(createNatCommand(id, vBoxNat.getDevice(),
93 // "Protocol", mapping.getProtocol(), script)).run();
94 // script.append('\n');
95 // new SystemCall(createNatCommand(id, vBoxNat.getDevice(),
96 // "GuestPort", mapping.getGuest(), script)).run();
97 // script.append('\n');
98 // new SystemCall(createNatCommand(id, vBoxNat.getDevice(),
99 // "HostPort", mapping.getHost(), script)).run();
100 // script.append('\n');
101 // script.append('\n');
106 if (log
.isDebugEnabled())
107 log
.debug("Port setting script:\n" + script
);
110 protected List
<Object
> createNatCommand(String id
, String device
,
111 String cfgKey
, String value
, StringBuffer script
) {
112 List
<Object
> cmd
= new ArrayList
<Object
>();
114 cmd
.add("setextradata");
115 cmd
.add(vm
.getName());
116 cmd
.add("VBoxInternal/Devices/" + device
+ "/0/LUN#0/Config/" + id
120 for (Object arg
: cmd
) {
121 script
.append(arg
).append(' ');
127 public String
getExecutable() {
131 public void setExecutable(String executable
) {
132 this.executable
= executable
;
135 public List
<VBoxNat
> getNats() {
139 public void setNats(List
<VBoxNat
> boxNats
) {
143 public void setVm(VBoxMachine vm
) {