Skip to content
This repository has been archived by the owner on Sep 23, 2020. It is now read-only.

Add ability to specify multiple allowed CPU architectures #15

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Expand Up @@ -385,9 +385,9 @@ public void setRPs(Advertised advert) throws ResourceException {

/* CPUArchitectureName */

if (advert.getCpuArchitectureName() != null) {
if (advert.getCpuArchitectureNames() != null) {
prop = new SimpleResourceProperty(Constants_GT4_0.RP_FACTORY_CPUArch);
prop.add(advert.getCpuArchitectureName());
prop.add(advert.getCpuArchitectureNames());
this.propSet.add(prop);
}

Expand Down
Expand Up @@ -22,7 +22,7 @@ public interface _Advertised extends Advertised {

public void setDefaultRunningTimeSeconds(int defaultRunningTime);
public void setMaximumRunningTimeSeconds(int maximumRunningTime);
public void setCpuArchitectureName(String cpuArchitectureName);
public void setCpuArchitectureNames(String[] cpuArchitectureNames);
public void setVmmVersions(String[] vmmVersions);
public void setVmm(String vmm);
public void setNetworkNames(String[] networkNames);
Expand Down
Expand Up @@ -29,7 +29,7 @@ public class DefaultAdvertised implements _Advertised {
private int defaultRunningTimeSeconds;
private int maximumRunningTimeSeconds;
private int maximumAfterRunningTimeSeconds;
private String cpuArchitectureName;
private String[] cpuArchitectureNames;
private String[] vmmVersions;
private String vmm;
private String[] networkNames;
Expand All @@ -53,8 +53,8 @@ public int getMaximumAfterRunningTimeSeconds() {
return this.maximumAfterRunningTimeSeconds;
}

public String getCpuArchitectureName() {
return this.cpuArchitectureName;
public String[] getCpuArchitectureNames() {
return this.cpuArchitectureNames;
}

public String[] getVmmVersions() {
Expand Down Expand Up @@ -94,8 +94,8 @@ public void setMaximumAfterRunningTimeSeconds(int maximumAfterRunningTime) {
this.maximumAfterRunningTimeSeconds = maximumAfterRunningTime;
}

public void setCpuArchitectureName(String cpuArchitectureName) {
this.cpuArchitectureName = cpuArchitectureName;
public void setCpuArchitectureNames(String[] cpuArchitectureNames) {
this.cpuArchitectureNames = cpuArchitectureNames;
}

public void setVmmVersions(String[] vmmVersions) {
Expand Down Expand Up @@ -129,7 +129,8 @@ public String toString() {
", maximumRunningTimeSeconds=" + maximumRunningTimeSeconds +
", maximumAfterRunningTimeSeconds=" +
maximumAfterRunningTimeSeconds +
", cpuArchitectureName='" + cpuArchitectureName + '\'' +
", cpuArchitectureNames='" +
(cpuArchitectureNames == null ? null : Arrays.asList(cpuArchitectureNames)) +
", vmmVersions=" +
(vmmVersions == null ? null : Arrays.asList(vmmVersions)) +
", vmm='" + vmm + '\'' +
Expand Down
Expand Up @@ -25,7 +25,7 @@ public interface Advertised {

public int getDefaultRunningTimeSeconds();
public int getMaximumRunningTimeSeconds();
public String getCpuArchitectureName();
public String[] getCpuArchitectureNames();
public String[] getVmmVersions();
public String getVmm();
public String[] getNetworkNames();
Expand Down
Expand Up @@ -125,7 +125,7 @@
init-method="validate">

<!-- Property values coming via vmm.conf -->
<property name="cpuArchitectureName"
<property name="cpuArchitectureNames"
value="$VMM{cpu.arch}" />
<property name="vmm"
value="$VMM{vmm.type}" />
Expand Down
Expand Up @@ -229,8 +229,8 @@ public void setAccountingEventAdapter(AccountingEventAdapter accEvents) {
public Advertised getAdvertised() {

final _Advertised adv = this.repr._newAdvertised();
adv.setCpuArchitectureName(
this.globals.getCpuArchitectureName());
adv.setCpuArchitectureNames(
this.globals.getCpuArchitectureNames());
adv.setDefaultRunningTimeSeconds(
this.globals.getDefaultRunningTimeSeconds());
adv.setMaxGroupSize(
Expand Down
Expand Up @@ -24,7 +24,7 @@ public interface GlobalPolicies {

public int getTerminationOffsetSeconds();

public String getCpuArchitectureName();
public String[] getCpuArchitectureNames();

public String[] getVmmVersions();

Expand Down
Expand Up @@ -29,6 +29,8 @@
import org.nimbustools.api.services.rm.ResourceRequestDeniedException;

import javax.security.auth.Subject;
import java.util.List;
import java.util.Arrays;

public class DefaultAuthorize implements Authorize {

Expand Down Expand Up @@ -264,8 +266,8 @@ protected static void authorizeDuration(VirtualMachine vm,
protected void checkArchitecture(VirtualMachine vm)
throws ResourceRequestDeniedException {

final String fact = this.globals.getCpuArchitectureName();
if (fact == null) {
final String[] allowedCPUArchitectures = this.globals.getCpuArchitectureNames();
if (allowedCPUArchitectures == null) {
// if policy is null, means 'any'
return; // *** EARLY RETURN ***
}
Expand All @@ -276,16 +278,32 @@ protected void checkArchitecture(VirtualMachine vm)
"no CPU architecture description (no dep)");
}

final String arch = dep.getCPUArchitecture();
if (arch == null) {
final String requestedArch = dep.getCPUArchitecture();
if (requestedArch == null) {
throw new ResourceRequestDeniedException(
"no CPU architecture description (no dep.arch)");
}

if (!arch.equals(fact)) {
List archList = Arrays.asList(allowedCPUArchitectures);

if (!archList.contains(requestedArch)) {

StringBuilder sb = new StringBuilder();
boolean first = true;
for (int i=0; i < allowedCPUArchitectures.length ; i++) {
if (first) {
first = false;
}
else {
sb.append(", ");
}
sb.append(allowedCPUArchitectures[i]);
}
final String allArchitectures = sb.toString();

throw new ResourceRequestDeniedException(
"incorrect CPU architecture, only '" + fact +
"' supported, you request '" + arch + "'");
"incorrect CPU architecture, only '" + allArchitectures +
"' supported, you requested '" + requestedArch + "'");
}
}

Expand Down
Expand Up @@ -38,7 +38,7 @@ public class DefaultGlobalPolicies implements GlobalPolicies {
private int defaultRunningTimeSeconds;
private int maximumRunningTimeSeconds;
private int terminationOffsetSeconds;
private String cpuArchitectureName;
private String[] cpuArchitectureNames;
private String[] vmmVersions;
private String vmm;

Expand Down Expand Up @@ -83,12 +83,12 @@ public void setTerminationOffsetSeconds(int terminationOffsetSeconds) {
this.terminationOffsetSeconds = terminationOffsetSeconds;
}

public String getCpuArchitectureName() {
return this.cpuArchitectureName;
public String[] getCpuArchitectureNames() {
return this.cpuArchitectureNames;
}

public void setCpuArchitectureName(String cpuArchitectureName) {
this.cpuArchitectureName = cpuArchitectureName;
public void setCpuArchitectureNames(String[] cpuArchitectureNames) {
this.cpuArchitectureNames = cpuArchitectureNames;
}

public String[] getVmmVersions() {
Expand Down