From ab071eb615bf0525cfa930f5b2fdbbeab48c9ad8 Mon Sep 17 00:00:00 2001 From: Yuriy Belenitsky Date: Thu, 23 Jul 2020 09:34:39 -0400 Subject: [PATCH] Make aws region configurable --- pom.xml | 2 +- .../com/eightydegreeswest/bfmgr/BfArgs.java | 1 + .../bfmgr/service/impl/BfMgrCtrlAws.java | 31 +++++++------------ .../bfmgr/service/impl/BfMgrCtrlLocal.java | 17 +++------- src/main/resources/application.properties | 4 +-- src/main/resources/aws.json | 2 +- src/main/resources/bfmgr-aws.json | 3 +- src/main/resources/docker/worker/DOCKERFILE | 3 +- src/main/resources/docker/worker/build-worker | 4 +-- 9 files changed, 25 insertions(+), 42 deletions(-) diff --git a/pom.xml b/pom.xml index 0eec8c0..3bdc41f 100644 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,7 @@ com.eightydegreeswest bfmgr - 1.0.8 + 1.0.9 bfmgr Buildfarm Manager diff --git a/src/main/java/com/eightydegreeswest/bfmgr/BfArgs.java b/src/main/java/com/eightydegreeswest/bfmgr/BfArgs.java index 7e86539..6c8f59c 100644 --- a/src/main/java/com/eightydegreeswest/bfmgr/BfArgs.java +++ b/src/main/java/com/eightydegreeswest/bfmgr/BfArgs.java @@ -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"; } diff --git a/src/main/java/com/eightydegreeswest/bfmgr/service/impl/BfMgrCtrlAws.java b/src/main/java/com/eightydegreeswest/bfmgr/service/impl/BfMgrCtrlAws.java index b5f24f5..36b18e0 100644 --- a/src/main/java/com/eightydegreeswest/bfmgr/service/impl/BfMgrCtrlAws.java +++ b/src/main/java/com/eightydegreeswest/bfmgr/service/impl/BfMgrCtrlAws.java @@ -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; @@ -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; @@ -85,17 +77,12 @@ public class BfMgrCtrlAws implements BfMgrCtrl { @Autowired private Map 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 getBuildfarmClusters() { List 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(); @@ -112,6 +99,7 @@ public List 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()); @@ -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); } @@ -150,17 +139,20 @@ public CreateClusterRequest getDefaultCreateClusterRequest() { @Override public List getSubnets() { + AmazonEC2 awsEc2Client = AmazonEC2ClientBuilder.standard().withRegion(bfArgs.get(BfArgs.REGION)).build(); return awsEc2Client.describeSubnets().getSubnets(); } @Override public List getSecurityGroups() { + AmazonEC2 awsEc2Client = AmazonEC2ClientBuilder.standard().withRegion(bfArgs.get(BfArgs.REGION)).build(); return awsEc2Client.describeSecurityGroups().getSecurityGroups(); } @Override public List getKeyNames() { try { + AmazonEC2 awsEc2Client = AmazonEC2ClientBuilder.standard().withRegion(bfArgs.get(BfArgs.REGION)).build(); return awsEc2Client.describeKeyPairs().getKeyPairs(); } catch (Exception e) { return new ArrayList<>(); @@ -169,6 +161,7 @@ public List 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"; @@ -185,6 +178,7 @@ private List getWorkers(String clusterName) { private List getAwsInstances(String clusterName, String instanceType) { List 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()) { @@ -240,7 +234,7 @@ private Collection 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; } @@ -263,11 +257,8 @@ private Collection 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(); } diff --git a/src/main/java/com/eightydegreeswest/bfmgr/service/impl/BfMgrCtrlLocal.java b/src/main/java/com/eightydegreeswest/bfmgr/service/impl/BfMgrCtrlLocal.java index 18a65e6..39f3d85 100644 --- a/src/main/java/com/eightydegreeswest/bfmgr/service/impl/BfMgrCtrlLocal.java +++ b/src/main/java/com/eightydegreeswest/bfmgr/service/impl/BfMgrCtrlLocal.java @@ -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 getBuildfarmClusters() throws UnknownHostException { @@ -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 registryIds = new ArrayList<>(); registryIds.add(imageRepo.substring(0, 12)); @@ -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(); - } } diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 27a98a3..fae386a 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -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 diff --git a/src/main/resources/aws.json b/src/main/resources/aws.json index 2a8bc9c..fcbcf48 100644 --- a/src/main/resources/aws.json +++ b/src/main/resources/aws.json @@ -70,7 +70,7 @@ }, "Region":{ "Type":"String", - "Default" : "us-east-1", + "Default" : { "Ref" : "AWS::Region" }, "Description":"Region." }, "KeyName": { diff --git a/src/main/resources/bfmgr-aws.json b/src/main/resources/bfmgr-aws.json index 9a726dd..a94f7d4 100644 --- a/src/main/resources/bfmgr-aws.json +++ b/src/main/resources/bfmgr-aws.json @@ -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" ] ] diff --git a/src/main/resources/docker/worker/DOCKERFILE b/src/main/resources/docker/worker/DOCKERFILE index 57a6c4c..1bc0d8f 100644 --- a/src/main/resources/docker/worker/DOCKERFILE +++ b/src/main/resources/docker/worker/DOCKERFILE @@ -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 diff --git a/src/main/resources/docker/worker/build-worker b/src/main/resources/docker/worker/build-worker index 7aeb06f..d8b42b4 100755 --- a/src/main/resources/docker/worker/build-worker +++ b/src/main/resources/docker/worker/build-worker @@ -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 \ No newline at end of file +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