I think it is OK to just implement a simple parser. The scope of the
project is not to allow specifying complete hardware profiles, but
adding basic support for arbitrary cpu and ram, which should set the
foundation to implement the complete approach with little effort.

Regarding the default value for CPU and RAM, I think it is OK to
provide a "default hardware profile", but we have to think about the
following use cases so we properly cover them in a way that we're all
happy with.

There are two premises:

1. Some providers have preconfigured hardware profiles but also
support setting arbitrary CPU and RAM (Google is an example).
2. We assumed that providers that don't have hardware profiles would
return an empty list in the "listHardwares" method.

With these two premises in mind, we need to answer the following questions:

1. What hardware should be resolved when the user configures a
template in one the following forms?
  - templateBuilder().build();
  - templateBuilder.smallest().build();
  - templateBuilder.biggest().build();
  - templateBuilder.fastest().build();

2. In a provider that has preconfigured hardware profiles and also
supports explicitly setting arbitrary cpu/ram values, what hardware
should be resolved when building a template like:
  - templateBuilder.minCores(2).minRam(2048).build();

For the first question, I'd propose to have a default (just one)
hardware profile for providers that don't support preconfigured
profiles. All methods should then resolve the default one. For
provider that support both approaches, like google, those methods
should just consider the preconfigured profiles.

For the second question... I don't have a proposal yet :) Should we
return the "closest" preconfigured hardware, or should we configure
the explicit values set in the template builder? Should we have a way
to tell the template builder that we want a preconfigured profile or a
custom one? (this would conflict with what we agreed to "reuse" the
"minCores" and "minRam" methods).


Please discuss! :)



On 22 June 2016 at 20:01, Iván Lomba <lombarodriguezi...@gmail.com> wrote:
> Hi!
>
> For the first approximation I've picked the format:
> "automatic:cores=2;ram=1024"
>
> Initially in my first approach I assumed that the user specified both CPU
> and RAM, but as Ignasi pointed at my first commit, maybe we should have
> default values and let the user specify only
> CPU
>  or RAM or even none. Thoughts about this?
>
> I did a small utility to parse automatic ids. In order to make it more
> extensible I was thinking if use a
> "parse
> scheme
> "
> as in the hardwareSpec: different parsers with a Map that relates keys with
> parsers, but it seems excessive to me for the moment, considering that only
> ram and cores are parsed.
>
> BTW, I'm pushing at this branch:
> https://github.com/ivanlomba/jclouds/tree/gsoc2016-JCLOUDS-482
>
> 2016-06-15 19:55 GMT+02:00 Ignasi Barrera <n...@apache.org>:
>
>> +1 to use parseable ids.
>>
>> Regarding the format, let's pick one that allows us to easily extend it in
>> the future, in case we need to add there other hardware profile information
>> such as disk sizes, etc, but keep it as simple as possible to cover the
>> current use case.
>>
>> I.
>> El 13 jun. 2016 1:47 p. m., "Iván Lomba" <ivanlo...@gmail.com> escribió:
>>
>> > Hi!
>> >
>> > I'm going to start with the implementation to support cpu and ram.
>> > According with discussed here before, I understand that the best approach
>> > will be to have auto-generated hardwares, and to take advantage of
>> minCores
>> > and minRAM to avoid interface changes and casts.
>> >
>> > Regarding the ids, I'm not sure about what is better or what has more
>> > sense: if using randomIds, parseableIds or even combine it? What do you
>> > think?
>> >
>> > Parseable ids that allow to reconstruct the hardware from the id seems to
>> > me an useful option. If we decide to use that approach, what format can
>> we
>> > use? Something like:
>> >
>> >     "automatic-cpu-5-ram-2048..."
>> >
>> > Regards.
>> >
>>

Reply via email to