If you want persistence volume support you need to have an availability
zone defined in your EC2 partitions. Also, in Openstack you need to set
autoAssignIp to true (and make a blocking start instance call), since in
Openstack you cannot attach volumes before the instance is started up.


On Wed, Feb 19, 2014 at 2:16 PM, Udara Liyanage <[email protected]> wrote:

> Hi,
>
> I encountered a problem while CC attaching volumes to the instances. The
> issue was instance and volume is started in different availability zones.
> Then the volume can not be attached. It is a limitation in EC2.
>
>
>
> TID: [0] [CC] [2014-02-19 08:32:47,776]  INFO
> {org.apache.stratos.cloud.controller.iaases.AWSEC2Iaas} -  Successfully
> created a new volume [id]: vol-98611c90 in [region] : ap-southeast-1,
> [zone] : ap-southeast-1a of Iaas : IaasProvider [type=ec2, name=ec2
> specific details, image=ap-southeast-1/ami-16d78044, provider=aws-ec2]
> {org.apache.stratos.cloud.controller.iaases.AWSEC2Iaas}
> TID: [0] [CC] [2014-02-19 08:32:47,946]  INFO
> {org.apache.stratos.cloud.controller.iaases.AWSEC2Iaas} -  Successfully
> created a new volume [id]: vol-b1611cb9 in [region] : ap-southeast-1,
> [zone] : ap-southeast-1a of Iaas : IaasProvider [type=ec2, name=ec2
> specific details, image=ap-southeast-1/ami-16d78044, provider=aws-ec2]
> {org.apache.stratos.cloud.controller.iaases.AWSEC2Iaas}
> TID: [0] [CC] [2014-02-19 08:33:10,977]  INFO
> {org.apache.stratos.cloud.controller.impl.CloudControllerServiceImpl} -
>  Retrieving Public IP Address : MemberContext
> [memberId=udaraalias.phpnew.domainefb7441b-1828-4601-90e5-61ab21be7810,
> nodeId=ap-southeast-1/i-3823c710, clusterId=udaraalias.phpnew.domain,
> cartridgeType=phpnew, privateIpAddress=null, publicIpAddress=54.254.45.183,
> allocatedIpAddress=null, initTime=1392798757867,
> lbClusterId=lb1090620467.lb.domain, networkPartitionId=ec2]
> {org.apache.stratos.cloud.controller.impl.CloudControllerServiceImpl}
> TID: [0] [CC] [2014-02-19 08:33:10,979]  INFO
> {org.apache.stratos.cloud.controller.impl.CloudControllerServiceImpl} -
>  Retrieving Private IP Address. MemberContext
> [memberId=udaraalias.phpnew.domainefb7441b-1828-4601-90e5-61ab21be7810,
> nodeId=ap-southeast-1/i-3823c710, clusterId=udaraalias.phpnew.domain,
> cartridgeType=phpnew, privateIpAddress=10.145.162.214,
> publicIpAddress=54.254.45.183, allocatedIpAddress=null,
> initTime=1392798757867, lbClusterId=lb1090620467.lb.domain,
> networkPartitionId=ec2]
> {org.apache.stratos.cloud.controller.impl.CloudControllerServiceImpl}
> TID: [0] [CC] [2014-02-19 08:33:11,096]  INFO
> {org.apache.stratos.cloud.controller.topology.TopologyEventPublisher} -
>  Publishing instance spawned event: [service] phpnew [cluster]
> udaraalias.phpnew.domain [network-partition] ec2 [partition] P1 [member]
> udaraalias.phpnew.domainefb7441b-1828-4601-90e5-61ab21be7810
> [lb-cluster-id] lb1090620467.lb.domain
> {org.apache.stratos.cloud.controller.topology.TopologyEventPublisher}
> TID: [0] [CC] [2014-02-19 08:33:11,110] ERROR
> {org.apache.stratos.cloud.controller.impl.CloudControllerServiceImpl} -
>  Attaching Volume to Instance [ i-3823c710 ] failed!
> {org.apache.stratos.cloud.controller.impl.CloudControllerServiceImpl}
> org.jclouds.aws.AWSResponseException: request POST
> https://ec2.ap-southeast-1.amazonaws.com/ HTTP/1.1 failed with code 400,
> error: AWSError{requestId='a99e351f-c4a3-4236-81ff-0187ba79c14a',
> requestToken='null', code='InvalidVolume.ZoneMismatch', message='*The
> volume 'vol-98611c90' is not in the same availability zone as instance 
> '*i-3823c710'',
> context='{Response=, Errors=}'}
>  at
> org.jclouds.aws.handlers.ParseAWSErrorFromXmlContent.handleError(ParseAWSErrorFromXmlContent.java:77)
> at
> org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:67)
>  at
> org.jclouds.http.internal.BaseHttpCommandExecutorService.shouldContinue(BaseHttpCommandExecutorService.java:180)
> at
> org.jclouds.http.internal.BaseHttpCommandExecutorService.invoke(BaseHttpCommandExecutorService.java:150)
>  at
> org.jclouds.rest.internal.InvokeHttpMethod.invoke(InvokeHttpMethod.java:93)
> at
> org.jclouds.rest.internal.InvokeHttpMethod.apply(InvokeHttpMethod.java:76)
>  at
> org.jclouds.rest.internal.InvokeHttpMethod.apply(InvokeHttpMethod.java:47)
> at
> org.jclouds.reflect.FunctionalReflection$FunctionalInvocationHandler.handleInvocation(FunctionalReflection.java:117)
>  at
> com.google.common.reflect.AbstractInvocationHandler.invoke(AbstractInvocationHandler.java:79)
> at sun.proxy.$Proxy85.attachVolumeInRegion(Unknown Source)
>  at
> org.apache.stratos.cloud.controller.iaases.AWSEC2Iaas.attachVolume(AWSEC2Iaas.java:447)
> at
> org.apache.stratos.cloud.controller.impl.CloudControllerServiceImpl.startInstance(CloudControllerServiceImpl.java:348)
>  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.axis2.rpc.receivers.RPCUtil.invokeServiceClass(RPCUtil.java:212)
> at
> org.apache.axis2.rpc.receivers.RPCMessageReceiver.invokeBusinessLogic(RPCMessageReceiver.java:117)
>  at
> org.apache.axis2.receivers.AbstractInOutMessageReceiver.invokeBusinessLogic(AbstractInOutMessageReceiver.java:40)
> at
> org.apache.axis2.receivers.AbstractMessageReceiver.receive(AbstractMessageReceiver.java:110)
>  at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)
> at
> org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostRequest(HTTPTransportUtils.java:172)
>  at
> org.apache.axis2.transport.http.AxisServlet.doPost(AxisServlet.java:146)
> at
> org.wso2.carbon.core.transports.CarbonServlet.doPost(CarbonServlet.java:231)
>  at javax.servlet.http.HttpServlet.service(HttpServlet.java:755)
> at javax.servlet.http.HttpServlet.service(HttpServlet.java:848)
>  at
> org.eclipse.equinox.http.servlet.internal.ServletRegistration.service(ServletRegistration.java:61)
> at
> org.eclipse.equinox.http.servlet.internal.ProxyServlet.processAlias(ProxyServlet.java:128)
>  at
> org.eclipse.equinox.http.servlet.internal.ProxyServlet.service(ProxyServlet.java:68)
> at javax.servlet.http.HttpServlet.service(HttpServlet.java:848)
>  at
> org.wso2.carbon.tomcat.ext.servlet.DelegationServlet.service(DelegationServlet.java:68)
> at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
>  at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
> at
> org.wso2.carbon.tomcat.ext.filter.CharacterSetFilter.doFilter(CharacterSetFilter.java:61)
>  at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
> at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
>  at
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
> at
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
>  at
> org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
> at
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
>  at
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
> at
> org.wso2.carbon.tomcat.ext.valves.CompositeValve.continueInvocation(CompositeValve.java:178)
>  at
> org.wso2.carbon.tomcat.ext.valves.TomcatValveContainer.invokeValves(TomcatValveContainer.java:49)
> at
> org.wso2.carbon.tomcat.ext.valves.CompositeValve.invoke(CompositeValve.java:141)
>  at
> org.wso2.carbon.tomcat.ext.valves.CarbonStuckThreadDetectionValve.invoke(CarbonStuckThreadDetectionValve.java:156)
> at
> org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
>  at
> org.wso2.carbon.tomcat.ext.valves.CarbonContextCreatorValve.invoke(CarbonContextCreatorValve.java:52)
> at
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
>  at
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
> at
> org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
>  at
> org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
> at
> org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1653)
>  at
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
>  at java.lang.Thread.run(Thread.java:662)
> TID: [0] [CC] [2014-02-19 08:33:11,276] ERROR
> {org.apache.stratos.cloud.controller.impl.CloudControllerServiceImpl} -
>  Attaching Volume to Instance [ i-3823c710 ] failed!
> {org.apache.stratos.cloud.controller.impl.CloudControllerServiceImpl}
> org.jclouds.aws.AWSResponseException: request POST
> https://ec2.ap-southeast-1.amazonaws.com/ HTTP/1.1 failed with code 400,
> error: AWSError{requestId='116503fb-f486-4bf6-833c-58fe225fbdc7',
> requestToken='null', code='InvalidVolume.ZoneMismatch', message='The volume
> 'vol-b1611cb9' is not in the same availability zone as instance
> 'i-3823c710''
>
>
> On Fri, Feb 14, 2014 at 7:59 AM, Udara Liyanage <[email protected]> wrote:
>
>> Currently I tried with CURL command.
>>
>> Please note the bold arguments to the json I added. This feature needed
>> to be added to the CLI and UI.
>>
>> curl -X POST -H "Content-Type: application/json" -d
>> '{"cartridgeInfoBean":{"cartridgeType":"php","alias":"phpa111","repoURL":"
>> https://github.com/lakwarus/testphp.git
>> ","privateRepo":"true","repoUsername":"[email protected]
>> ","repoPassword":"wso2123","autoscalePolicy":"economyPolicy","deploymentPolicy":"isuruh-ec2",
>> *"persistanceRequired":"true","size":10,"device":"/dev/sdc","removeOnTermination":"false"*}}'
>> -k -v -u admin:admin
>> https://ec2-54-254-43-232.ap-southeast-1.compute.amazonaws.com:9445/stratos/admin/cartridge/subscribe
>>
>>
>> On Fri, Feb 14, 2014 at 7:44 AM, Imesh Gunaratne <[email protected]>wrote:
>>
>>> Great work Udara!
>>> How do we expose this functionality to the end user? Did we finalize the
>>> design?
>>>
>>> Thanks
>>>
>>>
>>> On Fri, Feb 14, 2014 at 7:23 AM, Udara Liyanage <[email protected]> wrote:
>>>
>>>> Hi,
>>>>
>>>> Was able to attach an volume to the instance in EC2. However I think we
>>>> need to create a file system manually as in [1]. I create the file system
>>>> as in [1] and able to mount the volume to the instance.
>>>>
>>>>  We can send the device name via payload, then agent create the file
>>>> system at the startup.
>>>>
>>>>
>>>> [1]
>>>> http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-using-volumes.html
>>>>  --
>>>> Udara Liyanage
>>>> Software Engineer
>>>> WSO2, Inc.: http://wso2.com
>>>> lean. enterprise. middleware
>>>>
>>>> web: http://udaraliyanage.wordpress.com
>>>> phone: +94 71 443 6897
>>>>
>>>
>>>
>>
>>
>> --
>> Udara Liyanage
>> Software Engineer
>> WSO2, Inc.: http://wso2.com
>> lean. enterprise. middleware
>>
>> web: http://udaraliyanage.wordpress.com
>> phone: +94 71 443 6897
>>
>
>
>
> --
> Udara Liyanage
> Software Engineer
> WSO2, Inc.: http://wso2.com
> lean. enterprise. middleware
>
> web: http://udaraliyanage.wordpress.com
> phone: +94 71 443 6897
>



-- 
Best Regards,
Nirmal

Nirmal Fernando.
PPMC Member & Committer of Apache Stratos,
Senior Software Engineer, WSO2 Inc.

Blog: http://nirmalfdo.blogspot.com/

Reply via email to