]>
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
1 package org
.argeo
.slc
.lib
.vbox
;
3 import java
.io
.IOException
;
4 import java
.util
.ArrayList
;
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
;
13 public class VBoxManager
{
14 private final static Log log
= LogFactory
.getLog(VBoxManager
.class);
16 private VBoxMachine vm
;
17 private String executable
= "VBoxManage";
19 private List
<VBoxNat
> nats
= new ArrayList
<VBoxNat
>();
21 public void importOvf(Resource ovfDefinition
) {
23 List
<Object
> cmd
= new ArrayList
<Object
>();
26 cmd
.add(ovfDefinition
.getFile().getCanonicalPath());
27 cmd
.add("--vsys 0 --vmname <name>");
30 cmd
.add(vm
.getName());
31 new SystemCall(cmd
).run();
32 } catch (IOException e
) {
33 throw new SlcException("Cannot import OVF appliance "
38 public void startVm() {
42 public void startVm(String type
) {
43 List
<Object
> cmd
= new ArrayList
<Object
>();
46 cmd
.add(vm
.getName());
49 new SystemCall(cmd
).run();
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();
60 new SystemCall(createNatCommand(id
, vBoxNat
.getDevice(),
61 "GuestPort", mapping
.getGuest(), script
)).run();
63 new SystemCall(createNatCommand(id
, vBoxNat
.getDevice(),
64 "HostPort", mapping
.getHost(), script
)).run();
71 if (log
.isDebugEnabled())
72 log
.debug("Port setting script:\n" + script
);
75 protected List
<Object
> createNatCommand(String id
, String device
,
76 String cfgKey
, String value
, StringBuffer script
) {
77 List
<Object
> cmd
= new ArrayList
<Object
>();
79 cmd
.add("setextradata");
80 cmd
.add(vm
.getName());
81 cmd
.add("VBoxInternal/Devices/" + device
+ "/0/LUN#0/Config/" + id
85 for (Object arg
: cmd
) {
86 script
.append(arg
).append(' ');
92 public String
getExecutable() {
96 public void setExecutable(String executable
) {
97 this.executable
= executable
;
100 public List
<VBoxNat
> getNats() {
104 public void setNats(List
<VBoxNat
> boxNats
) {
108 public void setVm(VBoxMachine vm
) {