All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.openshift.internal.restclient.capability.resources.OpenShiftBinaryPortForwarding Maven / Gradle / Ivy

/*******************************************************************************
 * 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. - initial API and implementation
 ******************************************************************************/
package com.openshift.internal.restclient.capability.resources;

import org.apache.commons.lang.StringUtils;

import com.openshift.restclient.IClient;
import com.openshift.restclient.capability.resources.IPortForwardable;
import com.openshift.restclient.model.IPod;

/**
 * Port forwarding implementation that wraps the OpenShift binary
 * 
 * @author jeff.cantrill
 *
 */
public class OpenShiftBinaryPortForwarding extends AbstractOpenShiftBinaryCapability implements IPortForwardable {
	
	
	private IPod pod;
	private PortPair[] pairs = new PortPair[] {};

	public OpenShiftBinaryPortForwarding(IPod pod, IClient client) {
		super(client);
		this.pod = pod;
	}
	
	
	@Override
	protected void cleanup() {
		this.pairs = new PortPair[] {};
	}

	@Override
	protected boolean validate() {
		return pairs.length != 0;
	}


	@Override
	public boolean isForwarding() {
		return getProcess() != null && getProcess().isAlive();
	}

	@Override
	public boolean isSupported() {
		return true;
	}

	@Override
	public String getName() {
		return OpenShiftBinaryPortForwarding.class.getSimpleName();
	}

	@Override
	public PortPair[] getPortPairs() {
		return pairs;
	}

	@Override
	public synchronized void forwardPorts(PortPair... ports) {
		this.pairs = ports;
		start();
	}
	
	@Override
	protected String[] buildArgs(String location) {
		StringBuilder args = new StringBuilder(location);
		args.append(" port-forward ")
			.append("--insecure-skip-tls-verify=true ")
			.append("--server=").append(getClient().getBaseURL()).append(" ");
			addToken(args)
			.append("-n ").append(pod.getNamespace()).append(" ")
			.append("-p ").append(pod.getName()).append(" ");
		for (PortPair pair : pairs) {
			args.append(pair.getLocalPort()).append(":").append(pair.getRemotePort()).append(" ");
		}
		return StringUtils.split(args.toString(), " ");
	}
	
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy