Skip to content

Commit

Permalink
Make aws region configurable
Browse files Browse the repository at this point in the history
  • Loading branch information
80degreeswest committed Jul 23, 2020
1 parent 4340ecf commit ab071eb
Show file tree
Hide file tree
Showing 9 changed files with 25 additions and 42 deletions.
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
</parent>
<groupId>com.eightydegreeswest</groupId>
<artifactId>bfmgr</artifactId>
<version>1.0.8</version>
<version>1.0.9</version>
<name>bfmgr</name>
<description>Buildfarm Manager</description>

Expand Down
1 change: 1 addition & 0 deletions src/main/java/com/eightydegreeswest/bfmgr/BfArgs.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,5 @@ public class BfArgs {
public static String ASSET = "--asset";
public static String TAGS = "--tags";
public static String DEPLOY = "--deploy";
public static String REGION = "--region";
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
package com.eightydegreeswest.bfmgr.service.impl;

import com.amazonaws.regions.Regions;
import com.amazonaws.services.autoscaling.AmazonAutoScaling;
import com.amazonaws.services.autoscaling.AmazonAutoScalingClientBuilder;
import com.amazonaws.services.cloudformation.AmazonCloudFormation;
import com.amazonaws.services.cloudformation.AmazonCloudFormationAsyncClientBuilder;
import com.amazonaws.services.cloudformation.model.CreateStackRequest;
Expand Down Expand Up @@ -50,11 +47,6 @@
public class BfMgrCtrlAws implements BfMgrCtrl {
private static final Logger logger = LoggerFactory.getLogger(BfMgrCtrlAws.class);

private static AmazonCloudFormation awsCloudFormationClient;
private static AmazonEC2 awsEc2Client;
private static AmazonElasticLoadBalancing awsElbClient;
private static AmazonAutoScaling awsAsgClient;

@Value("${container.repo.server}")
private String serverRepo;

Expand Down Expand Up @@ -85,17 +77,12 @@ public class BfMgrCtrlAws implements BfMgrCtrl {
@Autowired
private Map<String, String> bfArgs;

public BfMgrCtrlAws() {
String region = getRegion();
awsCloudFormationClient = AmazonCloudFormationAsyncClientBuilder.standard().withRegion(region).build();
awsEc2Client = AmazonEC2ClientBuilder.standard().withRegion(region).build();
awsElbClient = AmazonElasticLoadBalancingClientBuilder.standard().withRegion(region).build();
awsAsgClient = AmazonAutoScalingClientBuilder.standard().withRegion(region).build();
}
public BfMgrCtrlAws() { }

@Override
public List<BuildfarmCluster> getBuildfarmClusters() {
List<BuildfarmCluster> buildfarmClusters = new ArrayList<>();
AmazonCloudFormation awsCloudFormationClient = AmazonCloudFormationAsyncClientBuilder.standard().withRegion(bfArgs.get(BfArgs.REGION)).build();
for (StackSummary stack : awsCloudFormationClient.listStacks().getStackSummaries()) {
if (stack.getTemplateDescription().equalsIgnoreCase("Buildfarm deployment using bfmgr") && !stack.getStackStatus().contains("DELETE")) {
BuildfarmCluster buildfarmCluster = new BuildfarmCluster();
Expand All @@ -112,6 +99,7 @@ public List<BuildfarmCluster> getBuildfarmClusters() {
@Override
@Async
public void createCluster(CreateClusterRequest createClusterRequest) {
AmazonCloudFormation awsCloudFormationClient = AmazonCloudFormationAsyncClientBuilder.standard().withRegion(bfArgs.get(BfArgs.REGION)).build();
CreateStackRequest createRequest = new CreateStackRequest();
createRequest.setStackName(createClusterRequest.getClusterName());
createRequest.setTemplateBody(loadCloudFormationJson());
Expand All @@ -123,6 +111,7 @@ public void createCluster(CreateClusterRequest createClusterRequest) {
@Override
@Async
public void terminateCluster(String clusterName) {
AmazonCloudFormation awsCloudFormationClient = AmazonCloudFormationAsyncClientBuilder.standard().withRegion(bfArgs.get(BfArgs.REGION)).build();
DeleteStackRequest deleteStackRequest = new DeleteStackRequest().withStackName(clusterName);
awsCloudFormationClient.deleteStack(deleteStackRequest);
}
Expand Down Expand Up @@ -150,17 +139,20 @@ public CreateClusterRequest getDefaultCreateClusterRequest() {

@Override
public List<Subnet> getSubnets() {
AmazonEC2 awsEc2Client = AmazonEC2ClientBuilder.standard().withRegion(bfArgs.get(BfArgs.REGION)).build();
return awsEc2Client.describeSubnets().getSubnets();
}

@Override
public List<SecurityGroup> getSecurityGroups() {
AmazonEC2 awsEc2Client = AmazonEC2ClientBuilder.standard().withRegion(bfArgs.get(BfArgs.REGION)).build();
return awsEc2Client.describeSecurityGroups().getSecurityGroups();
}

@Override
public List<KeyPairInfo> getKeyNames() {
try {
AmazonEC2 awsEc2Client = AmazonEC2ClientBuilder.standard().withRegion(bfArgs.get(BfArgs.REGION)).build();
return awsEc2Client.describeKeyPairs().getKeyPairs();
} catch (Exception e) {
return new ArrayList<>();
Expand All @@ -169,6 +161,7 @@ public List<KeyPairInfo> getKeyNames() {

private String getLoadBalancerEndpoint(String clusterName) {
try {
AmazonElasticLoadBalancing awsElbClient = AmazonElasticLoadBalancingClientBuilder.standard().withRegion(bfArgs.get(BfArgs.REGION)).build();
return awsElbClient.describeLoadBalancers(new DescribeLoadBalancersRequest().withNames(clusterName)).getLoadBalancers().get(0).getDNSName();
} catch (Exception e) {
return "N/A";
Expand All @@ -185,6 +178,7 @@ private List<BfInstance> getWorkers(String clusterName) {

private List<Instance> getAwsInstances(String clusterName, String instanceType) {
List<Instance> instances = new ArrayList<>();
AmazonEC2 awsEc2Client = AmazonEC2ClientBuilder.standard().withRegion(bfArgs.get(BfArgs.REGION)).build();
DescribeInstancesResult instancesResult = awsEc2Client.describeInstances(
new DescribeInstancesRequest().withFilters(new Filter().withName("tag-value").withValues(clusterName), new Filter().withName("tag-value").withValues(instanceType)));
for (Reservation r : instancesResult.getReservations()) {
Expand Down Expand Up @@ -240,7 +234,7 @@ private Collection<Parameter> getCloudFormationParameters(CreateClusterRequest c
parameters.add(getParameter("RequiredTagName", getAssetTag()));
parameters.add(getParameter("ElbType", createClusterRequest.getElbType()));
parameters.add(getParameter("KeyName", createClusterRequest.getKeyName()));
parameters.add(getParameter("Region", getRegion()));
parameters.add(getParameter("Region", bfArgs.get(BfArgs.REGION)));
return parameters;
}

Expand All @@ -263,11 +257,8 @@ private Collection<Tag> getTags(String clusterName) {
return tags;
}

private String getRegion() {
return Regions.US_EAST_1.getName();
}

private String getVpcId(String subnetId) {
AmazonEC2 awsEc2Client = AmazonEC2ClientBuilder.standard().withRegion(bfArgs.get(BfArgs.REGION)).build();
return awsEc2Client.describeSubnets(new DescribeSubnetsRequest().withSubnetIds(subnetId)).getSubnets().get(0).getVpcId();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -96,14 +96,7 @@ public class BfMgrCtrlLocal implements BfMgrCtrl {
@Value("${port.worker}")
private int workerPortVal;

public BfMgrCtrlLocal() {
try {
String region = getRegion();
ecrClient = AmazonECRClientBuilder.standard().withRegion(region).build();
} catch (Exception e) {
ecrClient = null;
}
}
public BfMgrCtrlLocal() { }

@Override
public List<BuildfarmCluster> getBuildfarmClusters() throws UnknownHostException {
Expand Down Expand Up @@ -268,7 +261,9 @@ private void pullImage(String imageRepo, String tag) {
}

private void pullEcrImage(String imageRepo, String tag) throws InterruptedException {
logger.info("Pulling image {}:{} from ECR", imageRepo, tag);
String region = imageRepo.split(".")[3];
logger.info("Pulling image {}:{} from ECR in region {}", imageRepo, tag, region);
ecrClient = AmazonECRClientBuilder.standard().withRegion(region).build();
GetAuthorizationTokenRequest getAuthTokenRequest = new GetAuthorizationTokenRequest();
List<String> registryIds = new ArrayList<>();
registryIds.add(imageRepo.substring(0, 12));
Expand All @@ -292,8 +287,4 @@ private void pullEcrImage(String imageRepo, String tag) throws InterruptedExcept
.start()
.awaitCompletion(5, TimeUnit.MINUTES);
}

private String getRegion() {
return Regions.US_EAST_1.getName();
}
}
4 changes: 2 additions & 2 deletions src/main/resources/application.properties
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ container.name.server=buildfarm-server
container.name.worker=buildfarm-worker
container.name.redis=buildfarm-redis

container.repo.server=80dw/buildfarm-server
container.repo.worker=80dw/buildfarm-worker
container.repo.server=bazelbuild/buildfarm-server
container.repo.worker=bazelbuild/buildfarm-worker
container.repo.redis=redis

config.path=/tmp/buildfarm
Expand Down
2 changes: 1 addition & 1 deletion src/main/resources/aws.json
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@
},
"Region":{
"Type":"String",
"Default" : "us-east-1",
"Default" : { "Ref" : "AWS::Region" },
"Description":"Region."
},
"KeyName": {
Expand Down
3 changes: 2 additions & 1 deletion src/main/resources/bfmgr-aws.json
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,8 @@
"rel=", { "Ref": "ReleaseNumber" }, "\n",
"wget -N https://github.com/80degreeswest/bfmgr/releases/download/$rel/bfmgr-$rel.jar\n",
"mkdir /var/log/bfmgr && chmod 0777 /var/log/bfmgr\n",
"java -jar bfmgr-$rel.jar &\n",
"REGION=curl http://169.254.169.254/latest/dynamic/instance-identity/document | grep region|awk -F\\\" '{print $4}'\n",
"java -jar bfmgr-$rel.jar --region $REGION &\n",
"disown\n"
]
]
Expand Down
3 changes: 1 addition & 2 deletions src/main/resources/docker/worker/DOCKERFILE
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
FROM ubuntu:bionic
MAINTAINER 80degreeswest, https://github.com/80degreeswest
RUN apt-get update && apt-get install -y \
default-jre \
default-jdk \
gcc
build-essential
4 changes: 2 additions & 2 deletions src/main/resources/docker/worker/build-worker
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#!/bin/bash

docker build -t 80dw/ubuntu-java:bionic-java11-gcc -f src/main/resources/docker/worker/DOCKERFILE .
docker push 80dw/ubuntu-java:bionic-java11-gcc
docker build -t bazelbuild/buildfarm-worker-base:bionic-java11-gcc -f src/main/resources/docker/worker/DOCKERFILE .
docker push bazelbuild/buildfarm-worker-base:bionic-java11-gcc

0 comments on commit ab071eb

Please sign in to comment.