mirror of https://github.com/apache/jclouds.git
Issue 830: refactored VdcApi,AdminVdcApi to use urn
This commit is contained in:
parent
206af90b77
commit
cb844928c0
|
@ -46,6 +46,7 @@
|
|||
<test.vcloud-director.vapptemplate-id></test.vcloud-director.vapptemplate-id>
|
||||
<!-- URN format: ex. urn:vcloud:network:7212e451-76e1-4631-b2de-ba1dfd8080e4 -->
|
||||
<test.vcloud-director.network-id></test.vcloud-director.network-id>
|
||||
<!-- URN format: ex. urn:vcloud:vdc:7212e451-76e1-4631-b2de-ba1dfd8080e4 -->
|
||||
<test.vcloud-director.vdc-id></test.vcloud-director.vdc-id>
|
||||
<!-- URN format: ex. urn:vcloud:user:7212e451-76e1-4631-b2de-ba1dfd8080e4 -->
|
||||
<test.vcloud-director.user-id></test.vcloud-director.user-id>
|
||||
|
|
|
@ -50,7 +50,9 @@ public interface VdcApi {
|
|||
*
|
||||
* @return the vdc or null if not found
|
||||
*/
|
||||
Vdc getVdc(URI vdcUri);
|
||||
Vdc get(String vdcUrn);
|
||||
|
||||
Vdc get(URI vdcHref);
|
||||
|
||||
/**
|
||||
* Captures a vApp into vApp template.
|
||||
|
@ -62,7 +64,9 @@ public interface VdcApi {
|
|||
* @return a VApp resource which will contain a task. The user should should wait for this task to finish to be able
|
||||
* to use the vApp.
|
||||
*/
|
||||
VAppTemplate captureVApp(URI vdcUri, CaptureVAppParams params);
|
||||
VAppTemplate captureVApp(String vdcUrn, CaptureVAppParams params);
|
||||
|
||||
VAppTemplate captureVApp(URI vdcHref, CaptureVAppParams params);
|
||||
|
||||
/**
|
||||
* Clones a media into new one.
|
||||
|
@ -74,7 +78,9 @@ public interface VdcApi {
|
|||
* @return a Media resource which will contain a task. The user should monitor the contained task status in order to
|
||||
* check when it is completed.
|
||||
*/
|
||||
Media cloneMedia(URI vdcUri, CloneMediaParams params);
|
||||
Media cloneMedia(String vdcUrn, CloneMediaParams params);
|
||||
|
||||
Media cloneMedia(URI vdcHref, CloneMediaParams params);
|
||||
|
||||
/**
|
||||
* Clones a vApp into new one.
|
||||
|
@ -85,7 +91,9 @@ public interface VdcApi {
|
|||
* @return a VApp resource which will contain a task. The user should should wait for this task to finish to be able
|
||||
* to use the vApp.
|
||||
*/
|
||||
VApp cloneVApp(URI vdcUri, CloneVAppParams params);
|
||||
VApp cloneVApp(String vdcUrn, CloneVAppParams params);
|
||||
|
||||
VApp cloneVApp(URI vdcHref, CloneVAppParams params);
|
||||
|
||||
/**
|
||||
* Clones a vApp template into new one.
|
||||
|
@ -97,7 +105,9 @@ public interface VdcApi {
|
|||
* @return a VAppTemplate resource which will contain a task. The user should should wait for this task to finish to
|
||||
* be able to use the VAppTemplate.
|
||||
*/
|
||||
VAppTemplate cloneVAppTemplate(URI vdcUri, CloneVAppTemplateParams params);
|
||||
VAppTemplate cloneVAppTemplate(String vdcUrn, CloneVAppTemplateParams params);
|
||||
|
||||
VAppTemplate cloneVAppTemplate(URI vdcHref, CloneVAppTemplateParams params);
|
||||
|
||||
/**
|
||||
* Composes a new vApp using VMs from other vApps or vApp templates.
|
||||
|
@ -129,7 +139,9 @@ public interface VdcApi {
|
|||
* @return a VApp resource which will contain a task. The user should should wait for this task to finish to be able
|
||||
* to use the vApp.
|
||||
*/
|
||||
VApp composeVApp(URI vdcUri, ComposeVAppParams params);
|
||||
VApp composeVApp(String vdcUrn, ComposeVAppParams params);
|
||||
|
||||
VApp composeVApp(URI vdcHref, ComposeVAppParams params);
|
||||
|
||||
/**
|
||||
* Instantiate a vApp template into a new vApp.
|
||||
|
@ -144,7 +156,9 @@ public interface VdcApi {
|
|||
* @return a VApp resource which will contain a task. The user should should wait for this task to finish to be able
|
||||
* to use the vApp.
|
||||
*/
|
||||
VApp instantiateVApp(URI vdcUri, InstantiateVAppParams params);
|
||||
VApp instantiateVApp(String vdcUrn, InstantiateVAppParams params);
|
||||
|
||||
VApp instantiateVApp(URI vdcHref, InstantiateVAppParams params);
|
||||
|
||||
/**
|
||||
* Uploading vApp template to a vDC.
|
||||
|
@ -165,14 +179,18 @@ public interface VdcApi {
|
|||
* @return a VAppTemplate resource which will contain a task. The user should should wait for this task to finish to
|
||||
* be able to use the VAppTemplate.
|
||||
*/
|
||||
VAppTemplate uploadVAppTemplate(URI vdcUri, UploadVAppTemplateParams params);
|
||||
VAppTemplate uploadVAppTemplate(String vdcUrn, UploadVAppTemplateParams params);
|
||||
|
||||
VAppTemplate uploadVAppTemplate(URI vdcHref, UploadVAppTemplateParams params);
|
||||
|
||||
/**
|
||||
* Creates a media (and present upload link for the floppy/iso file).
|
||||
*
|
||||
* @return The response will return a link to transfer site to be able to continue with uploading the media.
|
||||
*/
|
||||
Media createMedia(URI vdcUri, Media media);
|
||||
Media createMedia(String vdcUrn, Media media);
|
||||
|
||||
Media createMedia(URI vdcHref, Media media);
|
||||
|
||||
/**
|
||||
* @return synchronous access to {@link Metadata.Readable} features
|
||||
|
|
|
@ -36,6 +36,7 @@ import org.jclouds.rest.binders.BindToXMLPayload;
|
|||
import org.jclouds.rest.functions.ReturnNullOnNotFoundOr404;
|
||||
import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.Media;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.Metadata;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.VApp;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.VAppTemplate;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.Vdc;
|
||||
|
@ -47,24 +48,123 @@ import org.jclouds.vcloud.director.v1_5.domain.params.ComposeVAppParams;
|
|||
import org.jclouds.vcloud.director.v1_5.domain.params.InstantiateVAppParams;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.params.UploadVAppTemplateParams;
|
||||
import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
|
||||
import org.jclouds.vcloud.director.v1_5.functions.href.VdcURNToHref;
|
||||
|
||||
import com.google.common.util.concurrent.ListenableFuture;
|
||||
|
||||
/**
|
||||
* @see VdcApi
|
||||
* @author danikov
|
||||
* @author danikov, Adrian Cole
|
||||
*/
|
||||
@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
|
||||
public interface VdcAsyncApi {
|
||||
|
||||
/**
|
||||
* @see VdcApi#getVdc(URI)
|
||||
* @see VdcApi#get(String)
|
||||
*/
|
||||
@GET
|
||||
@Consumes
|
||||
@JAXBResponseParser
|
||||
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
|
||||
ListenableFuture<? extends Vdc> getVdc(@EndpointParam URI vdcURI);
|
||||
ListenableFuture<? extends Vdc> get(@EndpointParam(parser = VdcURNToHref.class) String vdcUrn);
|
||||
|
||||
/**
|
||||
* @see VdcApi#captureVApp(String, CaptureVAppParams)
|
||||
*/
|
||||
@POST
|
||||
@Path("/action/captureVApp")
|
||||
@Consumes(VCloudDirectorMediaType.VAPP_TEMPLATE)
|
||||
@Produces(VCloudDirectorMediaType.CAPTURE_VAPP_PARAMS)
|
||||
@JAXBResponseParser
|
||||
ListenableFuture<VAppTemplate> captureVApp(@EndpointParam(parser = VdcURNToHref.class) String vdcUrn,
|
||||
@BinderParam(BindToXMLPayload.class) CaptureVAppParams params);
|
||||
|
||||
/**
|
||||
* @see VdcApi#cloneMedia(String, CloneMediaParams)
|
||||
*/
|
||||
@POST
|
||||
@Path("/action/cloneMedia")
|
||||
@Consumes(VCloudDirectorMediaType.MEDIA)
|
||||
@Produces(VCloudDirectorMediaType.CLONE_MEDIA_PARAMS)
|
||||
@JAXBResponseParser
|
||||
ListenableFuture<Media> cloneMedia(@EndpointParam(parser = VdcURNToHref.class) String vdcUrn,
|
||||
@BinderParam(BindToXMLPayload.class) CloneMediaParams params);
|
||||
|
||||
/**
|
||||
* @see VdcApi#cloneVApp(String, CloneVAppParams)
|
||||
*/
|
||||
@POST
|
||||
@Path("/action/cloneVApp")
|
||||
@Consumes(VCloudDirectorMediaType.VAPP)
|
||||
@Produces(VCloudDirectorMediaType.CLONE_VAPP_PARAMS)
|
||||
// TODO fix these etc.
|
||||
@JAXBResponseParser
|
||||
ListenableFuture<VApp> cloneVApp(@EndpointParam(parser = VdcURNToHref.class) String vdcUrn,
|
||||
@BinderParam(BindToXMLPayload.class) CloneVAppParams params);
|
||||
|
||||
/**
|
||||
* @see VdcApi#cloneVAppTemplate(String, CloneVAppTemplateParams)
|
||||
*/
|
||||
@POST
|
||||
@Path("/action/cloneVAppTemplate")
|
||||
@Consumes(VCloudDirectorMediaType.VAPP_TEMPLATE)
|
||||
@Produces(VCloudDirectorMediaType.CLONE_VAPP_TEMPLATE_PARAMS)
|
||||
@JAXBResponseParser
|
||||
ListenableFuture<VAppTemplate> cloneVAppTemplate(@EndpointParam(parser = VdcURNToHref.class) String vdcUrn,
|
||||
@BinderParam(BindToXMLPayload.class) CloneVAppTemplateParams params);
|
||||
|
||||
/**
|
||||
* @see VdcApi#composeVApp(String, ComposeVAppParams)
|
||||
*/
|
||||
@POST
|
||||
@Path("/action/composeVApp")
|
||||
@Consumes(VCloudDirectorMediaType.VAPP)
|
||||
@Produces(VCloudDirectorMediaType.COMPOSE_VAPP_PARAMS)
|
||||
@JAXBResponseParser
|
||||
ListenableFuture<VApp> composeVApp(@EndpointParam(parser = VdcURNToHref.class) String vdcUrn,
|
||||
@BinderParam(BindToXMLPayload.class) ComposeVAppParams params);
|
||||
|
||||
/**
|
||||
* @see VdcApi#instantiateVApp(String, InstantiateVAppParamsType)
|
||||
*/
|
||||
@POST
|
||||
@Path("/action/instantiateVAppTemplate")
|
||||
@Consumes(VCloudDirectorMediaType.VAPP)
|
||||
@Produces(VCloudDirectorMediaType.INSTANTIATE_VAPP_TEMPLATE_PARAMS)
|
||||
@JAXBResponseParser
|
||||
ListenableFuture<VApp> instantiateVApp(@EndpointParam(parser = VdcURNToHref.class) String vdcUrn,
|
||||
@BinderParam(BindToXMLPayload.class) InstantiateVAppParams params);
|
||||
|
||||
/**
|
||||
* @see VdcApi#uploadVAppTemplate(String, UploadVAppTemplateParams)
|
||||
*/
|
||||
@POST
|
||||
@Path("/action/uploadVAppTemplate")
|
||||
@Consumes(VCloudDirectorMediaType.VAPP_TEMPLATE)
|
||||
@Produces(VCloudDirectorMediaType.UPLOAD_VAPP_TEMPLATE_PARAMS)
|
||||
@JAXBResponseParser
|
||||
ListenableFuture<VAppTemplate> uploadVAppTemplate(@EndpointParam(parser = VdcURNToHref.class) String vdcUrn,
|
||||
@BinderParam(BindToXMLPayload.class) UploadVAppTemplateParams params);
|
||||
|
||||
/**
|
||||
* @see VdcApi#createMedia(String, Media)
|
||||
*/
|
||||
@POST
|
||||
@Path("/media")
|
||||
@Consumes(VCloudDirectorMediaType.MEDIA)
|
||||
@Produces(VCloudDirectorMediaType.MEDIA)
|
||||
@JAXBResponseParser
|
||||
ListenableFuture<Media> createMedia(@EndpointParam(parser = VdcURNToHref.class) String vdcUrn,
|
||||
@BinderParam(BindToXMLPayload.class) Media media);
|
||||
|
||||
/**
|
||||
* @see VdcApi#get(URI)
|
||||
*/
|
||||
@GET
|
||||
@Consumes
|
||||
@JAXBResponseParser
|
||||
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
|
||||
ListenableFuture<? extends Vdc> get(@EndpointParam URI vdcHref);
|
||||
|
||||
/**
|
||||
* @see VdcApi#captureVApp(URI, CaptureVAppParams)
|
||||
|
@ -74,8 +174,8 @@ public interface VdcAsyncApi {
|
|||
@Consumes(VCloudDirectorMediaType.VAPP_TEMPLATE)
|
||||
@Produces(VCloudDirectorMediaType.CAPTURE_VAPP_PARAMS)
|
||||
@JAXBResponseParser
|
||||
ListenableFuture<VAppTemplate> captureVApp(@EndpointParam URI vdcURI,
|
||||
@BinderParam(BindToXMLPayload.class) CaptureVAppParams params);
|
||||
ListenableFuture<VAppTemplate> captureVApp(@EndpointParam URI vdcHref,
|
||||
@BinderParam(BindToXMLPayload.class) CaptureVAppParams params);
|
||||
|
||||
/**
|
||||
* @see VdcApi#cloneMedia(URI, CloneMediaParams)
|
||||
|
@ -85,8 +185,8 @@ public interface VdcAsyncApi {
|
|||
@Consumes(VCloudDirectorMediaType.MEDIA)
|
||||
@Produces(VCloudDirectorMediaType.CLONE_MEDIA_PARAMS)
|
||||
@JAXBResponseParser
|
||||
ListenableFuture<Media> cloneMedia(@EndpointParam URI vdcURI,
|
||||
@BinderParam(BindToXMLPayload.class) CloneMediaParams params);
|
||||
ListenableFuture<Media> cloneMedia(@EndpointParam URI vdcHref,
|
||||
@BinderParam(BindToXMLPayload.class) CloneMediaParams params);
|
||||
|
||||
/**
|
||||
* @see VdcApi#cloneVApp(URI, CloneVAppParams)
|
||||
|
@ -94,10 +194,11 @@ public interface VdcAsyncApi {
|
|||
@POST
|
||||
@Path("/action/cloneVApp")
|
||||
@Consumes(VCloudDirectorMediaType.VAPP)
|
||||
@Produces(VCloudDirectorMediaType.CLONE_VAPP_PARAMS) //TODO fix these etc.
|
||||
@Produces(VCloudDirectorMediaType.CLONE_VAPP_PARAMS)
|
||||
// TODO fix these etc.
|
||||
@JAXBResponseParser
|
||||
ListenableFuture<VApp> cloneVApp(@EndpointParam URI vdcURI,
|
||||
@BinderParam(BindToXMLPayload.class) CloneVAppParams params);
|
||||
ListenableFuture<VApp> cloneVApp(@EndpointParam URI vdcHref,
|
||||
@BinderParam(BindToXMLPayload.class) CloneVAppParams params);
|
||||
|
||||
/**
|
||||
* @see VdcApi#cloneVAppTemplate(URI, CloneVAppTemplateParams)
|
||||
|
@ -107,8 +208,8 @@ public interface VdcAsyncApi {
|
|||
@Consumes(VCloudDirectorMediaType.VAPP_TEMPLATE)
|
||||
@Produces(VCloudDirectorMediaType.CLONE_VAPP_TEMPLATE_PARAMS)
|
||||
@JAXBResponseParser
|
||||
ListenableFuture<VAppTemplate> cloneVAppTemplate(@EndpointParam URI vdcURI,
|
||||
@BinderParam(BindToXMLPayload.class) CloneVAppTemplateParams params);
|
||||
ListenableFuture<VAppTemplate> cloneVAppTemplate(@EndpointParam URI vdcHref,
|
||||
@BinderParam(BindToXMLPayload.class) CloneVAppTemplateParams params);
|
||||
|
||||
/**
|
||||
* @see VdcApi#composeVApp(URI, ComposeVAppParams)
|
||||
|
@ -118,8 +219,8 @@ public interface VdcAsyncApi {
|
|||
@Consumes(VCloudDirectorMediaType.VAPP)
|
||||
@Produces(VCloudDirectorMediaType.COMPOSE_VAPP_PARAMS)
|
||||
@JAXBResponseParser
|
||||
ListenableFuture<VApp> composeVApp(@EndpointParam URI vdcURI,
|
||||
@BinderParam(BindToXMLPayload.class) ComposeVAppParams params);
|
||||
ListenableFuture<VApp> composeVApp(@EndpointParam URI vdcHref,
|
||||
@BinderParam(BindToXMLPayload.class) ComposeVAppParams params);
|
||||
|
||||
/**
|
||||
* @see VdcApi#instantiateVApp(URI, InstantiateVAppParamsType)
|
||||
|
@ -129,8 +230,8 @@ public interface VdcAsyncApi {
|
|||
@Consumes(VCloudDirectorMediaType.VAPP)
|
||||
@Produces(VCloudDirectorMediaType.INSTANTIATE_VAPP_TEMPLATE_PARAMS)
|
||||
@JAXBResponseParser
|
||||
ListenableFuture<VApp> instantiateVApp(@EndpointParam URI vdcURI,
|
||||
@BinderParam(BindToXMLPayload.class) InstantiateVAppParams params);
|
||||
ListenableFuture<VApp> instantiateVApp(@EndpointParam URI vdcHref,
|
||||
@BinderParam(BindToXMLPayload.class) InstantiateVAppParams params);
|
||||
|
||||
/**
|
||||
* @see VdcApi#uploadVAppTemplate(URI, UploadVAppTemplateParams)
|
||||
|
@ -140,8 +241,8 @@ public interface VdcAsyncApi {
|
|||
@Consumes(VCloudDirectorMediaType.VAPP_TEMPLATE)
|
||||
@Produces(VCloudDirectorMediaType.UPLOAD_VAPP_TEMPLATE_PARAMS)
|
||||
@JAXBResponseParser
|
||||
ListenableFuture<VAppTemplate> uploadVAppTemplate(@EndpointParam URI vdcURI,
|
||||
@BinderParam(BindToXMLPayload.class) UploadVAppTemplateParams params);
|
||||
ListenableFuture<VAppTemplate> uploadVAppTemplate(@EndpointParam URI vdcHref,
|
||||
@BinderParam(BindToXMLPayload.class) UploadVAppTemplateParams params);
|
||||
|
||||
/**
|
||||
* @see VdcApi#createMedia(URI, Media)
|
||||
|
@ -151,8 +252,7 @@ public interface VdcAsyncApi {
|
|||
@Consumes(VCloudDirectorMediaType.MEDIA)
|
||||
@Produces(VCloudDirectorMediaType.MEDIA)
|
||||
@JAXBResponseParser
|
||||
ListenableFuture<Media> createMedia(@EndpointParam URI vdcURI,
|
||||
@BinderParam(BindToXMLPayload.class) Media media);
|
||||
ListenableFuture<Media> createMedia(@EndpointParam URI vdcHref, @BinderParam(BindToXMLPayload.class) Media media);
|
||||
|
||||
/**
|
||||
* @return asynchronous access to {@link Metadata.Readable} features
|
||||
|
|
|
@ -23,17 +23,17 @@ import java.util.concurrent.TimeUnit;
|
|||
|
||||
import org.jclouds.concurrent.Timeout;
|
||||
import org.jclouds.rest.annotations.Delegate;
|
||||
import org.jclouds.rest.annotations.EndpointParam;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.AdminVdc;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.Task;
|
||||
import org.jclouds.vcloud.director.v1_5.features.MetadataApi;
|
||||
import org.jclouds.vcloud.director.v1_5.features.MetadataApi.Writeable;
|
||||
import org.jclouds.vcloud.director.v1_5.features.VdcApi;
|
||||
|
||||
/**
|
||||
* Provides synchronous access to {@link AdminVdc}.
|
||||
*
|
||||
* @see AdminVdcAsyncApi
|
||||
* @author danikov
|
||||
* @author danikov, Adrian Cole
|
||||
*/
|
||||
@Timeout(duration = 180, timeUnit = TimeUnit.SECONDS)
|
||||
public interface AdminVdcApi extends VdcApi {
|
||||
|
@ -48,33 +48,44 @@ public interface AdminVdcApi extends VdcApi {
|
|||
* @return the admin vDC or null if not found
|
||||
*/
|
||||
@Override
|
||||
AdminVdc getVdc(URI vdcRef);
|
||||
AdminVdc get(String vdcUrn);
|
||||
|
||||
@Override
|
||||
AdminVdc get(URI vdcHref);
|
||||
|
||||
/**
|
||||
* Modifies a Virtual Data Center. Virtual Data Center could be enabled or disabled.
|
||||
* Additionally it could have one of these states FAILED_CREATION(-1), NOT_READY(0),
|
||||
* READY(1), UNKNOWN(1) and UNRECOGNIZED(3).
|
||||
*/
|
||||
Task editVdc(URI vdcRef, AdminVdc vdc);
|
||||
Task update(String vdcUrn, AdminVdc vdc);
|
||||
|
||||
Task update(URI vdcHref, AdminVdc vdc);
|
||||
|
||||
/**
|
||||
* Deletes a Virtual Data Center. The Virtual Data Center should be disabled when delete is issued.
|
||||
* Otherwise error code 400 Bad Request is returned.
|
||||
*/
|
||||
// TODO Saw what exception, instead of 400
|
||||
Task deleteVdc(URI vdcRef);
|
||||
Task delete(String vdcUrn);
|
||||
|
||||
Task delete(URI vdcHref);
|
||||
|
||||
/**
|
||||
* Enables a Virtual Data Center. This operation enables disabled Virtual Data Center.
|
||||
* If it is already enabled this operation has no effect.
|
||||
*/
|
||||
void enableVdc(@EndpointParam URI vdcRef);
|
||||
void enable(String vdcUrn);
|
||||
|
||||
void enable(URI vdcHref);
|
||||
|
||||
/**
|
||||
* Disables a Virtual Data Center. If the Virtual Data Center is disabled this operation does not
|
||||
* have an effect.
|
||||
*/
|
||||
void disableVdc(URI vdcRef);
|
||||
void disable(String vdcUrn);
|
||||
|
||||
void disable(URI vdcHref);
|
||||
|
||||
/**
|
||||
* @return synchronous access to {@link Writeable} features
|
||||
|
|
|
@ -38,47 +38,108 @@ import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
|
|||
import org.jclouds.vcloud.director.v1_5.domain.AdminVdc;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.Task;
|
||||
import org.jclouds.vcloud.director.v1_5.features.MetadataAsyncApi;
|
||||
import org.jclouds.vcloud.director.v1_5.features.MetadataAsyncApi.Writeable;
|
||||
import org.jclouds.vcloud.director.v1_5.features.VdcAsyncApi;
|
||||
import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
|
||||
import org.jclouds.vcloud.director.v1_5.functions.href.VdcURNToAdminHref;
|
||||
|
||||
import com.google.common.util.concurrent.ListenableFuture;
|
||||
|
||||
/**
|
||||
* @see AdminVdcApi
|
||||
* @author danikov
|
||||
* @author danikov, Adrian Cole
|
||||
*/
|
||||
@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
|
||||
public interface AdminVdcAsyncApi extends VdcAsyncApi {
|
||||
|
||||
/**
|
||||
* @see AdminVdcApi#get(String)
|
||||
*/
|
||||
@Override
|
||||
@GET
|
||||
@Consumes
|
||||
@JAXBResponseParser
|
||||
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
|
||||
ListenableFuture<AdminVdc> getVdc(@EndpointParam URI vdcRef);
|
||||
ListenableFuture<AdminVdc> get(@EndpointParam(parser = VdcURNToAdminHref.class) String vdcUrn);
|
||||
|
||||
/**
|
||||
* @see AdminVdcApi#update(String, AdminVdc)
|
||||
*/
|
||||
@PUT
|
||||
@Consumes
|
||||
@Produces(VCloudDirectorMediaType.ADMIN_VDC)
|
||||
@JAXBResponseParser
|
||||
ListenableFuture<Task> editVdc(@EndpointParam URI vdcRef, AdminVdc vdc);
|
||||
ListenableFuture<Task> update(@EndpointParam(parser = VdcURNToAdminHref.class) String vdcUrn, AdminVdc vdc);
|
||||
|
||||
/**
|
||||
* @see AdminVdcApi#delete(String)
|
||||
*/
|
||||
@DELETE
|
||||
@Consumes
|
||||
@JAXBResponseParser
|
||||
ListenableFuture<Task> deleteVdc(@EndpointParam URI vdcRef);
|
||||
ListenableFuture<Task> delete(@EndpointParam(parser = VdcURNToAdminHref.class) String vdcUrn);
|
||||
|
||||
/**
|
||||
* @see AdminVdcApi#enable(String)
|
||||
*/
|
||||
@POST
|
||||
@Consumes
|
||||
@Path("/action/enable")
|
||||
@JAXBResponseParser
|
||||
ListenableFuture<Void> enableVdc(@EndpointParam URI vdcRef);
|
||||
ListenableFuture<Void> enable(@EndpointParam(parser = VdcURNToAdminHref.class) String vdcUrn);
|
||||
|
||||
/**
|
||||
* @see AdminVdcApi#disable(String)
|
||||
*/
|
||||
@POST
|
||||
@Consumes
|
||||
@Path("/action/disable")
|
||||
@JAXBResponseParser
|
||||
ListenableFuture<Void> disableVdc(@EndpointParam URI vdcRef);
|
||||
ListenableFuture<Void> disable(@EndpointParam(parser = VdcURNToAdminHref.class) String vdcUrn);
|
||||
|
||||
/**
|
||||
* @see AdminVdcApi#get(URI)
|
||||
*/
|
||||
@Override
|
||||
@GET
|
||||
@Consumes
|
||||
@JAXBResponseParser
|
||||
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
|
||||
ListenableFuture<AdminVdc> get(@EndpointParam URI vdcHref);
|
||||
|
||||
/**
|
||||
* @see AdminVdcApi#update(URI, AdminVdc)
|
||||
*/
|
||||
@PUT
|
||||
@Consumes
|
||||
@Produces(VCloudDirectorMediaType.ADMIN_VDC)
|
||||
@JAXBResponseParser
|
||||
ListenableFuture<Task> update(@EndpointParam URI vdcHref, AdminVdc vdc);
|
||||
|
||||
/**
|
||||
* @see AdminVdcApi#delete(URI)
|
||||
*/
|
||||
@DELETE
|
||||
@Consumes
|
||||
@JAXBResponseParser
|
||||
ListenableFuture<Task> delete(@EndpointParam URI vdcHref);
|
||||
|
||||
/**
|
||||
* @see AdminVdcApi#enable(URI)
|
||||
*/
|
||||
@POST
|
||||
@Consumes
|
||||
@Path("/action/enable")
|
||||
@JAXBResponseParser
|
||||
ListenableFuture<Void> enable(@EndpointParam URI vdcHref);
|
||||
|
||||
/**
|
||||
* @see AdminVdcApi#disable(URI)
|
||||
*/
|
||||
@POST
|
||||
@Consumes
|
||||
@Path("/action/disable")
|
||||
@JAXBResponseParser
|
||||
ListenableFuture<Void> disable(@EndpointParam URI vdcHref);
|
||||
|
||||
/**
|
||||
* @return asynchronous access to {@link Writeable} features
|
||||
|
|
|
@ -61,7 +61,7 @@ public class AllVdcsInOrg implements Function<AdminOrg, Iterable<? extends Vdc>>
|
|||
new Function<Reference, Future<? extends Vdc>>() {
|
||||
@Override
|
||||
public Future<? extends Vdc> apply(Reference from) {
|
||||
return aapi.getVdcApi().getVdc(from.getHref());
|
||||
return aapi.getVdcApi().get(from.getHref());
|
||||
}
|
||||
|
||||
}, executor, null, logger, "vdcs in org " + org.getName());
|
||||
|
|
|
@ -0,0 +1,43 @@
|
|||
/*
|
||||
* Licensed to jclouds, Inc. (jclouds) under one or more
|
||||
* contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. jclouds 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.jclouds.vcloud.director.v1_5.functions.href;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.Entity;
|
||||
import org.jclouds.vcloud.director.v1_5.functions.URNToHref;
|
||||
|
||||
import com.google.common.cache.LoadingCache;
|
||||
|
||||
@Singleton
|
||||
public class VdcURNToAdminHref extends URNToHref {
|
||||
|
||||
@Inject
|
||||
public VdcURNToAdminHref(LoadingCache<String, Entity> resolveEntityCache) {
|
||||
super(resolveEntityCache);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String type() {
|
||||
return VCloudDirectorMediaType.ADMIN_VDC;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,43 @@
|
|||
/*
|
||||
* Licensed to jclouds, Inc. (jclouds) under one or more
|
||||
* contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. jclouds 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.jclouds.vcloud.director.v1_5.functions.href;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.Entity;
|
||||
import org.jclouds.vcloud.director.v1_5.functions.URNToHref;
|
||||
|
||||
import com.google.common.cache.LoadingCache;
|
||||
|
||||
@Singleton
|
||||
public class VdcURNToHref extends URNToHref {
|
||||
|
||||
@Inject
|
||||
public VdcURNToHref(LoadingCache<String, Entity> resolveEntityCache) {
|
||||
super(resolveEntityCache);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String type() {
|
||||
return VCloudDirectorMediaType.VDC;
|
||||
}
|
||||
|
||||
}
|
|
@ -134,8 +134,7 @@ public abstract class AbstractVAppApiLiveTest extends BaseVCloudDirectorApiLiveT
|
|||
@BeforeClass(alwaysRun = true, description = "Retrieves the required apis from the REST API context")
|
||||
protected void setupEnvironment() {
|
||||
// Get the configured Vdc for the tests
|
||||
vdc = vdcApi.getVdc(vdcURI);
|
||||
assertNotNull(vdc, String.format(ENTITY_NON_NULL, VDC));
|
||||
vdc = lazyGetVdc();
|
||||
|
||||
// Get the configured VAppTemplate for the tests
|
||||
vAppTemplate = vAppTemplateApi.getVAppTemplate(vAppTemplateURI);
|
||||
|
@ -192,7 +191,7 @@ public abstract class AbstractVAppApiLiveTest extends BaseVCloudDirectorApiLiveT
|
|||
|
||||
@AfterClass(alwaysRun = true, description = "Cleans up the environment by deleting created VApps")
|
||||
protected void cleanUpEnvironment() {
|
||||
vdc = vdcApi.getVdc(vdcURI); // Refresh
|
||||
vdc = vdcApi.get(vdcUrn); // Refresh
|
||||
|
||||
// Find references in the Vdc with the VApp type and in the list of instantiated VApp names
|
||||
Iterable<Reference> vApps = Iterables.filter(vdc.getResourceEntities(),
|
||||
|
|
|
@ -21,8 +21,6 @@ package org.jclouds.vcloud.director.v1_5.features;
|
|||
import static com.google.common.base.Predicates.and;
|
||||
import static com.google.common.collect.Iterables.find;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.CORRECT_VALUE_OBJECT_FMT;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.OBJ_REQ_LIVE;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.URN_REQ_LIVE;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.TASK_COMPLETE_TIMELY;
|
||||
import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkCatalogItem;
|
||||
import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkMetadata;
|
||||
|
@ -134,7 +132,7 @@ public class CatalogApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
|||
|
||||
@Test(description = "GET /catalog/{id}")
|
||||
public void testGetCatalog() {
|
||||
Catalog catalog = catalogApi.get(catalogUrn);
|
||||
Catalog catalog = lazyGetCatalog();
|
||||
assertNotNull(catalog);
|
||||
// Double check it's pointing at the correct catalog
|
||||
assertEquals(catalog.getId(), catalogUrn);
|
||||
|
@ -149,11 +147,8 @@ public class CatalogApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
|||
|
||||
@Test(description = "POST /catalog/{id}/catalogItems")
|
||||
public void testAddCatalogItem() {
|
||||
assertNotNull(vdcURI, String.format(URN_REQ_LIVE, VDC));
|
||||
|
||||
byte[] iso = new byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };
|
||||
Vdc vdc = context.getApi().getVdcApi().getVdc(vdcURI);
|
||||
assertNotNull(vdc, String.format(OBJ_REQ_LIVE, VDC));
|
||||
Vdc vdc = lazyGetVdc();
|
||||
Link addMedia = find(vdc.getLinks(), and(relEquals("add"), typeEquals(VCloudDirectorMediaType.MEDIA)));
|
||||
|
||||
Media sourceMedia = Media.builder().type(VCloudDirectorMediaType.MEDIA).name("Test media 1").size(iso.length)
|
||||
|
@ -189,13 +184,13 @@ public class CatalogApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
|||
|
||||
@Test(description = "GET /catalog/{id}/metadata")
|
||||
public void testGetCatalogMetadata() {
|
||||
Metadata catalogMetadata = catalogApi.getMetadataApi().get(catalogApi.get(catalogUrn).getHref());
|
||||
Metadata catalogMetadata = catalogApi.getMetadataApi().get(lazyGetCatalog().getHref());
|
||||
checkMetadata(catalogMetadata);
|
||||
}
|
||||
|
||||
@Test(description = "GET /catalog/{id}/metadata/{key}")
|
||||
public void testGetCatalogMetadataValue() {
|
||||
Metadata catalogMetadata = catalogApi.getMetadataApi().get(catalogApi.get(catalogUrn).getHref());
|
||||
Metadata catalogMetadata = catalogApi.getMetadataApi().get(lazyGetCatalog().getHref());
|
||||
MetadataEntry existingMetadataEntry = Iterables.find(catalogMetadata.getMetadataEntries(),
|
||||
new Predicate<MetadataEntry>() {
|
||||
@Override
|
||||
|
|
|
@ -35,7 +35,6 @@ import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.O
|
|||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.OBJ_FIELD_REQ_LIVE;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.OBJ_FIELD_UPDATABLE;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.OBJ_REQ_LIVE;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.URN_REQ_LIVE;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.TASK_COMPLETE_TIMELY;
|
||||
import static org.jclouds.vcloud.director.v1_5.predicates.LinkPredicates.relEquals;
|
||||
import static org.jclouds.vcloud.director.v1_5.predicates.LinkPredicates.typeEquals;
|
||||
|
@ -128,9 +127,7 @@ public class MediaApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
|||
|
||||
@Test(description = "POST /vdc/{id}/media")
|
||||
public void testCreateMedia() throws URISyntaxException {
|
||||
assertNotNull(vdcURI, String.format(URN_REQ_LIVE, VDC));
|
||||
Vdc vdc = vdcApi.getVdc(vdcURI);
|
||||
assertNotNull(vdc, String.format(OBJ_REQ_LIVE, VDC));
|
||||
Vdc vdc = lazyGetVdc();
|
||||
Link addMedia = find(vdc.getLinks(), and(relEquals("add"), typeEquals(VCloudDirectorMediaType.MEDIA)));
|
||||
|
||||
// TODO: generate an iso
|
||||
|
@ -207,7 +204,7 @@ public class MediaApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
|||
@Test(description = "POST /vdc/{id}/action/cloneMedia", dependsOnMethods = { "testGetMediaOwner" })
|
||||
public void testCloneMedia() {
|
||||
oldMedia = media;
|
||||
media = vdcApi.cloneMedia(vdcURI, CloneMediaParams.builder()
|
||||
media = vdcApi.cloneMedia(vdcUrn, CloneMediaParams.builder()
|
||||
.source(Reference.builder().fromEntity(media).build())
|
||||
.name("copied "+media.getName())
|
||||
.description("copied by testCloneMedia()")
|
||||
|
@ -230,7 +227,7 @@ public class MediaApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
|||
|
||||
mediaApi.getMetadataApi().putEntry(media.getHref(), "key", MetadataValue.builder().value("value").build());
|
||||
|
||||
media = vdcApi.cloneMedia(vdcURI, CloneMediaParams.builder()
|
||||
media = vdcApi.cloneMedia(vdcUrn, CloneMediaParams.builder()
|
||||
.source(Reference.builder().fromEntity(media).build())
|
||||
.name("moved test media")
|
||||
.description("moved by testCloneMedia()")
|
||||
|
|
|
@ -47,10 +47,10 @@ import org.testng.annotations.Test;
|
|||
import com.google.common.collect.Iterables;
|
||||
|
||||
/**
|
||||
* Tests live behavior of {@link OrgApi}.
|
||||
*
|
||||
* @author grkvlt@apache.org
|
||||
*/
|
||||
* Tests live behavior of {@link OrgApi}.
|
||||
*
|
||||
* @author grkvlt@apache.org
|
||||
*/
|
||||
@Test(groups = { "live", "user" }, singleThreaded = true, testName = "OrgApiLiveTest")
|
||||
public class OrgApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
||||
|
||||
|
@ -70,13 +70,13 @@ public class OrgApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
|||
public void cleanUp() throws Exception {
|
||||
if (adminMembersSet) {
|
||||
try {
|
||||
Task delete = adminContext.getApi().getOrgApi().getMetadataApi().deleteEntry(toAdminUri(orgURI), "KEY");
|
||||
taskDoneEventually(delete);
|
||||
Task delete = adminContext.getApi().getOrgApi().getMetadataApi().deleteEntry(toAdminUri(orgURI), "KEY");
|
||||
taskDoneEventually(delete);
|
||||
} catch (Exception e) {
|
||||
logger.warn(e, "Error when deleting metadata entry");
|
||||
}
|
||||
try {
|
||||
adminContext.getApi().getCatalogApi().delete(catalogUrn);
|
||||
adminContext.getApi().getCatalogApi().delete(catalogUrn);
|
||||
} catch (Exception e) {
|
||||
logger.warn(e, "Error when deleting catalog'%s': %s", catalogUrn);
|
||||
}
|
||||
|
@ -103,7 +103,8 @@ public class OrgApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
|||
assertFalse(Iterables.isEmpty(orgList), String.format(NOT_EMPTY_OBJECT_FMT, "Org", "OrgList"));
|
||||
|
||||
for (Reference orgRef : orgList) {
|
||||
assertEquals(orgRef.getType(), VCloudDirectorMediaType.ORG, String.format(CONDITION_FMT, "Reference.Type", VCloudDirectorMediaType.ORG, orgRef.getType()));
|
||||
assertEquals(orgRef.getType(), VCloudDirectorMediaType.ORG,
|
||||
String.format(CONDITION_FMT, "Reference.Type", VCloudDirectorMediaType.ORG, orgRef.getType()));
|
||||
checkReferenceType(orgRef);
|
||||
}
|
||||
}
|
||||
|
@ -128,16 +129,15 @@ public class OrgApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
|||
}
|
||||
|
||||
/**
|
||||
* If we're running in an admin context, it's cleaner to make temporary entities, plus eliminates the need for configuration
|
||||
* If we're running in an admin context, it's cleaner to make temporary entities, plus eliminates
|
||||
* the need for configuration
|
||||
*/
|
||||
private void setupAdminMembers() {
|
||||
adminContext.getApi().getOrgApi().getMetadataApi().putEntry(toAdminUri(orgURI),
|
||||
"KEY", MetadataValue.builder().value("VALUE").build());
|
||||
adminContext.getApi().getOrgApi().getMetadataApi()
|
||||
.putEntry(toAdminUri(orgURI), "KEY", MetadataValue.builder().value("VALUE").build());
|
||||
|
||||
AdminCatalog newCatalog = AdminCatalog.builder()
|
||||
.name("Test Catalog "+getTestDateTimeStamp())
|
||||
.description("created by testOrg()")
|
||||
.build();
|
||||
AdminCatalog newCatalog = AdminCatalog.builder().name("Test Catalog " + getTestDateTimeStamp())
|
||||
.description("created by testOrg()").build();
|
||||
newCatalog = adminContext.getApi().getCatalogApi().createCatalogInOrg(newCatalog, org.getId());
|
||||
|
||||
catalogUrn = newCatalog.getId();
|
||||
|
@ -156,7 +156,8 @@ public class OrgApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
|||
checkMetadata(metadata);
|
||||
|
||||
// Check requirements for this test
|
||||
assertFalse(Iterables.isEmpty(metadata.getMetadataEntries()), String.format(NOT_EMPTY_OBJECT_FMT, "MetadataEntry", "Org"));
|
||||
assertFalse(Iterables.isEmpty(metadata.getMetadataEntries()),
|
||||
String.format(NOT_EMPTY_OBJECT_FMT, "MetadataEntry", "Org"));
|
||||
}
|
||||
|
||||
@Test(description = "GET /org/{id}/metadata/{key}", dependsOnMethods = { "testGetOrgMetadata" })
|
||||
|
@ -164,12 +165,14 @@ public class OrgApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
|||
// Call the method being tested
|
||||
MetadataValue value = orgApi.getMetadataApi().getValue(orgURI, "KEY");
|
||||
|
||||
// NOTE The environment MUST have configured the metadata entry as '{ key="KEY", value="VALUE" )'
|
||||
// NOTE The environment MUST have configured the metadata entry as '{ key="KEY", value="VALUE"
|
||||
// )'
|
||||
|
||||
String expected = "VALUE";
|
||||
|
||||
checkMetadataValue(value);
|
||||
assertEquals(value.getValue(), expected, String.format(CORRECT_VALUE_OBJECT_FMT, "Value", "MetadataValue", expected, value.getValue()));
|
||||
assertEquals(value.getValue(), expected,
|
||||
String.format(CORRECT_VALUE_OBJECT_FMT, "Value", "MetadataValue", expected, value.getValue()));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -124,7 +124,7 @@ public class VAppApiLiveTest extends AbstractVAppApiLiveTest {
|
|||
|
||||
@BeforeClass(alwaysRun = true)
|
||||
protected void setupRequiredEntities() {
|
||||
Set<Link> links = vdcApi.getVdc(vdcURI).getLinks();
|
||||
Set<Link> links = lazyGetVdc().getLinks();
|
||||
|
||||
if (mediaURI == null) {
|
||||
Predicate<Link> addMediaLink = and(relEquals(Link.Rel.ADD), typeEquals(VCloudDirectorMediaType.MEDIA));
|
||||
|
@ -214,7 +214,7 @@ public class VAppApiLiveTest extends AbstractVAppApiLiveTest {
|
|||
public void testRecomposeVApp() {
|
||||
Set<Vm> vms = getAvailableVMsFromVAppTemplates();
|
||||
|
||||
VApp composedVApp = vdcApi.composeVApp(vdcURI, ComposeVAppParams.builder()
|
||||
VApp composedVApp = vdcApi.composeVApp(vdcUrn, ComposeVAppParams.builder()
|
||||
.name(name("composed-"))
|
||||
.instantiationParams(instantiationParams())
|
||||
.build());
|
||||
|
|
|
@ -105,7 +105,7 @@ public class VAppTemplateApiLiveTest extends AbstractVAppApiLiveTest {
|
|||
.isSourceDelete(false)
|
||||
.name("clone")
|
||||
.build();
|
||||
VAppTemplate clonedVappTemplate = vdcApi.cloneVAppTemplate(vdcURI, cloneVAppTemplateParams);
|
||||
VAppTemplate clonedVappTemplate = vdcApi.cloneVAppTemplate(vdcUrn, cloneVAppTemplateParams);
|
||||
|
||||
if (waitForTask) {
|
||||
Task cloneTask = Iterables.getFirst(clonedVappTemplate.getTasks(), null);
|
||||
|
|
|
@ -83,7 +83,7 @@ public class VdcApiExpectTest extends VCloudDirectorAdminApiExpectTest {
|
|||
|
||||
Vdc expected = getVdc();
|
||||
|
||||
assertEquals(api.getVdcApi().getVdc(vdcURI), expected);
|
||||
assertEquals(api.getVdcApi().get(vdcURI), expected);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -105,7 +105,7 @@ public class VdcApiExpectTest extends VCloudDirectorAdminApiExpectTest {
|
|||
.build();
|
||||
|
||||
try {
|
||||
api.getVdcApi().getVdc(URI.create(endpoint + "/vdc/NOTAUUID"));
|
||||
api.getVdcApi().get(URI.create(endpoint + "/vdc/NOTAUUID"));
|
||||
fail("Should give HTTP 400 error");
|
||||
} catch (VCloudDirectorException vde) {
|
||||
assertEquals(vde.getError(), expected);
|
||||
|
@ -124,7 +124,7 @@ public class VdcApiExpectTest extends VCloudDirectorAdminApiExpectTest {
|
|||
.xmlFilePayload("/vdc/error403-fake.xml", VCloudDirectorMediaType.ERROR)
|
||||
.httpResponseBuilder().statusCode(403).build());
|
||||
|
||||
assertNull(api.getVdcApi().getVdc(URI.create(endpoint + "/vdc/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee")));
|
||||
assertNull(api.getVdcApi().get(URI.create(endpoint + "/vdc/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee")));
|
||||
}
|
||||
|
||||
@Test(enabled = false)
|
||||
|
|
|
@ -25,7 +25,6 @@ import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.U
|
|||
import static org.testng.Assert.assertEquals;
|
||||
import static org.testng.Assert.assertFalse;
|
||||
import static org.testng.Assert.assertNotNull;
|
||||
import static org.testng.Assert.assertTrue;
|
||||
import static org.testng.Assert.fail;
|
||||
|
||||
import java.util.Map;
|
||||
|
@ -95,7 +94,7 @@ public class VdcApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
|||
vappTemplateApi = context.getApi().getVAppTemplateApi();
|
||||
vappApi = context.getApi().getVAppApi();
|
||||
|
||||
assertNotNull(vdcURI, String.format(URN_REQ_LIVE, VDC));
|
||||
assertNotNull(vdcUrn, String.format(URN_REQ_LIVE, VDC));
|
||||
network = lazyGetNetwork();
|
||||
}
|
||||
|
||||
|
@ -122,8 +121,8 @@ public class VdcApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
|||
|
||||
if (metadataSet) {
|
||||
try {
|
||||
Task delete = adminContext.getApi().getVdcApi().getMetadataApi().deleteEntry(toAdminUri(vdcURI), "key");
|
||||
taskDoneEventually(delete);
|
||||
Task delete = adminContext.getApi().getVdcApi().getMetadataApi().deleteEntry(lazyGetVdc().getHref(), "key");
|
||||
taskDoneEventually(delete);
|
||||
} catch (Exception e) {
|
||||
logger.warn(e, "Error deleting metadata entry");
|
||||
}
|
||||
|
@ -132,26 +131,23 @@ public class VdcApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
|||
|
||||
@Test(description = "GET /vdc/{id}")
|
||||
public void testGetVdc() {
|
||||
Vdc vdc = vdcApi.getVdc(vdcURI);
|
||||
Vdc vdc = lazyGetVdc();
|
||||
assertNotNull(vdc, String.format(OBJ_REQ_LIVE, VDC));
|
||||
assertTrue(!vdc.getDescription().equals("DO NOT USE"), "vDC isn't to be used for testing");
|
||||
|
||||
assertFalse("DO NOT USE".equals(vdc.getDescription()), "vDC isn't to be used for testing");
|
||||
Checks.checkVdc(vdc);
|
||||
}
|
||||
|
||||
@Test(description = "POST /vdc/{id}/action/captureVApp", dependsOnMethods = { "testInstantiateVAppTemplate" } )
|
||||
@Test(description = "POST /vdc/{id}/action/captureVApp", dependsOnMethods = { "testInstantiateVAppTemplate" })
|
||||
public void testCaptureVApp() {
|
||||
String name = name("captured-");
|
||||
|
||||
CaptureVAppParams captureVappParams = CaptureVAppParams.builder()
|
||||
.name(name)
|
||||
.source(instantiatedVApp.getHref())
|
||||
// TODO: test optional params
|
||||
//.description("")
|
||||
//.sections(sections) // TODO: ovf sections
|
||||
CaptureVAppParams captureVappParams = CaptureVAppParams.builder().name(name).source(instantiatedVApp.getHref())
|
||||
// TODO: test optional params
|
||||
// .description("")
|
||||
// .sections(sections) // TODO: ovf sections
|
||||
.build();
|
||||
|
||||
capturedVAppTemplate = vdcApi.captureVApp(vdcURI, captureVappParams);
|
||||
capturedVAppTemplate = vdcApi.captureVApp(vdcUrn, captureVappParams);
|
||||
|
||||
Task task = Iterables.getFirst(capturedVAppTemplate.getTasks(), null);
|
||||
assertTaskSucceedsLong(task);
|
||||
|
@ -162,26 +158,25 @@ public class VdcApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
|||
String.format(OBJ_FIELD_EQ, "VAppTemplate", "name", name, capturedVAppTemplate.getName()));
|
||||
}
|
||||
|
||||
@Test(description = "POST /vdc/{id}/action/cloneVApp", dependsOnMethods = { "testInstantiateVAppTemplate" } )
|
||||
@Test(description = "POST /vdc/{id}/action/cloneVApp", dependsOnMethods = { "testInstantiateVAppTemplate" })
|
||||
public void testCloneVApp() {
|
||||
CloneVAppParams cloneVappParams = CloneVAppParams.builder()
|
||||
.source(instantiatedVApp.getHref())
|
||||
// TODO: test optional params
|
||||
//.name("")
|
||||
//.description("")
|
||||
//.deploy(true)
|
||||
//.isSourceDelete(true)
|
||||
//.powerOn(true)
|
||||
//.instantiationParams(InstantiationParams.builder()
|
||||
// .sections(sections) // TODO: ovf sections? various tests?
|
||||
// .build())
|
||||
CloneVAppParams cloneVappParams = CloneVAppParams.builder().source(instantiatedVApp.getHref())
|
||||
// TODO: test optional params
|
||||
// .name("")
|
||||
// .description("")
|
||||
// .deploy(true)
|
||||
// .isSourceDelete(true)
|
||||
// .powerOn(true)
|
||||
// .instantiationParams(InstantiationParams.builder()
|
||||
// .sections(sections) // TODO: ovf sections? various tests?
|
||||
// .build())
|
||||
|
||||
// Reserved. Unimplemented params; may test eventually when implemented
|
||||
//.vAppParent(vAppParentRef)
|
||||
//.linkedClone(true)
|
||||
// .vAppParent(vAppParentRef)
|
||||
// .linkedClone(true)
|
||||
.build();
|
||||
|
||||
clonedVApp = vdcApi.cloneVApp(vdcURI, cloneVappParams);
|
||||
clonedVApp = vdcApi.cloneVApp(vdcUrn, cloneVappParams);
|
||||
|
||||
Task task = Iterables.getFirst(clonedVApp.getTasks(), null);
|
||||
assertNotNull(task, "vdcApi.cloneVApp returned VApp that did not contain any tasks");
|
||||
|
@ -192,8 +187,7 @@ public class VdcApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
|||
|
||||
@Test(description = "POST /vdc/{id}/action/cloneVAppTemplate")
|
||||
public void testCloneVAppTemplate() {
|
||||
clonedVAppTemplate = vdcApi.cloneVAppTemplate(vdcURI, CloneVAppTemplateParams.builder()
|
||||
.source(vAppTemplateURI)
|
||||
clonedVAppTemplate = vdcApi.cloneVAppTemplate(vdcUrn, CloneVAppTemplateParams.builder().source(vAppTemplateURI)
|
||||
.build());
|
||||
|
||||
Task task = Iterables.getFirst(clonedVAppTemplate.getTasks(), null);
|
||||
|
@ -207,23 +201,22 @@ public class VdcApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
|||
public void testComposeVApp() {
|
||||
String name = name("composed-");
|
||||
|
||||
composedVApp = vdcApi.composeVApp(vdcURI, ComposeVAppParams.builder()
|
||||
.name(name)
|
||||
// TODO: test optional params
|
||||
//.sourcedItem(SourcedCompositionItemParam.builder()
|
||||
//.sourcedItem(vAppTemplateURI)
|
||||
//.build())
|
||||
//.description("")
|
||||
//.deploy(true)
|
||||
//.isSourceDelete(false)
|
||||
//.powerOn(true)
|
||||
//.instantiationParams(InstantiationParams.builder()
|
||||
// .sections(sections) // TODO: ovf sections? various tests?
|
||||
// .build())
|
||||
composedVApp = vdcApi.composeVApp(vdcUrn, ComposeVAppParams.builder().name(name)
|
||||
// TODO: test optional params
|
||||
// .sourcedItem(SourcedCompositionItemParam.builder()
|
||||
// .sourcedItem(vAppTemplateURI)
|
||||
// .build())
|
||||
// .description("")
|
||||
// .deploy(true)
|
||||
// .isSourceDelete(false)
|
||||
// .powerOn(true)
|
||||
// .instantiationParams(InstantiationParams.builder()
|
||||
// .sections(sections) // TODO: ovf sections? various tests?
|
||||
// .build())
|
||||
|
||||
// Reserved. Unimplemented params; may test eventually when implemented
|
||||
//.linkedClone()
|
||||
.build());
|
||||
// Reserved. Unimplemented params; may test eventually when implemented
|
||||
// .linkedClone()
|
||||
.build());
|
||||
|
||||
Task task = Iterables.getFirst(composedVApp.getTasks(), null);
|
||||
assertNotNull(task, "vdcApi.composeVApp returned VApp that did not contain any tasks");
|
||||
|
@ -237,49 +230,38 @@ public class VdcApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
|||
// TODO Duplicates code in VAppApiLiveTest
|
||||
@Test(description = "POST /vdc/{id}/action/instantiateVAppTemplate")
|
||||
public void testInstantiateVAppTemplate() {
|
||||
Vdc vdc = vdcApi.getVdc(vdcURI);
|
||||
Vdc vdc = vdcApi.get(vdcUrn);
|
||||
|
||||
Set<Reference> networks = vdc.getAvailableNetworks();
|
||||
Optional<Reference> parentNetwork = Iterables.tryFind(
|
||||
networks, new Predicate<Reference>() {
|
||||
@Override
|
||||
public boolean apply(Reference reference) {
|
||||
return reference.getHref().equals(network.getHref());
|
||||
}
|
||||
});
|
||||
Optional<Reference> parentNetwork = Iterables.tryFind(networks, new Predicate<Reference>() {
|
||||
@Override
|
||||
public boolean apply(Reference reference) {
|
||||
return reference.getHref().equals(network.getHref());
|
||||
}
|
||||
});
|
||||
|
||||
if (!parentNetwork.isPresent()) {
|
||||
fail(String.format("Could not find network %s in vdc", network.getHref().toASCIIString()));
|
||||
}
|
||||
|
||||
NetworkConfiguration networkConfiguration = NetworkConfiguration.builder()
|
||||
.parentNetwork(parentNetwork.get())
|
||||
.fenceMode(FenceMode.BRIDGED)
|
||||
.build();
|
||||
NetworkConfiguration networkConfiguration = NetworkConfiguration.builder().parentNetwork(parentNetwork.get())
|
||||
.fenceMode(FenceMode.BRIDGED).build();
|
||||
|
||||
NetworkConfigSection networkConfigSection = NetworkConfigSection.builder()
|
||||
NetworkConfigSection networkConfigSection = NetworkConfigSection
|
||||
.builder()
|
||||
.info("Configuration parameters for logical networks")
|
||||
.networkConfigs(
|
||||
ImmutableSet.of(VAppNetworkConfiguration.builder()
|
||||
.networkName("vAppNetwork")
|
||||
.configuration(networkConfiguration)
|
||||
.build()))
|
||||
.build();
|
||||
ImmutableSet.of(VAppNetworkConfiguration.builder().networkName("vAppNetwork")
|
||||
.configuration(networkConfiguration).build())).build();
|
||||
|
||||
InstantiationParams instantiationParams = InstantiationParams.builder()
|
||||
.sections(ImmutableSet.of(networkConfigSection))
|
||||
.build();
|
||||
.sections(ImmutableSet.of(networkConfigSection)).build();
|
||||
|
||||
InstantiateVAppTemplateParams instantiate = InstantiateVAppTemplateParams.builder()
|
||||
.name(name("test-vapp-"))
|
||||
.notDeploy()
|
||||
.notPowerOn()
|
||||
.description("Test VApp")
|
||||
.instantiationParams(instantiationParams)
|
||||
.source(vAppTemplateURI)
|
||||
.build();
|
||||
InstantiateVAppTemplateParams instantiate = InstantiateVAppTemplateParams.builder().name(name("test-vapp-"))
|
||||
.notDeploy().notPowerOn().description("Test VApp").instantiationParams(instantiationParams)
|
||||
.source(vAppTemplateURI).build();
|
||||
|
||||
instantiatedVApp = vdcApi.instantiateVApp(vdcURI, instantiate);
|
||||
instantiatedVApp = vdcApi.instantiateVApp(vdcUrn, instantiate);
|
||||
Task instantiationTask = Iterables.getFirst(instantiatedVApp.getTasks(), null);
|
||||
assertTaskSucceedsLong(instantiationTask);
|
||||
|
||||
|
@ -289,22 +271,21 @@ public class VdcApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
|||
@Test(description = "POST /vdc/{id}/action/uploadVAppTemplate")
|
||||
public void testUploadVAppTemplate() {
|
||||
// TODO Should test all 4 stages of upload; currently doing only stage 1 here.
|
||||
// 1. creating empty vApp template entity
|
||||
// 2. uploading an OVF of vApp template
|
||||
// 3. uploading disks described from the OVF
|
||||
// 4. finishing task for uploading
|
||||
// 1. creating empty vApp template entity
|
||||
// 2. uploading an OVF of vApp template
|
||||
// 3. uploading disks described from the OVF
|
||||
// 4. finishing task for uploading
|
||||
|
||||
String name = name("uploaded-");
|
||||
|
||||
UploadVAppTemplateParams uploadVAppTemplateParams = UploadVAppTemplateParams.builder()
|
||||
.name(name)
|
||||
// TODO: test optional params
|
||||
//.description("")
|
||||
//.transferFormat("")
|
||||
//.manifestRequired(true)
|
||||
UploadVAppTemplateParams uploadVAppTemplateParams = UploadVAppTemplateParams.builder().name(name)
|
||||
// TODO: test optional params
|
||||
// .description("")
|
||||
// .transferFormat("")
|
||||
// .manifestRequired(true)
|
||||
.build();
|
||||
|
||||
uploadedVAppTemplate = vdcApi.uploadVAppTemplate(vdcURI, uploadVAppTemplateParams);
|
||||
uploadedVAppTemplate = vdcApi.uploadVAppTemplate(vdcUrn, uploadVAppTemplateParams);
|
||||
|
||||
Checks.checkVAppTemplateWhenNotReady(uploadedVAppTemplate);
|
||||
|
||||
|
@ -319,35 +300,35 @@ public class VdcApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
|||
}
|
||||
|
||||
private void setupMetadata() {
|
||||
adminContext.getApi().getVdcApi().getMetadataApi().putEntry(toAdminUri(vdcURI),
|
||||
"key", MetadataValue.builder().value("value").build());
|
||||
adminContext.getApi().getVdcApi().getMetadataApi()
|
||||
.putEntry(lazyGetVdc().getHref(), "key", MetadataValue.builder().value("value").build());
|
||||
metadataSet = true;
|
||||
}
|
||||
|
||||
@Test(description = "GET /vdc/{id}/metadata", dependsOnMethods = { "testGetVdc" } )
|
||||
@Test(description = "GET /vdc/{id}/metadata", dependsOnMethods = { "testGetVdc" })
|
||||
public void testGetMetadata() {
|
||||
if(adminContext != null) {
|
||||
if (adminContext != null) {
|
||||
setupMetadata();
|
||||
}
|
||||
|
||||
Metadata metadata = vdcApi.getMetadataApi().get(vdcURI);
|
||||
Metadata metadata = vdcApi.getMetadataApi().get(lazyGetVdc().getHref());
|
||||
|
||||
// required for testing
|
||||
assertFalse(Iterables.isEmpty(metadata.getMetadataEntries()),
|
||||
String.format(OBJ_FIELD_REQ_LIVE, VDC, "metadata.entries"));
|
||||
String.format(OBJ_FIELD_REQ_LIVE, VDC, "metadata.entries"));
|
||||
|
||||
Checks.checkMetadataFor(VDC, metadata);
|
||||
}
|
||||
|
||||
@Test(description = "GET /vdc/{id}/metadata/{key}", dependsOnMethods = { "testGetMetadata" } )
|
||||
@Test(description = "GET /vdc/{id}/metadata/{key}", dependsOnMethods = { "testGetMetadata" })
|
||||
public void testGetMetadataValue() {
|
||||
// First find a key
|
||||
Metadata metadata = vdcApi.getMetadataApi().get(vdcURI);
|
||||
Metadata metadata = vdcApi.getMetadataApi().get(lazyGetVdc().getHref());
|
||||
Map<String, String> metadataMap = Checks.metadataToMap(metadata);
|
||||
String key = Iterables.getFirst(metadataMap.keySet(), "MadeUpKey!");
|
||||
String value = metadataMap.get(key);
|
||||
|
||||
MetadataValue metadataValue = vdcApi.getMetadataApi().getValue(vdcURI, key);
|
||||
MetadataValue metadataValue = vdcApi.getMetadataApi().getValue(lazyGetVdc().getHref(), key);
|
||||
|
||||
Checks.checkMetadataValueFor(VDC, metadataValue, value);
|
||||
}
|
||||
|
|
|
@ -122,7 +122,7 @@ public class VmApiLiveTest extends AbstractVAppApiLiveTest {
|
|||
|
||||
@BeforeClass(alwaysRun = true)
|
||||
protected void setupRequiredEntities() {
|
||||
Set<Link> links = vdcApi.getVdc(vdcURI).getLinks();
|
||||
Set<Link> links = vdcApi.get(vdcUrn).getLinks();
|
||||
|
||||
if (mediaURI == null) {
|
||||
Predicate<Link> addMediaLink = and(relEquals(Link.Rel.ADD), typeEquals(VCloudDirectorMediaType.MEDIA));
|
||||
|
|
|
@ -56,7 +56,7 @@ public class AdminVdcApiExpectTest extends VCloudDirectorAdminApiExpectTest {
|
|||
|
||||
AdminVdc expected = adminVdc();
|
||||
|
||||
assertEquals(api.getVdcApi().getVdc(vdcRef.getHref()), expected);
|
||||
assertEquals(api.getVdcApi().get(vdcRef.getHref()), expected);
|
||||
}
|
||||
|
||||
public static final AdminVdc adminVdc() {
|
||||
|
|
|
@ -19,13 +19,10 @@
|
|||
package org.jclouds.vcloud.director.v1_5.features.admin;
|
||||
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.OBJ_REQ_LIVE;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.URN_REQ_LIVE;
|
||||
import static org.testng.Assert.assertEquals;
|
||||
import static org.testng.Assert.assertNotNull;
|
||||
import static org.testng.Assert.fail;
|
||||
|
||||
import java.net.URI;
|
||||
|
||||
import org.jclouds.vcloud.director.v1_5.VCloudDirectorException;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.AdminVdc;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.Checks;
|
||||
|
@ -56,8 +53,6 @@ public class AdminVdcApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
|||
protected AdminVdcApi vdcApi;
|
||||
protected MetadataApi.Writeable metadataApi;
|
||||
|
||||
protected URI adminVdcUri;
|
||||
|
||||
private String metadataKey;
|
||||
private String metadataValue;
|
||||
|
||||
|
@ -66,15 +61,13 @@ public class AdminVdcApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
|||
public void setupRequiredApis() {
|
||||
vdcApi = adminContext.getApi().getVdcApi();
|
||||
metadataApi = vdcApi.getMetadataApi();
|
||||
assertNotNull(vdcURI, String.format(URN_REQ_LIVE, VDC));
|
||||
adminVdcUri = toAdminUri(vdcURI);
|
||||
}
|
||||
|
||||
@AfterClass(alwaysRun = true)
|
||||
public void cleanUp() throws Exception {
|
||||
if (metadataKey != null) {
|
||||
try {
|
||||
Task task = metadataApi.deleteEntry(adminVdcUri, metadataKey);
|
||||
Task task = metadataApi.deleteEntry(lazyGetVdc().getHref(), metadataKey);
|
||||
taskDoneEventually(task);
|
||||
} catch (VCloudDirectorException e) {
|
||||
logger.warn(e, "Error deleting metadata-value (perhaps it doesn't exist?); continuing...");
|
||||
|
@ -84,7 +77,7 @@ public class AdminVdcApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
|||
|
||||
@Test(description = "GET /admin/vdc/{id}")
|
||||
public void testGetVdc() {
|
||||
AdminVdc vdc = vdcApi.getVdc(adminVdcUri);
|
||||
AdminVdc vdc = vdcApi.get(vdcUrn);
|
||||
assertNotNull(vdc, String.format(OBJ_REQ_LIVE, VDC));
|
||||
|
||||
// parent type
|
||||
|
@ -92,21 +85,19 @@ public class AdminVdcApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
|||
}
|
||||
|
||||
// TODO insufficient permissions to test
|
||||
@Test(description = "PUT /admin/vdc/{id}", enabled=false)
|
||||
@Test(description = "PUT /admin/vdc/{id}", enabled = false)
|
||||
public void testEditVdc() throws Exception {
|
||||
String origName = vdcApi.getVdc(adminVdcUri).getName();
|
||||
String origName = lazyGetVdc().getName();
|
||||
String newName = name("a");
|
||||
Exception exception = null;
|
||||
|
||||
AdminVdc vdc = AdminVdc.builder()
|
||||
.name(newName)
|
||||
.build();
|
||||
AdminVdc vdc = AdminVdc.builder().name(newName).build();
|
||||
|
||||
try {
|
||||
Task task = vdcApi.editVdc(adminVdcUri, vdc);
|
||||
Task task = vdcApi.update(vdcUrn, vdc);
|
||||
assertTaskSucceeds(task);
|
||||
|
||||
AdminVdc modified = vdcApi.getVdc(adminVdcUri);
|
||||
AdminVdc modified = vdcApi.get(vdcUrn);
|
||||
assertEquals(modified.getName(), newName);
|
||||
|
||||
// parent type
|
||||
|
@ -116,7 +107,7 @@ public class AdminVdcApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
|||
} finally {
|
||||
try {
|
||||
AdminVdc restorableVdc = AdminVdc.builder().name(origName).build();
|
||||
Task task = vdcApi.editVdc(adminVdcUri, restorableVdc);
|
||||
Task task = vdcApi.update(vdcUrn, restorableVdc);
|
||||
assertTaskSucceeds(task);
|
||||
} catch (Exception e) {
|
||||
if (exception != null) {
|
||||
|
@ -130,32 +121,33 @@ public class AdminVdcApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
|||
}
|
||||
|
||||
// TODO insufficient permissions to test
|
||||
@Test(description = "DELETE /admin/vdc/{id}", enabled=false)
|
||||
@Test(description = "DELETE /admin/vdc/{id}", enabled = false)
|
||||
public void testDeleteVdc() throws Exception {
|
||||
// TODO Need to have a VDC that we're happy to delete!
|
||||
Task task = vdcApi.deleteVdc(adminVdcUri);
|
||||
Task task = vdcApi.delete(vdcUrn);
|
||||
assertTaskSucceeds(task);
|
||||
|
||||
try {
|
||||
vdcApi.getVdc(adminVdcUri);
|
||||
vdcApi.get(vdcUrn);
|
||||
} catch (VCloudDirectorException e) {
|
||||
// success; unreachable because it has been deleted
|
||||
// TODO: ^^ wrong. this should return null
|
||||
}
|
||||
}
|
||||
|
||||
// TODO insufficient permissions to test
|
||||
@Test(description = "DISABLE/ENABLE /admin/vdc/{id}", enabled=false)
|
||||
@Test(description = "DISABLE/ENABLE /admin/vdc/{id}", enabled = false)
|
||||
public void testDisableAndEnableVdc() throws Exception {
|
||||
// TODO Need to have a VDC that we're happy to delete!
|
||||
Exception exception = null;
|
||||
|
||||
try {
|
||||
vdcApi.disableVdc(adminVdcUri);
|
||||
vdcApi.disable(vdcUrn);
|
||||
} catch (Exception e) {
|
||||
exception = e;
|
||||
} finally {
|
||||
try {
|
||||
vdcApi.enableVdc(adminVdcUri);
|
||||
vdcApi.enable(vdcUrn);
|
||||
} catch (Exception e) {
|
||||
if (exception != null) {
|
||||
logger.warn(e, "Error resetting adminVdc.name; rethrowing original test exception...");
|
||||
|
@ -169,60 +161,59 @@ public class AdminVdcApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
|||
|
||||
@Test(description = "GET /admin/vdc/{id}/metadata")
|
||||
public void testGetMetadata() throws Exception {
|
||||
Metadata metadata = metadataApi.get(adminVdcUri);
|
||||
Metadata metadata = metadataApi.get(lazyGetVdc().getHref());
|
||||
|
||||
Checks.checkMetadata(metadata);
|
||||
}
|
||||
|
||||
// TODO insufficient permissions to test
|
||||
@Test(description = "PUT /admin/vdc/{id}/metadata", enabled=false)
|
||||
@Test(description = "PUT /admin/vdc/{id}/metadata", enabled = false)
|
||||
public void testSetMetadata() throws Exception {
|
||||
metadataKey = name("key-");
|
||||
metadataValue = name("value-");
|
||||
Metadata metadata = Metadata.builder()
|
||||
.entry(MetadataEntry.builder().entry(metadataKey, metadataValue).build())
|
||||
Metadata metadata = Metadata.builder().entry(MetadataEntry.builder().entry(metadataKey, metadataValue).build())
|
||||
.build();
|
||||
|
||||
Task task = metadataApi.merge(adminVdcUri, metadata);
|
||||
Task task = metadataApi.merge(lazyGetVdc().getHref(), metadata);
|
||||
assertTaskSucceeds(task);
|
||||
|
||||
MetadataValue modified = metadataApi.getValue(adminVdcUri, metadataKey);
|
||||
MetadataValue modified = metadataApi.getValue(lazyGetVdc().getHref(), metadataKey);
|
||||
Checks.checkMetadataValueFor("AdminVdc", modified, metadataValue);
|
||||
Checks.checkMetadata(metadata);
|
||||
}
|
||||
|
||||
// TODO insufficient permissions to test
|
||||
@Test(description = "GET /admin/vdc/{id}/metadata/{key}", dependsOnMethods = { "testSetMetadata" }, enabled=false)
|
||||
@Test(description = "GET /admin/vdc/{id}/metadata/{key}", dependsOnMethods = { "testSetMetadata" }, enabled = false)
|
||||
public void testGetMetadataValue() throws Exception {
|
||||
MetadataValue retrievedMetadataValue = metadataApi.getValue(adminVdcUri, metadataKey);
|
||||
MetadataValue retrievedMetadataValue = metadataApi.getValue(lazyGetVdc().getHref(), metadataKey);
|
||||
|
||||
Checks.checkMetadataValueFor("AdminVdc", retrievedMetadataValue, metadataValue);
|
||||
}
|
||||
|
||||
// TODO insufficient permissions to test
|
||||
@Test(description = "PUT /admin/vdc/{id}/metadata/{key}", dependsOnMethods = { "testGetMetadataValue" }, enabled=false )
|
||||
@Test(description = "PUT /admin/vdc/{id}/metadata/{key}", dependsOnMethods = { "testGetMetadataValue" }, enabled = false)
|
||||
public void testSetMetadataValue() throws Exception {
|
||||
metadataValue = name("value-");
|
||||
MetadataValue newV = MetadataValue.builder().value(metadataValue).build();
|
||||
|
||||
Task task = metadataApi.putEntry(adminVdcUri, metadataKey, newV);
|
||||
Task task = metadataApi.putEntry(lazyGetVdc().getHref(), metadataKey, newV);
|
||||
assertTaskSucceeds(task);
|
||||
|
||||
MetadataValue retrievedMetadataValue = metadataApi.getValue(adminVdcUri, metadataKey);
|
||||
MetadataValue retrievedMetadataValue = metadataApi.getValue(lazyGetVdc().getHref(), metadataKey);
|
||||
Checks.checkMetadataValueFor("AdminVdc", retrievedMetadataValue, metadataValue);
|
||||
}
|
||||
|
||||
// TODO insufficient permissions to test
|
||||
@Test(description = "DELETE /admin/vdc/{id}/metadata/{key}", dependsOnMethods = { "testSetMetadataValue" }, enabled=false )
|
||||
@Test(description = "DELETE /admin/vdc/{id}/metadata/{key}", dependsOnMethods = { "testSetMetadataValue" }, enabled = false)
|
||||
public void testDeleteMetadataValue() throws Exception {
|
||||
// TODO Remove dependency on other tests; make cleanUp delete a list of metadata entries?
|
||||
|
||||
Task task = metadataApi.deleteEntry(adminVdcUri, metadataKey);
|
||||
Task task = metadataApi.deleteEntry(lazyGetVdc().getHref(), metadataKey);
|
||||
assertTaskSucceeds(task);
|
||||
|
||||
try {
|
||||
metadataApi.getValue(adminVdcUri, metadataKey);
|
||||
fail("Retrieval of metadata value "+metadataKey+" should have fail after deletion");
|
||||
metadataApi.getValue(lazyGetVdc().getHref(), metadataKey);
|
||||
fail("Retrieval of metadata value " + metadataKey + " should have fail after deletion");
|
||||
} catch (VCloudDirectorException e) {
|
||||
// success; should not be accessible
|
||||
}
|
||||
|
|
|
@ -19,12 +19,10 @@
|
|||
package org.jclouds.vcloud.director.v1_5.internal;
|
||||
|
||||
import static com.google.common.base.Strings.emptyToNull;
|
||||
import static com.google.common.base.Strings.isNullOrEmpty;
|
||||
import static com.google.common.collect.FluentIterable.from;
|
||||
import static com.google.common.collect.Iterables.any;
|
||||
import static com.google.common.collect.Iterables.find;
|
||||
import static com.google.common.collect.Iterables.getFirst;
|
||||
import static com.google.common.collect.Iterables.getLast;
|
||||
import static com.google.common.collect.Iterables.tryFind;
|
||||
import static com.google.common.io.Closeables.closeQuietly;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.ENTITY_NON_NULL;
|
||||
|
@ -33,6 +31,9 @@ import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.U
|
|||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.CATALOG;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.NETWORK;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.ORG_NETWORK;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.USER;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.VAPP;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.VDC;
|
||||
import static org.testng.Assert.assertNotNull;
|
||||
import static org.testng.Assert.assertTrue;
|
||||
import static org.testng.Assert.fail;
|
||||
|
@ -58,6 +59,7 @@ import org.jclouds.vcloud.director.v1_5.VCloudDirectorApiMetadata;
|
|||
import org.jclouds.vcloud.director.v1_5.VCloudDirectorContext;
|
||||
import org.jclouds.vcloud.director.v1_5.admin.VCloudDirectorAdminApi;
|
||||
import org.jclouds.vcloud.director.v1_5.admin.VCloudDirectorAdminAsyncApi;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.Catalog;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.Link;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.Reference;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.ResourceEntity.Status;
|
||||
|
@ -97,7 +99,6 @@ import com.google.common.base.Function;
|
|||
import com.google.common.base.Optional;
|
||||
import com.google.common.base.Predicate;
|
||||
import com.google.common.base.Predicates;
|
||||
import com.google.common.base.Splitter;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Sets;
|
||||
|
@ -120,9 +121,6 @@ public abstract class BaseVCloudDirectorApiLiveTest extends BaseContextLiveTest<
|
|||
protected static final long TASK_TIMEOUT_SECONDS = 100L;
|
||||
protected static final long LONG_TASK_TIMEOUT_SECONDS = 300L;
|
||||
|
||||
public static final String VAPP = "vApp";
|
||||
public static final String VAPP_TEMPLATE = "vAppTemplate";
|
||||
public static final String VDC = "vdc";
|
||||
public static final int REQUIRED_ADMIN_VM_QUOTA = 0;
|
||||
public static final int REQUIRED_USER_VM_QUOTA = 0;
|
||||
|
||||
|
@ -135,11 +133,13 @@ public abstract class BaseVCloudDirectorApiLiveTest extends BaseContextLiveTest<
|
|||
protected Session session;
|
||||
|
||||
protected String catalogUrn;
|
||||
private Catalog catalog;
|
||||
protected URI vAppTemplateURI;
|
||||
protected URI mediaURI;
|
||||
protected String networkUrn;
|
||||
private Network network;
|
||||
protected URI vdcURI;
|
||||
protected String vdcUrn;
|
||||
private Vdc vdc;
|
||||
protected String userUrn;
|
||||
private User user;
|
||||
|
||||
|
@ -255,9 +255,7 @@ public abstract class BaseVCloudDirectorApiLiveTest extends BaseContextLiveTest<
|
|||
if (vAppTemplateId != null)
|
||||
vAppTemplateURI = URI.create(endpoint + "/vAppTemplate/" + vAppTemplateId);
|
||||
|
||||
String vdcId = emptyToNull(System.getProperty("test." + provider + ".vdc-id"));
|
||||
if (vdcId != null)
|
||||
vdcURI = URI.create(endpoint + "/vdc/" + vdcId);
|
||||
vdcUrn = emptyToNull(System.getProperty("test." + provider + ".vdc-id"));
|
||||
|
||||
String mediaId = emptyToNull(System.getProperty("test." + provider + ".media-id"));
|
||||
if (mediaId != null)
|
||||
|
@ -271,11 +269,13 @@ public abstract class BaseVCloudDirectorApiLiveTest extends BaseContextLiveTest<
|
|||
find(context.getApi().getOrgApi().list(),
|
||||
ReferencePredicates.<Reference> nameEquals(session.get())).getHref());
|
||||
|
||||
if (any(Lists.newArrayList(vAppTemplateURI, networkUrn, vdcURI), Predicates.isNull())) {
|
||||
if (any(Lists.newArrayList(vAppTemplateURI, networkUrn, vdcUrn), Predicates.isNull())) {
|
||||
|
||||
if (vdcURI == null)
|
||||
vdcURI = find(org.getLinks(),
|
||||
ReferencePredicates.<Link> typeEquals(VDC)).getHref();
|
||||
if (vdcUrn == null) {
|
||||
vdc = context.getApi().getVdcApi().get(find(org.getLinks(),
|
||||
ReferencePredicates.<Link> typeEquals(VDC)).getHref());
|
||||
vdcUrn = vdc.getId();
|
||||
}
|
||||
|
||||
if (networkUrn == null) {
|
||||
network = context.getApi().getNetworkApi().get(find(org.getLinks(),
|
||||
|
@ -283,15 +283,30 @@ public abstract class BaseVCloudDirectorApiLiveTest extends BaseContextLiveTest<
|
|||
networkUrn = network.getId();
|
||||
}
|
||||
|
||||
// FIXME the URI should be opaque
|
||||
if (isNullOrEmpty(catalogUrn)) {
|
||||
String uri = find(org.getLinks(),
|
||||
ReferencePredicates.<Link> typeEquals(CATALOG)).getHref().toASCIIString();
|
||||
catalogUrn = getLast(Splitter.on('/').split(uri));
|
||||
if (catalogUrn == null) {
|
||||
catalog = context.getApi().getCatalogApi().get(find(org.getLinks(),
|
||||
ReferencePredicates.<Link> typeEquals(CATALOG)).getHref());
|
||||
catalogUrn = catalog.getId();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected Vdc lazyGetVdc() {
|
||||
if (vdc == null) {
|
||||
assertNotNull(vdcUrn, String.format(URN_REQ_LIVE, VDC));
|
||||
vdc = from(org.getLinks()).filter(LinkPredicates.typeEquals(VDC))
|
||||
.transform(new Function<Link, Vdc>() {
|
||||
|
||||
@Override
|
||||
public Vdc apply(Link in) {
|
||||
return context.getApi().getVdcApi().get(in.getHref());
|
||||
}
|
||||
}).firstMatch(EntityPredicates.idEquals(vdcUrn)).get();
|
||||
assertNotNull(vdc, String.format(ENTITY_NON_NULL, VDC));
|
||||
}
|
||||
return vdc;
|
||||
}
|
||||
|
||||
protected Network lazyGetNetwork() {
|
||||
if (network == null) {
|
||||
assertNotNull(networkUrn, String.format(URN_REQ_LIVE, NETWORK));
|
||||
|
@ -303,21 +318,42 @@ public abstract class BaseVCloudDirectorApiLiveTest extends BaseContextLiveTest<
|
|||
return context.getApi().getNetworkApi().get(in.getHref());
|
||||
}
|
||||
}).firstMatch(EntityPredicates.idEquals(networkUrn)).get();
|
||||
assertNotNull(network, String.format(ENTITY_NON_NULL, NETWORK));
|
||||
}
|
||||
return network;
|
||||
}
|
||||
|
||||
protected Catalog lazyGetCatalog() {
|
||||
if (catalog == null) {
|
||||
assertNotNull(catalogUrn, String.format(URN_REQ_LIVE, CATALOG));
|
||||
catalog = from(org.getLinks()).filter(LinkPredicates.typeEquals(CATALOG))
|
||||
.transform(new Function<Link, Catalog>() {
|
||||
|
||||
@Override
|
||||
public Catalog apply(Link in) {
|
||||
return context.getApi().getCatalogApi().get(in.getHref());
|
||||
}
|
||||
}).firstMatch(EntityPredicates.idEquals(catalogUrn)).get();
|
||||
assertNotNull(catalog, String.format(ENTITY_NON_NULL, CATALOG));
|
||||
}
|
||||
return catalog;
|
||||
}
|
||||
|
||||
protected User lazyGetUser() {
|
||||
if (user == null) {
|
||||
assertNotNull(userUrn, String.format(URN_REQ_LIVE, USER));
|
||||
user = adminContext.getApi().getUserApi().get(userUrn);
|
||||
assertNotNull(user, String.format(ENTITY_NON_NULL, USER));
|
||||
}
|
||||
return user;
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public URI toAdminUri(Reference ref) {
|
||||
return toAdminUri(ref.getHref());
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public URI toAdminUri(URI uri) {
|
||||
return Reference.builder().href(uri).build().toAdminReference(endpoint).getHref();
|
||||
}
|
||||
|
@ -377,7 +413,7 @@ public abstract class BaseVCloudDirectorApiLiveTest extends BaseContextLiveTest<
|
|||
.build();
|
||||
|
||||
VdcApi vdcApi = context.getApi().getVdcApi();
|
||||
VApp vAppInstantiated = vdcApi.instantiateVApp(vdcURI, instantiate);
|
||||
VApp vAppInstantiated = vdcApi.instantiateVApp(vdcUrn, instantiate);
|
||||
assertNotNull(vAppInstantiated, String.format(ENTITY_NON_NULL, VAPP));
|
||||
|
||||
Task instantiationTask = getFirst(vAppInstantiated.getTasks(), null);
|
||||
|
@ -415,7 +451,7 @@ public abstract class BaseVCloudDirectorApiLiveTest extends BaseContextLiveTest<
|
|||
|
||||
/** Build a {@link NetworkConfiguration} object. */
|
||||
private NetworkConfiguration networkConfiguration() {
|
||||
Vdc vdc = context.getApi().getVdcApi().getVdc(vdcURI);
|
||||
Vdc vdc = context.getApi().getVdcApi().get(vdcUrn);
|
||||
assertNotNull(vdc, String.format(ENTITY_NON_NULL, VDC));
|
||||
|
||||
Set<Reference> networks = vdc.getAvailableNetworks();
|
||||
|
|
Loading…
Reference in New Issue