VMware {code} Community
gbullochdst
Contributor
Contributor

InstantiateVAppTemplateParams error

We are trying to use the vCloud API to instantiate a Virtual Machine from a vAppTemplate.

We are receiving the error message:

The remote server returned an error: (400) Bad Request.

All our other web requests succeed, and we are using the same accept value for all requests.

Can anybody see what we are doing wrong here?

Contents of WebRequest:
Content-Type: application/vnd.vmware.vcloud.instantiateVAppTemplateParams+xml
accept: application/*+xml;version=1.5
<?xml version="1.0" encoding="UTF-8"?>
<InstantiateVAppTemplateParams xmlns="http://www.vmware.com/vcloud/v1.5" name="hiport3v10" deploy="true" powerOn="false" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ovf="http://schemas.dmtf.org/ovf/envelope/1">
<Description>test</Description>
<InstantiationParams>
<NetworkConfigSection>
<ovf:Info>Configuration parameters for logical networks</ovf:Info>
<NetworkConfig networkName="HiPort Test External Network">
<Configuration>
<FenceMode>bridged</FenceMode>
</Configuration>
</NetworkConfig>
</NetworkConfigSection>
</InstantiationParams>
</InstantiateVAppTemplateParams>

The vcloud-container-debug.log contains the message:

2012-03-19 21:49:38,458 | DEBUG    | 87924608@pool-jetty-22    | CustomExceptionMapper          | REST API CustomExceptionMapper caught following exception |
com.vmware.vcloud.api.rest.handlers.exceptions.BadRequestRestApiException: The request has invalid accept header
at com.vmware.vcloud.api.rest.common.handlers.ErrorHandler.getBadRequestApiException(ErrorHandler.java:71)
at com.vmware.vcloud.api.rest.common.handlers.ErrorHandler.errorBadRequest(ErrorHandler.java:44)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.cxf.service.invoker.AbstractInvoker.performInvocation(AbstractInvoker.java:173)
at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:89)
at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:133)
at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:82)
at org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:58)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at org.apache.cxf.workqueue.SynchronousExecutor.execute(SynchronousExecutor.java:37)
at org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:106)
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:247)
at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:113)
at org.apache.cxf.transport.servlet.ServletDestination.invoke(ServletDestination.java:97)
at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:458)
at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:146)
at org.apache.cxf.transport.servlet.AbstractCXFServlet.invoke(AbstractCXFServlet.java:148)
at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:179)
at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doGet(AbstractHTTPServlet.java:108)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:693)
at com.vmware.vcloud.api.rest.jaxrs.servlet.CxfServlet.service(CxfServlet.java:163)
at com.vmware.vcloud.api.rest.jaxrs.servlet.JaxRsDispatcherServlet.doService(JaxRsDispatcherServlet.java:97)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:693)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:390)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:440)
at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:327)
at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:126)
at org.springframework.security.web.firewall.RequestWrapper$FirewalledRequestAwareRequestDispatcher.forward(RequestWrapper.java:132)
at com.vmware.vcloud.api.rest.versioning.AcceptHeaderFilter.doFilter(AcceptHeaderFilter.java:126)
at com.vmware.vcloud.api.rest.diagnostics.RestApiDiagnosticsInterceptor.doFilter(RestApiDiagnosticsInterceptor.java:128)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
at com.vmware.vcloud.security.web.ConversationFilter$1.run(ConversationFilter.java:39)
at com.vmware.vcloud.security.web.ConversationFilter$1.run(ConversationFilter.java:37)
at com.vmware.vcloud.common.persist.ConversationContextExecutor.execute(ConversationContextExecutor.java:38)
at com.vmware.vcloud.security.web.ConversationFilter.doFilter(ConversationFilter.java:45)
at com.vmware.vcloud.api.rest.diagnostics.RestApiDiagnosticsInterceptor.doFilter(RestApiDiagnosticsInterceptor.java:128)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
at com.vmware.vcloud.security.web.ThreadLocalCleanerFilter.doFilter(ThreadLocalCleanerFilter.java:65)
at com.vmware.vcloud.api.rest.diagnostics.RestApiDiagnosticsInterceptor.doFilter(RestApiDiagnosticsInterceptor.java:128)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:169)
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at org.mortbay.servlet.UserAgentFilter.doFilter(UserAgentFilter.java:78)
at org.mortbay.servlet.GzipFilter.doFilter(GzipFilter.java:154)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:440)
at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230)
at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:326)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:943)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:756)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
at org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:228)
at org.mortbay.jetty.security.SslSocketConnector$SslConnection.run(SslSocketConnector.java:680)
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
2012-03-19 21:49:38,460 | DEBUG    | 87924608@pool-jetty-22    | CustomExceptionMapper          | Using ThrowableConverter 'com.vmware.vcloud.api.rest.providers.CustomExceptionMapper$RestApiExceptionConverter' for exception class 'com.vmware.vcloud.api.rest.handlers.exceptions.BadRequestRestApiException' |
2012-03-19 21:49:38,462 | DEBUG    | 87924608@pool-jetty-22    | UriUtils                       | Unable to read property restapi.baseUri from the configuration file. Using primary cell IP. |
2012-03-19 21:49:38,462 | DEBUG    | 87924608@pool-jetty-22    | UriUtils                       | Unable to read property restapi.baseUri from the configuration file. Using primary cell IP. |
2012-03-19 21:49:38,464 | DEBUG    | 87924608@pool-jetty-22    | JaxRsDispatcherServlet         | Successfully completed request |
2012-03-19 21:49:42,398 | DEBUG    | 87924608@pool-jetty-22    | JaxRsDispatcherServlet         | Successfully completed request |
2012-03-19 21:49:44,155 | DEBUG    | Quartz-pool-1-thread-80   | CalloutTimeoutPolicyJob        | Using 1,000 for blockingTasks.timeoutResumeRate |
Reply
0 Kudos
9 Replies
lamw
Community Manager
Community Manager

Two things I would check:

1) Can you confirm that "HiPort Test External Network" is the network name from your vAppTemplate and NOT the network you wish to connect to vApp after deployment? '

2) Can you confirm/try "isolated" for fenceMode, in case you're using the wrong fence mode

Might also be helpful to post your GET on vdc and also GET on vAppTemplate

Reply
0 Kudos
gbullochdst
Contributor
Contributor

We did try isolated to no avail. The network name appears to be correct as well;

<NetworkConfig networkName="HiPort Test External Network">

I have attached the GET on vdc and on vAppTemplate.

Reply
0 Kudos
lamw
Community Manager
Community Manager

If you take a look at your vAppTemplate, you'll see that the VM has a network that's called "External" that is what needs to be referenced in the networkName in your request and not the network you wish to connect the vApp to.

Can you try this request:

<InstantiateVAppTemplateParams
   xmlns="http://www.vmware.com/vcloud/v1.5"
   xmlns:ovf="http://schemas.dmtf.org/ovf/envelope/1"
   name="hiport3v10"
   deploy="false"
   powerOn="false">
   <Description>test</Description>
   <InstantiationParams>
      <NetworkConfigSection>
         <ovf:Info>Configuration parameters for logical networks</ovf:Info>
         <NetworkConfig
            networkName="External">
            <Configuration>
               <ParentNetwork
                  href="https://testvcd/api/network/52d1a756-962a-43ed-9e60-54788a12173c" />
               <FenceMode>bridged</FenceMode>
            </Configuration>
         </NetworkConfig>
      </NetworkConfigSection>
   </InstantiationParams>
   <Source
      href="https://testvcd/api/vAppTemplate/vappTemplate-dcaf696d-5dbf-408b-8c39-fb9090acaa2e" />
</InstantiateVAppTemplateParams>
Reply
0 Kudos
gbullochdst
Contributor
Contributor

No luck with that network name "External" unfortunately. We tried the following permutations;

deploy="false"
<FenceMode>isolated</FenceMode>
<FenceMode>bridged</FenceMode>
All returning the 400 error.
Reply
0 Kudos
Todor_Todorov
Hot Shot
Hot Shot

What are the other details of the error - error message, stack trace? Is it still complainig about invalid Accept header? Are you sure other requests with the same Accept header are passing?

Reply
0 Kudos
jake_robinson_b
Hot Shot
Hot Shot

Can you capture the entire 400 response for us with a tool like Fiddler? The RAW response should tell you exactly where the issue is.

Jake Robinson VCP, vExpert - geekafterfive.com - Twitter: @jakerobinson
Reply
0 Kudos
OneSpeedDst
Contributor
Contributor

Hi Jake,

thanks for your reply. Using Fiddler,the response to my request:

POST https://testvcd/api/vdc/30312d6f-9c90-4a63-b4ca-d9b0b5b64dc7/action/instantiateVAppTemplate HTTP/1.1

Content-Type: application/vnd.vmware.vcloud.instantiateVAppTemplateParams+xml

Host: testvcd

Content-Length: 908

Expect: 100-continue

<?xml version="1.0" encoding="UTF-8"?>

<InstantiateVAppTemplateParams xmlns="http://www.vmware.com/vcloud/v1.5" name="hiport3v10" deploy="true" powerOn="false" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ovf="http://schemas.dmtf.org/ovf/envelope/1">

<Description>test</Description>

<InstantiationParams>

<NetworkConfigSection>

<ovf:Info>Configuration parameters for logical networks</ovf:Info>

<NetworkConfig networkName="HiPort Test External Network">

<Configuration>

<ParentNetwork href="https://testvcd/api/network/52d1a756-962a-43ed-9e60-54788a12173c" />

<FenceMode>bridged</FenceMode>

</Configuration>

</NetworkConfig>

</NetworkConfigSection>

</InstantiationParams>

<Source href="https://testvcd/api/vAppTemplate/vappTemplate-dcaf696d-5dbf-408b-8c39-fb9090acaa2e" />

</InstantiateVAppTemplateParams>

is exactly the same as that in the vCloud error log:

HTTP/1.1 400 Bad Request

Date: Mon, 26 Mar 2012 22:36:04 GMT

Content-Type: application/vnd.vmware.vcloud.error+xml;version=1.5

Date: Mon, 26 Mar 2012 22:36:04 GMT

Content-Length: 7053

<?xml version="1.0" encoding="UTF-8"?>

<Error xmlns="http://www.vmware.com/vcloud/v1.5" stackTrace="com.vmware.vcloud.api.rest.handlers.exceptions.BadRequestRestApiException: The request has invalid accept header

at com.vmware.vcloud.api.rest.common.handlers.ErrorHandler.getBadRequestApiException(ErrorHandler.java:71)

at com.vmware.vcloud.api.rest.common.handlers.ErrorHandler.errorBadRequest(ErrorHandler.java:44)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:597)

at org.apache.cxf.service.invoker.AbstractInvoker.performInvocation(AbstractInvoker.java:173)

at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:89)

at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:133)

at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:82)

at org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:58)

at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)

at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)

at java.util.concurrent.FutureTask.run(FutureTask.java:138)

at org.apache.cxf.workqueue.SynchronousExecutor.execute(SynchronousExecutor.java:37)

at org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:106)

at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:247)

at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:113)

at org.apache.cxf.transport.servlet.ServletDestination.invoke(ServletDestination.java:97)

at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:458)

at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:146)

at org.apache.cxf.transport.servlet.AbstractCXFServlet.invoke(AbstractCXFServlet.java:148)

at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:179)

at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doGet(AbstractHTTPServlet.java:108)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:693)

at com.vmware.vcloud.api.rest.jaxrs.servlet.CxfServlet.service(CxfServlet.java:163)

at com.vmware.vcloud.api.rest.jaxrs.servlet.JaxRsDispatcherServlet.doService(JaxRsDispatcherServlet.java:97)

at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)

at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:693)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)

at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)

at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:390)

at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)

at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)

at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)

at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:440)

at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:327)

at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:126)

at org.springframework.security.web.firewall.RequestWrapper$FirewalledRequestAwareRequestDispatcher.forward(RequestWrapper.java:132)

at com.vmware.vcloud.api.rest.versioning.AcceptHeaderFilter.doFilter(AcceptHeaderFilter.java:126)

at com.vmware.vcloud.api.rest.diagnostics.RestApiDiagnosticsInterceptor.doFilter(RestApiDiagnosticsInterceptor.java:128)

at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)

at com.vmware.vcloud.security.web.ConversationFilter$1.run(ConversationFilter.java:39)

at com.vmware.vcloud.security.web.ConversationFilter$1.run(ConversationFilter.java:37)

at com.vmware.vcloud.common.persist.ConversationContextExecutor.execute(ConversationContextExecutor.java:38)

at com.vmware.vcloud.security.web.ConversationFilter.doFilter(ConversationFilter.java:45)

at com.vmware.vcloud.api.rest.diagnostics.RestApiDiagnosticsInterceptor.doFilter(RestApiDiagnosticsInterceptor.java:128)

at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)

at com.vmware.vcloud.security.web.ThreadLocalCleanerFilter.doFilter(ThreadLocalCleanerFilter.java:65)

at com.vmware.vcloud.api.rest.diagnostics.RestApiDiagnosticsInterceptor.doFilter(RestApiDiagnosticsInterceptor.java:128)

at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)

at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:169)

at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)

at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)

at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)

at org.mortbay.servlet.UserAgentFilter.doFilter(UserAgentFilter.java:78)

at org.mortbay.servlet.GzipFilter.doFilter(GzipFilter.java:154)

at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)

at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)

at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)

at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)

at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)

at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:440)

at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230)

at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)

at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)

at org.mortbay.jetty.Server.handle(Server.java:326)

at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)

at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:943)

at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:756)

at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)

at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)

at org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:228)

at org.mortbay.jetty.security.SslSocketConnector$SslConnection.run(SslSocketConnector.java:680)

at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)

" minorErrorCode="BAD_REQUEST" message="The request has invalid accept header" majorErrorCode="400" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.vmware.com/vcloud/v1.5 http://135.158.90.3/api/v1.5/schema/master.xsd"></Error>

thanks, John

Reply
0 Kudos
jake_robinson_b
Hot Shot
Hot Shot

Didn't see this in the log file the first time, but the minor error code in the fiddler output says:

" minorErrorCode="BAD_REQUEST" message="The request has invalid accept header"

You need an accept header of:

Accept: application/*+xml;version=1.5

Does that show up in the header section of Fiddler?

SNAG-0063.png

Jake Robinson VCP, vExpert - geekafterfive.com - Twitter: @jakerobinson
Reply
0 Kudos
OneSpeedDst
Contributor
Contributor

Hi Jake,

yes, and I am definitely setting the Accept header to application/*+xml;version=1.5 in all my HttpWebRequests.

However, perhaps because this is a POST request, Fiddler is not listing the Accept header in my request headers:

POST /api/vdc/30312d6f-9c90-4a63-b4ca-d9b0b5b64dc7/action/instantiateVAppTemplate HTTP/1.1

Content-Type: application/vnd.vmware.vcloud.instantiateVAppTemplateParams+xml

Host: testvcd

Content-Length: 908

Expect: 100-continue

regards, John

Reply
0 Kudos