Search in sources :

Example 46 with CloudRuntimeException

use of com.cloud.utils.exception.CloudRuntimeException in project cloudstack by apache.

the class Upgrade302to40 method addVpcProvider.

private void addVpcProvider(Connection conn) {
    //Encrypt config params and change category to Hidden
    s_logger.debug("Adding vpc provider to all physical networks in the system");
    PreparedStatement pstmt = null;
    ResultSet rs = null;
    try {
        pstmt = conn.prepareStatement("SELECT id FROM `cloud`.`physical_network` WHERE removed is NULL");
        rs = pstmt.executeQuery();
        while (rs.next()) {
            Long pNtwkId = rs.getLong(1);
            //insert provider
            pstmt = conn.prepareStatement("INSERT INTO `cloud`.`physical_network_service_providers` " + "(`physical_network_id`, `provider_name`, `state`, `vpn_service_provided`, `dhcp_service_provided`, " + "`dns_service_provided`, `gateway_service_provided`, `firewall_service_provided`, `source_nat_service_provided`," + " `load_balance_service_provided`, `static_nat_service_provided`, `port_forwarding_service_provided`," + " `user_data_service_provided`, `security_group_service_provided`) " + "VALUES (?, 'VpcVirtualRouter', 'Enabled', 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0)");
            pstmt.setLong(1, pNtwkId);
            pstmt.executeUpdate();
            //get provider id
            pstmt = conn.prepareStatement("SELECT id FROM `cloud`.`physical_network_service_providers` " + "WHERE physical_network_id=? and provider_name='VpcVirtualRouter'");
            pstmt.setLong(1, pNtwkId);
            ResultSet rs1 = pstmt.executeQuery();
            rs1.next();
            long providerId = rs1.getLong(1);
            //insert VR element
            pstmt = conn.prepareStatement("INSERT INTO `cloud`.`virtual_router_providers` (`nsp_id`, `type`, `enabled`) " + "VALUES (?, 'VPCVirtualRouter', 1)");
            pstmt.setLong(1, providerId);
            pstmt.executeUpdate();
            s_logger.debug("Added VPC Virtual router provider for physical network id=" + pNtwkId);
        }
    } catch (SQLException e) {
        throw new CloudRuntimeException("Unable add VPC physical network service provider ", e);
    } finally {
        closeAutoCloseable(rs);
        closeAutoCloseable(pstmt);
    }
    s_logger.debug("Done adding VPC physical network service providers to all physical networks");
}
Also used : SQLException(java.sql.SQLException) CloudRuntimeException(com.cloud.utils.exception.CloudRuntimeException) ResultSet(java.sql.ResultSet) PreparedStatement(java.sql.PreparedStatement)

Example 47 with CloudRuntimeException

use of com.cloud.utils.exception.CloudRuntimeException in project cloudstack by apache.

the class Upgrade302to40 method cloneOfferingAndAddTag.

private void cloneOfferingAndAddTag(Connection conn, long networkOfferingId, long physicalNetworkId, String newTag) {
    PreparedStatement pstmt = null;
    ResultSet rs = null;
    try {
        pstmt = conn.prepareStatement("select count(*) from `cloud`.`network_offerings`");
        rs = pstmt.executeQuery();
        long ntwkOffCount = 0;
        while (rs.next()) {
            ntwkOffCount = rs.getLong(1);
        }
        rs.close();
        pstmt.close();
        pstmt = conn.prepareStatement("DROP TEMPORARY TABLE IF EXISTS `cloud`.`network_offerings2`");
        pstmt.executeUpdate();
        pstmt = conn.prepareStatement("CREATE TEMPORARY TABLE `cloud`.`network_offerings2` ENGINE=MEMORY SELECT * FROM `cloud`.`network_offerings` WHERE id=1");
        pstmt.executeUpdate();
        pstmt.close();
        // clone the record to
        pstmt = conn.prepareStatement("INSERT INTO `cloud`.`network_offerings2` SELECT * FROM `cloud`.`network_offerings` WHERE id=?");
        pstmt.setLong(1, networkOfferingId);
        pstmt.executeUpdate();
        pstmt.close();
        pstmt = conn.prepareStatement("SELECT unique_name FROM `cloud`.`network_offerings` WHERE id=?");
        pstmt.setLong(1, networkOfferingId);
        rs = pstmt.executeQuery();
        String uniqueName = null;
        while (rs.next()) {
            uniqueName = rs.getString(1) + "-" + physicalNetworkId;
        }
        rs.close();
        pstmt.close();
        pstmt = conn.prepareStatement("UPDATE `cloud`.`network_offerings2` SET id=?, unique_name=?, name=?, tags=?, uuid=?  WHERE id=?");
        ntwkOffCount = ntwkOffCount + 1;
        long newNetworkOfferingId = ntwkOffCount;
        pstmt.setLong(1, newNetworkOfferingId);
        pstmt.setString(2, uniqueName);
        pstmt.setString(3, uniqueName);
        pstmt.setString(4, newTag);
        String uuid = UUID.randomUUID().toString();
        pstmt.setString(5, uuid);
        pstmt.setLong(6, networkOfferingId);
        pstmt.executeUpdate();
        pstmt.close();
        pstmt = conn.prepareStatement("INSERT INTO `cloud`.`network_offerings` SELECT * from `cloud`.`network_offerings2` WHERE id=" + newNetworkOfferingId);
        pstmt.executeUpdate();
        pstmt.close();
        //clone service map
        pstmt = conn.prepareStatement("select service, provider from `cloud`.`ntwk_offering_service_map` where network_offering_id=?");
        pstmt.setLong(1, networkOfferingId);
        rs = pstmt.executeQuery();
        while (rs.next()) {
            String service = rs.getString(1);
            String provider = rs.getString(2);
            pstmt = conn.prepareStatement("INSERT INTO `cloud`.`ntwk_offering_service_map` (`network_offering_id`, `service`, `provider`, `created`) values (?,?,?, now())");
            pstmt.setLong(1, newNetworkOfferingId);
            pstmt.setString(2, service);
            pstmt.setString(3, provider);
            pstmt.executeUpdate();
        }
        rs.close();
        pstmt.close();
        pstmt = conn.prepareStatement("UPDATE `cloud`.`networks` SET network_offering_id=? where physical_network_id=? and traffic_type ='Guest' and network_offering_id=" + networkOfferingId);
        pstmt.setLong(1, newNetworkOfferingId);
        pstmt.setLong(2, physicalNetworkId);
        pstmt.executeUpdate();
        pstmt.close();
    } catch (SQLException e) {
        throw new CloudRuntimeException("Exception while cloning NetworkOffering", e);
    } finally {
        closeAutoCloseable(rs);
        try {
            pstmt = conn.prepareStatement("DROP TEMPORARY TABLE `cloud`.`network_offerings2`");
            pstmt.executeUpdate();
        } catch (SQLException e) {
            s_logger.info("[ignored] ", e);
        }
        closeAutoCloseable(pstmt);
    }
}
Also used : SQLException(java.sql.SQLException) CloudRuntimeException(com.cloud.utils.exception.CloudRuntimeException) ResultSet(java.sql.ResultSet) PreparedStatement(java.sql.PreparedStatement)

Example 48 with CloudRuntimeException

use of com.cloud.utils.exception.CloudRuntimeException in project cloudstack by apache.

the class Upgrade302to40 method encryptClusterDetails.

private void encryptClusterDetails(Connection conn) {
    s_logger.debug("Encrypting cluster details");
    try (PreparedStatement pstmt = conn.prepareStatement("select id, value from `cloud`.`cluster_details` where name = 'password'");
        PreparedStatement pstmt1 = conn.prepareStatement("update `cloud`.`cluster_details` set value=? where id=?");
        ResultSet rs = pstmt.executeQuery()) {
        while (rs.next()) {
            long id = rs.getLong(1);
            String value = rs.getString(2);
            if (value == null) {
                continue;
            }
            String encryptedValue = DBEncryptionUtil.encrypt(value);
            pstmt1.setBytes(1, encryptedValue.getBytes("UTF-8"));
            pstmt1.setLong(2, id);
            pstmt1.executeUpdate();
        }
    } catch (SQLException e) {
        throw new CloudRuntimeException("Unable encrypt cluster_details values ", e);
    } catch (UnsupportedEncodingException e) {
        throw new CloudRuntimeException("Unable encrypt cluster_details values ", e);
    }
    s_logger.debug("Done encrypting cluster_details");
}
Also used : SQLException(java.sql.SQLException) CloudRuntimeException(com.cloud.utils.exception.CloudRuntimeException) ResultSet(java.sql.ResultSet) UnsupportedEncodingException(java.io.UnsupportedEncodingException) PreparedStatement(java.sql.PreparedStatement)

Example 49 with CloudRuntimeException

use of com.cloud.utils.exception.CloudRuntimeException in project cloudstack by apache.

the class Upgrade302to40 method fixZoneUsingExternalDevices.

// 1) ensure that networks using external load balancer/firewall in 2.2.14 or prior releases deployments
//    has entry in network_external_lb_device_map and network_external_firewall_device_map
//
// 2) Some keys of host details for F5 and SRX devices were stored in Camel Case in 2.x releases. From 3.0
//    they are made in lowercase. On upgrade change the host details name to lower case
private void fixZoneUsingExternalDevices(Connection conn) {
    //Get zones to upgrade
    List<Long> zoneIds = new ArrayList<Long>();
    PreparedStatement pstmt = null;
    PreparedStatement pstmtUpdate = null;
    ResultSet rs = null;
    long networkOfferingId, networkId;
    long f5DeviceId, f5HostId;
    long srxDevivceId, srxHostId;
    try {
        pstmt = conn.prepareStatement("select id from `cloud`.`data_center` where lb_provider='F5BigIp' or firewall_provider='JuniperSRX' or gateway_provider='JuniperSRX'");
        rs = pstmt.executeQuery();
        while (rs.next()) {
            zoneIds.add(rs.getLong(1));
        }
    } catch (SQLException e) {
        throw new CloudRuntimeException("Unable to create network to LB & firewalla device mapping for networks  that use them", e);
    }
    if (zoneIds.size() == 0) {
        // no zones using F5 and SRX devices so return
        return;
    }
    // find the default network offering created for external devices during upgrade from 2.2.14
    try {
        pstmt = conn.prepareStatement("select id from `cloud`.`network_offerings` where unique_name='Isolated with external providers' ");
        rs = pstmt.executeQuery();
        if (rs.first()) {
            networkOfferingId = rs.getLong(1);
        } else {
            throw new CloudRuntimeException("Cannot upgrade as there is no 'Isolated with external providers' network offering crearted .");
        }
    } catch (SQLException e) {
        throw new CloudRuntimeException("Unable to create network to LB & firewalla device mapping for networks  that use them", e);
    }
    for (Long zoneId : zoneIds) {
        try {
            // find the F5 device id  in the zone
            pstmt = conn.prepareStatement("SELECT id FROM host WHERE data_center_id=? AND type = 'ExternalLoadBalancer' AND removed IS NULL");
            pstmt.setLong(1, zoneId);
            rs = pstmt.executeQuery();
            if (rs.first()) {
                f5HostId = rs.getLong(1);
            } else {
                throw new CloudRuntimeException("Cannot upgrade as there is no F5 load balancer device found in data center " + zoneId);
            }
            pstmt = conn.prepareStatement("SELECT id FROM external_load_balancer_devices WHERE  host_id=?");
            pstmt.setLong(1, f5HostId);
            rs = pstmt.executeQuery();
            if (rs.first()) {
                f5DeviceId = rs.getLong(1);
            } else {
                throw new CloudRuntimeException("Cannot upgrade as there is no F5 load balancer device with host ID " + f5HostId + " found in external_load_balancer_device");
            }
            // find the SRX device id  in the zone
            pstmt = conn.prepareStatement("SELECT id FROM host WHERE data_center_id=? AND type = 'ExternalFirewall' AND removed IS NULL");
            pstmt.setLong(1, zoneId);
            rs = pstmt.executeQuery();
            if (rs.first()) {
                srxHostId = rs.getLong(1);
            } else {
                throw new CloudRuntimeException("Cannot upgrade as there is no SRX firewall device found in data center " + zoneId);
            }
            pstmt = conn.prepareStatement("SELECT id FROM external_firewall_devices WHERE  host_id=?");
            pstmt.setLong(1, srxHostId);
            rs = pstmt.executeQuery();
            if (rs.first()) {
                srxDevivceId = rs.getLong(1);
            } else {
                throw new CloudRuntimeException("Cannot upgrade as there is no SRX firewall device found with host ID " + srxHostId + " found in external_firewall_devices");
            }
            // check if network any uses F5 or SRX devices  in the zone
            pstmt = conn.prepareStatement("select id from `cloud`.`networks` where guest_type='Virtual' and data_center_id=? and network_offering_id=? and removed IS NULL");
            pstmt.setLong(1, zoneId);
            pstmt.setLong(2, networkOfferingId);
            rs = pstmt.executeQuery();
            while (rs.next()) {
                // get the network Id
                networkId = rs.getLong(1);
                // add mapping for the network in network_external_lb_device_map
                String insertLbMapping = "INSERT INTO `cloud`.`network_external_lb_device_map` (uuid, network_id, external_load_balancer_device_id, created) VALUES ( ?, ?, ?, now())";
                pstmtUpdate = conn.prepareStatement(insertLbMapping);
                pstmtUpdate.setString(1, UUID.randomUUID().toString());
                pstmtUpdate.setLong(2, networkId);
                pstmtUpdate.setLong(3, f5DeviceId);
                pstmtUpdate.executeUpdate();
                s_logger.debug("Successfully added entry in network_external_lb_device_map for network " + networkId + " and F5 device ID " + f5DeviceId);
                // add mapping for the network in network_external_firewall_device_map
                String insertFwMapping = "INSERT INTO `cloud`.`network_external_firewall_device_map` (uuid, network_id, external_firewall_device_id, created) VALUES ( ?, ?, ?, now())";
                pstmtUpdate = conn.prepareStatement(insertFwMapping);
                pstmtUpdate.setString(1, UUID.randomUUID().toString());
                pstmtUpdate.setLong(2, networkId);
                pstmtUpdate.setLong(3, srxDevivceId);
                pstmtUpdate.executeUpdate();
                s_logger.debug("Successfully added entry in network_external_firewall_device_map for network " + networkId + " and SRX device ID " + srxDevivceId);
            }
            // update host details for F5 and SRX devices
            s_logger.debug("Updating the host details for F5 and SRX devices");
            pstmt = conn.prepareStatement("SELECT host_id, name FROM `cloud`.`host_details` WHERE  host_id=? OR host_id=?");
            pstmt.setLong(1, f5HostId);
            pstmt.setLong(2, srxHostId);
            rs = pstmt.executeQuery();
            while (rs.next()) {
                long hostId = rs.getLong(1);
                String camlCaseName = rs.getString(2);
                if (!(camlCaseName.equalsIgnoreCase("numRetries") || camlCaseName.equalsIgnoreCase("publicZone") || camlCaseName.equalsIgnoreCase("privateZone") || camlCaseName.equalsIgnoreCase("publicInterface") || camlCaseName.equalsIgnoreCase("privateInterface") || camlCaseName.equalsIgnoreCase("usageInterface"))) {
                    continue;
                }
                String lowerCaseName = camlCaseName.toLowerCase();
                pstmt = conn.prepareStatement("update `cloud`.`host_details` set name=? where host_id=? AND name=?");
                pstmt.setString(1, lowerCaseName);
                pstmt.setLong(2, hostId);
                pstmt.setString(3, camlCaseName);
                pstmt.executeUpdate();
            }
            s_logger.debug("Successfully updated host details for F5 and SRX devices");
        } catch (SQLException e) {
            throw new CloudRuntimeException("Unable create a mapping for the networks in network_external_lb_device_map and network_external_firewall_device_map", e);
        } finally {
            closeAutoCloseable(rs);
            closeAutoCloseable(pstmt);
        }
        s_logger.info("Successfully upgraded networks using F5 and SRX devices to have a entry in the network_external_lb_device_map and network_external_firewall_device_map");
    }
}
Also used : SQLException(java.sql.SQLException) CloudRuntimeException(com.cloud.utils.exception.CloudRuntimeException) ArrayList(java.util.ArrayList) ResultSet(java.sql.ResultSet) PreparedStatement(java.sql.PreparedStatement)

Example 50 with CloudRuntimeException

use of com.cloud.utils.exception.CloudRuntimeException in project cloudstack by apache.

the class Upgrade410to420 method removeFirewallServiceFromSharedNetworkOfferingWithSGService.

private void removeFirewallServiceFromSharedNetworkOfferingWithSGService(Connection conn) {
    try (PreparedStatement pstmt = conn.prepareStatement("select id from `cloud`.`network_offerings` where unique_name='DefaultSharedNetworkOfferingWithSGService'")) {
        try (ResultSet rs = pstmt.executeQuery()) {
            while (rs.next()) {
                long id = rs.getLong(1);
                // remove Firewall service for SG shared network offering
                try (PreparedStatement del_pstmt = conn.prepareStatement("DELETE from `cloud`.`ntwk_offering_service_map` where network_offering_id=? and service='Firewall'")) {
                    del_pstmt.setLong(1, id);
                    del_pstmt.executeUpdate();
                } catch (SQLException e) {
                    throw new CloudRuntimeException("Unable to remove Firewall service for SG shared network offering.", e);
                }
            }
        } catch (SQLException e) {
            throw new CloudRuntimeException("Unable to remove Firewall service for SG shared network offering.", e);
        }
    } catch (SQLException e) {
        throw new CloudRuntimeException("Unable to remove Firewall service for SG shared network offering.", e);
    }
}
Also used : SQLException(java.sql.SQLException) CloudRuntimeException(com.cloud.utils.exception.CloudRuntimeException) ResultSet(java.sql.ResultSet) PreparedStatement(java.sql.PreparedStatement)

Aggregations

CloudRuntimeException (com.cloud.utils.exception.CloudRuntimeException)1279 PreparedStatement (java.sql.PreparedStatement)320 SQLException (java.sql.SQLException)320 InvalidParameterValueException (com.cloud.exception.InvalidParameterValueException)236 ResultSet (java.sql.ResultSet)217 ArrayList (java.util.ArrayList)217 ConfigurationException (javax.naming.ConfigurationException)171 HashMap (java.util.HashMap)129 DB (com.cloud.utils.db.DB)118 TransactionLegacy (com.cloud.utils.db.TransactionLegacy)115 IOException (java.io.IOException)95 HostVO (com.cloud.host.HostVO)94 Answer (com.cloud.agent.api.Answer)84 Account (com.cloud.user.Account)84 ResourceUnavailableException (com.cloud.exception.ResourceUnavailableException)82 URISyntaxException (java.net.URISyntaxException)82 ActionEvent (com.cloud.event.ActionEvent)70 TransactionStatus (com.cloud.utils.db.TransactionStatus)65 ConcurrentOperationException (com.cloud.exception.ConcurrentOperationException)63 InternalErrorException (com.cloud.exception.InternalErrorException)57