org.xmlsh.aws.gradle.elasticbeanstalk.AWSElasticBeanstalkCreateEnvironmentTask.java Source code

Java tutorial

Introduction

Here is the source code for org.xmlsh.aws.gradle.elasticbeanstalk.AWSElasticBeanstalkCreateEnvironmentTask.java

Source

/*
 * Copyright 2015-2016 David A. Lee. <dlee@calldei.com>
 *
 * This is a derived work from Classmethods, Inc.
 *
 * Current License Terms - Dual licensed under the following :
 *
 * "Simplified BSD License" included in license.txt
 *
 * The original work (derived from) license terms:  Apache License, Version 2.0
 * included in copyright.origin/LICENSE.TXT
 */
/*
 * TOTALLY BOGUS
 * Stupid
 */
package org.xmlsh.aws.gradle.elasticbeanstalk;

import lombok.Getter;
import lombok.Setter;

import org.gradle.api.internal.ConventionTask;
import org.gradle.api.tasks.TaskAction;

import com.amazonaws.services.elasticbeanstalk.AWSElasticBeanstalk;
import com.amazonaws.services.elasticbeanstalk.model.CreateEnvironmentRequest;
import com.amazonaws.services.elasticbeanstalk.model.CreateEnvironmentResult;
import com.amazonaws.services.elasticbeanstalk.model.DescribeEnvironmentsRequest;
import com.amazonaws.services.elasticbeanstalk.model.DescribeEnvironmentsResult;
import com.amazonaws.services.elasticbeanstalk.model.UpdateEnvironmentRequest;

public class AWSElasticBeanstalkCreateEnvironmentTask extends ConventionTask {

    @Getter
    @Setter
    private String appName;

    @Getter
    @Setter
    private String envName;

    @Getter
    @Setter
    private String envDesc = "";

    @Getter
    @Setter
    private String cnamePrefix = java.util.UUID.randomUUID().toString();

    @Getter
    @Setter
    private String templateName;

    @Getter
    @Setter
    private String versionLabel;

    @Getter
    @Setter
    private Tier tier = Tier.WebServer;

    public AWSElasticBeanstalkCreateEnvironmentTask() {
        setDescription("Create/Migrate ElasticBeanstalk Environment.");
        setGroup("AWS");
    }

    @TaskAction
    public void createEnvironment() {
        // to enable conventionMappings feature
        String appName = getAppName();
        String envName = getEnvName();
        String envDesc = getEnvDesc();
        String cnamePrefix = getCnamePrefix();
        String templateName = getTemplateName();
        String versionLabel = getVersionLabel();
        Tier tier = getTier();

        AwsBeanstalkPluginExtension ext = getProject().getExtensions().getByType(AwsBeanstalkPluginExtension.class);
        AWSElasticBeanstalk eb = ext.getClient();

        DescribeEnvironmentsResult der = eb.describeEnvironments(new DescribeEnvironmentsRequest()
                .withApplicationName(appName).withEnvironmentNames(envName).withIncludeDeleted(false));

        if (der.getEnvironments() == null || der.getEnvironments().isEmpty()) {
            CreateEnvironmentRequest req = new CreateEnvironmentRequest().withApplicationName(appName)
                    .withEnvironmentName(envName).withDescription(envDesc).withTemplateName(templateName)
                    .withVersionLabel(versionLabel).withTier(tier.toEnvironmentTier());
            if (tier == Tier.WebServer) {
                req.withCNAMEPrefix(cnamePrefix);
            }
            CreateEnvironmentResult result = eb.createEnvironment(req);
            getLogger().info(
                    "environment " + envName + " @ " + appName + " (" + result.getEnvironmentId() + ") created");
        } else {
            String environmentId = der.getEnvironments().get(0).getEnvironmentId();

            eb.updateEnvironment(new UpdateEnvironmentRequest().withEnvironmentId(environmentId)
                    .withEnvironmentName(envName).withDescription(envDesc).withTemplateName(templateName)
                    .withVersionLabel(versionLabel).withTier(tier.toEnvironmentTier()));
            getLogger().info("environment " + envName + " @ " + appName + " (" + environmentId + ") updated");
        }
    }
}