On Fri, Feb 11, 2011 at 2:09 PM, Brian Schott <bfsch...@gmail.com> wrote:
> Jay,
>
> I like RESTful APIs.  Nearly got myself fired trying (unsuccessfully) to get 
> my organization to switch from MeetingMaker to Zimbra, but that is another 
> story...

Hehe, sounds like something to chat about over a beer at the next
design summit ;)

> How is instanceType passed using OpenStack API?  Clearly, it is used in 
> nova/compute.  We want to make sure our approach is consistent with "flavors" 
> if I understand the OpenStack API correctly.  I see in flavors.py that is 
> uses the instance_types.py defined data.

Yup, a flavor in OpenStack is almost the same as an instanceType in EC2.

The issue isn't necessarily how to pass instance type, but how to pass
*arbitrary* client request parameters, so I thought that user_data in
the EC2 API was a good place for those, and was wondering (kinda out
loud ;) ) what the best "field" or "place" would be on the OpenStack
API side of things for that kind of arbitrary client request
attribute..

Cheers!
jay

> <?xml version="1.0" encoding="UTF-8"?> <flavors 
> xmlns="http://docs.openstack.org/compute/api/v1.1";>
> <flavor id="1" name="256 MB Server" ram="256" disk="10"/>
> <flavor id="2" name="512 MB Server" ram="512" disk="20"/> </flavors>
> ---
>
> So, we would want to make the same flavor attributes available through 
> list-flavors.
>
> Brian Schott
> bfsch...@gmail.com
>
>
>
> On Feb 11, 2011, at 1:28 PM, Jay Pipes wrote:
>
>> Hi Brian,
>>
>> Good input, thanks for the clarifications!
>>
>> Please remember that Nova also supports the OpenStack API, too, not
>> just the EC2 API, so we need a solution that is more than just the EC2
>> API. Nothing wrong with your solution, of course! Just want to have
>> parity on the OpenStack API side too :)
>>
>> -jay
>>
>> On Fri, Feb 11, 2011 at 1:24 PM, Brian Schott <bfsch...@gmail.com> wrote:
>>> In the EC2 API, the field is:
>>> RunningInstancesSetType
>>> Field: instanceType, Type: xs:string, The instance type (e.g., m1.small).
>>> or InstanceType in the RunInstances Action.
>>> http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/
>>>
>>> I thought about the user_data field, but the problem is that so many 
>>> application frameworks use it to pass things like arbitrary shell scripts.  
>>> Both UserData and InstanceType are xs:string types in the XML schema, just 
>>> UserData is required to be Base64-encoded MIME.
>>>
>>> Our team has verified that you can pass somewhat arbitrary strings using -t 
>>> with euca2ools and they appear unmolested in the create() function in 
>>> nova/compute/api.py.  We've already prototyped an "architecture" aware 
>>> scheduler using the instanceType field as the designator, so that -t 
>>> 'sh1.4xlarge' goes to our SGI UltraViolet machine and -t 'tp.8x8' goes to 
>>> one of the Tilera TileEmpower (tiled 64-core non-x86) boards.
>>>
>>> We've added a bunch of instance types to nova/compute/instance_types.py) to 
>>> accommodate our target virtual machine types:
>>> - 'tp.8x8': dict(memory_mb=16384, vcpus=64, local_gb=500, flavorid=6),
>>> - 'sh1.4xlarge': dict(memory_mb=520192, vcpus=128, local_gb=500, 
>>> flavorid=13)
>>>
>>> Right now, we're switching on the label, which is I think is a bad idea.  I 
>>> need to capture this in a blueprint for Diablo, but what we're proposing is 
>>> to expand the instance_types dictionary to include additional fields and 
>>> possibly turn it into a full editable table so that openstack deployments 
>>> can advertise additional capabilities as new instance_types beyond the 
>>> Amazon defaults.
>>>
>>> Examples:
>>> - 'tp.8x8': dict(memory_mb=16384, vcpus=64, local_gb=500, 
>>> cpu_arch='tilemp', cpu_geometry='8x8', net_gbps=5, flavorid=6), would 
>>> advertise an 8x8 tile of cores (the entire chip currently) on a TileraMP 
>>> Pro with requested reserved network bandwidth of 5 gbps.
>>> - 'p7.large+gpu': dict(memory_mb=32768, vcpus=8, local_gb=1024, 
>>> cpu_arch='p7' gpu_arch='fermi' gcpus=448, flavorid=7), would advertise a 
>>> Power7 CPU with GPU acceleration of 448 cores (like an nVidia c2050 board).
>>>
>>> What I like about Justin's proposal, is that we can request to OVERRIDE 
>>> these default attributes or pass through additional specifications using 
>>> the same instance types field without breaking existing toolchains or even 
>>> the semantics of the InstanceType field.
>>>
>>> For example:
>>> euca-run-instances -n 10
>>>   -t "m1.small;net_gb=1,topology='cluster',local_gb=200,near_vol='vol0001'" 
>>> ...
>>> - is me asking for 10 small nodes with 1 gigabit network bandwidth, 200GB 
>>> of local disk per instance, and optimized for cluster computing (minimize 
>>> hops) preferably near my existing block storage volume.
>>>
>>> This is semantically consistent with what InstanceTypes are all about.  
>>> Doesn't interfere with the default Amazon instance types which are pretty 
>>> standard for better or worse, but also doesn't lock us into only supporting 
>>> standard Amazon instance types.
>>>
>>> I threw a lot of concepts in this post.  There is a role for zones also, 
>>> but some of these scheduler hints don't really fit zones defined during 
>>> datacenter deployment.
>>>
>>> Justin, I'd be happy to work with you if you think your blueprint matches 
>>> above.  We're actually pretty close to having a bexar-branched prototype 
>>> working in nova-hpc branch.
>>>
>>> Brian Schott
>>> bfsch...@gmail.com
>>>
>>>
>>>
>>> On Feb 11, 2011, at 10:44 AM, Jay Pipes wrote:
>>>
>>>> On Thu, Feb 10, 2011 at 7:21 PM, Brian Schott <bfsch...@gmail.com> wrote:
>>>>> Justin,
>>>>>
>>>>> Our USC-ISI team is very interested in this.  We are implementing 
>>>>> different architecture types beyond x86_64.  We are also interested in 
>>>>> suggesting switch topology for MPI cluster jobs, passing in requests for 
>>>>> GPU accelerators, etc.  Currently, our approach has been to specify these 
>>>>> through instance_types. What you describe is more flexible, but I wonder 
>>>>> if for EC2 api we could stretch the -t flag.
>>>>
>>>> Just to make something clear, the EC2 API has nothing to do with the
>>>> -t flag. That is specific to the eucatools (or ec2 CLI tools).  The
>>>> request that goes through to the EC2 API controller (in nova, this is
>>>> nova.api.ec2.cloud.CloudController), passing to the controller an XML
>>>> packet that has a variety of fields that the controller then looks for
>>>> in populating the database with information about the instance to spin
>>>> up. Tacking on something to the -t flag would be a total hack that
>>>> wouldn't be particularly future-proof.
>>>>
>>>> I think that perhaps the user_data field in the XML might be a better
>>>> choice, since this has a more free-form capacity than a very specific
>>>> instance_type code that the EC2 API controller looks for.
>>>>
>>>> The root of the problem here, though, is how can the clients that
>>>> request new instances be spun up (or volumes be attached) send a set
>>>> of custom attributes that define the requirements that the request
>>>> entails? There are many, many attributes that should be able to attach
>>>> to a request:
>>>>
>>>> * What zone the instance/volume should be in
>>>> * What zone(s) the instance/volume should be *near*
>>>> * What hardware/architecture the instance should be placed on
>>>> * What service-level agreement a zone or group of volumes should be
>>>> running under
>>>>
>>>> etc, etc.
>>>>
>>>> We need to figure out a way of sending this type of request data
>>>> without a) breaking the existing API, and b) allows the scheduler
>>>> nodes to route requests more intelligently by looking at these
>>>> additional attributes of the request from the client.
>>>>
>>>> My initial thought is to make a simple Middleware class whose only
>>>> purpose is to look for certain fields in the HTTP request body or
>>>> headers (client_request?) and place those attributes in the wsgi
>>>> environ mapping so that middleware further down the "pipe" (such as
>>>> the Scheduler controllers) can easily pull this data out and more
>>>> intelligently route client requests to the zone scheduler controllers
>>>> that meet the requirements sent from the client.
>>>>
>>>> -jay
>>>
>>>
>
>

_______________________________________________
Mailing list: https://launchpad.net/~openstack
Post to     : openstack@lists.launchpad.net
Unsubscribe : https://launchpad.net/~openstack
More help   : https://help.launchpad.net/ListHelp

Reply via email to