Skip to content
This repository was archived by the owner on Jan 15, 2020. It is now read-only.

Commit 1de0cb7

Browse files
committed
restore barematel work after merge
1 parent c10f8a1 commit 1de0cb7

26 files changed

Lines changed: 381 additions & 407 deletions

File tree

api/src/com/cloud/event/EventTypes.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -454,6 +454,7 @@ public class EventTypes {
454454
public static final String EVENT_BAREMETAL_PXE_SERVER_ADD = "PHYSICAL.PXE.ADD";
455455
public static final String EVENT_BAREMETAL_PXE_SERVER_DELETE = "PHYSICAL.PXE.DELETE";
456456
public static final String EVENT_BAREMETAL_RCT_ADD = "BAREMETAL.RCT.ADD";
457+
public static final String EVENT_BAREMETAL_PROVISION_DONE = "BAREMETAL.PROVISION.DONE";
457458

458459
public static final String EVENT_AFFINITY_GROUP_CREATE = "AG.CREATE";
459460
public static final String EVENT_AFFINITY_GROUP_DELETE = "AG.DELETE";

plugins/hypervisors/baremetal/resources/META-INF/cloudstack/core/spring-baremetal-core-context.xml

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,13 @@
2828
>
2929

3030
<bean id="BaremetalManager" class="com.cloud.baremetal.manager.BaremetalManagerImpl" />
31-
<bean id="BaremetalVlanManager" class="com.cloud.baremetal.manager.BaremetalVlanManagerImpl" />
31+
<bean id="BaremetalVlanManager" class="com.cloud.baremetal.manager.BaremetalVlanManagerImpl" >
32+
<property name="backends">
33+
<map>
34+
<entry key="Force10" value-ref="Force10BaremetalSwitchBackend"/>
35+
</map>
36+
</property>
37+
</bean>
3238
<bean id="Force10BaremetalSwitchBackend" class="com.cloud.baremetal.networkservice.Force10BaremetalSwitchBackend" />
3339

3440
<bean id="BaremetalKickStartPxeService"

plugins/hypervisors/baremetal/src/com/cloud/baremetal/manager/BaremetalManager.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,12 @@
2020

2121
import com.cloud.utils.component.Manager;
2222
import com.cloud.utils.component.PluggableService;
23+
import org.apache.cloudstack.api.BaremetalProvisionDoneNotificationCmd;
2324

2425
public interface BaremetalManager extends Manager, PluggableService {
2526
public static final String EchoSecurityGroupAgent = "EchoSecurityGroupAgent";
2627
public static final String ExternalBaremetalSystemUrl = "ExternalBaremetalSystemUrl";
2728
public static final String DO_PXE = "doPxe";
29+
30+
void notifyProvisionDone(BaremetalProvisionDoneNotificationCmd cmd);
2831
}

plugins/hypervisors/baremetal/src/com/cloud/baremetal/manager/BaremetalManagerImpl.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@ public class BaremetalManagerImpl extends ManagerBase implements BaremetalManage
5252

5353
@Inject
5454
protected HostDao _hostDao;
55+
@Inject
56+
protected VMInstanceDao vmDao;
5557

5658
@Override
5759
public boolean configure(String name, Map<String, Object> params) throws ConfigurationException {
@@ -116,6 +118,7 @@ public boolean postStateTransitionEvent(StateMachine2.Transition<State, Event> t
116118
public List<Class<?>> getCommands() {
117119
List<Class<?>> cmds = new ArrayList<Class<?>>();
118120
cmds.add(AddBaremetalHostCmd.class);
121+
cmds.add(BaremetalProvisionDoneNotificationCmd.class);
119122
return cmds;
120123
}
121124

plugins/hypervisors/baremetal/src/com/cloud/baremetal/manager/BaremetalVlanManager.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
package com.cloud.baremetal.manager;
1919

2020
import com.cloud.baremetal.networkservice.BaremetalRctResponse;
21+
import com.cloud.baremetal.networkservice.BaremetalSwitchBackend;
2122
import com.cloud.deploy.DeployDestination;
2223
import com.cloud.network.Network;
2324
import com.cloud.utils.component.Manager;

plugins/hypervisors/baremetal/src/com/cloud/baremetal/manager/BaremetalVlanManagerImpl.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@
4848
import java.net.MalformedURLException;
4949
import java.net.URL;
5050
import java.util.ArrayList;
51-
import java.util.HashMap;
5251
import java.util.List;
5352
import java.util.Map;
5453
import java.util.UUID;
@@ -70,13 +69,17 @@ public class BaremetalVlanManagerImpl extends ManagerBase implements BaremetalVl
7069
@Inject
7170
private AccountManager acntMgr;
7271

73-
private Map<String, BaremetalSwitchBackend> backends = new HashMap<>();
72+
private Map<String, BaremetalSwitchBackend> backends;
7473

7574
private class RackPair {
7675
BaremetalRct.Rack rack;
7776
BaremetalRct.HostEntry host;
7877
}
7978

79+
public void setBackends(Map<String, BaremetalSwitchBackend> backends) {
80+
this.backends = backends;
81+
}
82+
8083
@Override
8184
public BaremetalRctResponse addRct(AddBaremetalRctCmd cmd) {
8285
try {

plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BareMetalResourceBase.java

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,12 +59,15 @@
5959
import com.cloud.hypervisor.Hypervisor;
6060
import com.cloud.resource.ServerResource;
6161
import com.cloud.utils.component.ManagerBase;
62+
import com.cloud.utils.db.QueryBuilder;
63+
import com.cloud.utils.db.SearchCriteria;
6264
import com.cloud.utils.exception.CloudRuntimeException;
6365
import com.cloud.utils.script.OutputInterpreter;
6466
import com.cloud.utils.script.Script;
6567
import com.cloud.utils.script.Script2;
6668
import com.cloud.utils.script.Script2.ParamType;
6769
import com.cloud.vm.VMInstanceVO;
70+
import com.cloud.vm.VirtualMachine;
6871
import com.cloud.vm.VirtualMachine.PowerState;
6972
import com.cloud.vm.dao.VMInstanceDao;
7073
import org.apache.cloudstack.api.ApiConstants;
@@ -107,6 +110,8 @@ public class BareMetalResourceBase extends ManagerBase implements ServerResource
107110
protected Script2 _bootOrRebootCommand;
108111
protected String _vmName;
109112
protected int ipmiRetryTimes = 5;
113+
protected boolean provisionDoneNotificationOn = false;
114+
protected int isProvisionDoneNotificationTimeout = 1800;
110115

111116
protected ConfigurationDao configDao;
112117
protected VMInstanceDao vmDao;
@@ -181,6 +186,13 @@ public boolean configure(String name, Map<String, Object> params) throws Configu
181186
s_logger.debug(e.getMessage(), e);
182187
}
183188

189+
try {
190+
provisionDoneNotificationOn = Boolean.valueOf(configDao.getValue(Config.BaremetalProvisionDoneNotificationEnabled.key()));
191+
isProvisionDoneNotificationTimeout = Integer.valueOf(configDao.getValue(Config.BaremetalProvisionDoneNotificationTimeout.key()));
192+
} catch (Exception e) {
193+
s_logger.debug(e.getMessage(), e);
194+
}
195+
184196
String injectScript = "scripts/util/ipmi.py";
185197
String scriptPath = Script.findScript("", injectScript);
186198
if (scriptPath == null) {
@@ -392,7 +404,7 @@ public PingCommand getCurrentStatus(long id) {
392404
VMInstanceVO vm = vms.get(0);
393405
SecurityGroupHttpClient client = new SecurityGroupHttpClient();
394406
HashMap<String, Pair<Long, Long>> nwGrpStates = client.sync(vm.getInstanceName(), vm.getId(), vm.getPrivateIpAddress());
395-
return new PingRoutingWithNwGroupsCommand(getType(), id, getHostVmStateReport(), nwGrpStates);
407+
return new PingRoutingWithNwGroupsCommand(getType(), id, null, nwGrpStates);
396408
}
397409
} else {
398410
return new PingRoutingCommand(getType(), id, null);
@@ -581,6 +593,39 @@ protected StartAnswer execute(StartCommand cmd) {
581593
}
582594
}
583595

596+
if (provisionDoneNotificationOn) {
597+
QueryBuilder<VMInstanceVO> q = QueryBuilder.create(VMInstanceVO.class);
598+
q.and(q.entity().getInstanceName(), SearchCriteria.Op.EQ, vm.getName());
599+
VMInstanceVO vmvo = q.find();
600+
601+
if (vmvo.getLastHostId() == null) {
602+
// this is new created vm
603+
long timeout = System.currentTimeMillis() + TimeUnit.SECONDS.toMillis(isProvisionDoneNotificationTimeout);
604+
while (timeout > System.currentTimeMillis()) {
605+
try {
606+
TimeUnit.SECONDS.sleep(5);
607+
} catch (InterruptedException e) {
608+
s_logger.warn(e.getMessage(), e);
609+
}
610+
611+
q = QueryBuilder.create(VMInstanceVO.class);
612+
q.and(q.entity().getInstanceName(), SearchCriteria.Op.EQ, vm.getName());
613+
vmvo = q.find();
614+
if (vmvo == null) {
615+
return new StartAnswer(cmd, String.format("cannot find vm[name:%s] while waiting for baremtal provision done notification", vm.getName()));
616+
}
617+
618+
if (VirtualMachine.State.Running == vmvo.getState()) {
619+
return new StartAnswer(cmd);
620+
}
621+
622+
s_logger.debug(String.format("still wait for baremetal provision done notification for vm[name:%s], current vm state is %s", vmvo.getInstanceName(), vmvo.getState()));
623+
}
624+
625+
return new StartAnswer(cmd, String.format("timeout after %s seconds, no baremetal provision done notification received. vm[name:%s] failed to start", isProvisionDoneNotificationTimeout, vm.getName()));
626+
}
627+
}
628+
584629
s_logger.debug("Start bare metal vm " + vm.getName() + "successfully");
585630
_vmName = vm.getName();
586631
return new StartAnswer(cmd);

plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalKickStartPxeResource.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@
3434
import com.cloud.agent.api.HostVmStateReportEntry;
3535
import com.cloud.agent.api.PingCommand;
3636
import com.cloud.agent.api.PingRoutingCommand;
37-
import com.cloud.agent.api.baremetal.PrepareKickstartPxeServerCommand;
3837
import com.cloud.agent.api.routing.VmDataCommand;
3938
import com.cloud.utils.exception.CloudRuntimeException;
4039
import com.cloud.utils.script.Script;

plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalKickStartServiceImpl.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,16 +30,17 @@
3030
import javax.ejb.Local;
3131
import javax.inject.Inject;
3232

33+
import com.cloud.configuration.Config;
34+
import org.apache.log4j.Logger;
35+
3336
import org.apache.cloudstack.api.AddBaremetalKickStartPxeCmd;
3437
import org.apache.cloudstack.api.AddBaremetalPxeCmd;
3538
import org.apache.cloudstack.api.ListBaremetalPxeServersCmd;
3639
import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
37-
import org.apache.log4j.Logger;
3840

3941
import com.cloud.agent.api.Answer;
4042
import com.cloud.agent.api.baremetal.IpmISetBootDevCommand;
4143
import com.cloud.agent.api.baremetal.IpmISetBootDevCommand.BootDev;
42-
import com.cloud.agent.api.baremetal.PrepareKickstartPxeServerCommand;
4344
import com.cloud.baremetal.database.BaremetalPxeDao;
4445
import com.cloud.baremetal.database.BaremetalPxeVO;
4546
import com.cloud.baremetal.networkservice.BaremetalPxeManager.BaremetalPxeType;
@@ -223,6 +224,11 @@ private boolean preparePxeInAdvancedZone(VirtualMachineProfile profile, NicProfi
223224
throw new CloudRuntimeException(String.format("cannot find management nic on virtual router[id:%s]", vr.getId()));
224225
}
225226

227+
String internalServerIp = _configDao.getValue(Config.BaremetalInternalStorageServer.key());
228+
if (internalServerIp == null) {
229+
throw new CloudRuntimeException(String.format("please specify 'baremetal.internal.storage.server.ip', which is the http server/nfs server storing kickstart files and ISO files, in global setting"));
230+
}
231+
226232
List<String> tuple = parseKickstartUrl(profile);
227233
String cmd = String.format("/opt/cloud/bin/prepare_pxe.sh %s %s %s %s %s %s", tuple.get(1), tuple.get(2), profile.getTemplate().getUuid(),
228234
String.format("01-%s", nic.getMacAddress().replaceAll(":", "-")).toLowerCase(), tuple.get(0), nic.getMacAddress().toLowerCase());
@@ -232,7 +238,7 @@ private boolean preparePxeInAdvancedZone(VirtualMachineProfile profile, NicProfi
232238
throw new CloudRuntimeException(String.format("failed preparing PXE in virtual router[id:%s], because %s", vr.getId(), ret.second()));
233239
}
234240

235-
String internalServerIp = "10.223.110.231";
241+
//String internalServerIp = "10.223.110.231";
236242
cmd = String.format("/opt/cloud/bin/baremetal_snat.sh %s %s %s", mgmtNic.getIp4Address(), internalServerIp, mgmtNic.getGateway());
237243
s_logger.debug(String.format("prepare SNAT on virtual router[ip:%s], cmd: %s", mgmtNic.getIp4Address(), cmd));
238244
ret = SshHelper.sshExecute(mgmtNic.getIp4Address(), 3922, "root", getSystemVMKeyFile(), null, cmd);

plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalPxeElement.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import com.cloud.baremetal.database.BaremetalPxeVO;
2222
import com.cloud.baremetal.manager.BaremetalVlanManager;
2323
import com.cloud.dc.DataCenter;
24+
import com.cloud.dc.DataCenterVO;
2425
import com.cloud.dc.Pod;
2526
import com.cloud.dc.dao.DataCenterDao;
2627
import com.cloud.deploy.DeployDestination;
@@ -139,11 +140,9 @@ public boolean prepare(Network network, NicProfile nic, VirtualMachineProfile vm
139140
}
140141
}
141142

142-
/*
143143
if (dest.getDataCenter().getNetworkType() == DataCenter.NetworkType.Advanced){
144144
prepareVlan(network, dest);
145145
}
146-
*/
147146

148147
return true;
149148
}
@@ -159,12 +158,10 @@ public boolean release(Network network, NicProfile nic, VirtualMachineProfile vm
159158
return false;
160159
}
161160

162-
/*
163161
DataCenterVO dc = zoneDao.findById(vm.getVirtualMachine().getDataCenterId());
164162
if (dc.getNetworkType() == DataCenter.NetworkType.Advanced) {
165163
releaseVlan(network, vm);
166164
}
167-
*/
168165
return true;
169166
}
170167

0 commit comments

Comments
 (0)