Hi Rajkumar,

Looks like you made some very good progress on this enhancement.  I have the 
following comments/questions:

  *   Currently Stratos uses the property named "autoAssignIp" in cartridge 
json to decide whether it needs to allocate floating IP for a given instance.  
Is that still valid regardless of whether "openstack.networking.provider" is 
set to neutron or not?
  *   I don't understand why we need to support more than one floating IP per 
NIC.   On the Openstack horizon GUI, it looks like you can only associate one 
floating IP per port/NIC.
  *   It seems to me Stratos doesn't currently support IPv6 in this context.  
If it's possible, can we should put in some ground work such as allowing user 
to indicate whether IP is in IPv4 or IPv6 notation?   Not sure if this is the 
right context, or should it be in a global level like cloud-controll.xml.

Regards,
-Jeffrey

From: Rajkumar Rajaratnam <rajkum...@wso2.com<mailto:rajkum...@wso2.com>>
Date: Wednesday, November 19, 2014 7:05 AM
To: "dev@stratos.apache.org<mailto:dev@stratos.apache.org>" 
<dev@stratos.apache.org<mailto:dev@stratos.apache.org>>
Cc: jeffrngu <jeffr...@cisco.com<mailto:jeffr...@cisco.com>>, "Matt Turner 
(matttur)" <matt...@cisco.com<mailto:matt...@cisco.com>>
Subject: Re: Assigning floating IPs to any interfaces of our choice

Missed to add some important stuffs.

This feature is only for openstack with neutron networking environment. You 
need to set a property in cloud-controller xml to specify whether you are using 
neutron network or not.
                <iaasProvider type="openstack" name="openstack specific 
details">
                        
<className>org.apache.stratos.cloud.controller.iaases.OpenstackNovaIaas</className>
                        <provider>openstack-nova</provider>
                         ------
                        <property name="openstack.networking.provider" 
value="neutron" />

If this property is set to neutron, then you will be able use the implemented 
feature. If not, the old solution (using nova API) will work, where you can 
only assign one floating IPs to the 1st interface only.

So this feature is not breaking any of the existing features. You can still use 
stratos will with old nova networking API for openstack with nova networking 
environment.

One difference you can notice that we have to define predefined floating IPs 
inside each floating networks. We can't use the floating IP defined in property 
section.

However, if you are not using openstack with neutron, you can still pass the 
floating IP in property section and get this assigned to the 1st interface as 
earlier.

Let me know if you need any clarification.

Thanks.

On Wed, Nov 19, 2014 at 7:01 PM, Rajkumar Rajaratnam 
<rajkum...@wso2.com<mailto:rajkum...@wso2.com>> wrote:
Hi all,

I have implemented this feature and it is fully functional now. I had to 
upgrade Jclouds version to 1.8.1 in order to implement it using neutron 
networking API.

Let me explain how it works now. I will past network interfaces section of 
cartridge definition and explain each features implemented here.


"networkInterfaces":[
    {
        "name":"eth0",
        "networkUuid":"512e1f54-1e85-4dac-b2e6-f0b30fc552cf",
        "floatingNetworks":[
            {
                "name":"externalOne",
                "networkUuid":"ba667f72-7ba8-4b24-b360-b74a0211c83c"
            }
        ]
    },

// eth0 will get a fixed IP and a floating IP from floating network externalOne

    {
        "name":"eth1",
        "networkUuid":"68aab21d-fc9a-4c2f-8d15-b1e41f6f7bb8"
    },

// eth1 will get a fixed IP

    {
        "name":"eth2",
        "networkUuid":"b55f009a-1cc6-4b17-924f-4ae0ee18db5e",
        "floatingNetworks":[
            {
                "name":"externalThree",
                "floatingIP" : "192.168.17.227"
            }
        ]
    },

// eth2 will get a fixed IP and a predefined floating IP 192.168.17.227

// if predefined IP is not available, an exception will be thrown

    {
        "name":"eth3",
        "networkUuid":"d343d343-1cc6-4b17-924f-4ae0ee18db5e",
        "floatingNetworks":[
            {
                "name":"externalThree",
                "networkUuid":"ba667f72-7ba8-4b24-b360-b74a0211c83c",
                "floatingIP" : "192.168.17.227"
            }
        ]
    },

// eth3 will get a fixed IP and a floating IP from the floating network 
externalThree

// point here is that we are giving priority to networkUuid to floatingIP

    {
        "name":"eth4",
        "portUuid":"d343d343-1cc6-4b17-924f-4ae0ee18db5e",
        "fixedIp":"10.5.62.3",
        "floatingNetworks":[
            {
                "name":"external",
                "networkUuid":"ba667f72-7ba8-4b24-b360-b74a0211c83c",
                "floatingIP" : "192.168.17.227"
            }
        ]
    },

// eth4 will get a predefined private IP 10.5.62.3 and a floating IP from 
network external

    {
        "name":"eth5",
        "networkUuid":"d343d343-1cc6-4b17-924f-4ae0ee18db5e",
        "floatingNetworks":[
            {
                "name":"externalOne",
                "networkUuid":"ba667f72-7ba8-4b24-b360-b74a0211c83c",
                "floatingIP" : "192.168.17.227"
            },
            {
                "name":"externalTwo",
                "networkUuid":"sddsdsd-7ba8-4b24-b360-b74a0211c83c",
            }
        ]
    }

// eth5 will get a fixed IP and a predefined floating IP 192.168.17.227

// and a floating IP from the floating network externalTwo as well

// I couldn't test whether it is supported by openstack

// if openstack supports this, you can also achieve it in stratos

]

Please have look at the comments given in each network interfaces definition.

And if you define multiple network interfaces and floating networks, if even 
one IP allocation goes wrong, I am throwing exception and kill the instance.

Having this implemented, now I am in the process of doing changes to some 
topology events to incorporate multiple private/public IP addresses.

Please feel free to share your concerns.

Thanks.

On Fri, Nov 14, 2014 at 7:14 PM, Rajkumar Rajaratnam 
<rajkum...@wso2.com<mailto:rajkum...@wso2.com>> wrote:
Update;


On Fri, Nov 14, 2014 at 3:44 PM, Rajkumar Rajaratnam 
<rajkum...@wso2.com<mailto:rajkum...@wso2.com>> wrote:
Update;

Currently facing an issue with upstream openstack-neutron-1.8.1.jar.

When I see the MANIFEST.MF file of openstack-neutron-1.8.1.jar, it contains 
${jclouds.version} in lot of places instead of actual version. Due to this 
carbon feature installation is failing. Because it is processing MANIFEST.MF 
and throwing number format exception.

I conveyed this in user@jclouds. For workaround, I am going to manually put the 
jar into /repository/components/lib and continue the work until it is sorted 
out in upstream.

This is a bug. One sent a PR to solve it

Thanks.

Thanks.

On Wed, Nov 12, 2014 at 4:48 PM, Rajkumar Rajaratnam 
<rajkum...@wso2.com<mailto:rajkum...@wso2.com>> wrote:


On Wed, Nov 12, 2014 at 4:37 PM, Udara Liyanage 
<ud...@wso2.com<mailto:ud...@wso2.com>> wrote:
Hi Raj,

No I did not try since there were no multiple public networks available.

Okay Udara. I am setting up a second external network now. Will run a test soon.

Thanks.

On Wed, Nov 12, 2014 at 2:59 PM, Rajkumar Rajaratnam 
<rajkum...@wso2.com<mailto:rajkum...@wso2.com>> wrote:


On Wed, Nov 12, 2014 at 2:52 PM, Udara Liyanage 
<ud...@wso2.com<mailto:ud...@wso2.com>> wrote:
Hi Raj,

If I remember correctly, we can't assign folating ip to the same port multiple 
times even I try with Openstack UI.

Horizon UI doesn't support most of the operations. Yes we can't assign multiple 
floating IPs from the same external network to the same port. But I guess, we 
can assign multiple floating IPs from different external network to the same 
port. Did you try this scenario?

Thanks.

On Wed, Nov 12, 2014 at 2:47 PM, Rajkumar Rajaratnam 
<rajkum...@wso2.com<mailto:rajkum...@wso2.com>> wrote:
Hi Devs,

I am working on $Subject. Please find the relevant JIRA at [1]

Currently Stratos will assign a floating IP to eth0 if autoAssignIp property is 
set to false in cartridge definition. AFAIU, stratos is using jclouds API to 
query the available floating IPs, choose one and assign it to the instance. 
Correct me if this is not the case.

In order to support $Subject, I am proposing the cartridge definition as below;

{
        "type":"mysql",
        "provider":"data",
        "host":"apachestratos.org<http://apachestratos.org>",
        "displayName":"MySQL",
        "description":"MySQL Cartridge",
        "version":"5.5",
        "multiTenant":"false",
        "portMapping":[
        {
        "protocol":"http",
        "port":"80",
        "proxyPort":"8280"
        }
        ],
        "deployment":{

        },
        "iaasProvider":[
        {
        "type":"openstack",
        "imageId":"RegionOne/1cd412c1-54ce-405f-9894-ce1387073c6c",
        "networkInterfaces":[
        {
        "name":"netOne",
        "networkUuid":"84d52a6d-a9e5-472a-9935-a0e195fe5b4a",
        "fixedIp":"10.0.1.4"
        },
        {
        "name":"netTwo",
        "networkUuid":"512e1f54-1e85-4dac-b2e6-f0b30fc552cf",
        "publicNetworkUuids":[
        {
        "name":"externalOne",
        "networkUuid":"8f08a69d-cb46-43c9-9ebe-b89dcc78dacc",
        },
        {
        "name":"externalTwo",
        "networkUuid":"b5504321-e7aa-4500-9e00-7bc1b10cb5e9",
        }
        ]
        },
        {
        "name":"netThree",
        "networkUuid":"b55f009a-1cc6-4b17-924f-4ae0ee18db5e",
        "publicNetworkUuids":[
        {
        "name":"externalThree",
        "networkUuid":"83d52a6d-a9e5-572a-9935-a0e195fe5b4r",
        }
        ]
        }
        ],
        "maxInstanceLimit":"4",
        "property":[
        {
        "name":"instanceType",
        "value":"RegionOne/4"
        },
        {
        "name":"keyPair",
        "value":"raj"
        },
        {
        "name":"autoAssignIp",
        "value":"false"
        }
        ]
        }
        ],
        "loadBalancer":{
        "type":"lb",
        "property":{
        "name":"no.load.balancer",
        "value":"true"
        }
        }
        }


So, I have introduced some additional elements here in networks section. 
publicNetworkUuids will hold one or many external network UUIDs from where you 
want to select one IP and assign it the corresponding interface. Let list me 
three behaviors, as of now, I have identified.

  1.  If autoAssignIp property is true, stratos will not do anything regarding 
floating IPs when creating instances for this cartridge. But openstack will 
assign a floating IP to the instance.
  2.  If autoAssignIp property is false, and you don't specify any 
publicNetworkUuids for any interface, then stratos will assign a floating IP to 
the 1st interface
  3.  If autoAssignIp property is false, and you specify publicNetworkUuids, 
then stratos will assign floating IPs per interfaces for which you specified 
publicNetworkUuids. If you specify two publicNetworkUuids for an interface, it 
will assign two floating IPs to that interface and so on.

However, I tried to assign two floating IP addresses to an interface which 
resulted in the following error.

Error: 409-{u'NeutronError': {u'message': u'Cannot associate floating IP 
192.168.17.96 (5691eb81-3153-4ee1-b9d0-31fc84516b03) with port 
7e9416ce-5077-44c4-97db-b4b14c10dfc9 using fixed IP 10.0.0.167, as that fixed 
IP already has a floating IP on external network 
ba667f72-7ba8-4b24-b360-b74a0211c83c.', u'type': 
u'FloatingIPPortAlreadyAssociated', u'detail': u''}}

I guess we can't assign multiple floating IPs to the same interface from same 
network. We would be able to assign multiple floating IPs to the same interface 
from multiple networks. Since I am having only one external network, I couldn't 
test this. Any idea?

Feel free to share your thoughts.

1. https://issues.apache.org/jira/browse/STRATOS-698

Thanks.

--
Raj



--

Udara Liyanage
Software Engineer
WSO2, Inc.: http://wso2.com<http://wso2.com/>
lean. enterprise. middleware

web: http://udaraliyanage.wordpress.com
phone: +94 71 443 6897



--
Raj



--

Udara Liyanage
Software Engineer
WSO2, Inc.: http://wso2.com<http://wso2.com/>
lean. enterprise. middleware

web: http://udaraliyanage.wordpress.com
phone: +94 71 443 6897



--
Raj



--
Raj



--
Raj



--
Rajkumar Rajaratnam
Committer & PMC Member, Apache Stratos
Software Engineer, WSO2



--
Rajkumar Rajaratnam
Committer & PMC Member, Apache Stratos
Software Engineer, WSO2

Reply via email to