package com.sobey.cmop.mvc.service.onecmdb; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Map; import org.onecmdb.core.utils.bean.CiBean; import org.onecmdb.core.utils.bean.ValueBean; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import com.sobey.cmop.mvc.comm.BaseSevcie; import com.sobey.cmop.mvc.constant.ComputeConstant; import com.sobey.cmop.mvc.constant.HostServerConstant; import com.sobey.cmop.mvc.constant.IpPoolConstant; import com.sobey.cmop.mvc.constant.NetworkConstant; import com.sobey.cmop.mvc.constant.StorageConstant; import com.sobey.cmop.mvc.entity.ComputeItem; import com.sobey.cmop.mvc.entity.EipPortItem; import com.sobey.cmop.mvc.entity.ElbPortItem; import com.sobey.cmop.mvc.entity.EsgRuleItem; import com.sobey.cmop.mvc.entity.HostServer; import com.sobey.cmop.mvc.entity.IpPool; import com.sobey.cmop.mvc.entity.Location; import com.sobey.cmop.mvc.entity.NetworkDnsItem; import com.sobey.cmop.mvc.entity.NetworkEipItem; import com.sobey.cmop.mvc.entity.NetworkElbItem; import com.sobey.cmop.mvc.entity.NetworkEsgItem; import com.sobey.cmop.mvc.entity.Nic; import com.sobey.cmop.mvc.entity.ServiceTag; import com.sobey.cmop.mvc.entity.StorageItem; import com.sobey.cmop.mvc.entity.Vlan; import com.sobey.framework.utils.StringCommonUtils; /** * 资源的oneCMDB操作类.用于对资源oneCMDB的写入,删除,更新. * * @author liukai * */ @Service public class OneCmdbUtilService extends BaseSevcie { private static Logger logger = LoggerFactory.getLogger(OneCmdbUtilService.class); // ===========ServiceTag ===========// /** * 新增或更新服务标签至oneCMDB,oneCMDB中的信息更新都是通过标识符identifier来进行更新. * * @param serviceTag * @return */ public boolean saveServiceTagToOneCMDB(ServiceTag serviceTag) { List<CiBean> ciList = new ArrayList<CiBean>(); CiBean ci = new CiBean("ApplicationService", serviceTag.getIdentifier(), false); ci.addAttributeValue(new ValueBean("Name", serviceTag.getName(), false)); ci.addAttributeValue(new ValueBean("BelongsTo", serviceTag.getUser().getName(), false)); ci.setDescription(serviceTag.getDescription()); ciList.add(ci); return OneCmdbService.update(ciList); } /** * 删除oneCMDB中的服务标签serviceTag * * @param serviceTag * @return */ public void deleteServiceTagToOneCMDB(ServiceTag serviceTag) { if (serviceTag != null) { List<CiBean> ciList = new ArrayList<CiBean>(); CiBean router = new CiBean("ApplicationService", serviceTag.getIdentifier(), false); ciList.add(router); OneCmdbService.delete(ciList); } } // ===========NetworkEsgItem ===========// /** * 新增或更新ESG至oneCMDB * * @param networkEsgItem * ESG * @return */ public boolean saveESGToOneCMDB(NetworkEsgItem networkEsgItem) { List<CiBean> ciList = new ArrayList<CiBean>(); // 规则:协议,端口范围,访问源.如果有多条规则,则按","隔开 String protocol = ""; String portRange = ""; String visitSource = ""; String visitTarget = ""; List<EsgRuleItem> esgRuleItems = comm.esgService.getEsgRuleItemListByEsgId(networkEsgItem.getId()); for (EsgRuleItem esgRuleItem : esgRuleItems) { protocol += esgRuleItem.getProtocol() + ","; portRange += esgRuleItem.getPortRange() + ","; visitSource += esgRuleItem.getVisitSource() + ","; visitTarget += esgRuleItem.getVisitTarget() + ","; } CiBean ci = new CiBean("ESG", networkEsgItem.getIdentifier(), false); // BelongsTo:属于某个申请人,先写文本 ci.addAttributeValue(new ValueBean("BelongsTo", networkEsgItem.getUser().getName(), false)); ci.addAttributeValue(new ValueBean("Name", networkEsgItem.getIdentifier(), false)); ci.addAttributeValue(new ValueBean("Type", StringCommonUtils.replaceAndSubstringText(protocol, ",", ","), false)); ci.addAttributeValue(new ValueBean("Port", StringCommonUtils.replaceAndSubstringText(portRange, ",", ","), false)); ci.addAttributeValue(new ValueBean("SourceIP", StringCommonUtils.replaceAndSubstringText(visitSource, ",", ","), false)); ci.addAttributeValue(new ValueBean("TargetIP", StringCommonUtils.replaceAndSubstringText(visitTarget, ",", ","), false)); ci.setDescription(networkEsgItem.getDescription()); ciList.add(ci); return OneCmdbService.update(ciList); } /** * 删除oneCMDB中的安全组NetworkEsgItem * * @param networkEsgItem */ public void deleteESGToOneCMDB(NetworkEsgItem networkEsgItem) { if (networkEsgItem != null) { List<CiBean> ciBeanList = new ArrayList<CiBean>(); CiBean router = new CiBean("ESG", networkEsgItem.getIdentifier(), false); ciBeanList.add(router); OneCmdbService.delete(ciBeanList); } } // ===========ComputeItem ===========// /** * 新增或更新Compute至oneCMDB .同时将实例中的ApplicationService(服务标签)属性也进行同步. * * @param computeItem * 实例 * @param serviceTag * 服务标签 * @return */ public boolean saveComputeToOneCMDB(ComputeItem computeItem, ServiceTag serviceTag) { List<CiBean> ciList = new ArrayList<CiBean>(); CiBean ci; if (ComputeConstant.ComputeType.PCS.toInteger().equals(computeItem.getComputeType())) { ci = new CiBean("PCS", computeItem.getIdentifier(), false); ci.addAttributeValue(new ValueBean("Server", "Server" + computeItem.getServerAlias(), true)); ci.addAttributeValue(new ValueBean("Specification", ComputeConstant.PCSServerType.get(computeItem .getServerType()), false)); } else { String MemSize = ""; String CoreNum = ""; String Disk = "20GB"; if (ComputeConstant.ECSServerType.Small_CPUx1_Memoryx1GB_DISKx20GB.toInteger().equals( computeItem.getServerType())) { MemSize = "1G"; CoreNum = "1"; } else if (ComputeConstant.ECSServerType.Middle_CPUx2_Memoryx2GB_DISKx20GB.toInteger().equals( computeItem.getServerType())) { MemSize = "2G"; CoreNum = "2"; } else { MemSize = "4G"; CoreNum = "4"; } ci = new CiBean("ECS", computeItem.getIdentifier(), false); ci.addAttributeValue(new ValueBean("HostServer", "Server" + computeItem.getHostServerAlias(), true)); ci.addAttributeValue(new ValueBean("OsStorage", computeItem.getOsStorageAlias(), true)); ci.addAttributeValue(new ValueBean("MemSize", MemSize, false)); ci.addAttributeValue(new ValueBean("CoreNum", CoreNum, false)); ci.addAttributeValue(new ValueBean("Disk", Disk, false)); } ci.addAttributeValue(new ValueBean("OsType", ComputeConstant.OS_TYPE_MAP.get(computeItem.getOsType()), false)); ci.addAttributeValue(new ValueBean("OsBit", ComputeConstant.OS_BIT_MAP.get(computeItem.getOsBit()), false)); ci.addAttributeValue(new ValueBean("HostName", computeItem.getHostName(), false)); ci.addAttributeValue(new ValueBean("BelongsTo", computeItem.getApply().getUser().getName(), false)); ci.addAttributeValue(new ValueBean("Name", computeItem.getIdentifier(), false)); ci.addAttributeValue(new ValueBean("EndTime", computeItem.getApply().getServiceEnd(), false)); for (NetworkEsgItem networkEsgItem : computeItem.getNetworkEsgItemList()) { ci.addAttributeValue(new ValueBean("ESG", networkEsgItem.getIdentifier(), true)); } for (StorageItem storageItem : computeItem.getStorageItemList()) { String storageAlias = OneCmdbService.findCiAliasByText(StorageConstant.StorageType.Fimas_高吞吐量.toInteger() .equals(storageItem.getStorageType()) ? "FimasVol" : "NFSVol", storageItem.getIdentifier()); ci.addAttributeValue(new ValueBean("Storage", storageAlias, true)); } if (serviceTag != null) { ci.addAttributeValue(new ValueBean("Service", serviceTag.getIdentifier(), true)); ci.addAttributeValue(new ValueBean("UsedBy", serviceTag.getUser().getName(), false)); } ci.addAttributeValue(new ValueBean("IPAddress", "IPAddress-" + computeItem.getInnerIp(), true)); ci.addAttributeValue(new ValueBean("NetWork", "Vlans", true)); ci.setDescription(computeItem.getRemark()); ciList.add(ci); return OneCmdbService.update(ciList); } /** * 新增或更新Compute 集合 至oneCMDB. * * @param computeItems * 实例集合 * @return */ public void saveComputeToOneCMDB(Collection<ComputeItem> computeItems, ServiceTag serviceTag) { for (ComputeItem computeItem : computeItems) { this.saveComputeToOneCMDB(computeItem, serviceTag); } } /** * 删除oneCMDB中的实例ComputeItem * * @param computeItem * @return */ public void deleteComputeItemToOneCMDB(ComputeItem computeItem) { if (computeItem != null) { List<CiBean> ciList = new ArrayList<CiBean>(); CiBean router = new CiBean( ComputeConstant.ComputeType.PCS.toInteger().equals(computeItem.getComputeType()) ? "PCS" : "ECS", computeItem.getIdentifier(), false); ciList.add(router); OneCmdbService.delete(ciList); } } // ===========StorageItem ===========// /** * 新增或更新StorageItem至oneCMDB . * * @param storageItem * ES3 * @param serviceTag * 服务标签 * @return */ public boolean saveStorageToOneCMDB(StorageItem storageItem, ServiceTag serviceTag) { // 删除es3 this.deleteStorageItemToOneCMDB(storageItem); List<CiBean> ciList = new ArrayList<CiBean>(); CiBean ci; // Type:NFS-管理卷;DATA-数据卷 if (StorageConstant.StorageType.Fimas_高吞吐量.toInteger().equals(storageItem.getStorageType())) { // Fimas ci = new CiBean("FimasVol", storageItem.getIdentifier(), false); ci.addAttributeValue(new ValueBean("Type", "DIFS", false)); } else { // Netapp ci = new CiBean("NFSVol", storageItem.getIdentifier(), false); ci.addAttributeValue(new ValueBean("Type", "DATA", false)); ci.addAttributeValue(new ValueBean("size", storageItem.getSpace().toString(), false)); } ci.addAttributeValue(new ValueBean("Name", storageItem.getIdentifier(), false)); ci.addAttributeValue(new ValueBean("Volume", storageItem.getVolume(), false)); ci.addAttributeValue(new ValueBean("HardWare", storageItem.getControllerAlias(), true)); ci.addAttributeValue(new ValueBean("BelongsTo", storageItem.getApply().getUser().getName(), false)); if (serviceTag != null) { ci.addAttributeValue(new ValueBean("service", serviceTag.getIdentifier(), true)); ci.addAttributeValue(new ValueBean("UsedBy", serviceTag.getUser().getName(), false)); } ciList.add(ci); boolean flag = OneCmdbService.update(ciList); // 更新oneCMDB中的es3关联属性. for (ComputeItem computeItem : storageItem.getComputeItemList()) { // this.deleteComputeItemToOneCMDB(computeItem); this.saveComputeToOneCMDB(computeItem, serviceTag); } return flag; } /** * 新增或更新StorageItem 集合 至oneCMDB. * * @param networkEsgItems * ESG集合 * @return */ public void saveStorageToOneCMDB(Collection<StorageItem> storageItems, ServiceTag serviceTag) { for (StorageItem storageItem : storageItems) { this.saveStorageToOneCMDB(storageItem, serviceTag); } } /** * 删除oneCMDB中的storageItem * * @param storageItem * @return */ public void deleteStorageItemToOneCMDB(StorageItem storageItem) { if (storageItem != null) { List<CiBean> ciList = new ArrayList<CiBean>(); CiBean router = new CiBean(StorageConstant.StorageType.Fimas_高吞吐量.toInteger().equals( storageItem.getStorageType()) ? "FimasVol" : "NFSVol", storageItem.getIdentifier(), false); ciList.add(router); OneCmdbService.delete(ciList); } } // =========== NetworkElbItem ===========// /** * 新增或更新NetworkElbItem至oneCMDB . * * @param networkElbItem * ELB * @param serviceTag * 服务标签 * @return */ public boolean saveELBToOneCMDB(NetworkElbItem networkElbItem, ServiceTag serviceTag) { List<CiBean> ciList = new ArrayList<CiBean>(); CiBean ci = new CiBean("ELB", networkElbItem.getIdentifier(), false); ci.addAttributeValue(new ValueBean("Name", networkElbItem.getIdentifier(), false)); ci.addAttributeValue(new ValueBean("BelongsTo", networkElbItem.getApply().getUser().getName(), false)); ci.addAttributeValue(new ValueBean("ConStatus", networkElbItem.getKeepSession() ? "是" : "否", false)); for (ComputeItem computeItem : networkElbItem.getComputeItemList()) { ci.addAttributeValue(new ValueBean("Server", computeItem.getIdentifier(), true)); } ci.addAttributeValue(new ValueBean("VIP", "IPAddress-" + networkElbItem.getVirtualIp(), true)); // 规则:协议,端口,源端口.如果有多条规则,则按","隔开 String protocol = ""; String sourcePort = ""; String targetPort = ""; List<ElbPortItem> elbPortItems = comm.elbService.getElbPortItemListByElbId(networkElbItem.getId()); for (ElbPortItem elbPortItem : elbPortItems) { protocol += elbPortItem.getProtocol() + ","; sourcePort += elbPortItem.getSourcePort() + ","; targetPort += elbPortItem.getTargetPort() + ","; } ci.addAttributeValue(new ValueBean("Protocol", StringCommonUtils.replaceAndSubstringText(protocol, ",", ","), false)); ci.addAttributeValue(new ValueBean("InstancePort", StringCommonUtils.replaceAndSubstringText(sourcePort, ",", ","), false)); ci.addAttributeValue(new ValueBean("LoadBalancePort", StringCommonUtils.replaceAndSubstringText(targetPort, ",", ","), false)); if (serviceTag != null) { ci.addAttributeValue(new ValueBean("UsedBy", serviceTag.getUser().getName(), false)); } ciList.add(ci); return OneCmdbService.update(ciList); } /** * 新增或更新NetworkElbItem集合至oneCMDB . * * @param networkElbItems * ELB集合 * @param serviceTag * 服务标签 * @return */ public void saveELBToOneCMDB(Collection<NetworkElbItem> networkElbItems, ServiceTag serviceTag) { for (NetworkElbItem networkElbItem : networkElbItems) { this.saveELBToOneCMDB(networkElbItem, serviceTag); } } /** * 删除oneCMDB中的NetworkElbItem * * @param networkElbItem * @return */ public void deleteELBToOneCMDB(NetworkElbItem networkElbItem) { if (networkElbItem != null) { List<CiBean> ciList = new ArrayList<CiBean>(); CiBean router = new CiBean("ELB", networkElbItem.getIdentifier(), false); ciList.add(router); OneCmdbService.delete(ciList); } } // =========== NetworkEipItem ===========// /** * 新增或更新NetworkEipItem至oneCMDB . * * @param networkEipItem * eip * @param serviceTag * 服务标签 * @return */ public boolean saveEIPToOneCMDB(NetworkEipItem networkEipItem, ServiceTag serviceTag) { List<CiBean> ciList = new ArrayList<CiBean>(); CiBean ci = new CiBean("EIP", networkEipItem.getIdentifier(), false); ci.addAttributeValue(new ValueBean("Name", networkEipItem.getIdentifier(), false)); ci.addAttributeValue(new ValueBean("BelongsTo", networkEipItem.getApply().getUser().getName(), false)); ci.addAttributeValue(new ValueBean("IPAddress", "IPAddress-" + networkEipItem.getIpAddress(), true)); ci.addAttributeValue(new ValueBean("ISP", NetworkConstant.ISPType.get(networkEipItem.getIspType()), false)); if (networkEipItem.getComputeItem() != null) { // AssociateInstance:关联实例 ci.addAttributeValue(new ValueBean("AssociateInstance", networkEipItem.getComputeItem().getIdentifier() + "(" + networkEipItem.getComputeItem().getRemark() + ":" + networkEipItem.getComputeItem().getInnerIp() + ")", false)); ci.addAttributeValue(new ValueBean("AssociateELB", "", false)); } if (networkEipItem.getNetworkElbItem() != null) { // AssociateELB:关联ELB ci.addAttributeValue(new ValueBean("AssociateELB", networkEipItem.getNetworkElbItem().getIdentifier() + "(" + networkEipItem.getNetworkElbItem().getVirtualIp() + ")", false)); ci.addAttributeValue(new ValueBean("AssociateInstance", "", false)); } // 规则:协议,端口,源端口.如果有多条规则,则按","隔开 String protocol = ""; String sourcePort = ""; String targetPort = ""; List<EipPortItem> eipPortItems = comm.eipService.getEipPortItemListByEipId(networkEipItem.getId()); for (EipPortItem eipPortItem : eipPortItems) { protocol += eipPortItem.getProtocol() + ","; sourcePort += eipPortItem.getSourcePort() + ","; targetPort += eipPortItem.getTargetPort() + ","; } ci.addAttributeValue(new ValueBean("Protocol", StringCommonUtils.replaceAndSubstringText(protocol, ",", ","), false)); ci.addAttributeValue(new ValueBean("SourcePort", StringCommonUtils .replaceAndSubstringText(sourcePort, ",", ","), false)); ci.addAttributeValue(new ValueBean("TargetPort", StringCommonUtils .replaceAndSubstringText(targetPort, ",", ","), false)); if (serviceTag != null) { ci.addAttributeValue(new ValueBean("UsedBy", serviceTag.getUser().getName(), false)); } ciList.add(ci); return OneCmdbService.update(ciList); } /** * 新增或更新NetworkEipItem集合至oneCMDB . * * @param networkEipItems * eips * @param serviceTag * 服务标签 * @return */ public void saveEIPToOneCMDB(Collection<NetworkEipItem> networkEipItems, ServiceTag serviceTag) { for (NetworkEipItem networkEipItem : networkEipItems) { this.saveEIPToOneCMDB(networkEipItem, serviceTag); } } /** * 删除oneCMDB中的NetworkEipItem * * @param networkEipItem * @return */ public void deleteEIPToOneCMDB(NetworkEipItem networkEipItem) { if (networkEipItem != null) { List<CiBean> ciList = new ArrayList<CiBean>(); CiBean router = new CiBean("EIP", networkEipItem.getIdentifier(), false); ciList.add(router); OneCmdbService.delete(ciList); } } // =========== NetworkDnsItem ===========// /** * 新增或更新NetworkDnsItem至oneCMDB . * * @param networkDnsItem * dns * @param serviceTag * 服务标签 * @return */ public boolean saveDNSToOneCMDB(NetworkDnsItem networkDnsItem, ServiceTag serviceTag) { List<CiBean> ciList = new ArrayList<CiBean>(); CiBean ci = new CiBean("DNS", networkDnsItem.getIdentifier(), false); ci.addAttributeValue(new ValueBean("Name", networkDnsItem.getIdentifier(), false)); ci.addAttributeValue(new ValueBean("Domain", networkDnsItem.getDomainName(), false)); ci.addAttributeValue(new ValueBean("BelongsTo", networkDnsItem.getApply().getUser().getName(), false)); ci.addAttributeValue(new ValueBean("Type", NetworkConstant.DomainType.get(networkDnsItem.getDomainType()), false)); if (NetworkConstant.DomainType.GSLB.toInteger().equals(networkDnsItem.getDomainType()) || NetworkConstant.DomainType.A.toInteger().equals(networkDnsItem.getDomainType())) { for (NetworkEipItem networkEipItem : networkDnsItem.getNetworkEipItemList()) { ci.addAttributeValue(new ValueBean("EIP", networkEipItem.getIdentifier(), true)); } } else { ci.addAttributeValue(new ValueBean("CnameDomain", networkDnsItem.getCnameDomain(), false)); } if (serviceTag != null) { ci.addAttributeValue(new ValueBean("UsedBy", serviceTag.getUser().getName(), false)); } ciList.add(ci); return OneCmdbService.update(ciList); } /** * 新增或更新NetworkDnsItem集合至oneCMDB . * * @param networkDnsItems * dnses * @param serviceTag * 服务标签 * @return */ public void saveDNSToOneCMDB(Collection<NetworkDnsItem> networkDnsItems, ServiceTag serviceTag) { for (NetworkDnsItem networkDnsItem : networkDnsItems) { this.saveDNSToOneCMDB(networkDnsItem, serviceTag); } } /** * 删除oneCMDB中的NetworkDnsItem * * @param networkDnsItem * @return */ public void deleteDNSToOneCMDB(NetworkDnsItem networkDnsItem) { if (networkDnsItem != null) { List<CiBean> ciList = new ArrayList<CiBean>(); CiBean router = new CiBean("DNS", networkDnsItem.getIdentifier(), false); ciList.add(router); OneCmdbService.delete(ciList); } } // =========== Location ===========// /** * 新增,更新Location至oneCMDB * * @param location * @return */ public boolean saveLocationToOneCMDB(Location location) { List<CiBean> ciBeanList = new ArrayList<CiBean>(); CiBean router = new CiBean("Location", location.getAlias(), false); router.addAttributeValue(new ValueBean("Name", location.getName(), false)); router.addAttributeValue(new ValueBean("City", location.getCity(), false)); router.addAttributeValue(new ValueBean("Postal_Code", location.getPostcode(), false)); router.addAttributeValue(new ValueBean("Street_Address", location.getAddress(), false)); router.addAttributeValue(new ValueBean("TelePhone", location.getTelephone(), false)); ciBeanList.add(router); return OneCmdbService.update(ciBeanList); } /** * 删除oneCMDB中的Location * * @param location * @return */ public boolean deleteLocationToOneCMDB(Location location) { List<CiBean> ciBeanList = new ArrayList<CiBean>(); CiBean router = new CiBean("Location", location.getAlias(), false); ciBeanList.add(router); // 删除Location时,也会将关联的vlan也删除. for (Vlan vlan : location.getVlans()) { CiBean vlanRouter = new CiBean("Vlans", vlan.getAlias(), false); ciBeanList.add(vlanRouter); } return OneCmdbService.delete(ciBeanList); } // =========== Vlan ===========// /** * 新增,更新Vlan至oneCMDB * * @param vlan * @return */ public boolean saveVlanToOneCMDB(Vlan vlan) { List<CiBean> ciBeanList = new ArrayList<CiBean>(); CiBean router = new CiBean("Vlans", vlan.getAlias(), false); router.addAttributeValue(new ValueBean("Name", vlan.getName(), false)); router.addAttributeValue(new ValueBean("Location", vlan.getLocation().getAlias(), true)); router.setDescription(vlan.getDescription()); ciBeanList.add(router); return OneCmdbService.update(ciBeanList); } /** * 删除oneCMDB中的Vlan * * @param vlan * @return */ public boolean deleteVlanToOneCMDB(Vlan vlan) { List<CiBean> ciBeanList = new ArrayList<CiBean>(); CiBean router = new CiBean("Vlans", vlan.getAlias(), false); ciBeanList.add(router); return OneCmdbService.delete(ciBeanList); } // =========== IpPool ===========// /** * 根据IP池类型(poolType)获得oneCMDB中的IPPool下的节点名. * * <pre> * 互联网IP池:InternetPool * 公网IP池:PublicPool * 私网IP池:PrivatePool * </pre> * * @param poolType * @return */ private String getPoolNameFromOneCMDBByPoolType(Integer poolType) { String nodeName = ""; if (IpPoolConstant.PoolType.互联网IP池.toInteger().equals(poolType)) { nodeName = "InternetPool"; } else if (IpPoolConstant.PoolType.公网IP池.toInteger().equals(poolType)) { nodeName = "PublicPool"; } else if (IpPoolConstant.PoolType.私网IP池.toInteger().equals(poolType)) { nodeName = "PrivatePool"; } else if (IpPoolConstant.PoolType.虚拟负载IP池.toInteger().equals(poolType)) { nodeName = "VIPPool"; } return nodeName; } /** * 新增,更新IpPool集合至oneCMDB * * @param ipPools * ip集合 * @param poolType * ip池类型 */ public boolean saveIpPoolToOneCMDB(List<IpPool> ipPools, Integer poolType) { List<CiBean> ciBeanList = new ArrayList<CiBean>(); for (IpPool ipPool : ipPools) { CiBean router = new CiBean(this.getPoolNameFromOneCMDBByPoolType(poolType), "IPAddress-" + ipPool.getIpAddress(), false); router.addAttributeValue(new ValueBean("IPAddress", ipPool.getIpAddress(), false)); // router.addAttributeValue(new ValueBean("NetMask", // "255.255.254.1", false)); // router.addAttributeValue(new ValueBean("GateWay", "172.0.0.1", // false)); router.addAttributeValue(new ValueBean("Location", ipPool.getVlan().getLocation().getAlias(), true)); router.addAttributeValue(new ValueBean("Vlan", ipPool.getVlan().getAlias(), true)); // TODO IP状态待确定.看IP状态是否需要同步. router.addAttributeValue(new ValueBean("Status", "Status1341922499992", true)); ciBeanList.add(router); } return OneCmdbService.update(ciBeanList); } /** * 删除oneCMDB中的IpPool * * @param ipPool * @return */ public void deleteIpPoolToOneCMDB(IpPool ipPool) { if (ipPool != null) { List<CiBean> ciBeanList = new ArrayList<CiBean>(); CiBean router = new CiBean(this.getPoolNameFromOneCMDBByPoolType(ipPool.getPoolType()), "IPAddress-" + ipPool.getIpAddress(), false); ciBeanList.add(router); OneCmdbService.delete(ciBeanList); } } // =========== HostServer ===========// /** * 新增或更新HostServer至oneCMDB(oneCMDB中同时要插入ServerPort相关的数据) * * @param HostServer * @return */ public boolean saveHostServerToOneCMDB(HostServer hostServer) { List<CiBean> ciList = new ArrayList<CiBean>(); try { CiBean router = new CiBean("Server", "Server" + hostServer.getAlias(), false); router.addAttributeValue(new ValueBean("Location", hostServer.getLocationAlias(), true)); router.addAttributeValue(new ValueBean("Type", HostServerConstant.HostServerType.map.get(hostServer .getServerType()), false)); router.addAttributeValue(new ValueBean("Site", hostServer.getSite(), false)); router.addAttributeValue(new ValueBean("HostName", hostServer.getDisplayName(), false)); router.addAttributeValue(new ValueBean("Height", hostServer.getHeight(), false)); router.addAttributeValue(new ValueBean("Name", hostServer.getServerModel().getName(), false)); router.addAttributeValue(new ValueBean("Rack", hostServer.getRackAlias(), true));// 架 router.addAttributeValue(new ValueBean("Company", hostServer.getServerModel().getCompanyAlias(), true)); router.addAttributeValue(new ValueBean("Model", hostServer.getServerModel().getName(), false)); router.addAttributeValue(new ValueBean("CpuNum", hostServer.getServerModel().getCpu().toString(), false)); router.addAttributeValue(new ValueBean("DiskNum", hostServer.getServerModel().getDisk().toString(), false)); router.addAttributeValue(new ValueBean("PortNum", hostServer.getServerModel().getPort().toString(), false)); router.addAttributeValue(new ValueBean("PciNum", hostServer.getServerModel().getPci().toString(), false)); router.addAttributeValue(new ValueBean("MemNum", hostServer.getServerModel().getMemory().toString(), false)); router.setDescription(hostServer.getDescription()); ciList.add(router); OneCmdbService.update(ciList); // hostServer中的网卡写入ServerPort this.saveServerPortByHostServerToOneCMDB(hostServer); // ServerPort this.saveServerPortToOneCMDB(hostServer); } catch (Exception e) { logger.error("HostServer 插入oneCMDB失败!"); e.printStackTrace(); return false; } return true; } /** * 删除oneCMDB中的HostServer(包括oneCMDB中关联的ServerPort) * * @param HostServer * @return */ public void deleteHostServerToOneCMDB(HostServer hostServer) { if (hostServer != null) { List<CiBean> ciBeanList = new ArrayList<CiBean>(); CiBean router = new CiBean("Server", "Server" + hostServer.getAlias(), false); CiBean ci = new CiBean("ServerPort", "ServerPort" + hostServer.getAlias(), false); ciBeanList.add(router); ciBeanList.add(ci); OneCmdbService.delete(ciBeanList); // ServerPort this.deleteServerPortToOneCMDB(hostServer); } } // =========== ServerPort ===========// /** * 将服务器关联的网卡信息同步至oneCMDB的ServerPort. * * @param hostServer * @return */ private boolean saveServerPortToOneCMDB(HostServer hostServer) { List<CiBean> ciBeanList = new ArrayList<CiBean>(); List<Nic> nics = comm.hostServerService.getNicByhostServerId(hostServer.getId()); for (Nic nic : nics) { CiBean ci = new CiBean("ServerPort", "ServerPort" + nic.getAlias(), false); ci.addAttributeValue(new ValueBean("IPAddress", "IPAddress-" + nic.getIpAddress(), true)); ci.addAttributeValue(new ValueBean("Server", "Server" + hostServer.getAlias(), true)); ci.addAttributeValue(new ValueBean("Sit", nic.getSite(), false)); ci.addAttributeValue(new ValueBean("MacAddress", nic.getMac(), false)); ci.addAttributeValue(new ValueBean("ConnectedTo", hostServer.getSwitchName(), false)); ciBeanList.add(ci); } return OneCmdbService.update(ciBeanList); } /** * 将服务器本身的管理网卡信息同步至oneCMDB的ServerPort. * * @param hostServer * @return */ private boolean saveServerPortByHostServerToOneCMDB(HostServer hostServer) { List<CiBean> ciBeanList = new ArrayList<CiBean>(); /** * 管理口网卡默认的网卡号: 111 */ String managerSite = "111"; CiBean ci = new CiBean("ServerPort", "ServerPort" + hostServer.getAlias(), false); ci.addAttributeValue(new ValueBean("IPAddress", "IPAddress-" + hostServer.getIpAddress(), true)); ci.addAttributeValue(new ValueBean("Server", "Server" + hostServer.getAlias(), true)); ci.addAttributeValue(new ValueBean("Sit", managerSite, false)); ci.addAttributeValue(new ValueBean("MacAddress", hostServer.getManagementMac(), false)); ci.addAttributeValue(new ValueBean("ConnectedTo", hostServer.getSwitchName(), false)); ciBeanList.add(ci); return OneCmdbService.update(ciBeanList); } /** * 删除oneCMDB中HostServer的ServerPort * * @param hostServer */ public void deleteServerPortToOneCMDB(HostServer hostServer) { if (hostServer != null) { List<CiBean> ciBeanList = new ArrayList<CiBean>(); List<Nic> nics = comm.hostServerService.getNicByhostServerId(hostServer.getId()); for (Nic nic : nics) { CiBean ci = new CiBean("ServerPort", "ServerPort" + nic.getAlias(), false); ciBeanList.add(ci); } OneCmdbService.delete(ciBeanList); } } /** * 查询OneCMDB中的OS卷 * * @return */ public Map getOsStorageFromOnecmdb() { return OneCmdbService.findCiByText("NFSVol", "NFS"); } /** * 查询OneCMDB中的Fimas控制器 * * @return */ public Map getFimasHardWareFromOnecmdb() { return OneCmdbService.findCiByText("Fimas"); } /** * 查询OneCMDB中的Netapp控制器 * * @return */ public Map getNfsHardWareFromOnecmdb() { return OneCmdbService.findCiByText("Controller"); } }