return elements.keySet();
}
+ // TODO: This should not exist. It's a replacement for a more
+ // robust "is host h a member of this affinity group".
+ @XmlElement(name="endpoints")
+ public Set<String> getMacs() {
+ return elements.keySet();
+ }
+
@JsonIgnore
public ArrayList<AffinityIdentifier> getAllElements() {
ArrayList<AffinityIdentifier> retvalues = new ArrayList<AffinityIdentifier>(elements.values());
public Status removeAffinityGroup(String name);
public AffinityGroup getAffinityGroup(String name);
+ public List<Host> getAffinityGroupHosts(String groupName);
public List<AffinityGroup> getAllAffinityGroups();
public Status addAffinityLink(AffinityLink al);
return affinityGroupList.get(groupName);
}
+ @Override
+ public List<Host> getAffinityGroupHosts(String groupName) {
+ log.debug("getAffinityGroupHosts" + groupName);
+ AffinityGroup ag = affinityGroupList.get(groupName);
+ return getAllElementsByHost(ag);
+ }
+
@Override
public List<AffinityGroup> getAllAffinityGroups() {
return new ArrayList<AffinityGroup>(affinityGroupList.values());
--- /dev/null
+package org.opendaylight.affinity.affinity.northbound;
+
+import org.opendaylight.controller.sal.utils.NetUtils;
+import java.io.Serializable;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.util.Map;
+import java.util.HashMap;
+import java.util.Set;
+import java.util.Collection;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.opendaylight.controller.sal.utils.Status;
+import org.opendaylight.controller.sal.utils.StatusCode;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.SecurityContext;
+
+import org.codehaus.enunciate.jaxrs.ResponseCode;
+import org.codehaus.enunciate.jaxrs.StatusCodes;
+import org.codehaus.enunciate.jaxrs.TypeHint;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import org.opendaylight.controller.sal.core.Host;
+
+
+/**
+ * AffinityGroupHosts class to return identifiers by MAC
+ * address. This is created and populated by the northbound and
+ * manager classes.
+ */
+
+@XmlRootElement
+@XmlAccessorType(XmlAccessType.NONE)
+public class AffinityGroupHosts implements Cloneable, Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @XmlAttribute
+ private String name;
+
+ @XmlElement
+ private final List<Host> hostlist;
+
+ public AffinityGroupHosts() {
+ hostlist = new ArrayList<Host>();
+ }
+
+ public AffinityGroupHosts(String name, List<Host> hostlist) {
+ this.name = name;
+ this.hostlist = hostlist;
+ }
+ @Override
+ public String toString() {
+ String output = this.name;
+ return output;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public List<Host> getHosts() {
+ return hostlist;
+ }
+}
+
public AffinityGroupList (List<AffinityGroup> aff) {
this.affinityGroupList = aff;
}
- public List<AffinityGroup> getAffinityList() {
+ public List<AffinityGroup> getAffinityGroupList() {
return affinityGroupList;
}
- public void setAffinityList(List<AffinityGroup> aff) {
+ public void setAffinityGroupList(List<AffinityGroup> aff) {
this.affinityGroupList = aff;
}
}
return username;
}
+
private IAffinityManager getIfAffinityManagerService(String containerName) {
log.debug("In getIfAffinityManager");
}
}
+
+ /**
+ * Return AG endpoints as hosts.
+ *
+ * @param containerName
+ * Name of the Container. The Container name for the base
+ * controller is "default".
+ * @param affinityGroupName
+ * Name of the affinity group being retrieved.
+ * @return affinity group as a Hosts object.
+ */
+ @Path("/{containerName}/hosts/{affinityGroupName}")
+ @GET
+ @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
+ @TypeHint(AffinityGroupHosts.class)
+ @StatusCodes({
+ @ResponseCode(code = 200, condition = "Operation successful"),
+ @ResponseCode(code = 404, condition = "The containerName is not found"),
+ @ResponseCode(code = 415, condition = "Affinity name is not found"),
+ @ResponseCode(code = 503, condition = "One or more of Controller Services are unavailable") })
+ public AffinityGroupHosts getAffinityGroupHosts(@PathParam("containerName") String containerName,
+ @PathParam("affinityGroupName") String affinityGroupName) {
+ if (!NorthboundUtils.isAuthorized(getUserName(), containerName, Privilege.READ, this)) {
+ throw new UnauthorizedException("User is not authorized to perform this operation on container "
+ + containerName);
+ }
+ IAffinityManager affinityManager = getIfAffinityManagerService(containerName);
+ if (affinityManager == null) {
+ throw new ServiceUnavailableException("Affinity "
+ + RestMessages.SERVICEUNAVAILABLE.toString());
+ }
+
+ log.info("Get affinity group details" + affinityGroupName);
+ AffinityGroupHosts hosts = new AffinityGroupHosts(affinityGroupName, affinityManager.getAffinityGroupHosts(affinityGroupName));
+
+ if (hosts == null) {
+ throw new ResourceNotFoundException(RestMessages.SERVICEUNAVAILABLE.toString());
+ } else {
+ return hosts;
+ }
+ }
+
/**
* Add an affinity link with one "from" and one "to" affinity group.
*
HashMap<String, HashMap<AffinityAttributeType, AffinityAttribute>> attribs;
Set<Node> nodelist;
-
- private static short REDIRECT_IPSWITCH_PRIORITY = 3;
-
+
public enum ReasonCode {
SUCCESS("Success"), FAILURE("Failure"), INVALID_CONF(
"Invalid Configuration"), EXIST("Entry Already Exist"), CONFLICT(
print "list inactive hosts"
get_url = 'http://localhost:8080/controller/nb/v2/hosttracker/default/hosts/inactive'
rest_method(get_url, "GET")
- content = rest_method(put_url, "GET")
+ content = rest_method(get_url, "GET")
hostCfg = json.loads(content)
for host in hostCfg['hostConfig']:
print host
def get_all_affinity_groups():
print "get all affinity groups"
get_url = 'http://localhost:8080/affinity/nb/v2/affinity/default/affinity-groups'
- rest_method(get_url, "GET")
+ content = rest_method(get_url, "GET")
+ print content
# Tbd
def get_all_affinity_links():
get_url = 'http://localhost:8080/affinity/nb/v2/affinity/default/group/' + groupname
rest_method(get_url, "GET")
+def get_affinity_hosts(groupname):
+ get_url = 'http://localhost:8080/affinity/nb/v2/affinity/default/hosts/' + groupname
+ content = rest_method(get_url, "GET")
+ print content
+
def get_affinity_link(linkname):
get_url = 'http://localhost:8080/affinity/nb/v2/affinity/default/link/' + linkname
content = rest_method(get_url, "GET")