/** * Validate presence of required parameters. * Note the model type is java.lang.Object as opposed to a generic * <T extends BaseResource> in order to accommodate parameters types * such as Action. * * @param model the incoming representation * @param required the required field names * @throws WebApplicationException wrapping an appropriate response * iff a required parameter is missing */ public static void validateParameters(Object model, String... required) { validateParameters(INCOMPLETE_PARAMS_REASON, INCOMPLETE_PARAMS_DETAIL, model, 2, required); }
/** * Validate presence of required parameters. * Note the model type is java.lang.Object as opposed to a generic * <T extends BaseResource> in order to accommodate parameters types * such as Action. * * @param reason the fault reason * @param detail the fault detail * @param model the incoming representation * @param required the required field names * @throws WebApplicationException wrapping an appropriate response * iff a required parameter is missing */ public static void validateParameters(String reason, String detail, Object model, String... required) { validateParameters(reason, detail, model, 2, required); }
@Override public Response add(Role role) { validateParameters(role, "name|id"); StringBuilder buf = new StringBuilder(); String roleArg = getRoleArg(role, buf); buf.append("attach-role -roleid ").append(roleArg).append(" -elementid ").append(userId); Role newRole = LinkHelper.addLinks(getUriInfo(), runAndParseSingle(buf.toString())); UriBuilder uriBuilder = getUriInfo().getAbsolutePathBuilder().path(newRole.getId()); return Response.created(uriBuilder.build()).entity(newRole).build(); }
private StorageType validateAddParameters(StorageDomain storageDomain) { validateParameters(storageDomain, "host.id|name", "type", "storage.type"); Storage storage = storageDomain.getStorage(); StorageType storageType = validateEnum(StorageType.class, storage.getType().toUpperCase()); switch (storageType) { case NFS: validateParameters(storage, "address", "path"); break; case ISCSI: case FCP: // REVISIT: validate that a logical unit or volume group supplied for (LogicalUnit lu : storage.getLogicalUnits()) { validateParameters(lu, "id"); } if (storage.isSetVolumeGroup()) { validateParameters(storage.getVolumeGroup(), "id"); } break; default: assert false : storageType; break; } return storageType; }
@Override public Response add(CdRom cdrom) { validateParameters(cdrom, "file"); String cdIsoPath = cdrom.getFile().getId(); updateCdRom(cdIsoPath); cdrom = buildCdRom(cdIsoPath); UriBuilder uriBuilder = getUriInfo().getAbsolutePathBuilder().path(cdrom.getId()); return Response.created(uriBuilder.build()).entity(cdrom).build(); }
@Override public void remove(String id, StorageDomain storageDomain) { validateParameters(storageDomain, "host.id|name"); StringBuilder buf = new StringBuilder(); String hostArg = setUpHostArg(storageDomain.getHost(), buf); buf.append("remove-storagedomain"); buf.append(" -storagedomainid " + PowerShellUtils.escape(id)); buf.append(" -hostid " + hostArg); if (storageDomain.isSetFormat() && storageDomain.isFormat()) { buf.append(" -formatstorage"); } else { buf.append(" -force"); } PowerShellCmd.runCommand(getPool(), buf.toString()); removeSubResource(id); }
@Override public Response add(Network network) { validateParameters(network, "id|name"); StringBuilder buf = new StringBuilder(); buf.append(getClusterLookup()); if (network.isSetId()) { buf.append(getNetworkLookup(network.getId())); } else { buf.append(getNetworkByNameLookup(network.getName())); } buf.append("$cluster = add-networktocluster"); buf.append(" -clusterobject $cluster"); buf.append(" -networkobject $net; "); buf.append("$cluster.getnetworks() | ? { $_.networkid -eq $net.networkid }"); network = addLinks(runAndParseSingle(buf.toString())); UriBuilder uriBuilder = getUriInfo().getAbsolutePathBuilder().path(network.getId()); return Response.created(uriBuilder.build()).entity(network).build(); }
@Override public Response add(Tag tag) { validateParameters(tag, "id|name"); StringBuilder buf = new StringBuilder(); if (tag.isSetId()) { buf.append("$tag = get-tag " + PowerShellUtils.escape(tag.getId()) + "; "); } else { buf.append("$tag = get-tags | ? { $_.name -eq " + PowerShellUtils.escape(tag.getName()) + " }; "); } buf.append("attach-tag -tagobject $tag " + getParentIdArg()); tag = addLinks(runAndParseSingle(buf.toString())); UriBuilder uriBuilder = getUriInfo().getAbsolutePathBuilder().path(tag.getId()); return Response.created(uriBuilder.build()).entity(tag).build(); }
private Response doNetworkAdapterAction(Action action, String command) { validateParameters(action, "network.id|name"); StringBuilder buf = new StringBuilder(); buf.append("$h = get-host " + PowerShellUtils.escape(parent.getHostId()) + "; "); buf.append("foreach ($n in get-networks) { "); if (action.getNetwork().isSetId()) { buf.append("if ($n.networkid -eq " + PowerShellUtils.escape(action.getNetwork().getId()) + ") { "); } else { buf.append("if ($n.name -eq " + PowerShellUtils.escape(action.getNetwork().getName()) + ") { "); } buf.append("$net = $n; break "); buf.append("} "); buf.append("} "); buf.append("foreach ($n in $h.getnetworkadapters()) { "); buf.append("if ($n.id -eq " + PowerShellUtils.escape(getId()) + ") { "); buf.append("$nic = $n; break "); buf.append("} "); buf.append("} "); buf.append(command); buf.append(" -hostobject $h"); buf.append(" -network $net"); buf.append(" -networkadapter $nic"); return doAction(getUriInfo(), new CommandRunner(action, buf.toString(), getPool())); }
protected Response doImport(Action action, String type) { validateParameters(action, "cluster.id|name", "storageDomain.id|name"); StringBuilder buf = new StringBuilder(); String clusterVariable = getClusterVariable(buf, action.getCluster()); String dataCenterArg = getDataCenterArg(buf, clusterVariable); String destDomainArg = getDestDomainArg(buf, action.getStorageDomain()); buf.append("import-" + type); buf.append(" -datacenterid " + dataCenterArg); buf.append(" -sourcedomainid " + PowerShellUtils.escape(getStorageDomainId())); buf.append(" -destdomainid " + destDomainArg); buf.append(" -clusterid " + clusterVariable + ".clusterid"); buf.append(" -" + type + "id " + PowerShellUtils.escape(getId())); return doAction(getUriInfo(), new CommandRunner(action, buf.toString(), getPool())); }
@Override public Response add(StorageDomain storageDomain) { validateParameters(storageDomain, "id|name"); StringBuilder buf = new StringBuilder(); String storageDomainArg; if (storageDomain.isSetId()) { storageDomainArg = PowerShellUtils.escape(storageDomain.getId()); } else { buf.append("$sd = select-storagedomain -searchtext "); buf.append(PowerShellUtils.escape("name=" + storageDomain.getName())); buf.append(";"); storageDomainArg = "$sd.storagedomainid"; } buf.append("attach-storagedomain"); buf.append(" -datacenterid " + PowerShellUtils.escape(dataCenterId)); buf.append(" -storagedomainid " + storageDomainArg); storageDomain = PowerShellStorageDomainResource.runAndParseSingle(getPool(), getParser(), buf.toString()); UriBuilder uriBuilder = getUriInfo().getAbsolutePathBuilder().path(storageDomain.getId()); return Response.created(uriBuilder.build()).entity(addLinks(getUriInfo(), storageDomain)).build(); }
@Override public Response iscsiDiscover(Action action) { validateParameters(action, "iscsi.address"); IscsiDetails params = action.getIscsi(); StringBuilder buf = new StringBuilder(); buf.append("$cnx = new-storageserverconnection"); buf.append(" -storagetype ISCSI"); buf.append(" -connection " + PowerShellUtils.escape(params.getAddress())); buf.append(" -portal " + PowerShellUtils.escape(params.getAddress())); if (params.isSetPort() && params.getPort() != 0) { buf.append(" -port " + params.getPort()); } buf.append("; "); buf.append("get-storageserversendtargets"); buf.append(" -hostid " + PowerShellUtils.escape(getId())); buf.append(" -storageserverconnectionobject $cnx"); return doAction(getUriInfo(), new CommandRunner(action, buf.toString(), getPool()) { protected void handleOutput(String output) { for (String target : parseIscsiTargets(output)) { action.getIscsiTargets().add(target); } } }); }
@Override public Response move(Action action) { validateParameters(action, "storageDomain.id|name"); StringBuilder buf = new StringBuilder(); String storageDomainArg; if (action.getStorageDomain().isSetId()) { storageDomainArg = PowerShellUtils.escape(action.getStorageDomain().getId()); } else { buf.append("$dest = select-storagedomain "); buf.append("| ? { $_.name -eq "); buf.append(PowerShellUtils.escape(action.getStorageDomain().getName())); buf.append(" }; "); buf.append("if($dest -eq $null) {throw 'Cannot find storagedomain.'}; "); storageDomainArg = "$dest.storagedomainid"; } buf.append("move-vmimages"); buf.append(" -vmid " + PowerShellUtils.escape(getId())); buf.append(" -storagedomainid " + storageDomainArg); return doAction(getUriInfo(), new CommandRunner(action, buf.toString(), getPool())); }
@Override public Response add(NIC nic) { validateParameters(nic, "name", "network.id"); StringBuilder buf = new StringBuilder(); buf.append("$v = get-vm " + PowerShellUtils.escape(parentId) + ";"); buf.append("foreach ($i in get-networks) {"); buf.append(" if ($i.networkid -eq " + PowerShellUtils.escape(nic.getNetwork().getId()) + ") {"); buf.append(" $n = $i"); buf.append(" }"); buf.append("}"); buf.append("add-networkadapter"); buf.append(" -vmobject $v"); buf.append(" -interfacename " + PowerShellUtils.escape(nic.getName())); buf.append(" -networkname $n.name"); if (nic.getInterface() != null) { NicInterface type = NicInterface.fromValue(nic.getInterface()); if (type != null) { buf.append(" -interfacetype " + PowerShellVmInterfaceType.forModel(type).name()); } } if (nic.getMac() != null && nic.getMac().getAddress() != null) { buf.append(" -macaddress " + PowerShellUtils.escape(nic.getMac().getAddress())); } nic = addLinks(runAndParseSingle(buf.toString())); UriBuilder uriBuilder = getUriInfo().getAbsolutePathBuilder().path(nic.getId()); return Response.created(uriBuilder.build()).entity(nic).build(); }
@Override public Response add(User user) { validateParameters(user, "userName|id", "roles.id|name"); StringBuilder buf = new StringBuilder(); String userArg = null; if (user.isSetId()) { userArg = PowerShellUtils.escape(user.getId()); } else { buf.append("$u = select-user -AD").append(SEARCH_TEXT); buf.append(PowerShellUtils.escape(user.getUserName())).append("; "); userArg = "$u.UserId"; } String roleArg = getRoleArg(user.getRoles().getRoles().get(0), buf); buf.append("add-user -userid ").append(userArg).append(" -userroleid ").append(roleArg); User newUser = PowerShellUserResource.addLinks(getUriInfo(), runAndParseSingle(buf.toString())); UriBuilder uriBuilder = getUriInfo().getAbsolutePathBuilder().path(newUser.getId()); if (user.getRoles().getRoles().size() > 1) { for (int i = 1 ; i < user.getRoles().getRoles().size() ; i++) { StringBuilder addRole = new StringBuilder(); String extraRoleArg = getRoleArg(user.getRoles().getRoles().get(i), addRole); addRole.append("attach-role -roleid ").append(extraRoleArg) .append(" -elementid ").append(newUser.getId()); PowerShellRoleResource.runAndParseSingle(getPool(), getParser(), newUser.getId(), addRole.toString()); } } return Response.created(uriBuilder.build()).entity(newUser).build(); }
@Override public Response export(Action action) { validateParameters(action, "storageDomain.id|name"); StringBuilder buf = new StringBuilder(); String storageDomainArg; if (action.getStorageDomain().isSetId()) { storageDomainArg = PowerShellUtils.escape(action.getStorageDomain().getId()); } else { buf.append("$dest = select-storagedomain "); buf.append("| ? { $_.name -eq "); buf.append(PowerShellUtils.escape(action.getStorageDomain().getName())); buf.append(" }; "); storageDomainArg = "$dest.storagedomainid"; } buf.append("export-template"); buf.append(" -templateid " + PowerShellUtils.escape(getId())); buf.append(" -storagedomainid " + storageDomainArg); if (action.isSetExclusive() && action.isExclusive()) { buf.append(" -forceoverride"); } return doAction(getUriInfo(), new CommandRunner(action, buf.toString(), getPool())); }
@Override public Response export(Action action) { validateParameters(action, "storageDomain.id|name"); StringBuilder buf = new StringBuilder(); String storageDomainArg; if (action.getStorageDomain().isSetId()) { storageDomainArg = PowerShellUtils.escape(action.getStorageDomain().getId()); } else { buf.append("$dest = select-storagedomain "); buf.append("| ? { $_.name -eq "); buf.append(PowerShellUtils.escape(action.getStorageDomain().getName())); buf.append(" }; "); storageDomainArg = "$dest.storagedomainid"; } buf.append("export-vm"); buf.append(" -vmid " + PowerShellUtils.escape(getId())); buf.append(" -storagedomainid " + storageDomainArg); if (action.isSetExclusive() && action.isExclusive()) { buf.append(" -forceoverride"); } if (action.isSetDiscardSnapshots() && action.isDiscardSnapshots()) { buf.append(" -copycollapse"); } return doAction(getUriInfo(), new CommandRunner(action, buf.toString(), getPool())); }
@Override public Response iscsiLogin(Action action) { validateParameters(action, "iscsi.address", "iscsi.target"); IscsiDetails params = action.getIscsi(); StringBuilder buf = new StringBuilder(); buf.append("$cnx = new-storageserverconnection"); buf.append(" -storagetype ISCSI"); buf.append(" -connection " + PowerShellUtils.escape(params.getAddress())); buf.append(" -portal " + PowerShellUtils.escape(params.getAddress())); buf.append(" -iqn " + PowerShellUtils.escape(params.getTarget())); if (params.isSetPort() && params.getPort() != 0) { buf.append(" -port " + params.getPort()); } if (params.isSetUsername()) { buf.append(" -username " + PowerShellUtils.escape(params.getUsername())); } if (params.isSetPassword()) { buf.append(" -password " + PowerShellUtils.escape(params.getPassword())); } buf.append("; "); buf.append("connect-storagetohost"); buf.append(" -hostid " + PowerShellUtils.escape(getId())); buf.append(" -storageserverconnectionobject $cnx"); return doAction(getUriInfo(), new CommandRunner(action, buf.toString(), getPool())); }
@Override public Response install(Action action) { validateParameters(action, "rootPassword"); return doAction(getUriInfo(), new HostInstaller(action, action.getRootPassword(), action.getImage(), getPool())); }
@Override public Response add(Tag tag) { validateParameters(tag, "name"); String parentId = null; String parentName = null; if (tag.isSetParent() && tag.getParent().isSetTag()) { if (tag.getParent().getTag().isSetId()) { parentId = tag.getParent().getTag().getId(); } else if (tag.getParent().getTag().isSetName()) { parentName = tag.getParent().getTag().getName(); } } StringBuilder buf = new StringBuilder(); if (parentId != null) { buf.append("$parent = get-tag " + PowerShellUtils.escape(parentId) + "; "); } else if (parentName != null) { buf.append("$parent = get-tags | ? { $_.name -eq " + PowerShellUtils.escape(parentName) + " }; "); } buf.append("add-tag"); buf.append(" -name " + PowerShellUtils.escape(tag.getName())); if (tag.isSetDescription()) { buf.append(" -description " + PowerShellUtils.escape(tag.getDescription())); } if (parentId != null || parentName != null) { buf.append(" -parenttagobject $parent"); } tag = LinkHelper.addLinks(getUriInfo(), runAndParseSingle(buf.toString())); UriBuilder uriBuilder = getUriInfo().getAbsolutePathBuilder().path(tag.getId()); return Response.created(uriBuilder.build()).entity(tag).build(); }