5.1. Modify Form Attributes

In some cases you may want to modify a form attribute. Some examples:

  • Use a Gnome desktop instead of Mate desktop.
  • Remove the “Queue” form field as your scheduler will auto route to the correct queue.
  • Hard-code the “Number of nodes” to just 1, so that users can’t launch desktops with multiple nodes.
  • Change the label for the form field “Account” to “Project”.
  • Add help text to a given form field.
  • Change default value for a form field.

All modifications can be done in your custom desktop app YAML file as such:

# bc_desktop/local/cluster1.yml
---
title: "Cluster1 Desktop"
cluster: "cluster1"

# Add the below option that allows us to modify form attributes
attributes:
  # ...
  # modifications go here
  # ...

Before we begin modifying form attributes. Let us first take a look at the default form definition located at bc_desktop/form.yml:

# bc_desktop/form.yml
---
description: |
  This app will launch an interactive desktop on one or more compute nodes. You
  will have full access to the resources these nodes provide. This is analogous
  to an interactive batch job.
attributes:
  desktop: "mate"
  bc_vnc_idle: 0
  bc_vnc_resolution:
    required: true
  node_type: null
form:
  - bc_vnc_idle
  - desktop
  - bc_num_hours
  - bc_num_slots
  - node_type
  - bc_account
  - bc_queue
  - bc_vnc_resolution
  - bc_email_on_started

The description, attributes, and form configuration options can be all overridden in our local YAML configuration file. But typically you will only modify description and/or the attributes options.

In the following sections you will find common examples on how to override the above options.

Note

The form configuration option defines all the available attributes as well as the order they appear in the form.

Warning

Caution must be taken if you decide to override the form configuration option. As this is an array, you can’t simply prepend or append, you will need to completely redefine it with your included modifications.

5.1.1. Change to Gnome Desktop

The default installation has the desktop attribute hard-coded to the value "mate". If you would like to change this to use "gnome" you can make the following edits to your custom YAML configuration file:

# bc_desktop/local/cluster1.yml
---
title: "Cluster1 Desktop"
cluster: "cluster1"

# Add the below option that allows us to modify form attributes
attributes:
  desktop: "gnome"

And all Desktops will attempt to launch the Gnome desktop.

Note

Whenever you hard-code a form attribute to a value like "gnome" in the above case, no input field will appear in the form for the user to fill in. So in the above case, the user cannot specify the desktop attribute in the form because we hard-coded it.

5.1.2. Remove Form Field

To remove a form field such as “Queue” defined under the attribute bc_queue from the Desktop form you can make the following edits to your custom YAML configuration file:

# bc_desktop/local/cluster1.yml
---
title: "Cluster1 Desktop"
cluster: "cluster1"

# Add the below option that allows us to modify form attributes
attributes:
  bc_queue: null

After refreshing the form in your browser you should not see the “Queue” field anymore.

Basically we are hard-coding the value of bc_queue to be the YAML type null. And as we discussed in the previous example whenever you hard-code an attribute, it will not show up in the form.

Warning

If you have any Custom Job Submission configuration files that use this attribute, they will receive empty strings "", so you will need to test if they are blank before handling them.

5.1.3. Hard-code a Form Field

If we want to remove a form field but define its value to something other than a blank string, we can set the attribute’s value directly.

For example, if you don’t want users to submit Desktops with more than 1 node under the attribute bc_num_slots, you can make the following edits to your custom YAML configuration file:

# bc_desktop/local/cluster1.yml
---
title: "Cluster1 Desktop"
cluster: "cluster1"

# Add the below option that allows us to modify form attributes
attributes:
  bc_num_slots: 1

As in the previous two examples, since we are hard-coding the value of the attribute, the form field will not show up and the user is unable to change this value. For the above case, the attribute bc_num_slots will always return "1".

Warning

If you have any Custom Job Submission configuration files that use this attribute, care must be taken when handling the attribute as it will always come back as a Ruby string.

So if you hard-coded an attribute to the integer 1 it will come back as the string "1" and if you perform any arithmetic operations on this attribute it will require you convert this back to an integer with the method String#to_i.

5.1.4. Change a Label

You are able to modify the label for a corresponding attribute that appears above the input field in the form.

For example, if you want to change the label for the “Account” form field given by the bc_account attribute to instead display “Project”. This can be modified with the following edits to your custom YAML configuration file:

# bc_desktop/local/cluster1.yml
---
title: "Cluster1 Desktop"
cluster: "cluster1"

# Add the below option that allows us to modify form attributes
attributes:
  bc_account:
    label: "Project"

The key here is that we are defining a hash for the bc_account attribute instead of hard-coding it to a specific value. This means we will only override the equivalent option for this attribute (for the above example we are overriding the label option for the bc_account attribute).

Now when you refresh the form in your browser, you should now see an input field with the label “Project”.

Warning

If you have any Custom Job Submission configuration files that use this attribute, changing the label of the attribute will not affect the value received by the user upon form submission.

But care must be taken that if by changing the label of the attribute you also change the meaning of the attribute, then you may have to handle it differently. For example, changing a label of “Number of processors” to “Number of nodes” will have consequences on how you submit the job.

5.1.5. Add Help Message to Field

You are also able to add a help message to any given form field through its corresponding attribute.

For example, if you would like to add a help message to the attribute bc_account you can make the following edits to your custom YAML configuration file:

# bc_desktop/local/cluster1.yml
---
title: "Cluster1 Desktop"
cluster: "cluster1"

# Add the below option that allows us to modify form attributes
attributes:
  bc_account:
    help: "You can leave this blank if **not** in multiple projects."

The key here is that we are defining a hash for the bc_account attribute instead of hard-coding it to a specific value. This means we will only override the equivalent option for this attribute (for the above example we are overriding the help option for the bc_account attribute).

Now when you refresh the form in your browser, you should see the help message below the “Account” form input field.

Note

Help messages can be written in Markdown format, but it is best not to get carried away in the size of the help message.

5.1.6. Change Field Default Value

You are able to modify the default value of a form field for a given attribute, which should not be confused with hard-coding a value for an attribute.

For example, if you would like the form field “Number of hours” given by bc_num_hours to be 8 hours by default, but still allow the user to change it then you can make the following edits in your custom YAML configuration file:

# bc_desktop/local/cluster1.yml
---
title: "Cluster1 Desktop"
cluster: "cluster1"

# Add the below option that allows us to modify form attributes
attributes:
  bc_num_hours:
    value: 8

The key here is that we are defining a hash for the bc_num_hours attribute instead of hard-coding it to a number. This means we want to override the equivalent option for this attribute (for the above example we are overriding the value option for the bc_num_hours attribute).

Now when you refresh the desktop form in your browser, you should see a default value of 8 in the “Number of hours” form field.

Note

There is a possibility you may see a number other than 8 in the above example. That is because the Interactive Apps tool built into the Dashboard remembers your last successful app launch for a corresponding app. So when you go back to the form page for that given app, it will auto-fill in the form with your previous values.