// Licensed to the Apache Software Foundation (ASF) under one // or more contributor license agreements. See the NOTICE file // distributed with this work for additional information // regarding copyright ownership. The ASF licenses this file // to you 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 com.cloud.agent.api; import com.google.gson.Gson; import com.google.gson.GsonBuilder; /** * This command represents physical view of how a VPC is laid out on the physical infrastructure. Contains information: * - on which hypervisor hosts VPC spans (host running at least one VM from the VPC) * - information of tiers, so we can figure how one VM can talk to a different VM in same tier or different tier * - information on all the VM's in the VPC. * - information of NIC's of each VM in the VPC */ public class OvsVpcPhysicalTopologyConfigCommand extends Command { VpcConfig vpcConfig =null; long hostId; String bridgeName; long sequenceNumber; String schemaVersion; public static class Host { long hostId; String ipAddress; public Host (long hostId, String ipAddress) { this.hostId = hostId; this.ipAddress = ipAddress; } } public static class Nic { String ipAddress; String macAddress; String networkUuid; public Nic (String ipAddress, String macAddress, String networkUuid) { this.ipAddress = ipAddress; this.macAddress = macAddress; this.networkUuid = networkUuid; } } public static class Tier { long greKey; String networkUuid; String gatewayIp; String gatewayMac; String cidr; public Tier(long greKey, String networkUuid, String gatewayIp, String gatewayMac, String cidr) { this.greKey = greKey; this.networkUuid = networkUuid; this.gatewayIp = gatewayIp; this.gatewayMac = gatewayMac; this.cidr = cidr; } } public static class Vm { long hostId; Nic[] nics; public Vm(long hostId, Nic[] nics) { this.hostId = hostId; this.nics = nics; } } public static class Vpc { String cidr; Host[] hosts; Tier[] tiers; Vm[] vms; public Vpc(Host[] hosts, Tier[] tiers, Vm[] vms, String cidr) { this.hosts = hosts; this.tiers = tiers; this.vms = vms; this.cidr = cidr; } } public static class VpcConfig { Vpc vpc; public VpcConfig(Vpc vpc) { this.vpc = vpc; } } public OvsVpcPhysicalTopologyConfigCommand(Host[] hosts, Tier[] tiers, Vm[] vms, String cidr) { Vpc vpc = new Vpc(hosts, tiers, vms, cidr); vpcConfig = new VpcConfig(vpc); } public String getVpcConfigInJson() { Gson gson = new GsonBuilder().create(); return gson.toJson(vpcConfig).toLowerCase(); } @Override public boolean executeInSequence() { return false; } public void setHostId(long hostId) { this.hostId = hostId; } public long getHostId() { return hostId; } public String getBridgeName() { return bridgeName; } public void setBridgeName(String bridgeName) { this.bridgeName = bridgeName; } public long getSequenceNumber() { return sequenceNumber; } public void setSequenceNumber(long sequenceNumber) { this.sequenceNumber = sequenceNumber; } }