/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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 org.apache.ambari.server.topology;
import java.util.Collection;
import java.util.regex.Pattern;
import org.apache.ambari.server.controller.internal.ProvisionAction;
import org.apache.ambari.server.controller.internal.Stack;
/**
* Host Group representation.
*/
public interface HostGroup {
/**
* Compiled regex for hostgroup token.
*/
Pattern HOSTGROUP_REGEX = Pattern.compile("%HOSTGROUP::(\\S+?)%");
/**
* Get the name of the host group.
*
* @return the host group name
*/
String getName();
/**
* Get the name of the associated blueprint
*
* @return associated blueprint name
*/
String getBlueprintName();
/**
* Get the fully qualified host group name in the form of
* blueprintName:hostgroupName
*
* @return fully qualified host group name
*/
String getFullyQualifiedName();
/**
* Get all of the host group components.
*
* @return collection of component instances
*/
Collection<Component> getComponents();
/**
* Get all of the host group component names
*
* @return collection of component names as String
*/
Collection<String> getComponentNames();
/**
* Get all host group component names for instances
* that have the specified provision action association.
*
* @param provisionAction the provision action that must be associated
* with the component names returned
*
* @return collection of component names as String that are associated with
* the specified provision action
*/
Collection<String> getComponentNames(ProvisionAction provisionAction);
/**
* Get the host group components which belong to the specified service.
*
* @param service service name
*
* @return collection of component names for the specified service; will not return null
*/
Collection<String> getComponents(String service);
/**
* Add a component to the host group.
*
* @param component name of the component to add
*
* @return true if the component didn't already exist
*/
boolean addComponent(String component);
/**
* Add a component to the host group, with the specified name
* and provision action.
*
* @param component component name
* @param provisionAction provision action for this component
* @return
*/
boolean addComponent(String component, ProvisionAction provisionAction);
/**
* Determine if the host group contains a master component.
*
* @return true if the host group contains a master component; false otherwise
*/
boolean containsMasterComponent();
/**
* Get all of the services associated with the host group components.
*
* @return collection of service names
*/
Collection<String> getServices();
/**
* Get the configuration associated with the host group.
* The host group configuration has the blueprint cluster scoped
* configuration set as it's parent.
*
* @return host group configuration
*/
Configuration getConfiguration();
/**
* Get the stack associated with the host group.
*
* @return associated stack
*/
Stack getStack();
/**
* Get the cardinality value that was specified for the host group.
* This is simply meta-data for the stack that a deployer can use
* and this information is not used by ambari.
*
* @return the cardinality specified for the hostgroup
*/
String getCardinality();
}