diff --git a/api/src/com/cloud/vm/ReservationContext.java b/api/src/com/cloud/vm/ReservationContext.java new file mode 100644 index 00000000000..837698262a2 --- /dev/null +++ b/api/src/com/cloud/vm/ReservationContext.java @@ -0,0 +1,55 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +package com.cloud.vm; + +import com.cloud.domain.Domain; +import com.cloud.domain.PartOf; +import com.cloud.user.Account; +import com.cloud.user.OwnedBy; +import com.cloud.user.User; +import com.cloud.utils.Journal; + +/** + * Specifies the entity that is calling the api. + */ +public interface ReservationContext extends PartOf, OwnedBy { + /** + * @return the user making the call. + */ + User getCaller(); + + /** + * @return the account + */ + Account getAccount(); + + /** + * @return the domain. + */ + Domain getDomain(); + + /** + * @return the journal + */ + Journal getJournal(); + + /** + * @return the reservation id. + */ + String getReservationId(); +} diff --git a/core/src/com/cloud/agent/api/check/CheckSshAnswer.java b/core/src/com/cloud/agent/api/check/CheckSshAnswer.java new file mode 100644 index 00000000000..e382cef3120 --- /dev/null +++ b/core/src/com/cloud/agent/api/check/CheckSshAnswer.java @@ -0,0 +1,38 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +package com.cloud.agent.api.check; + +import com.cloud.agent.api.Answer; + +public class CheckSshAnswer extends Answer { + protected CheckSshAnswer() { + + } + + public CheckSshAnswer(CheckSshCommand cmd) { + super(cmd, true, null); + } + + public CheckSshAnswer(CheckSshCommand cmd, String details) { + super(cmd, false, details); + } + + public CheckSshAnswer(CheckSshCommand cmd, Throwable th) { + super(cmd, false, th.getMessage()); + } +} diff --git a/core/src/com/cloud/agent/api/check/CheckSshCommand.java b/core/src/com/cloud/agent/api/check/CheckSshCommand.java new file mode 100644 index 00000000000..b36c5a9dee4 --- /dev/null +++ b/core/src/com/cloud/agent/api/check/CheckSshCommand.java @@ -0,0 +1,66 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +package com.cloud.agent.api.check; + +import com.cloud.agent.api.Command; + +public class CheckSshCommand extends Command { + String ip; + int port; + int interval; + int retries; + String name; + + protected CheckSshCommand() { + super(); + } + + public CheckSshCommand(String instanceName, String ip, int port, int interval, int retries) { + super(); + this.ip = ip; + this.port = port; + this.interval = interval; + this.retries = retries; + this.name = instanceName; + } + + public String getName() { + return name; + } + + public String getIp() { + return ip; + } + + public int getPort() { + return port; + } + + public int getInterval() { + return interval; + } + + public int getRetries() { + return retries; + } + + @Override + public boolean executeInSequence() { + return false; + } +} diff --git a/server/src/com/cloud/vm/ItWorkDao.java b/server/src/com/cloud/vm/ItWorkDao.java new file mode 100644 index 00000000000..c4ea36ef47d --- /dev/null +++ b/server/src/com/cloud/vm/ItWorkDao.java @@ -0,0 +1,24 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +package com.cloud.vm; + +import com.cloud.utils.db.GenericDao; + +public interface ItWorkDao extends GenericDao { + +} diff --git a/server/src/com/cloud/vm/ItWorkDaoImpl.java b/server/src/com/cloud/vm/ItWorkDaoImpl.java new file mode 100644 index 00000000000..899fced1592 --- /dev/null +++ b/server/src/com/cloud/vm/ItWorkDaoImpl.java @@ -0,0 +1,29 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +package com.cloud.vm; + +import javax.ejb.Local; + +import com.cloud.utils.db.GenericDaoBase; + +@Local(value=ItWorkDao.class) +public class ItWorkDaoImpl extends GenericDaoBase implements ItWorkDao { + protected ItWorkDaoImpl() { + super(); + } +} diff --git a/server/src/com/cloud/vm/ItWorkVO.java b/server/src/com/cloud/vm/ItWorkVO.java new file mode 100644 index 00000000000..157cf011b48 --- /dev/null +++ b/server/src/com/cloud/vm/ItWorkVO.java @@ -0,0 +1,107 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +package com.cloud.vm; + +import java.util.Date; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Temporal; +import javax.persistence.TemporalType; + +import com.cloud.utils.db.GenericDao; + +@Entity +@Table(name="op_it_work") +public class ItWorkVO { + enum Type { + Start; + } + + enum State { + Working, + Cancelling, + } + + @Id + @Column(name="id") + String id; + + @Column(name=GenericDao.CREATED_COLUMN) + Date created; + + @Column(name="mgmt_server_id") + long managementServerId; + + @Column(name="type") + Type type; + + @Column(name="thread") + String threadName; + + @Column(name="state") + State state; + + @Column(name="cancel_taken") + @Temporal(value=TemporalType.TIMESTAMP) + Date taken; + + protected ItWorkVO() { + } + + protected ItWorkVO(String id, long managementServerId, Type type) { + this.id = id; + this.managementServerId = managementServerId; + this.type = type; + this.threadName = Thread.currentThread().getName(); + } + + public String getId() { + return id; + } + + public Date getCreated() { + return created; + } + + public long getManagementServerId() { + return managementServerId; + } + + public Type getType() { + return type; + } + + public String getThreadName() { + return threadName; + } + + public State getState() { + return state; + } + + public void setState(State state) { + this.state = state; + } + + public Date getTaken() { + return taken; + } +} diff --git a/server/src/com/cloud/vm/MauriceMoss.java b/server/src/com/cloud/vm/MauriceMoss.java index 9a71ad77ab2..23395b2c16f 100644 --- a/server/src/com/cloud/vm/MauriceMoss.java +++ b/server/src/com/cloud/vm/MauriceMoss.java @@ -98,7 +98,7 @@ public class MauriceMoss implements VmManager, ClusterManagerListener { @Inject private AccountDao _accountDao; @Inject private DomainDao _domainDao; @Inject private ClusterManager _clusterMgr; - @Inject private StartWorkDao _workDao; + @Inject private ItWorkDao _workDao; @Inject(adapter=DeploymentPlanner.class) private Adapters _planners; diff --git a/server/src/com/cloud/vm/ReservationContextImpl.java b/server/src/com/cloud/vm/ReservationContextImpl.java new file mode 100644 index 00000000000..0cc4e516c86 --- /dev/null +++ b/server/src/com/cloud/vm/ReservationContextImpl.java @@ -0,0 +1,103 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +package com.cloud.vm; + +import com.cloud.domain.Domain; +import com.cloud.domain.dao.DomainDao; +import com.cloud.user.Account; +import com.cloud.user.User; +import com.cloud.user.dao.AccountDao; +import com.cloud.user.dao.UserDao; +import com.cloud.utils.Journal; + +public class ReservationContextImpl implements ReservationContext { + User _caller; + Account _account; + Domain _domain; + Journal _journal; + String _reservationId; + + public ReservationContextImpl(String reservationId, Journal journal, User caller) { + this(reservationId, journal, caller, null, null); + } + + public ReservationContextImpl(String reservationId, Journal journal, User caller, Account account) { + this(reservationId, journal, caller, account, null); + + } + + public ReservationContextImpl(String reservationId, Journal journal, User caller, Account account, Domain domain) { + _caller = caller; + _account = account; + _domain = domain; + _journal = journal; + _reservationId = reservationId; + } + + @Override + public long getDomainId() { + return 0; + } + + @Override + public long getAccountId() { + return _caller.getAccountId(); + } + + @Override + public User getCaller() { + return _caller; + } + + @Override + public Account getAccount() { + if (_account == null) { + _account = s_accountDao.findByIdIncludingRemoved(_caller.getId()); + } + return _account; + } + + @Override + public Domain getDomain() { + if (_domain == null) { + getAccount(); + _domain = s_domainDao.findByIdIncludingRemoved(_account.getDomainId()); + } + return _domain; + } + + @Override + public Journal getJournal() { + return _journal; + } + + @Override + public String getReservationId() { + return _reservationId; + } + + static UserDao s_userDao; + static DomainDao s_domainDao; + static AccountDao s_accountDao; + + static public void setComponents(UserDao userDao, DomainDao domainDao, AccountDao accountDao) { + s_userDao = userDao; + s_domainDao = domainDao; + s_accountDao = accountDao; + } +} diff --git a/server/src/com/cloud/vm/VirtualMachineProfileImpl.java b/server/src/com/cloud/vm/VirtualMachineProfileImpl.java new file mode 100644 index 00000000000..3b9dfb41a83 --- /dev/null +++ b/server/src/com/cloud/vm/VirtualMachineProfileImpl.java @@ -0,0 +1,236 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +package com.cloud.vm; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.cloud.agent.api.to.VolumeTO; +import com.cloud.hypervisor.Hypervisor.HypervisorType; +import com.cloud.offering.ServiceOffering; +import com.cloud.service.ServiceOfferingVO; +import com.cloud.service.dao.ServiceOfferingDao; +import com.cloud.storage.VMTemplateVO; +import com.cloud.storage.dao.VMTemplateDao; +import com.cloud.template.VirtualMachineTemplate; +import com.cloud.template.VirtualMachineTemplate.BootloaderType; +import com.cloud.user.Account; +import com.cloud.user.dao.AccountDao; + +/** + * Implementation of VirtualMachineProfile. + * + */ +public class VirtualMachineProfileImpl implements VirtualMachineProfile { + + T _vm; + ServiceOfferingVO _offering; + VMTemplateVO _template; + Map _params; + List _nics = new ArrayList(); + List _disks = new ArrayList(); + StringBuilder _bootArgs = new StringBuilder(); + String _guestOs; + Account _owner; + BootloaderType _bootloader; + + VirtualMachine.Type _type; + + public VirtualMachineProfileImpl(T vm, String guestOs, VMTemplateVO template, ServiceOfferingVO offering, Account owner, Map params) { + _vm = vm; + _template = template; + _offering = offering; + _params = params; + _owner = owner; + if (_params == null) { + _params = new HashMap(); + } + _guestOs = guestOs; + _type = vm.getType(); + } + + public VirtualMachineProfileImpl(VirtualMachine.Type type) { + _type = type; + } + + @Override + public String getOs() { + return _guestOs; + } + + @Override + public void setBootloader(BootloaderType bootloader) { + _bootloader = bootloader; + } + + @Override + public BootloaderType getBootloader() { + return _bootloader; + } + + @Override + public String toString() { + return _vm.toString(); + } + + @Override + public T getVirtualMachine() { + return _vm; + } + + @Override + public ServiceOffering getServiceOffering() { + if (_offering == null) { + _offering = s_offeringDao.findByIdIncludingRemoved(_vm.getServiceOfferingId()); + } + return _offering; + } + + @Override + public void setParameter(String name, Object value) { + _params.put(name, value); + } + + @Override + public String getGuestOs() { + return _guestOs; + } + + @Override + public VirtualMachineTemplate getTemplate() { + if (_template == null) { + _template = s_templateDao.findByIdIncludingRemoved(_vm.getTemplateId()); + } + return _template; + } + + @Override + public HypervisorType getHypervisorType() { + getTemplate(); + return _template.getHypervisorType(); + } + + @Override + public long getTemplateId() { + return _vm.getTemplateId(); + } + + @Override + public long getServiceOfferingId() { + return _vm.getServiceOfferingId(); + } + + @Override + public long getId() { + return _vm.getId(); + } + + public void setNics(List nics) { + _nics = nics; + } + + public void setDisks(List disks) { + _disks = disks; + } + + @Override + public List getNics() { + return _nics; + } + + @Override + public List getDisks() { + return _disks; + } + + @Override + public void addNic(int index, NicProfile nic) { + _nics.add(index, nic); + } + + @Override + public void addDisk(int index, VolumeTO disk) { + _disks.add(index, disk); + } + + @Override + public StringBuilder getBootArgsBuilder() { + return _bootArgs; + } + + @Override + public void addBootArgs(String... args) { + for (String arg : args) { + _bootArgs.append(arg).append(" "); + } + } + + @Override + public VirtualMachine.Type getType() { + return _type; + } + + @Override + public Account getOwner() { + if (_owner == null) { + _owner = s_accountDao.findByIdIncludingRemoved(_vm.getAccountId()); + } + return _owner; + } + + @Override + public String getBootArgs() { + return _bootArgs.toString(); + } + + static ServiceOfferingDao s_offeringDao; + static VMTemplateDao s_templateDao; + static AccountDao s_accountDao; + static void setComponents(ServiceOfferingDao offeringDao, VMTemplateDao templateDao, AccountDao accountDao) { + s_offeringDao = offeringDao; + s_templateDao = templateDao; + s_accountDao = accountDao; + } + + @Override + public void addNic(NicProfile nic) { + _nics.add(nic); + } + + @Override + public void addDisk(VolumeTO disk) { + _disks.add(disk); + } + + @Override + public Object getParameter(String name) { + return _params.get(name); + } + + @Override + public String getHostName() { + return _vm.getHostName(); + } + + @Override + public String getInstanceName() { + return _vm.getInstanceName(); + } +}