Skip to content
This repository has been archived by the owner on Aug 29, 2018. It is now read-only.

Commit

Permalink
AWS OpsWorks tasks
Browse files Browse the repository at this point in the history
  • Loading branch information
Jesse Duarte committed Aug 25, 2014
1 parent 924a6be commit 70fe255
Show file tree
Hide file tree
Showing 6 changed files with 491 additions and 27 deletions.
342 changes: 340 additions & 2 deletions README.md

Large diffs are not rendered by default.

79 changes: 78 additions & 1 deletion integration-tests.xml
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,83 @@
<delete-beanstalk-app applicationName="anttestappname" />
<cleanup-beanstalk instanceProfile="ElasticBeanstalkProfile" bucketName="deploybeanstalkbucket" />
</target>

<target name="test.opsworks" depends="awstasks.setup">
<setup-opsworks-tests instanceProfile="aws-opsworks-ec2-role" serviceRole="aws-opsworks-service-role"/>
<create-s3-bucket bucketName="antopsworkstestbucket"/>
<upload-to-s3 bucketName="antopsworkstestbucket" keyPrefix="test/">
<fileset file="test.war" />
</upload-to-s3>
<create-opsworks-stack name="AntTaskTestStack" region="us-east-1" defaultInstanceProfileArn="${instanceProfileArn}" serviceRoleArn="${serviceRoleArn}" />
<create-opsworks-layer name="AntTaskTestLayer" type="java-app" shortname="antstack" propertyNameForLayerId="layerId1"/>
<create-opsworks-instance instanceType="m1.small" availabilityZone="us-east-1b" propertyNameForInstanceId="instanceId1"/>
<let-opsworks-instance-reach-state instanceId="${instanceId}" state="online"/>
<create-opsworks-app name="AntTaskTestApp" type="java" repoType="s3" repoUrl="https://s3.amazonaws.com/antopsworkstestbucket/test/test.war" useAwsKeysForRepo="true"/>
<deploy-opsworks-app propertyNameForDeploymentId="deploymentId1">
<Command name="deploy" />
<InstanceId value="${instanceId1}"/>
</deploy-opsworks-app>
<assert-successful-opsworks-deployment deploymentId="${deploymentId1}" />
<teardown-opsworks-tests bucketName="antopsworkstestbucket" />
</target>

<target name="test.opsworks.incremental" depends="awstasks.setup">
<setup-opsworks-tests instanceProfile="aws-opsworks-ec2-role" serviceRole="aws-opsworks-service-role"/>
<create-s3-bucket bucketName="antopsworkstestbucket"/>
<upload-to-s3 bucketName="antopsworkstestbucket" keyPrefix="test/">
<fileset file="test.war" />
</upload-to-s3>
<create-opsworks-stack name="AntTaskTestStack" region="us-east-1" defaultInstanceProfileArn="${instanceProfileArn}" serviceRoleArn="${serviceRoleArn}" />
<create-opsworks-layer name="AntTaskTestLayer" type="java-app" shortname="antlayer" propertyNameForLayerId="layerId1"/>
<create-opsworks-instance instanceType="m1.small" availabilityZone="us-east-1b" propertyNameForInstanceId="instanceId1"/>
<create-opsworks-instance instanceType="m1.small" availabilityZone="us-east-1b" propertyNameForInstanceId="instanceId2"/>
<create-opsworks-instance instanceType="m1.small" availabilityZone="us-east-1b" propertyNameForInstanceId="instanceId3"/>
<create-opsworks-instance instanceType="m1.small" availabilityZone="us-east-1b" propertyNameForInstanceId="instanceId4"/>
<create-opsworks-instance instanceType="m1.small" availabilityZone="us-east-1b" propertyNameForInstanceId="instanceId5"/>

<target name="test.all" depends="test.s3,test.beanstalk" />
<let-opsworks-instance-reach-state instanceId="${instanceId1}" state="online"/>
<let-opsworks-instance-reach-state instanceId="${instanceId2}" state="online"/>
<let-opsworks-instance-reach-state instanceId="${instanceId3}" state="online"/>
<let-opsworks-instance-reach-state instanceId="${instanceId4}" state="online"/>
<let-opsworks-instance-reach-state instanceId="${instanceId5}" state="online"/>

<create-opsworks-app name="AntTaskTestApp" type="java" repoType="s3" repoUrl="https://s3.amazonaws.com/antopsworkstestbucket/test/test.war" useAwsKeysForRepo="true"/>

<incremental-opsworks-deployment>
<DeploymentGroup>
<deploy-opsworks-app propertyNameForDeploymentId="deploymentId1">
<Command name="deploy" />
<InstanceId value="${instanceId1}"/>
</deploy-opsworks-app>
<deploy-opsworks-app propertyNameForDeploymentId="deploymentId2">
<Command name="deploy" />
<InstanceId value="${instanceId2}"/>
</deploy-opsworks-app>
</DeploymentGroup>
<DeploymentGroup>
<deploy-opsworks-app propertyNameForDeploymentId="deploymentId3">
<Command name="deploy" />
<InstanceId value="${instanceId3}"/>
</deploy-opsworks-app>
<deploy-opsworks-app propertyNameForDeploymentId="deploymentId4">
<Command name="deploy" />
<InstanceId value="${instanceId4}"/>
</deploy-opsworks-app>
</DeploymentGroup>
<DeploymentGroup>
<deploy-opsworks-app propertyNameForDeploymentId="deploymentId5">
<Command name="deploy" />
<InstanceId value="${instanceId5}"/>
</deploy-opsworks-app>
</DeploymentGroup>
</incremental-opsworks-deployment>

<assert-successful-opsworks-deployment deploymentId="${deploymentId1}"/>
<assert-successful-opsworks-deployment deploymentId="${deploymentId2}"/>
<assert-successful-opsworks-deployment deploymentId="${deploymentId3}"/>
<assert-successful-opsworks-deployment deploymentId="${deploymentId4}"/>
<assert-successful-opsworks-deployment deploymentId="${deploymentId5}"/>
<teardown-opsworks-tests bucketName="antopsworkstestbucket" />
</target>
<target name="test.all" depends="test.s3,test.beanstalk, test.opsworks" />
</project>
4 changes: 2 additions & 2 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk</artifactId>
<version>1.8.4</version>
<version>1.8.8</version>
</dependency>
<dependency>
<groupId>org.apache.ant</groupId>
Expand Down Expand Up @@ -103,7 +103,7 @@
<configuration>
<tasks>
<property name="version" value="${version}" />
<ant antfile="integration-tests.xml" />
<ant antfile="integration-tests.xml" target="test.all" />
</tasks>
</configuration>
<goals>
Expand Down
31 changes: 20 additions & 11 deletions src/main/resources/taskdefs.xml
Original file line number Diff line number Diff line change
@@ -1,15 +1,24 @@

<antlib>

<taskdef name="create-s3-bucket" classname="com.amazonaws.ant.s3.CreateS3BucketTask" />
<taskdef name="upload-to-s3" classname="com.amazonaws.ant.s3.UploadFileSetToS3Task" />
<taskdef name="download-from-s3" classname="com.amazonaws.ant.s3.DownloadFileFromS3Task" />
<taskdef name="create-beanstalk-app"
classname="com.amazonaws.ant.elasticbeanstalk.CreateBeanstalkApplicationTask" />
<taskdef name="create-beanstalk-env"
classname="com.amazonaws.ant.elasticbeanstalk.CreateBeanstalkEnvironmentTask" />
<taskdef name="deploy-beanstalk-app"
classname="com.amazonaws.ant.elasticbeanstalk.DeployAppToBeanstalkTask" />
<taskdef name="terminate-beanstalk-env"
classname="com.amazonaws.ant.elasticbeanstalk.TerminateBeanstalkEnvironmentTask" />
<taskdef name="create-s3-bucket" classname="com.amazonaws.ant.s3.CreateS3BucketTask" />
<taskdef name="upload-to-s3" classname="com.amazonaws.ant.s3.UploadFileSetToS3Task" />
<taskdef name="download-from-s3" classname="com.amazonaws.ant.s3.DownloadFileFromS3Task" />

<taskdef name="create-beanstalk-app"
classname="com.amazonaws.ant.elasticbeanstalk.CreateBeanstalkApplicationTask" />
<taskdef name="create-beanstalk-env"
classname="com.amazonaws.ant.elasticbeanstalk.CreateBeanstalkEnvironmentTask" />
<taskdef name="deploy-beanstalk-app"
classname="com.amazonaws.ant.elasticbeanstalk.DeployAppToBeanstalkTask" />
<taskdef name="terminate-beanstalk-env"
classname="com.amazonaws.ant.elasticbeanstalk.TerminateBeanstalkEnvironmentTask" />

<taskdef name="create-opsworks-app" classname="com.amazonaws.ant.opsworks.CreateAppTask" />
<taskdef name="create-opsworks-instance" classname="com.amazonaws.ant.opsworks.CreateInstanceTask" />
<taskdef name="create-opsworks-layer" classname="com.amazonaws.ant.opsworks.CreateLayerTask" />
<taskdef name="create-opsworks-stack" classname="com.amazonaws.ant.opsworks.CreateStackTask" />
<taskdef name="deploy-opsworks-app" classname="com.amazonaws.ant.opsworks.DeployAppTask" />
<taskdef name="incremental-opsworks-deployment" classname="com.amazonaws.ant.opsworks.IncrementalDeploymentTask" />
<taskdef name="update-opsworks-app" classname="com.amazonaws.ant.opsworks.UpdateAppTask" />
</antlib>
29 changes: 18 additions & 11 deletions src/main/resources/test-taskdefs.xml
Original file line number Diff line number Diff line change
@@ -1,13 +1,20 @@
<antlib>
<taskdef name="setup-s3" classname="com.amazonaws.ant.s3.SetUpS3TestsTask" />
<taskdef name="assert-file-equals" classname="com.amazonaws.ant.AssertFileEqualsTask" />
<taskdef name="cleanup-s3" classname="com.amazonaws.ant.s3.CleanUpS3TestsTask" />
<taskdef name="setup-beanstalk"
classname="com.amazonaws.ant.elasticbeanstalk.SetUpBeanstalkTestsTask" />
<taskdef name="delete-beanstalk-app"
classname="com.amazonaws.ant.elasticbeanstalk.DeleteBeanstalkApplicationTask" />
<taskdef name="test-beanstalk-deployment"
classname="com.amazonaws.ant.elasticbeanstalk.TestSuccessfulBeanstalkDeploymentTask" />
<taskdef name="cleanup-beanstalk"
classname="com.amazonaws.ant.elasticbeanstalk.CleanUpBeanstalkTestsTask" />
<taskdef name="assert-file-equals" classname="com.amazonaws.ant.AssertFileEqualsTask" />

<taskdef name="setup-s3" classname="com.amazonaws.ant.s3.SetUpS3TestsTask" />
<taskdef name="cleanup-s3" classname="com.amazonaws.ant.s3.CleanUpS3TestsTask" />

<taskdef name="setup-beanstalk"
classname="com.amazonaws.ant.elasticbeanstalk.SetUpBeanstalkTestsTask" />
<taskdef name="delete-beanstalk-app"
classname="com.amazonaws.ant.elasticbeanstalk.DeleteBeanstalkApplicationTask" />
<taskdef name="test-beanstalk-deployment"
classname="com.amazonaws.ant.elasticbeanstalk.TestSuccessfulBeanstalkDeploymentTask" />
<taskdef name="cleanup-beanstalk"
classname="com.amazonaws.ant.elasticbeanstalk.CleanUpBeanstalkTestsTask" />

<taskdef name="setup-opsworks-tests" classname="com.amazonaws.ant.opsworks.SetUpOpsWorksTestsTask" />
<taskdef name="assert-successful-opsworks-deployment" classname="com.amazonaws.ant.opsworks.AssertSuccessfulDeploymentTask" />
<taskdef name="let-opsworks-instance-reach-state" classname="com.amazonaws.ant.opsworks.WaitForInstanceToReachStateTask"/>
<taskdef name="teardown-opsworks-tests" classname="com.amazonaws.ant.opsworks.TearDownOpsWorksTestsTask"/>
</antlib>
33 changes: 33 additions & 0 deletions src/test/java/com/amazonaws/ant/AWSTestUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,9 @@
import com.amazonaws.services.elasticbeanstalk.model.EnvironmentDescription;
import com.amazonaws.services.elasticbeanstalk.model.EnvironmentHealth;
import com.amazonaws.services.elasticbeanstalk.model.EnvironmentStatus;
import com.amazonaws.services.opsworks.AWSOpsWorksClient;
import com.amazonaws.services.opsworks.model.DescribeInstancesRequest;
import com.amazonaws.services.opsworks.model.Instance;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.model.ObjectListing;
import com.amazonaws.services.s3.model.S3ObjectSummary;
Expand Down Expand Up @@ -111,4 +114,34 @@ public static void waitForEnvironmentToTransitionToStateAndHealth(
return;
}
}

public static void waitForOpsworksInstanceToReachState(
AWSOpsWorksClient client, String instanceId, String state)
throws InterruptedException {

System.out.println("Waiting for instance " + instanceId
+ " to transition to " + state);
int count = 0;
while (true) {
Thread.sleep(1000 * 30);
if (count++ > 100) {
throw new RuntimeException("Never reached " + state);
}
Instance instance = client
.describeInstances(
new DescribeInstancesRequest()
.withInstanceIds(instanceId))
.getInstances().get(0);
String status = instance.getStatus();
System.out.println(status);
if (status.contains("failed")) {
throw new RuntimeException("instance failed to launch");
}
if (!status.equalsIgnoreCase(state)) {
continue;
}
return;
}

}
}

0 comments on commit 70fe255

Please sign in to comment.