Skip to content

Latest commit

 

History

History
134 lines (93 loc) · 4.63 KB

a_more_advanced_example.md

File metadata and controls

134 lines (93 loc) · 4.63 KB

A More Advanced Example

In this example we'll create an automate method that adds a custom attribute to a VM. We'll launch the automation instance from a button, and we'll include a dialog to prompt for the text to add.

Creating the Service Dialog

The first thing we must do is create a Service Dialog to be displayed when our custom button is clicked.

Navigate to Automate -> Customization, select Service Dialogs in the accordion, highlight All Dialogs, then select Configuration -> Add a new Dialog (don't click the Add button yet...)

Screenshot



Give the Dialog a Label and Description of Button, check the Submit and Cancel options, and click + -> Add a new Tab to this Dialog (don't click the Add button yet...)

Screenshot


Give the tab a Label and Description of _Main_, and click **+ -> Add a new Box to this Tab** (don't click the **Add** button yet...)

Screenshot



Give the box a Label and Description of Custom Attribute, and click + -> Add a new Element to this Box (don't click the Add button yet...)

Screenshot


Give the new Element the **Label** of _Key_, the **Name** of _key_, and a **Type** of _Text Box_. Leave the other values as default (don't click the **Add** button yet...)

Screenshot


Click **+ -> Add a new Element to this Box** to create a second element with the **Label** of _Value_, the **Name** of _value_, and a **Type** of _Text Box_. Leave the other values as default, and now, finally click the **Add** button.

Screenshot

Creating the Instance and Method

Create a new Instance in our Methods Class just as we did before, called AddCustomAttribute. Leave the password, servername and username schema fields blank, but add the value add_custom_attribute in the execute field.

Create a new Method in our Methods Class as we did before, called add_custom_attribute. Paste the following into the Data box:

$evm.log(:info, "add_custom_attribute started")
#
# Get the VM object
#
vm = $evm.root['vm']
#
# Get the dialog values
#
key   = $evm.root['dialog_key']
value = $evm.root['dialog_value']
#
# Set the custom attribute
#
vm.custom_set(key, value)
exit MIQ_OK

Values entered into a dialog box are available to our method through $evm.root. The Automation Engine prefixes the dialog element names with "dialog\_", so the values that we want to read are `$evm.root['dialog_key']` and `$evm.root['dialog_value']`.

Create the /System Entry Point

To illustrate an alternative way of calling an Instance, we're going to be creating our own entry point directly in the /System/ Namespace, rather than redirecting through Call_Instance as before. First we must copy the ManageIQ/System/Request Class into our own Domain:

Screenshot


Copy the class into the `ACME` Domain, to the same path:

![Screenshot](images/screenshot12.png)
Now we have to create a new Instance of the Class:

Screenshot


Enter `/General/Methods/AddCustomAttribute` into the **rel1** field:

Screenshot

Creating the Button

Navigate to Automate -> Customization, select Buttons in the accordion, highlight Object Types -> VM and Instance, then select Configuration -> Add a new Button Group:

Screenshot


Create a Button Group called _VM Actions_, select a Button Group Image:

Screenshot


Click the **Add** button. Now highlight this new _VM Actions_ button group in the accordion, and select **Configuration -> Add a new Button**:

Screenshot


Specify a Button and Hover Text of _Add Custom Attribute_, select a suitable button image, and pick our new _Button_ Dialog from the drop-down list:

Screenshot

Running the Instance

If we navigate to a VM and examine its details, we should see our new button group and button:

Screenshot


If we click on the **Add Custom Attribute** button we should be presented with our dialog:

Screenshot


Enter some text and click **Submit**, wait a few seconds, and we should see the new custom attribute displayed at the botton of the VM details pane:

Screenshot