/* * Copyright (c) 2010 Red Hat, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.ovirt.engine.api.common.resource; import org.ovirt.engine.api.model.BootDevice; import org.ovirt.engine.api.model.BootDevices; import org.ovirt.engine.api.model.Capabilities; import org.ovirt.engine.api.model.CPU; import org.ovirt.engine.api.model.CPUs; import org.ovirt.engine.api.model.CreationStates; import org.ovirt.engine.api.model.CreationStatus; import org.ovirt.engine.api.model.DataCenterStates; import org.ovirt.engine.api.model.DataCenterStatus; import org.ovirt.engine.api.model.DiskFormat; import org.ovirt.engine.api.model.DiskFormats; import org.ovirt.engine.api.model.DiskInterface; import org.ovirt.engine.api.model.DiskInterfaces; import org.ovirt.engine.api.model.DiskStates; import org.ovirt.engine.api.model.DiskStatus; import org.ovirt.engine.api.model.DiskType; import org.ovirt.engine.api.model.DiskTypes; import org.ovirt.engine.api.model.DisplayType; import org.ovirt.engine.api.model.DisplayTypes; import org.ovirt.engine.api.model.FenceType; import org.ovirt.engine.api.model.FenceTypes; import org.ovirt.engine.api.model.NicInterface; import org.ovirt.engine.api.model.NicInterfaces; import org.ovirt.engine.api.model.HostNICStates; import org.ovirt.engine.api.model.HostStates; import org.ovirt.engine.api.model.HostStatus; import org.ovirt.engine.api.model.NetworkStates; import org.ovirt.engine.api.model.NetworkStatus; import org.ovirt.engine.api.model.NicStatus; import org.ovirt.engine.api.model.OsType; import org.ovirt.engine.api.model.OsTypes; import org.ovirt.engine.api.model.PowerManagement; import org.ovirt.engine.api.model.Option; import org.ovirt.engine.api.model.Options; import org.ovirt.engine.api.model.PowerManagementStates; import org.ovirt.engine.api.model.PowerManagementStatus; import org.ovirt.engine.api.model.PowerManagers; import org.ovirt.engine.api.model.SchedulingPolicies; import org.ovirt.engine.api.model.SchedulingPolicyType; import org.ovirt.engine.api.model.StorageDomainStates; import org.ovirt.engine.api.model.StorageDomainStatus; import org.ovirt.engine.api.model.StorageDomainType; import org.ovirt.engine.api.model.StorageDomainTypes; import org.ovirt.engine.api.model.StorageType; import org.ovirt.engine.api.model.StorageTypes; import org.ovirt.engine.api.model.TemplateStates; import org.ovirt.engine.api.model.TemplateStatus; import org.ovirt.engine.api.model.VersionCaps; import org.ovirt.engine.api.model.VmStates; import org.ovirt.engine.api.model.VmStatus; import org.ovirt.engine.api.model.VmType; import org.ovirt.engine.api.model.VmTypes; import org.ovirt.engine.api.resource.CapabilitiesResource; public class DefaultCapabilitiesResource implements CapabilitiesResource { private final VersionCaps VERSION22 = buildVersion(2, 2, true); private final VersionCaps VERSION21 = buildVersion(2, 1, false); private VersionCaps buildVersion(int major, int minor, boolean current) { VersionCaps version = new VersionCaps(); version.setMajor(major); version.setMinor(minor); version.setCPUs(new CPUs()); version.setCurrent(current); return version; } { addCpu(VERSION21, "Intel Xeon w/o XD/NX", 2); addCpu(VERSION21, "Intel Xeon", 3); addCpu(VERSION22, "Intel Xeon Core2", 4); addCpu(VERSION22, "Intel Xeon 45nm Core2", 5); addCpu(VERSION22, "Intel Xeon Core i7", 6); addCpu(VERSION21, "AMD Opteron G1 w/o NX", 2); addCpu(VERSION21, "AMD Opteron G1", 3); addCpu(VERSION22, "AMD Opteron G2", 4); addCpu(VERSION22, "AMD Opteron G3", 5); } private void addCpu(VersionCaps version, String id, int level) { CPU cpu = new CPU(); cpu.setId(id); cpu.setLevel(level); version.getCPUs().getCPUs().add(cpu); if (version == VERSION21) { addCpu(VERSION22, id, level); } } { addPowerManager("alom", "secure=bool,port=int"); addPowerManager("apc", "secure=bool,port=int,slot=int"); addPowerManager("bladecenter", "secure=bool,port=int,slot=int"); addPowerManager("drac5", "secure=bool,port=int"); addPowerManager("eps", "slot=int"); addPowerManager("ilo", "secure=bool,port=int"); addPowerManager("ipmilan", ""); addPowerManager("rsa", "secure=bool,port=int"); addPowerManager("rsb", ""); addPowerManager("wti", "secure=bool,port=int,slot=int"); } private void addPowerManager(String type, String options) { addPowerManager(VERSION21, type, options); addPowerManager(VERSION22, type, options); } private void addPowerManager(VersionCaps version, String type, String options) { PowerManagement powerManagement = new PowerManagement(); powerManagement.setType(type); powerManagement.setOptions(new Options()); String[] opts = options.split(","); for (int i = 0; i < opts.length; i++) { if (opts[i].isEmpty()) { continue; } String[] parts = opts[i].split("="); Option option = new Option(); option.setName(parts[0]); option.setType(parts[1]); powerManagement.getOptions().getOptions().add(option); } if (!version.isSetPowerManagers()) { version.setPowerManagers(new PowerManagers()); } version.getPowerManagers().getPowerManagers().add(powerManagement); } private void addVmTypes(VersionCaps version, VmType... types) { version.setVmTypes(new VmTypes()); for (VmType type : types) { version.getVmTypes().getVmTypes().add(type.value()); } } { addVmTypes(VERSION21, VmType.values()); addVmTypes(VERSION22, VmType.values()); } private void addStorageTypes(VersionCaps version, StorageType... types) { version.setStorageTypes(new StorageTypes()); for (StorageType type : types) { version.getStorageTypes().getStorageTypes().add(type.value()); } } { addStorageTypes(VERSION21, StorageType.ISCSI, StorageType.FCP, StorageType.NFS); addStorageTypes(VERSION22, StorageType.ISCSI, StorageType.FCP, StorageType.NFS); } private void addOsTypes(VersionCaps version, OsType... types) { version.setOsTypes(new OsTypes()); for (OsType type : types) { version.getOsTypes().getOsTypes().add(type.value()); } } { addOsTypes(VERSION21, OsType.values()); addOsTypes(VERSION22, OsType.values()); } private void addStorageDomainTypes(VersionCaps version, StorageDomainType... types) { version.setStorageDomainTypes(new StorageDomainTypes()); for (StorageDomainType type : types) { version.getStorageDomainTypes().getStorageDomainTypes().add(type.value()); } } { addStorageDomainTypes(VERSION21, StorageDomainType.values()); addStorageDomainTypes(VERSION22, StorageDomainType.values()); } private void addFenceTypes(VersionCaps version, FenceType... types) { version.setFenceTypes(new FenceTypes()); for (FenceType type : types) { version.getFenceTypes().getFenceTypes().add(type.value()); } } { addFenceTypes(VERSION21, FenceType.values()); addFenceTypes(VERSION22, FenceType.values()); } private void addBootDevices(VersionCaps version, BootDevice... devs) { version.setBootDevices(new BootDevices()); for (BootDevice dev : devs) { version.getBootDevices().getBootDevices().add(dev.value()); } } { addBootDevices(VERSION21, BootDevice.values()); addBootDevices(VERSION22, BootDevice.values()); } private void addDisplayTypes(VersionCaps version, DisplayType... types) { version.setDisplayTypes(new DisplayTypes()); for (DisplayType type : types) { version.getDisplayTypes().getDisplayTypes().add(type.value()); } } { addDisplayTypes(VERSION21, DisplayType.values()); addDisplayTypes(VERSION22, DisplayType.values()); } private void addNicInterfaces(VersionCaps version, NicInterface... types) { version.setNicInterfaces(new NicInterfaces()); for (NicInterface type : types) { version.getNicInterfaces().getNicInterfaces().add(type.value()); } } { addNicInterfaces(VERSION21, NicInterface.values()); addNicInterfaces(VERSION22, NicInterface.values()); } private void addDiskTypes(VersionCaps version, DiskType... types) { version.setDiskTypes(new DiskTypes()); for (DiskType type : types) { version.getDiskTypes().getDiskTypes().add(type.value()); } } { addDiskTypes(VERSION21, DiskType.values()); addDiskTypes(VERSION22, DiskType.values()); } private void addDiskFormats(VersionCaps version, DiskFormat... types) { version.setDiskFormats(new DiskFormats()); for (DiskFormat type : types) { version.getDiskFormats().getDiskFormats().add(type.value()); } } { addDiskFormats(VERSION21, DiskFormat.values()); addDiskFormats(VERSION22, DiskFormat.values()); } private void addDiskInterfaces(VersionCaps version, DiskInterface... interfaces) { version.setDiskInterfaces(new DiskInterfaces()); for (DiskInterface iface : interfaces) { version.getDiskInterfaces().getDiskInterfaces().add(iface.value()); } } { addDiskInterfaces(VERSION21, DiskInterface.values()); addDiskInterfaces(VERSION22, DiskInterface.values()); } private void addCreationStates(VersionCaps version, CreationStatus... statuses) { version.setCreationStates(new CreationStates()); for (CreationStatus status : statuses) { version.getCreationStates().getCreationStates().add(status.value()); } } { addCreationStates(VERSION21, CreationStatus.values()); addCreationStates(VERSION22, CreationStatus.values()); } private void addPowerManagementStates(VersionCaps version, PowerManagementStatus... statuses) { version.setPowerManagementStates(new PowerManagementStates()); for (PowerManagementStatus status : statuses) { version.getPowerManagementStates().getPowerManagementStates().add(status.value()); } } { addPowerManagementStates(VERSION21, PowerManagementStatus.values()); addPowerManagementStates(VERSION22, PowerManagementStatus.values()); } private void addHostStates(VersionCaps version, HostStatus... statuses) { version.setHostStates(new HostStates()); for (HostStatus status : statuses) { version.getHostStates().getHostStates().add(status.value()); } } { addHostStates(VERSION21, HostStatus.values()); addHostStates(VERSION22, HostStatus.values()); } private void addNetworkStates(VersionCaps version, NetworkStatus... statuses) { version.setNetworkStates(new NetworkStates()); for (NetworkStatus status : statuses) { version.getNetworkStates().getNetworkStates().add(status.value()); } } { addNetworkStates(VERSION21, NetworkStatus.values()); addNetworkStates(VERSION22, NetworkStatus.values()); } private void addStorageDomainStates(VersionCaps version, StorageDomainStatus... statuses) { version.setStorageDomainStates(new StorageDomainStates()); for (StorageDomainStatus status : statuses) { version.getStorageDomainStates().getStorageDomainStates().add(status.value()); } } { addStorageDomainStates(VERSION21, StorageDomainStatus.values()); addStorageDomainStates(VERSION22, StorageDomainStatus.values()); } private void addTemplateStates(VersionCaps version, TemplateStatus... statuses) { version.setTemplateStates(new TemplateStates()); for (TemplateStatus status : statuses) { version.getTemplateStates().getTemplateStates().add(status.value()); } } { addTemplateStates(VERSION21, TemplateStatus.values()); addTemplateStates(VERSION22, TemplateStatus.values()); } private void addVmStates(VersionCaps version, VmStatus... statuses) { version.setVmStates(new VmStates()); for (VmStatus status : statuses) { version.getVmStates().getVmStates().add(status.value()); } } { addVmStates(VERSION21, VmStatus.values()); addVmStates(VERSION22, VmStatus.values()); } private void addDiskStates(VersionCaps version, DiskStatus... statuses) { version.setDiskStates(new DiskStates()); for (DiskStatus status : statuses) { version.getDiskStates().getDiskStates().add(status.value()); } } { addDiskStates(VERSION21, DiskStatus.values()); addDiskStates(VERSION22, DiskStatus.values()); } private void addDataCenterStates(VersionCaps version, DataCenterStatus... statuses) { version.setDataCenterStates(new DataCenterStates()); for (DataCenterStatus status : statuses) { version.getDataCenterStates().getDataCenterStates().add(status.value()); } } { addDataCenterStates(VERSION21, DataCenterStatus.values()); addDataCenterStates(VERSION22, DataCenterStatus.values()); } private void addHostNicStates(VersionCaps version, NicStatus... statuses) { version.setHostNicStates(new HostNICStates()); for (NicStatus status : statuses) { version.getHostNicStates().getHostNICStates().add(status.value()); } } { addHostNicStates(VERSION21, NicStatus.values()); addHostNicStates(VERSION22, NicStatus.values()); } private final SchedulingPolicies SCHEDULING_POLICIES = new SchedulingPolicies(); { for (SchedulingPolicyType policy : SchedulingPolicyType.values()) { SCHEDULING_POLICIES.getPolicy().add(policy.value()); } } public Capabilities get() { Capabilities caps = new Capabilities(); caps.getVersions().add(VERSION22); caps.getVersions().add(VERSION21); caps.setSchedulingPolicies(SCHEDULING_POLICIES); return caps; } }