/**
* This file is part of CloudML [ http://cloudml.org ]
*
* Copyright (C) 2012 - SINTEF ICT
* Contact: Franck Chauvel <franck.chauvel@sintef.no>
*
* Module: root
*
* CloudML is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation, either version 3 of
* the License, or (at your option) any later version.
*
* CloudML 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General
* Public License along with CloudML. If not, see
* <http://www.gnu.org/licenses/>.
*/
package org.cloudml.core;
import org.cloudml.core.collections.VMInstanceGroup;
import org.cloudml.core.validation.CanBeValidated;
import org.cloudml.core.visitors.Visitable;
import org.cloudml.core.visitors.Visitor;
public class VM extends ExternalComponent implements Visitable, CanBeValidated {
public static final int DEFAULT_MIN_RAM = 1000;
public static final int DEFAULT_MIN_CORES = 1;
public static final int DEFAULT_MIN_STORAGE = 25;
public static final String DEFAULT_LOCATION = "";
public static final String DEFAULT_OS = "";
public static final String DEFAULT_GROUP_NAME = "";
public static final String DEFAULT_SSH_KEY = "";
public static final String DEFAULT_SECURITY_GROUP = "";
public static final boolean DEFAULT_64_OS = true;
public static final String DEFAULT_IMAGE_ID = "";
public VM(String name, Provider provider) {
super(name, provider);
minRam = DEFAULT_MIN_RAM;
minCores = DEFAULT_MIN_CORES;
minStorage = DEFAULT_MIN_STORAGE;
location = DEFAULT_LOCATION;
os = DEFAULT_OS;
groupName = DEFAULT_GROUP_NAME;
sshKey = DEFAULT_SSH_KEY;
securityGroup = DEFAULT_SECURITY_GROUP;
is64os = DEFAULT_64_OS;
imageId = DEFAULT_IMAGE_ID;
}
@Override
public final boolean isVM() {
return true;
}
@Override
public void accept(Visitor visitor) {
visitor.visitVM(this);
}
@Override
public boolean equals(Object other) {
if (other == null) {
return false;
}
if (other instanceof VM) {
VM otherNode = (VM) other;
return super.equals(otherNode);
}
return false;
}
@Override
public String toString() {
return "VM " + getName() + "(minRam: " + minRam + ", minCores: " + minCores + ", minStorage: " + minStorage + ")";
}
/*
* NODE Configuration
*/
private int minRam;
private int maxRam = 0;
private int minCores;
private int maxCores = 0;
private int minStorage;
private int maxStorage = 0;
private String location;
private String os;
private String sshKey;
private String securityGroup;
private String groupName;
private String privateKey = "";
private Boolean is64os;
private String imageId;
private String providerSpecificTypeName = "";
/*
* getters
*/
public int getMinRam() {
return minRam;
}
public int getMaxRam() {
return maxRam;
}
public int getMinCores() {
return minCores;
}
public int getMaxCores() {
return maxCores;
}
public int getMinStorage() {
return minStorage;
}
public int getMaxStorage() {
return maxStorage;
}
public String getLocation() {
return location;
}
public String getOs() {
return os;
}
public String getSshKey() {
return sshKey;
}
public String getSecurityGroup() {
return securityGroup;
}
public String getGroupName() {
return groupName;
}
public String getPrivateKey() {
return privateKey;
}
public Boolean getIs64os() {
return is64os;
}
public String getImageId() {
return imageId;
}
public String getProviderSpecificTypeName(){
return providerSpecificTypeName;
}
/*
* Setters
*/
public void setMinRam(int minRam) {
this.minRam = minRam;
}
public void setMaxRam(int maxRam) {
this.minRam = maxRam;
}
public void setMinCores(int minCores) {
this.minCores = minCores;
}
public void setMaxCores(int maxCores) {
this.maxCores = maxCores;
}
public void setMinStorage(int minStorage) {
this.minStorage = minStorage;
}
public void setMaxStorage(int maxStorage) {
this.maxStorage = maxStorage;
}
public void setLocation(String location) {
this.location = location;
}
public void setOs(String os) {
this.os = os;
}
public void setSshKey(String sshKey) {
this.sshKey = sshKey;//if we cannot access the file, we assume the key is directly passed
}
public void setSecurityGroup(String securityGroup) {
this.securityGroup = securityGroup;
}
public void setGroupName(String groupName) {
this.groupName = groupName;
}
public void setPrivateKey(String privateKey) {
this.privateKey = privateKey;
}
public void setIs64os(Boolean is64os) {
this.is64os = is64os;
}
public void setImageId(String id) {
imageId = id;
}
public void setProviderSpecificTypeName(String providerSpecificTypeName){
this.providerSpecificTypeName = providerSpecificTypeName;
}
@Override
public VMInstance instantiates(String name) {
return new VMInstance(name, this);
}
public VMInstance instantiates() {
return new VMInstance(this);
}
@Override
public boolean isProvidedBy(Provider provider) {
return getProvider().equals(provider);
}
public boolean hasAnyInstance() {
return !getInstances().isEmpty();
}
public VMInstanceGroup getInstances() {
if (getOwner().isDefined()) {
return getDeployment().getComponentInstances().onlyVMs().ofType(this);
}
else {
return new VMInstanceGroup();
}
}
@Override
public int hashCode() {
int hash = 7;
return hash;
}
}