/*******************************************************************************
* Copyright (c) 2015 Red Hat, Inc. Distributed under license by Red Hat, Inc.
* All rights reserved. This program is made available under the terms of the
* Eclipse Public License v1.0 which accompanies this distribution, and is
* available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributors: Red Hat, Inc.
******************************************************************************/
package com.openshift.internal.restclient.model;
import java.util.Map;
import org.jboss.dmr.ModelNode;
import com.openshift.internal.restclient.capability.CapabilityInitializer;
import com.openshift.internal.restclient.model.build.BuildStatus;
import com.openshift.internal.restclient.model.build.CustomBuildStrategy;
import com.openshift.internal.restclient.model.build.DockerBuildStrategy;
import com.openshift.internal.restclient.model.build.GitBuildSource;
import com.openshift.internal.restclient.model.build.JenkinsPipelineStrategy;
import com.openshift.internal.restclient.model.build.SourceBuildStrategy;
import com.openshift.restclient.IClient;
import com.openshift.restclient.images.DockerImageURI;
import com.openshift.restclient.model.IBuild;
import com.openshift.restclient.model.build.BuildSourceType;
import com.openshift.restclient.model.build.BuildStrategyType;
import com.openshift.restclient.model.build.IBuildSource;
import com.openshift.restclient.model.build.IBuildStatus;
import com.openshift.restclient.model.build.IBuildStrategy;
/**
* @author Jeff Cantrill
*/
public class Build extends KubernetesResource implements IBuild{
private static final String BUILD_MESSAGE = "status.message";
private static final String BUILD_PODNAME = "podName";
private static final String BUILD_STATUS = "status.phase";
private static final String BUILD_STATUS_CANCELLED = "status.cancelled";
private static final String OUTPUT_KIND = "spec.output.to.kind";
private static final String OUTPUT_NAME = "spec.output.to.name";
private static final String COMPLETE = "Complete";
private static final String FAILED = "Failed";
private static final String CANCELLED = "Cancelled";
private Map<String, String[]> propertyKeys;
public Build(ModelNode node, IClient client, Map<String, String []> propertyKeys) {
super(node, client, propertyKeys);
this.propertyKeys = propertyKeys;
CapabilityInitializer.initializeCapabilities(getModifiableCapabilities(), this, client);
}
@Override
public String getStatus() {
return asString(BUILD_STATUS);
}
@Override
public String getMessage() {
return asString(BUILD_MESSAGE);
}
@Override
public String getPodName() {
return asString(BUILD_PODNAME);
}
@Override
public boolean cancel() {
String currentStatus = getStatus();
if (!currentStatus.equalsIgnoreCase(COMPLETE) && !currentStatus.equalsIgnoreCase(FAILED) && !currentStatus.equalsIgnoreCase(CANCELLED)) {
set(BUILD_STATUS_CANCELLED, true);
return true;
}
return false;
}
@Override
public DockerImageURI getOutputTo() {
return new DockerImageURI(asString(OUTPUT_NAME));
}
@Override
public String getOutputKind() {
return asString(OUTPUT_KIND);
}
@SuppressWarnings("unchecked")
@Override
public <T extends IBuildSource> T getBuildSource() {
switch(asString("spec.source.type")){
case BuildSourceType.GIT:
return (T) new GitBuildSource(asString("spec.source.git.uri"), asString("spec.source.git.ref"), asString("spec.source.git.contextDir"));
default:
}
return null;
}
@SuppressWarnings("unchecked")
public <T extends IBuildStrategy> T getBuildStrategy() {
switch(asString("spec.strategy.type")){
case BuildStrategyType.CUSTOM:
return (T) new CustomBuildStrategy(
asString("spec.strategy.customStrategy.image"),
asBoolean("spec.strategy.customStrategy.exposeDockerSocket"),
getEnvMap("spec.strategy.customStrategy.env")
);
case BuildStrategyType.SOURCE:
return (T) new SourceBuildStrategy(get("spec.strategy"), getPropertyKeys());
case BuildStrategyType.DOCKER:
return (T) new DockerBuildStrategy(
asString("spec.strategy.dockerStrategy.contextDir"),
asBoolean("spec.strategy.dockerStrategy.noCache"),
asString("spec.strategy.dockerStrategy.baseImage")
);
case BuildStrategyType.JENKINS_PIPELINE:
return (T) new JenkinsPipelineStrategy(get("spec.strategy"), getPropertyKeys());
default:
}
return null;
}
@Override
public String getPushSecret() {
return asString("spec.output.pushSecret.name");
}
@Override
public IBuildStatus getBuildStatus() {
return new BuildStatus(get("status"), this.propertyKeys);
}
}