/** * Copyright 2013-2017 Linagora, Université Joseph Fourier, Floralis * * The present code is developed in the scope of the joint LINAGORA - * Université Joseph Fourier - Floralis research program and is designated * as a "Result" pursuant to the terms and conditions of the LINAGORA * - Université Joseph Fourier - Floralis research program. Each copyright * holder of Results enumerated here above fully & independently holds complete * ownership of the complete Intellectual Property rights applicable to the whole * of said Results, and may freely exploit it in any manner which does not infringe * the moral rights of the other copyright holders. * * 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 net.roboconf.target.api; import java.util.Map; import net.roboconf.core.model.beans.Instance; /** * The interface to implement to support a new deployment target. * @author Vincent Zurczak - Linagora */ public interface TargetHandler { /** * @return the target identifier */ String getTargetId(); /** * Creates a machine. * <p> * The machine must have a Roboconf agent installed on it.<br> * This method only deals with the creation of a VM. Configuring the network, * storage and so on, should be done {@link #configureMachine(Map, Map, String, String, String, Instance)}. * </p> * * @param parameters the target parameters * @return the (machine) ID of this machine (should be unique for the target manager) * @throws TargetException */ String createMachine( TargetHandlerParameters parameters ) throws TargetException; /** * Configures a machine identified by its id. * <p> * Configuration can be adding storage, setting up the network settings, etc. * </p> * <p> * Messaging and other information are passed too. Most of the time, they will not * be necessary in the configuration, only in the machine creation. However, some systems * may use them at this level (in particular, those that do not support user data mechanisms). * </p> * * @param parameters the target parameters * @param machineId the ID machine of the machine to configure * @param scopedInstance the scoped instance * @throws TargetException */ void configureMachine( TargetHandlerParameters parameters, String machineId, Instance scopedInstance ) throws TargetException; /** * Asks for the termination of the machine identified by its id. * @param parameters the target parameters * @param machineId the ID machine of the machine to terminate * @throws TargetException */ void terminateMachine( TargetHandlerParameters parameters, String machineId ) throws TargetException; /** * Determines whether a machine is running or not. * <p> * This method is invoked by the DM when it is restarted, to retrieve the state * of the machines it used to know. States are persisted by the DM. If this method returns true, * the restored state is kept and a message is sent to the agent to refresh the current statuses. * If this method returns false, then the machine is considered as the associated instances are all * marked as "not deployed". This method cannot make any assumption about whether the agent is running * or not. It should only verify whether the machine is running or not. * </p> * * @param parameters the target parameters * @param machineId the ID machine of the machine to configure * @return true if the machine is running, false otherwise * @throws TargetException */ boolean isMachineRunning( TargetHandlerParameters parameters, String machineId ) throws TargetException; /** * Retrieves a public IP address for a given machine. * @param parameters the target parameters * @param machineId the ID machine of the machine to configure * @return an IP address (can be null) * @throws TargetException */ String retrievePublicIpAddress( TargetHandlerParameters parameters, String machineId ) throws TargetException; }