Examples of DeployPackagesResponse


Examples of org.rhq.core.domain.content.transfer.DeployPackagesResponse

        try {
            DeployPackagesRequest request = new DeployPackagesRequest(1, deployment.getId(),
                Collections.singleton(packageDetails));

            DeployPackagesResponse response = pluginContainer.getContentManager().deployPackagesImmediately(request);

            testContentRetrieval(TestDeployments.DEPLOYMENT_2);
        } finally {
            //switch the served deployment back, so that other tests aren't affected
            DEPLOYMENT_TO_SERVE = origServedDeployemnt;
View Full Code Here

Examples of org.rhq.core.domain.content.transfer.DeployPackagesResponse

    public List<DeployPackageStep> generateInstallationSteps(ResourcePackageDetails packageDetails) {
        return null;
    }

    public DeployPackagesResponse deployPackages(Set<ResourcePackageDetails> packages, ContentServices contentServices) {
        DeployPackagesResponse response = new DeployPackagesResponse();
        if (packages.size() != 1) {
            log.warn("Request to deploy a script containing multiple files, which is obivously illegal: " + packages);
            response.setOverallRequestResult(ContentResponseResult.FAILURE);
            response.setOverallRequestErrorMessage("Only one script can be updated at a time.");
            return response;
        }

        try {
            String jbossHomeDir = resourceContext.getParentResourceComponent().getResourceContext()
                .getPluginConfiguration().getSimpleValue(ApplicationServerPluginConfigurationProperties.HOME_DIR, null);
            SystemInfo systemInfo = resourceContext.getSystemInformation();
            ProfileServiceConnection profileServiceConnection = resourceContext.getParentResourceComponent()
                .getConnection();

            ScriptDeployer deployer = new ScriptDeployer(jbossHomeDir, systemInfo, new RemoteDownloader(
                resourceContext, true, profileServiceConnection));
            ResourcePackageDetails packageDetails = packages.iterator().next();

            DeployIndividualPackageResponse scriptUpdateResult = deployer.update(packageDetails,
                resourceContext.getResourceType());

            response.setOverallRequestResult(scriptUpdateResult.getResult());
            response.addPackageResponse(scriptUpdateResult);
        } catch (Exception e) {
            response.setOverallRequestErrorMessage(e.getMessage());
            response.setOverallRequestResult(ContentResponseResult.FAILURE);
        }

        return response;
    }
View Full Code Here

Examples of org.rhq.core.domain.content.transfer.DeployPackagesResponse

    }

    public DeployPackagesResponse deployPackages(Set<ResourcePackageDetails> packages, ContentServices contentServices) {
        // You can only update the one application file referenced by this resource
        if (packages.size() != 1) {
            DeployPackagesResponse response = new DeployPackagesResponse(ContentResponseResult.FAILURE);
            response.setOverallRequestErrorMessage("When deploying WAR files only one can be updated at a time.");
            return response;
        }
        ResourcePackageDetails packageDetails = packages.iterator().next();

        // Find location of existing application
        Configuration pluginConfig = getResourceContext().getPluginConfiguration();
        File appFile = new File(pluginConfig.getSimple(PROPERTY_FILENAME).getStringValue());
        if (!appFile.exists()) {
            return failApplicationDeployment("Could not find application to update at location: " + appFile,
                packageDetails);
        }
        boolean isExploded = appFile.isDirectory();

        // save the new version of the app to a temp location
        File tempFile;
        try {
            tempFile = writeAppBitsToTempFile(appFile, contentServices, packageDetails);
        } catch (Exception e) {
            return failApplicationDeployment("Error writing new application bits to temporary file - cause: " + e,
                packageDetails);
        }

        // delete the current app but don't undeploy.  This option should maintain the existing mbeans while
        // removing the app. Back up the bits in case we need to restore if the new app fails to deploy
        File backupFile = null;
        try {
            backupFile = deleteApp(pluginConfig, appFile, true, false);
        } catch (Exception e) {
            if (appFile.exists()) {
                return failApplicationDeployment("Error undeploying existing app - cause: " + e, packageDetails);
            }
            // log but proceed with no backup
            log.warn("Failed to create app backup but proceeding with redeploy of " + appFile.getPath() + ": " + e);
        }

        FileContentDelegate contentDelegate = new FileContentDelegate(appFile.getParentFile());

        try {
            // Write the new bits for the application. If successful Tomcat will pick it up and complete the deploy.
            contentDelegate.createContent(appFile, tempFile, isExploded);
        } catch (Exception e) {
            // Deploy failed - rollback to the original app file...
            String errorMessage = ThrowableUtil.getAllMessages(e);
            try {
                FileUtils.purge(appFile, true);
                contentDelegate.createContent(appFile, backupFile, isExploded);
                errorMessage += " ***** ROLLED BACK TO ORIGINAL APPLICATION FILE. *****";
            } catch (Exception e1) {
                errorMessage += " ***** FAILED TO ROLLBACK TO ORIGINAL APPLICATION FILE. *****: "
                    + ThrowableUtil.getAllMessages(e1);
            }
            return failApplicationDeployment(errorMessage, packageDetails);
        }

        // Deploy was successful!

        deleteBackupOfOriginalFile(backupFile);

        DeployPackagesResponse response = new DeployPackagesResponse(ContentResponseResult.SUCCESS);
        DeployIndividualPackageResponse packageResponse = new DeployIndividualPackageResponse(packageDetails.getKey(),
            ContentResponseResult.SUCCESS);
        response.addPackageResponse(packageResponse);

        return response;
    }
View Full Code Here

Examples of org.rhq.core.domain.content.transfer.DeployPackagesResponse

            throw new RuntimeException("Failed to retrieve package bits for " + packageDetails, e);
        }
    }

    private DeployPackagesResponse failApplicationDeployment(String errorMessage, ResourcePackageDetails packageDetails) {
        DeployPackagesResponse response = new DeployPackagesResponse(ContentResponseResult.FAILURE);

        DeployIndividualPackageResponse packageResponse = new DeployIndividualPackageResponse(packageDetails.getKey(),
            ContentResponseResult.FAILURE);
        packageResponse.setErrorMessage(errorMessage);

        response.addPackageResponse(packageResponse);

        return response;
    }
View Full Code Here

Examples of org.rhq.core.domain.content.transfer.DeployPackagesResponse

        // You can only update the one application file referenced by this resource, so punch out if multiple are
        // specified.
        if (packages.size() != 1) {
            LOG.warn("Request to update " + resourceTypeName + " file contained multiple packages: " + packages);
            DeployPackagesResponse response = new DeployPackagesResponse(ContentResponseResult.FAILURE);
            response.setOverallRequestErrorMessage("Only one " + resourceTypeName + " can be updated at a time.");
            return response;
        }

        ResourcePackageDetails packageDetails = packages.iterator().next();

        if (LOG.isDebugEnabled()) {
            LOG.debug("Updating EAR/WAR file '" + deploymentFile + "' using [" + packageDetails + "]...");
        }
        // Find location of existing application.
        if (!deploymentFile.exists()) {
            return failApplicationDeployment("Could not find application to update at location: " + deploymentFile,
                packageDetails);
        }

        LOG.debug("Writing new EAR/WAR bits to temporary file...");
        File tempFile;
        try {
            tempFile = writeNewAppBitsToTempFile(contentServices, packageDetails);
        } catch (Exception e) {
            return failApplicationDeployment("Error writing new application bits to temporary file - cause: " + e,
                packageDetails);
        }
        if (LOG.isDebugEnabled()) {
            LOG.debug("Wrote new EAR/WAR bits to temporary file '" + tempFile + "'.");
        }

        boolean deployExploded = deploymentFile.isDirectory();

        // Backup the original app file/dir.
        File tempDir = getResourceContext().getTemporaryDirectory();
        File backupDir = new File(tempDir, "deployBackup" + UUID.randomUUID().getLeastSignificantBits());
        File backupOfOriginalFile = new File(backupDir, deploymentFile.getName());
        if (LOG.isDebugEnabled()) {
            LOG.debug("Backing up existing EAR/WAR '" + deploymentFile + "' to '" + backupOfOriginalFile + "'...");
        }
        try {
            if (backupOfOriginalFile.exists()) {
                FileUtils.forceDelete(backupOfOriginalFile);
            }
            if (deploymentFile.isDirectory()) {
                FileUtils.copyDirectory(deploymentFile, backupOfOriginalFile, true);
            } else {
                FileUtils.copyFile(deploymentFile, backupOfOriginalFile, true);
            }
        } catch (Exception e) {
            throw new RuntimeException("Failed to backup existing " + resourceTypeName + "'" + deploymentFile
                + "' to '" + backupOfOriginalFile + "'.");
        }

        ProfileServiceConnection connection = getConnection();
        if (connection == null) {
            DeployPackagesResponse response = new DeployPackagesResponse(ContentResponseResult.FAILURE);
            response.setOverallRequestErrorMessage("No profile service connection available");
            return response;
        }

        DeploymentManager deploymentManager = connection.getDeploymentManager();

        // as crazy as it might sound, there is apparently no way for you to ask the profile service
        // if a deployment was deployed to the farm profile. Thus, we must resort to a poor man's solution:
        // if the deployment name has the "farm/" directory in it, assume it needs to be deployed to the farm
        boolean deployFarmed = getDeploymentKey().contains("/farm/");
        if (deployFarmed) {
            Collection<ProfileKey> profileKeys = deploymentManager.getProfiles();
            boolean farmSupported = false;
            for (ProfileKey profileKey : profileKeys) {
                if (profileKey.getName().equals(FARM_PROFILE_KEY.getName())) {
                    farmSupported = true;
                    break;
                }
            }
            if (!farmSupported) {
                throw new IllegalStateException("This application server instance is not a node in a cluster, "
                    + "so it does not support farmed deployments. Supported deployment profiles are " + profileKeys
                    + ".");
            }
            if (deployExploded) {
                throw new IllegalArgumentException(
                    "Deploying farmed applications in exploded form is not supported by the Profile Service.");
            }
            try {
                deploymentManager.loadProfile(FARM_PROFILE_KEY);
            } catch (Exception e) {
                LOG.info("Failed to switch to farm profile - could not update " + resourceTypeName + " file '"
                    + deploymentFile + "' using [" + packageDetails + "].");
                String errorMessage = ThrowableUtil.getAllMessages(e);
                return failApplicationDeployment(errorMessage, packageDetails);
            }
        }

        String deploymentName = getDeploymentName();
        if (deploymentName == null) {
            DeployPackagesResponse response = new DeployPackagesResponse(ContentResponseResult.FAILURE);
            response.setOverallRequestErrorMessage("Did not find deployment with key [" + getDeploymentKey() + "]");
            return response;
        }

        // Now stop the original app.
        try {
            DeploymentProgress progress = deploymentManager.stop(deploymentName);
            DeploymentUtils.run(progress);
        } catch (Exception e) {
            throw new RuntimeException("Failed to stop deployment [" + deploymentName + "].", e);
        }

        // And then remove it (this will delete the physical file/dir from the deploy dir).
        try {
            DeploymentProgress progress = deploymentManager.remove(deploymentName);
            DeploymentUtils.run(progress);
        } catch (Exception e) {
            throw new RuntimeException("Failed to remove deployment [" + deploymentName + "].", e);
        }

        // Deploy away!
        try {
            if (LOG.isDebugEnabled()) {
                LOG.debug("Deploying '" + tempFile + "'...");
            }
            DeploymentUtils.deployArchive(deploymentManager, tempFile, deployExploded);
        } catch (Exception e) {
            // Deploy failed - rollback to the original app file...
            LOG.debug("Redeploy failed - rolling back to original archive...", e);
            String errorMessage = ThrowableUtil.getAllMessages(e);
            try {
                // Try to delete the new app file, which failed to deploy, if it still exists.
                if (deploymentFile.exists()) {
                    try {
                        FileUtils.forceDelete(deploymentFile);
                    } catch (IOException e1) {
                        if (LOG.isDebugEnabled()) {
                            LOG.debug("Failed to delete application file '" + deploymentFile
                                + "' that failed to deploy.", e1);
                        }
                    }
                }
                // Now redeploy the original file - this generally should succeed.
                DeploymentUtils.deployArchive(deploymentManager, backupOfOriginalFile, deployExploded);
                errorMessage += " ***** ROLLED BACK TO ORIGINAL APPLICATION FILE. *****";

                // If the redeployment of the original backup succeeded then cleanup the backup from disk
                deleteTemporaryFile(backupDir);
                // If the redeployment fails the original backup is preserved on disk until agent restart
            } catch (Exception e1) {
                LOG.debug("Rollback failed!", e1);
                errorMessage += " ***** FAILED TO ROLLBACK TO ORIGINAL APPLICATION FILE. *****: "
                    + ThrowableUtil.getAllMessages(e1);
            }

            //since the deployment failed remove the temp application downloaded for deployment
            deleteTemporaryFile(tempFile);

            LOG.info("Failed to update " + resourceTypeName + " file '" + deploymentFile + "' using [" + packageDetails
                + "].");
            return failApplicationDeployment(errorMessage, packageDetails);
        } finally {
            // Make sure to switch back to the 'applications' profile if we switched to the 'farm' profile above.
            if (deployFarmed) {
                try {
                    deploymentManager.loadProfile(APPLICATIONS_PROFILE_KEY);
                } catch (Exception e) {
                    LOG.debug("Failed to switch back to applications profile from farm profile", e);
                }
            }
        }

        // Store SHA256 in the agent file if deployment was exploded
        if (deploymentFile.isDirectory()) {
            FileContentDelegate fileContentDelegate = new FileContentDelegate();
            fileContentDelegate.saveDeploymentSHA(tempFile, deploymentFile, getResourceContext()
                .getResourceDataDirectory());
        }

        // Remove temporary files created by this deployment.
        deleteTemporaryFile(backupDir);
        deleteTemporaryFile(tempFile.getParentFile());

        DeployPackagesResponse response = new DeployPackagesResponse(ContentResponseResult.SUCCESS);
        DeployIndividualPackageResponse packageResponse = new DeployIndividualPackageResponse(packageDetails.getKey(),
            ContentResponseResult.SUCCESS);
        response.addPackageResponse(packageResponse);

        if (LOG.isDebugEnabled()) {
            LOG.debug("Updated " + resourceTypeName + " file '" + deploymentFile
                + "' successfully - returning response [" + response + "]...");
        }
View Full Code Here

Examples of org.rhq.core.domain.content.transfer.DeployPackagesResponse

     * @param errorMessage   reason the deploy failed
     * @param packageDetails describes the update being made
     * @return response populated to reflect a failure
     */
    private DeployPackagesResponse failApplicationDeployment(String errorMessage, ResourcePackageDetails packageDetails) {
        DeployPackagesResponse response = new DeployPackagesResponse(ContentResponseResult.FAILURE);

        DeployIndividualPackageResponse packageResponse = new DeployIndividualPackageResponse(packageDetails.getKey(),
            ContentResponseResult.FAILURE);
        packageResponse.setErrorMessage(errorMessage);

        response.addPackageResponse(packageResponse);

        return response;
    }
View Full Code Here

Examples of org.rhq.core.domain.content.transfer.DeployPackagesResponse

            if (packageTypeName.equals(PACKAGE_TYPE_PATCH)) {

                if (packages.size() > 1) {
                    log.warn("Attempt to install more than one patch at a time, installation aborted.");

                    DeployPackagesResponse response = new DeployPackagesResponse(ContentResponseResult.FAILURE);
                    response
                        .setOverallRequestErrorMessage("When deploying a patch, no other packages may be deployed at the same time.");
                    return response;
                }

                try {
                    DeployIndividualPackageResponse response = getWorkflowManager().run(pkg);

                    if (response.getResult() == ContentResponseResult.FAILURE) {
                        overallResult = ContentResponseResult.FAILURE;
                    }

                    // just in case response is null, it would throw NPE on the getResult() check above but the item
                    // would already be a member in individualResponses; moving the add below the check ensures that
                    // only non-null instances of individualResponses will ever make it into the List
                    individualResponses.add(response);
                } catch (Throwable throwable) {
                    log.error("Error deploying package: " + pkg, throwable);

                    // Don't forget to provide an individual response for the failed package.
                    DeployIndividualPackageResponse response = new DeployIndividualPackageResponse(pkg.getKey(),
                        ContentResponseResult.FAILURE);
                    response.setErrorMessage(ThrowableUtil.getStackAsString(throwable));
                    individualResponses.add(response);

                    overallResult = ContentResponseResult.FAILURE;
                }
            } else if (packageTypeName.equals(PACKAGE_TYPE_LIBRARY)) {
                if (packages.size() > 1) {
                    log.warn("Attempt to install more than one patch at a time, installation aborted.");

                    DeployPackagesResponse response = new DeployPackagesResponse(ContentResponseResult.FAILURE);
                    response
                        .setOverallRequestErrorMessage("When deploying a patch, no other packages may be deployed at the same time.");
                    return response;
                } else {
                    deployJarLibrary(pkg, contentServices);
                }
            }
        }

        DeployPackagesResponse response = new DeployPackagesResponse(overallResult);
        response.getPackageResponses().addAll(individualResponses);

        return response;
    }
View Full Code Here

Examples of org.rhq.core.domain.content.transfer.DeployPackagesResponse

            response.setErrorMessage(ThrowableUtil.getStackAsString(throwable));
            individualResponses.add(response);
            overallResult = ContentResponseResult.FAILURE;
        }

        DeployPackagesResponse response = new DeployPackagesResponse(overallResult);
        response.getPackageResponses().addAll(individualResponses);
        return response;
    }
View Full Code Here

Examples of org.rhq.core.domain.content.transfer.DeployPackagesResponse

    }

    @Override
    public DeployPackagesResponse deployPackages(Set<ResourcePackageDetails> packages, ContentServices contentServices) {
        getLog().debug("Starting deployment..");
        DeployPackagesResponse response = new DeployPackagesResponse();

        if (packages.size() != 1) {
            response.setOverallRequestResult(ContentResponseResult.FAILURE);
            response.setOverallRequestErrorMessage("Can only deploy one package at a time");
            getLog().warn("deployPackages can only deploy one package at a time");
        }

        ResourcePackageDetails detail = packages.iterator().next();

        ASUploadConnection uploadConnection = new ASUploadConnection(getServerComponent().getASConnection(), detail
            .getKey().getName());
        OutputStream out = uploadConnection.getOutputStream();
        if (out == null) {
            response.setOverallRequestResult(ContentResponseResult.FAILURE);
            response
                .setOverallRequestErrorMessage("An error occured while the agent was preparing for content download");
            return response;
        }
        ResourceType resourceType = context.getResourceType();

        getLog().info("Deploying " + resourceType.getName() + " Resource with key [" + detail.getKey() + "]...");

        try {
            contentServices.downloadPackageBits(context.getContentContext(), detail.getKey(), out, true);
        } catch (Exception e) {
            uploadConnection.cancelUpload();
            response.setOverallRequestResult(ContentResponseResult.FAILURE);
            response.setOverallRequestErrorMessage("An error occured while the agent was downloading the content");
            return response;
        }

        JsonNode uploadResult = uploadConnection.finishUpload();
        if (verbose) {
            getLog().info(uploadResult);
        }

        if (ASUploadConnection.isErrorReply(uploadResult)) {
            response.setOverallRequestResult(ContentResponseResult.FAILURE);
            response.setOverallRequestErrorMessage(ASUploadConnection.getFailureDescription(uploadResult));
            return response;
        }

        JsonNode resultNode = uploadResult.get("result");
        String hash = resultNode.get("BYTES_VALUE").getTextValue();

        try {
            Redeployer redeployer = new Redeployer(detail.getKey().getName(), hash, getASConnection());
            Result result = redeployer.redeployOnServer();
            if (result.isRolledBack()) {
                response.setOverallRequestResult(ContentResponseResult.FAILURE);
                response.setOverallRequestErrorMessage("Rolled Back: " + result.getFailureDescription());
            } else {
                response.setOverallRequestResult(ContentResponseResult.SUCCESS);
                //we just deployed a different file on the AS7 server, so let's refresh ourselves
                deploymentFile = determineDeploymentFile();
                DeployIndividualPackageResponse packageResponse = new DeployIndividualPackageResponse(detail.getKey(),
                    ContentResponseResult.SUCCESS);
                response.addPackageResponse(packageResponse);
            }

        } catch (Exception e) {
            response.setOverallRequestResult(ContentResponseResult.FAILURE);
            response.setOverallRequestErrorMessage(e.getMessage());
        }

        ContentResponseResult result = response.getOverallRequestResult();
        getLog().info(
            "Result of deployment of "
                + resourceType.getName()
                + " Resource with key ["
                + detail.getKey()
                + "]: "
                + ((ContentResponseResult.SUCCESS == result) ? result.name() : (result.name() + ": " + response
                    .getOverallRequestErrorMessage())));

        return response;
    }
View Full Code Here

Examples of org.rhq.core.domain.content.transfer.DeployPackagesResponse

    @Override
    public DeployPackagesResponse deployPackages(Set<ResourcePackageDetails> packages, ContentServices contentServices) {

        ContentContext cctx = context.getContentContext();

        DeployPackagesResponse response = new DeployPackagesResponse();

        for (ResourcePackageDetails details : packages) {

            String packageName = details.getName();

            ASUploadConnection uploadConnection = new ASUploadConnection(getServerComponent().getASConnection(),
                packageName);
            OutputStream out = uploadConnection.getOutputStream();
            if (out == null) {
                response.addPackageResponse(new DeployIndividualPackageResponse(details.getKey(),
                    ContentResponseResult.FAILURE));
                continue;
            }

            try {
                contentServices.downloadPackageBits(cctx, details.getKey(), out, false);
            } catch (Exception e) {
                uploadConnection.cancelUpload();
                response.addPackageResponse(new DeployIndividualPackageResponse(details.getKey(),
                    ContentResponseResult.FAILURE));
                continue;
            }

            JsonNode uploadResult = uploadConnection.finishUpload();

            if (uploadResult.has(OUTCOME)) {
                String outcome = uploadResult.get(OUTCOME).getTextValue();
                if (outcome.equals(SUCCESS)) { // Upload was successful, so now add the file to the server group
                    JsonNode resultNode = uploadResult.get("result");
                    String hash = resultNode.get("BYTES_VALUE").getTextValue();
                    ASConnection connection = getASConnection();

                    Address deploymentsAddress = new Address();
                    deploymentsAddress.add("deployment", packageName);
                    Operation step1 = new Operation("add", deploymentsAddress);
                    //                    step1.addAdditionalProperty("hash", new PROPERTY_VALUE("BYTES_VALUE", hash));
                    List<Object> content = new ArrayList<Object>(1);
                    Map<String, Object> contentValues = new HashMap<String, Object>();
                    contentValues.put("hash", new PROPERTY_VALUE("BYTES_VALUE", hash));
                    content.add(contentValues);
                    step1.addAdditionalProperty("content", content);

                    step1.addAdditionalProperty("name", packageName);

                    Address serverGroupAddress = new Address(context.getResourceKey());
                    serverGroupAddress.add("deployment", packageName);
                    Operation step2 = new Operation("add", serverGroupAddress);
                    Operation step3 = new Operation("deploy", serverGroupAddress);

                    CompositeOperation cop = new CompositeOperation();
                    cop.addStep(step1);
                    cop.addStep(step2);
                    cop.addStep(step3);

                    Result result = connection.execute(cop);
                    if (!result.isSuccess()) // TODO get failure message into response
                        response.addPackageResponse(new DeployIndividualPackageResponse(details.getKey(),
                            ContentResponseResult.FAILURE));
                    else {
                        DeployIndividualPackageResponse individualPackageResponse = new DeployIndividualPackageResponse(
                            details.getKey(), ContentResponseResult.SUCCESS);
                        response.addPackageResponse(individualPackageResponse);
                        response.setOverallRequestResult(ContentResponseResult.SUCCESS);
                    }
                } else
                    response.addPackageResponse(new DeployIndividualPackageResponse(details.getKey(),
                        ContentResponseResult.FAILURE));
            } else {
                response.addPackageResponse(new DeployIndividualPackageResponse(details.getKey(),
                    ContentResponseResult.FAILURE));
            }
        }

        return response;
View Full Code Here
TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.