From 9823ade4cb853ca808037da1c7b207bc363aa7a3 Mon Sep 17 00:00:00 2001 From: Pierre Delagrave Date: Fri, 21 Jun 2019 09:48:06 -0400 Subject: [PATCH] feat(cf): "Run Job" stage support for CloudFoundry (#2987) --- .../providers/cf/CloudFoundryJobRunner.java | 79 +++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 orca-clouddriver/src/main/groovy/com/netflix/spinnaker/orca/clouddriver/tasks/providers/cf/CloudFoundryJobRunner.java diff --git a/orca-clouddriver/src/main/groovy/com/netflix/spinnaker/orca/clouddriver/tasks/providers/cf/CloudFoundryJobRunner.java b/orca-clouddriver/src/main/groovy/com/netflix/spinnaker/orca/clouddriver/tasks/providers/cf/CloudFoundryJobRunner.java new file mode 100644 index 0000000000..959f5a3fc5 --- /dev/null +++ b/orca-clouddriver/src/main/groovy/com/netflix/spinnaker/orca/clouddriver/tasks/providers/cf/CloudFoundryJobRunner.java @@ -0,0 +1,79 @@ +/* + * Copyright 2019 Pivotal, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.netflix.spinnaker.orca.clouddriver.tasks.providers.cf; + +import static com.google.common.base.Preconditions.checkArgument; +import static com.google.common.base.Preconditions.checkState; + +import com.netflix.spinnaker.orca.clouddriver.pipeline.servergroup.support.TargetServerGroup; +import com.netflix.spinnaker.orca.clouddriver.pipeline.servergroup.support.TargetServerGroupResolver; +import com.netflix.spinnaker.orca.clouddriver.tasks.job.JobRunner; +import com.netflix.spinnaker.orca.pipeline.model.Stage; +import groovy.util.logging.Slf4j; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import lombok.Data; +import org.springframework.stereotype.Component; + +@Slf4j +@Component +@Data +public class CloudFoundryJobRunner implements JobRunner { + private final boolean katoResultExpected = false; + private final String cloudProvider = "cloudfoundry"; + private final TargetServerGroupResolver resolver; + + @Override + public List getOperations(Stage stage) { + Map stageContext = stage.getContext(); + String targetServerGroup = (String) stageContext.get("target"); + String accountName = (String) stageContext.get("credentials"); + String region = (String) stageContext.get("region"); + + List resolvedServerGroups = resolver.resolve(stage); + checkArgument( + resolvedServerGroups.size() > 0, + "Could not find a target server group '%s' for account '%s' in region '%s'", + targetServerGroup, + accountName, + region); + checkState( + resolvedServerGroups.size() == 1, + "Found multiple target server groups '%s' for account '%s' in region '%s'", + targetServerGroup, + accountName, + region); + + TargetServerGroup serverGroup = resolvedServerGroups.get(0); + + Map operationContext = new HashMap<>(); + operationContext.put("region", region); + operationContext.put("credentials", accountName); + operationContext.put("jobName", (String) stageContext.get("jobName")); + operationContext.put("serverGroupName", serverGroup.getName()); + operationContext.put("command", (String) stageContext.get("command")); + + return Collections.singletonList(Collections.singletonMap(OPERATION, operationContext)); + } + + @Override + public Map getAdditionalOutputs(Stage stage, List operations) { + return Collections.emptyMap(); + } +}