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

hudson.slaves.Cloud Maven / Gradle / Ivy

The newest version!
/*******************************************************************************
 *
 * Copyright (c) 2004-2009 Oracle Corporation.
 *
 * All rights reserved. This program and the accompanying materials
 * are 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:
 * 
 *    Kohsuke Kawaguchi
 *
 *
 *******************************************************************************/ 

package hudson.slaves;

import hudson.ExtensionPoint;
import hudson.Extension;
import hudson.DescriptorExtensionList;
import hudson.slaves.NodeProvisioner.PlannedNode;
import hudson.model.Describable;
import hudson.model.Hudson;
import hudson.model.Node;
import hudson.model.AbstractModelObject;
import hudson.model.Label;
import hudson.model.Descriptor;
import hudson.security.ACL;
import hudson.security.AccessControlled;
import hudson.security.Permission;
import hudson.util.DescriptorList;

import java.util.Collection;
import org.eclipse.hudson.security.HudsonSecurityEntitiesHolder;

/**
 * Creates {@link Node}s to dynamically expand/shrink the slaves attached to
 * Hudson.
 *
 * 

Put another way, this class encapsulates different communication * protocols needed to start a new slave programmatically. * * @author Kohsuke Kawaguchi * @see NodeProvisioner * @see AbstractCloudImpl */ public abstract class Cloud extends AbstractModelObject implements ExtensionPoint, Describable, AccessControlled { /** * Uniquely identifies this {@link Cloud} instance among other instances in * {@link Hudson#clouds}. */ public final String name; protected Cloud(String name) { this.name = name; } @Override public String getDisplayName() { return name; } @Override public String getSearchUrl() { return "cloud/" + name; } @Override public ACL getACL() { return HudsonSecurityEntitiesHolder.getHudsonSecurityManager().getAuthorizationStrategy().getACL(this); } @Override public final void checkPermission(Permission permission) { getACL().checkPermission(permission); } @Override public final boolean hasPermission(Permission permission) { return getACL().hasPermission(permission); } /** * Provisions new {@link Node}s from this cloud. * *

{@link NodeProvisioner} performs a trend analysis on the load, and * when it determines that it really needs to bring up additional * nodes, this method is invoked. * *

The implementation of this method asynchronously starts node * provisioning. * * @param label The label that indicates what kind of nodes are needed now. * Newly launched node needs to have this label. Only those {@link Label}s * that this instance returned true from the {@link #canProvision(Label)} * method will be passed here. This parameter is null if Hudson needs to * provision a new {@link Node} for jobs that don't have any tie to any * label. * @param excessWorkload Number of total executors needed to meet the * current demand. Always >= 1. For example, if this is 3, the * implementation should launch 3 slaves with 1 executor each, or 1 slave * with 3 executors, etc. * * @return {@link PlannedNode}s that represent asynchronous {@link Node} * provisioning operations. Can be empty but must not be null. * {@link NodeProvisioner} will be responsible for adding the resulting * {@link Node} into Hudson via {@link Hudson#addNode(Node)}, so a * {@link Cloud} implementation just needs to create a new node object. */ public abstract Collection provision(Label label, int excessWorkload); /** * Returns true if this cloud is capable of provisioning new nodes for the * given label. */ public abstract boolean canProvision(Label label); public Descriptor getDescriptor() { return Hudson.getInstance().getDescriptorOrDie(getClass()); } /** * All registered {@link Cloud} implementations. * * @deprecated as of 1.286 Use {@link #all()} for read access, and * {@link Extension} for registration. */ public static final DescriptorList ALL = new DescriptorList(Cloud.class); /** * Returns all the registered {@link Cloud} descriptors. */ public static DescriptorExtensionList> all() { return Hudson.getInstance().>getDescriptorList(Cloud.class); } /** * Permission constant to control mutation operations on {@link Cloud}. * * This includes provisioning a new node, as well as removing it. */ public static final Permission PROVISION = Hudson.ADMINISTER; }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy