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/
