package org.zstack.network.service.virtualrouter; import org.zstack.appliancevm.ApplianceVmInventory; import org.zstack.header.configuration.PythonClassInventory; import org.zstack.header.query.ExpandedQueries; import org.zstack.header.query.ExpandedQuery; import org.zstack.header.query.ExpandedQueryAlias; import org.zstack.header.query.ExpandedQueryAliases; import org.zstack.header.search.Inventory; import org.zstack.header.search.Parent; import org.zstack.header.vm.VmNicInventory; import org.zstack.network.service.virtualrouter.eip.VirtualRouterEipRefInventory; import org.zstack.network.service.virtualrouter.lb.VirtualRouterLoadBalancerRefInventory; import org.zstack.network.service.virtualrouter.portforwarding.VirtualRouterPortForwardingRuleRefInventory; import org.zstack.network.service.virtualrouter.vip.VirtualRouterVipInventory; import org.zstack.utils.CollectionUtils; import org.zstack.utils.function.Function; import java.util.ArrayList; import java.util.Collection; import java.util.List; @Inventory(mappingVOClass = VirtualRouterVmVO.class, collectionValueOfMethod="valueOf2", parent = {@Parent(inventoryClass = ApplianceVmInventory.class, type = VirtualRouterConstant.VIRTUAL_ROUTER_VM_TYPE)}) @PythonClassInventory @ExpandedQueries({ @ExpandedQuery(expandedField = "virtualRouterEipRef", expandedInventoryKey = "virtualRouterVmUuid", inventoryClass = VirtualRouterEipRefInventory.class, foreignKey = "uuid", hidden = true), @ExpandedQuery(expandedField = "virtualRouterVipRef", expandedInventoryKey = "virtualRouterVmUuid", inventoryClass = VirtualRouterVipInventory.class, foreignKey = "uuid", hidden = true), @ExpandedQuery(expandedField = "virtualRouterPortforwardingRef", expandedInventoryKey = "virtualRouterVmUuid", inventoryClass = VirtualRouterPortForwardingRuleRefInventory.class, foreignKey = "uuid", hidden = true), @ExpandedQuery(expandedField = "virtualRouterOffering", expandedInventoryKey = "uuid", inventoryClass = VirtualRouterOfferingInventory.class, foreignKey = "instanceOfferingUuid"), @ExpandedQuery(expandedField = "virtualRouterLoadBalancerListenerRef", expandedInventoryKey = "virtualRouterVmUuid", inventoryClass = VirtualRouterLoadBalancerRefInventory.class, foreignKey = "uuid", hidden = true), }) @ExpandedQueryAliases({ @ExpandedQueryAlias(alias = "eip", expandedField = "virtualRouterEipRef.eip"), @ExpandedQueryAlias(alias = "vip", expandedField = "virtualRouterVipRef.vip"), @ExpandedQueryAlias(alias = "portForwarding", expandedField = "virtualRouterPortforwardingRef.portForwarding"), @ExpandedQueryAlias(alias = "loadBalancer", expandedField = "virtualRouterLoadBalancerListenerRef.loadBalancer"), }) public class VirtualRouterVmInventory extends ApplianceVmInventory { private String publicNetworkUuid; protected VirtualRouterVmInventory(VirtualRouterVmVO vo) { super(vo); publicNetworkUuid = vo.getPublicNetworkUuid(); } public VirtualRouterVmInventory() { } public static VirtualRouterVmInventory valueOf(VirtualRouterVmVO vo) { return new VirtualRouterVmInventory(vo); } public static List<VirtualRouterVmInventory> valueOf2(Collection<VirtualRouterVmVO> vos) { List<VirtualRouterVmInventory> invs = new ArrayList<VirtualRouterVmInventory>(); for (VirtualRouterVmVO vo : vos) { invs.add(valueOf(vo)); } return invs; } public String getPublicNetworkUuid() { return publicNetworkUuid; } public void setPublicNetworkUuid(String publicNetworkUuid) { this.publicNetworkUuid = publicNetworkUuid; } public VmNicInventory getPublicNic() { if (getVmNics() == null) { return null; } for (VmNicInventory n : getVmNics()) { if (VirtualRouterNicMetaData.isPublicNic(n)) { return n; } } return null; } public VmNicInventory getGuestNic() { if (getVmNics() == null) { return null; } for (VmNicInventory n : getVmNics()) { if (VirtualRouterNicMetaData.isGuestNic(n)) { return n; } } return null; } public VmNicInventory getGuestNicByL3NetworkUuid(String l3uuid) { for (VmNicInventory nic : getVmNics()) { if (l3uuid.equals(nic.getL3NetworkUuid())) { return nic; } } return null; } public List<String> getAllL3Networks() { List<String> l3s = new ArrayList<String>(); for (VmNicInventory nic : getVmNics()) { l3s.add(nic.getL3NetworkUuid()); } return l3s; } public List<String> getGuestL3Networks() { return CollectionUtils.transformToList(getVmNics(), new Function<String, VmNicInventory>() { @Override public String call(VmNicInventory arg) { return VirtualRouterNicMetaData.isGuestNic(arg) ? arg.getL3NetworkUuid() : null; } }); } }