Update on questions asked at the Barcelona summit.

Asked by Ellen Batbouta on 2016-12-09

I don't know if this is the best place to ask these questions but here goes anyways. If there is a better place, please let me know. During the Barcelona summit, we (Oracle) asked the questions below and I have included a summary of the answers we received. We are hopeful that these issues will be addressed in the Ocata release. Can you confirm this? Can you provide any more details? For example, are any of the solutions present in an Oacata baselevel today?

Also, is it possible for us to start using an Ocata baselevel of Murano? The next version of our Murano app will be based on Ocata. Therefore it is very important to us that we start testing with an Ocata version of Murano asap. We are using Mitaka at the moment. Will an Ocata version of Murano run on Mitaka?

Feel free to contact me via e-mail at <email address hidden>.

QUESTION: Create and configure block devices based on user input.
           a. The ASM (automatic storage management) feature of the Oracle database allows the user to specify the number of disks in an ASM group when installing the database. Today there is no way to pass this information to Murano so that the user-specified number of devices are created.

          b. Allow the user to specify the source of each volume (image,volume, snapshot, volume backup) instead of requiring it to be decided when the application is written.

ANSWER: New UI should address these problems.

QUESTION: Provide a means for the application to obtain the device names of the block devices created by Murano. This request is related to ASM. When the application installs the database, it must specify the device names for the ASM group that will be created.

ANSWER: Needs more discussion since the answer was that this info is already present. But it is really not. We need the physical
devices names, such as xvda, xvdb, etc.

QUESTION: Allow a user's input value of one UI parameter to influence another parameter's drop down list of choices. This is important for the selection of the Oracle database character set. There are over 100 character sets. To make it easier for the user to select a character set, a UI field would allow the user to select a language. Based on their input, the appropriate list of character sets for the language would be in the drop down list of choices.
    Example: database encoding may be chosen from the hundres of options. The options may be grouped by language: the first drop down selects the group, then the items of the second are filtered based on the seletion in the first.

ANSWER: ??

QUESTION: Allow more flexibilty for the instance's security group. If the user has already created a security group, could Murano accept this security group for the instance?

ANSWER: Need to submit a request for this.

Question information

Language:
English Edit question
Status:
Answered
For:
Murano Edit question
Assignee:
No assignee Edit question
Last query:
2016-12-12
Last reply:
2016-12-17
Stan Lagun (slagun) said : #1

Hello, Ellen,

a) I see no problems with using Ocata code base (that is the current murano master).
b) Murano Ocata should work fine with OpenStack Mitaka. The only problem is that Murano Python requirements in Ocata differ from those in Mitaka so if you install Murano along with other OpenStack service, something may break. The solution is to install murano to a different machine or use different virtualenv. However, murano-dashboard is a Horizon plugin and you cannot split Horizon into several virtualenvs. So you either will have to use Horizon Ocata or have two different instances of Horizon

Q1 (Create and configure block devices based on user input.):
a. Why do you think it is not possible now? You can ask user for a number of disks and then generate given number of objects (volumes) in the current UI definition
b. You can specify the volume sources now. What we cannot do is to have a variable number of input controls or a grid. The only workaround that I see is to have a reasonable number of controls instead (e.g. volume source #1 ... volume source #N). This should be addressed by the new UI, but I cannot give you any estimates and I don't expect it to be available any time soon.

Q2 (Provide a means for the application to obtain the device names...):
Instance class (and its inheritors like LinuxMuranoInstance) has the 'volumes' property which is a dictionary where keys are device names and values are instances of type Volume. So it is you, who specify device names. Murano doesn't generate them. If this is not what you're asking, please come to #murano IRC and we can discuss other options

Q3 (Allow a user's input value of one UI parameter to influence another parameter's ...):
This should be possible in Murano Ocata is those 2 drop-downs are on different steps of the UI wizard (i.e. you cannot have them next to each other). However, I never tried to do this by myself so there might be some issues

Q4 (Allow more flexibilty for the instance's security group...):
The answer is correct. There is no workaround that allows to join individual instances to existing security groups. Please submit a LP feature request for this and describe your use cases

Thanks for your reply. I think we need further discussion on each of the questions. I would like to address them one at a time. Let's start with Question 1 part a.

Your answer:

a. Why do you think it is not possible now? You can ask user for a number of disks and then generate given number of objects (volumes) in the current UI definition

My reply: I agree that I can ask the user for the number of disks. True. However, I don't know how to generate the given number
of objects using the current UI definition. To me, it seems that the number of disks/volumes must be fixed when the application is written. The Ui.yaml file does not seem to allow dynamic object creation based on user input. Below is the response from Barcelona:

    Long term: New UI — Contract Object List, ability to add more objs with a '+'

    In UI definition file you can have an input with number of volumes and generate N records in the object model

    Workaround: Volume-Application, inverse of controll

Question: Will the new UI be in Ocata? Based on this answer, will we need to implement the work-around for our application that will be based on the Ocata version of Murano? Or is there another way to do this?

Thank you.

Stan Lagun (slagun) said : #3

> The Ui.yaml file does not seem to allow dynamic object creation based on user input.
Actually, it does. Take a look at Kubernetes example:

1) It asks for the maximum minion node count: https://github.com/openstack/k8s-docker-suite-app-murano/blob/master/Kubernetes/KubernetesCluster/package/UI/ui.yaml#L95-L102
2) It has the template for the minion node in Templates section: https://github.com/openstack/k8s-docker-suite-app-murano/blob/master/Kubernetes/KubernetesCluster/package/UI/ui.yaml#L28-L40
3) It generates a list of maxMinionCount objects based on this template

You can ask for a disk count and then generate all the Volume objects in UI based on the single template. What you cannot do is to provide users with ability to customize settings of individual volumes

Thank you for the Kubernetes example. However, I don't think it is quite what I need for the Oracle Db Murano app. Let me explain in more detail. In our app, for instance creation, we create several volumes (including the ASM volumes if the user requests them). So we want to have something like this:

instance:
  .
  .
  -blockDevices:
      ?:
          type: io.murano.resources.CinderVolume
        size: $.instanceConfiguration.instanceSize
        sourceImage: $.instanceConfiguration.sourceLinuxImage
      deviceType: disk
      bootIndex: 0

This device is our Linux boot device where the user can specify a size. We would also like the user to be able to specify if this volume is to be sourced from an image or a volume snapshot. Will this be possible in Ocata Murano?

After the boot volume, we will have:

 - volume:
        ?:
          type: io.murano.resources.CinderVolume
        size: $.instanceConfiguration.dbSize
        sourceImage: $.instanceConfiguration.databaseImageName
      deviceType: disk
      bootIndex: 1

the volume for our database image.

followed by a swap volume. Again the user can specify the volume size. After this, there may be 0 to some number of ASM volumes. There may be 0. Ideally, the user may want to have different sizes for each ASM volume. So they may not be identical.

Thank you for working with us on coming up with the best solution in the Ocata timeframe.

Stan Lagun (slagun) said : #6

You can do something like this:

Templates:

  systemVolumes:
    - deviceType: disk
      bootIndex: 0
      deviceName: vda #optional
      volume:
        ?:
          type: io.murano.resources.CinderVolume
        size: $.instanceConfiguration.instanceSize
        sourceImage: $.instanceConfiguration.sourceLinuxImage
    - deviceType: disk
      bootIndex: 1
      volume:
        ?:
          type: io.murano.resources.CinderVolume
        size: $.instanceConfiguration.dbSize
        sourceImage: $.instanceConfiguration.databaseImageName

  userVolume:
    deviceType: disk
    bootIndex: $index + 2 # 2 is the number of entries in the $systemVolumes template
    volume:
      ?:
        type: io.murano.resources.CinderVolume
      size: $.instanceConfiguration.userVolumeSize

Application:

...

  instance:
    ...
    blockDevices: $systemVolumes.concat(repeat($userVolume, $.nodesConfiguration.userVolumeCount))

In theory it should do the job.
There is no easy way to let users specify the volume size for each volume. Possible workarounds:
1) Make all user volumes be of the same size as in example above
2) Have a fixed number of size groups:

Templates:
  ...

  userVolume1:
    deviceType: disk
    bootIndex: $index + 2
    volume:
      ?:
        type: io.murano.resources.CinderVolume
      size: $.instanceConfiguration.userVolumeSize1

  userVolume2:
    deviceType: disk
    bootIndex: $index + 2 + $.nodesConfiguration.userVolumeCount1
    volume:
      ?:
        type: io.murano.resources.CinderVolume
      size: $.instanceConfiguration.userVolumeSize2

Application:
...

  instance:
    ...
    blockDevices: $systemVolumes.concat(repeat($userVolume, $.nodesConfiguration.userVolumeCount1)).concat(repeat($userVolume, $.nodesConfiguration.userVolumeCount2))

3) Ask for a volume sizes in a comma-separated text field:

Templates:
 ...

  userVolume:
    deviceType: disk
    bootIndex: $index + 2
    volume:
      ?:
        type: io.murano.resources.CinderVolume
      size: list($.instanceConfiguration.userVolumeSizes.split(',').select(int($)))[$index]

Application:

...

  instance:
    ...
    blockDevices: $systemVolumes.concat(repeat($userVolume, $.instanceConfiguration.userVolumeSizes.split(',').count()))

btw, #murano IRC might be a better place for the conversation

Hi Stan,

I tried your idea (actually a scaled down version of it). I tried to concatenate 1 user volume with the system volumes so I did not
use the repeat function. I am getting the error in Horizon: Danger: There was an error submitting the form. But I don't see any error info in the logs for Horizon or Murano. Any ideas where I might find the error info? And/or any tips on how to debug this problem?

Stan Lagun (slagun) said : #8

Could you please attach your package or at least the UI.yaml file?
Also feel free to reach me at #murano or email me directly

Can you help with this problem?

Provide an answer of your own, or ask Ellen Batbouta for more information if necessary.

To post a message you must log in.