}
SearchCriteriaService<UcsBladeVO, UcsBladeVO> q = SearchCriteria2.create(UcsBladeVO.class);
q.addAnd(q.getEntity().getUcsManagerId(), Op.EQ, cmd.getUcsManagerId());
q.addAnd(q.getEntity().getId(), Op.EQ, cmd.getBladeId());
UcsBladeVO bvo = q.find();
if (bvo == null) {
throw new IllegalArgumentException(String.format("cannot find UCS blade[id:%s, ucs manager id:%s]", cmd.getBladeId(), cmd.getUcsManagerId()));
}
if (bvo.getHostId() != null) {
throw new CloudRuntimeException(String.format("blade[id:%s, dn:%s] has been associated with host[id:%s]", bvo.getId(), bvo.getDn(), bvo.getHostId()));
}
UcsManagerVO mgrvo = ucsDao.findById(cmd.getUcsManagerId());
String cookie = getCookie(cmd.getUcsManagerId());
String instantiateTemplateCmd = UcsCommands.instantiateTemplate(cookie, cmd.getTemplateDn(), profileName);
UcsHttpClient http = new UcsHttpClient(mgrvo.getUrl());
String res = http.call(instantiateTemplateCmd);
XmlObject xo = XmlObjectParser.parseFromString(res);
String profileDn = xo.get("outConfig.lsServer.dn");
String ucscmd = UcsCommands.associateProfileToBlade(cookie, profileDn, bvo.getDn());
res = http.call(ucscmd);
int count = 0;
int timeout = 3600;
while (count < timeout) {
if (isBladeAssociated(mgrvo.getId(), bvo.getDn())) {
break;
}
try {
TimeUnit.SECONDS.sleep(2);
} catch (InterruptedException e) {
throw new CloudRuntimeException(e);
}
count += 2;
}
if (count >= timeout) {
throw new CloudRuntimeException(String.format("associating profile[%s] to balde[%s] timeout after 600 seconds", profileDn, bvo.getDn()));
}
bvo.setProfileDn(profileDn);
bladeDao.update(bvo.getId(), bvo);
UcsBladeResponse rsp = bladeVOToResponse(bvo);
s_logger.debug(String.format("successfully associated profile[%s] to blade[%s]", profileDn, bvo.getDn()));
return rsp;
}