Search in sources :

Example 1 with InterfaceDef

use of com.cloud.agent.resource.computing.LibvirtVMDef.InterfaceDef in project CloudStack-archive by CloudStack-extras.

the class LibvirtComputingResource method execute.

private Answer execute(SecurityGroupRulesCmd cmd) {
    String vif = null;
    String brname = null;
    try {
        Connect conn = LibvirtConnection.getConnection();
        List<InterfaceDef> nics = getInterfaces(conn, cmd.getVmName());
        vif = nics.get(0).getDevName();
        brname = nics.get(0).getBrName();
    } catch (LibvirtException e) {
        return new SecurityGroupRuleAnswer(cmd, false, e.toString());
    }
    boolean result = add_network_rules(cmd.getVmName(), Long.toString(cmd.getVmId()), cmd.getGuestIp(), cmd.getSignature(), Long.toString(cmd.getSeqNum()), cmd.getGuestMac(), cmd.stringifyRules(), vif, brname);
    if (!result) {
        s_logger.warn("Failed to program network rules for vm " + cmd.getVmName());
        return new SecurityGroupRuleAnswer(cmd, false, "programming network rules failed");
    } else {
        s_logger.debug("Programmed network rules for vm " + cmd.getVmName() + " guestIp=" + cmd.getGuestIp() + ",ingress numrules=" + cmd.getIngressRuleSet().length + ",egress numrules=" + cmd.getEgressRuleSet().length);
        return new SecurityGroupRuleAnswer(cmd);
    }
}
Also used : InterfaceDef(com.cloud.agent.resource.computing.LibvirtVMDef.InterfaceDef) LibvirtException(org.libvirt.LibvirtException) Connect(org.libvirt.Connect) SecurityGroupRuleAnswer(com.cloud.agent.api.SecurityGroupRuleAnswer)

Example 2 with InterfaceDef

use of com.cloud.agent.resource.computing.LibvirtVMDef.InterfaceDef in project CloudStack-archive by CloudStack-extras.

the class LibvirtComputingResource method post_default_network_rules.

protected boolean post_default_network_rules(Connect conn, String vmName, NicTO nic, Long vmId, InetAddress dhcpServerIp, String hostIp, String hostMacAddr) {
    if (!_can_bridge_firewall) {
        return false;
    }
    List<InterfaceDef> intfs = getInterfaces(conn, vmName);
    if (intfs.size() < nic.getDeviceId()) {
        return false;
    }
    InterfaceDef intf = intfs.get(nic.getDeviceId());
    String brname = intf.getBrName();
    String vif = intf.getDevName();
    Script cmd = new Script(_securityGroupPath, _timeout, s_logger);
    cmd.add("post_default_network_rules");
    cmd.add("--vmname", vmName);
    cmd.add("--vmid", vmId.toString());
    cmd.add("--vmip", nic.getIp());
    cmd.add("--vmmac", nic.getMac());
    cmd.add("--vif", vif);
    cmd.add("--brname", brname);
    if (dhcpServerIp != null)
        cmd.add("--dhcpSvr", dhcpServerIp.getHostAddress());
    cmd.add("--hostIp", hostIp);
    cmd.add("--hostMacAddr", hostMacAddr);
    String result = cmd.execute();
    if (result != null) {
        return false;
    }
    return true;
}
Also used : InterfaceDef(com.cloud.agent.resource.computing.LibvirtVMDef.InterfaceDef) Script(com.cloud.utils.script.Script)

Example 3 with InterfaceDef

use of com.cloud.agent.resource.computing.LibvirtVMDef.InterfaceDef in project CloudStack-archive by CloudStack-extras.

the class LibvirtComputingResource method getVmStat.

private VmStatsEntry getVmStat(Connect conn, String vmName) throws LibvirtException {
    Domain dm = null;
    try {
        dm = getDomain(conn, vmName);
        DomainInfo info = dm.getInfo();
        VmStatsEntry stats = new VmStatsEntry();
        stats.setNumCPUs(info.nrVirtCpu);
        stats.setEntityType("vm");
        /* get cpu utilization */
        vmStats oldStats = null;
        Calendar now = Calendar.getInstance();
        oldStats = _vmStats.get(vmName);
        long elapsedTime = 0;
        if (oldStats != null) {
            elapsedTime = now.getTimeInMillis() - oldStats._timestamp.getTimeInMillis();
            double utilization = (info.cpuTime - oldStats._usedTime) / ((double) elapsedTime * 1000000);
            NodeInfo node = conn.nodeInfo();
            utilization = utilization / node.cpus;
            stats.setCPUUtilization(utilization * 100);
        }
        /* get network stats */
        List<InterfaceDef> vifs = getInterfaces(conn, vmName);
        long rx = 0;
        long tx = 0;
        for (InterfaceDef vif : vifs) {
            DomainInterfaceStats ifStats = dm.interfaceStats(vif.getDevName());
            rx += ifStats.rx_bytes;
            tx += ifStats.tx_bytes;
        }
        if (oldStats != null) {
            long deltarx = rx - oldStats._rx;
            if (deltarx > 0)
                stats.setNetworkReadKBs(deltarx / 1000);
            long deltatx = tx - oldStats._tx;
            if (deltatx > 0)
                stats.setNetworkWriteKBs(deltatx / 1000);
        }
        vmStats newStat = new vmStats();
        newStat._usedTime = info.cpuTime;
        newStat._rx = rx;
        newStat._tx = tx;
        newStat._timestamp = now;
        _vmStats.put(vmName, newStat);
        return stats;
    } finally {
        if (dm != null) {
            dm.free();
        }
    }
}
Also used : InterfaceDef(com.cloud.agent.resource.computing.LibvirtVMDef.InterfaceDef) NodeInfo(org.libvirt.NodeInfo) DomainInterfaceStats(org.libvirt.DomainInterfaceStats) Calendar(java.util.Calendar) DomainInfo(org.libvirt.DomainInfo) VmStatsEntry(com.cloud.agent.api.VmStatsEntry) Domain(org.libvirt.Domain)

Example 4 with InterfaceDef

use of com.cloud.agent.resource.computing.LibvirtVMDef.InterfaceDef in project CloudStack-archive by CloudStack-extras.

the class LibvirtComputingResource method default_network_rules_for_systemvm.

protected boolean default_network_rules_for_systemvm(Connect conn, String vmName) {
    if (!_can_bridge_firewall) {
        return false;
    }
    List<InterfaceDef> intfs = getInterfaces(conn, vmName);
    if (intfs.size() < 1) {
        return false;
    }
    /* FIX ME: */
    String brname = null;
    if (vmName.startsWith("r-")) {
        InterfaceDef intf = intfs.get(0);
        brname = intf.getBrName();
    } else {
        InterfaceDef intf = intfs.get(intfs.size() - 1);
        brname = intf.getBrName();
    }
    Script cmd = new Script(_securityGroupPath, _timeout, s_logger);
    cmd.add("default_network_rules_systemvm");
    cmd.add("--vmname", vmName);
    cmd.add("--brname", brname);
    String result = cmd.execute();
    if (result != null) {
        return false;
    }
    return true;
}
Also used : InterfaceDef(com.cloud.agent.resource.computing.LibvirtVMDef.InterfaceDef) Script(com.cloud.utils.script.Script)

Example 5 with InterfaceDef

use of com.cloud.agent.resource.computing.LibvirtVMDef.InterfaceDef in project CloudStack-archive by CloudStack-extras.

the class CloudZonesComputingResource method execute.

protected Answer execute(StopCommand cmd) {
    final String vmName = cmd.getVmName();
    Long bytesReceived = new Long(0);
    Long bytesSent = new Long(0);
    State state = null;
    synchronized (_vms) {
        state = _vms.get(vmName);
        _vms.put(vmName, State.Stopping);
    }
    try {
        Connect conn = LibvirtConnection.getConnection();
        try {
            Domain dm = conn.domainLookupByUUID(UUID.nameUUIDFromBytes(vmName.getBytes()));
        } catch (LibvirtException e) {
            state = State.Stopped;
            return new StopAnswer(cmd, null, 0, bytesSent, bytesReceived);
        }
        String macAddress = null;
        if (vmName.startsWith("i-")) {
            List<InterfaceDef> nics = getInterfaces(conn, vmName);
            if (!nics.isEmpty()) {
                macAddress = nics.get(0).getMacAddress();
            }
        }
        destroy_network_rules_for_vm(conn, vmName);
        String result = stopVM(conn, vmName, defineOps.UNDEFINE_VM);
        try {
            cleanupVnet(conn, cmd.getVnet());
            _dhcpSnooper.cleanup(macAddress, vmName);
            _vmDataServer.handleVmStopped(cmd.getVmName());
        } catch (Exception e) {
        }
        state = State.Stopped;
        return new StopAnswer(cmd, result, 0, bytesSent, bytesReceived);
    } catch (LibvirtException e) {
        return new StopAnswer(cmd, e.getMessage());
    } finally {
        synchronized (_vms) {
            if (state != null) {
                _vms.put(vmName, state);
            } else {
                _vms.remove(vmName);
            }
        }
    }
}
Also used : InterfaceDef(com.cloud.agent.resource.computing.LibvirtVMDef.InterfaceDef) LibvirtException(org.libvirt.LibvirtException) State(com.cloud.vm.VirtualMachine.State) Connect(org.libvirt.Connect) Domain(org.libvirt.Domain) StopAnswer(com.cloud.agent.api.StopAnswer) ConfigurationException(javax.naming.ConfigurationException) LibvirtException(org.libvirt.LibvirtException)

Aggregations

InterfaceDef (com.cloud.agent.resource.computing.LibvirtVMDef.InterfaceDef)14 Domain (org.libvirt.Domain)5 LibvirtException (org.libvirt.LibvirtException)5 Script (com.cloud.utils.script.Script)4 Connect (org.libvirt.Connect)3 DiskDef (com.cloud.agent.resource.computing.LibvirtVMDef.DiskDef)2 InternalErrorException (com.cloud.exception.InternalErrorException)2 IOException (java.io.IOException)2 ArrayList (java.util.ArrayList)2 ConfigurationException (javax.naming.ConfigurationException)2 SecurityGroupRuleAnswer (com.cloud.agent.api.SecurityGroupRuleAnswer)1 StopAnswer (com.cloud.agent.api.StopAnswer)1 VmStatsEntry (com.cloud.agent.api.VmStatsEntry)1 IpAssocAnswer (com.cloud.agent.api.routing.IpAssocAnswer)1 IpAddressTO (com.cloud.agent.api.to.IpAddressTO)1 NicTO (com.cloud.agent.api.to.NicTO)1 DhcpSnooperImpl (com.cloud.agent.dhcp.DhcpSnooperImpl)1 Pair (com.cloud.utils.Pair)1 CloudRuntimeException (com.cloud.utils.exception.CloudRuntimeException)1 State (com.cloud.vm.VirtualMachine.State)1