Red Hat CloudForms 4.0 Scripting Actions in CloudForms Real-time, bi-directional process integration for CloudForms Management Engine Red Hat CloudForms Documentation Team Red Hat CloudForms 4.0 Scripting Actions in CloudForms Real-time, bi-directional process integration for CloudForms Management Engine Red Hat CloudForms Documentation Team [email protected] Legal Notice Copyright © 2017 Red Hat, Inc. The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/ . In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version. Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law. Red Hat, Red Hat Enterprise Linux, the Shadowman logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries. Linux ® is the registered trademark of Linus Torvalds in the United States and other countries. Java ® is a registered trademark of Oracle and/or its affiliates. XFS ® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries. MySQL ® is a registered trademark of MySQL AB in the United States, the European Union and other countries. Node.js ® is an official trademark of Joyent. Red Hat Software Collections is not formally related to or endorsed by the official Joyent Node.js open source or commercial project. The OpenStack ® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community. All other trademarks are the property of their respective owners. Abstract This guide provides instructions for scripting the method to implement adaptive automation for management events and administrative or operational activities. Table of Contents Table of Contents .CHAPTER . . . . . . . . .1.. .CLOUDFORMS . . . . . . . . . . . . . MANAGEMENT . . . . . . . . . . . . . .ENGINE . . . . . . . AUTOMATION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3. . . . . . . . . . 1.1. AUTOMATION 3 .CHAPTER . . . . . . . . .2.. .AUTOMATE . . . . . . . . . . MODEL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4. . . . . . . . . . 2.1. AUTOMATE MODEL 4 2.2. CREATING A DOMAIN 5 2.3. EDITING A DOMAIN 5 2.4. DELETING A DOMAIN 5 2.5. CHANGING PRIORITY ORDER OF DOMAINS 6 2.6. CREATING A NAMESPACE 6 2.7. CREATING A CLASS 6 2.8. CREATING A SCHEMA FOR A CLASS 7 2.9. EDITING A FIELD IN A SCHEMA 8 2.10. EDITING SCHEMA SEQUENCE 8 2.11. ADDING AN INSTANCE TO A CLASS 9 2.12. COPYING A CLASS OR INSTANCE 2.13. RELATIONSHIPS 9 9 2.14. METHODS 2.15. SIMULATION 10 12 2.16. IMPORTING, EXPORTING, AND RESETTING THE DATASTORE 13 .CHAPTER . . . . . . . . .3.. .INVOKING . . . . . . . . . AUTOMATE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15 ........... 3.1. AUTOMATE EXAMPLES 15 3.2. INVOKING AUTOMATE USING A CUSTOM BUTTON 3.3. CREATING A CUSTOM BUTTON GROUP 15 15 3.4. CREATING A CUSTOM BUTTON 3.5. EDITING A CUSTOM BUTTON 15 16 3.6. DELETING A CUSTOM BUTTON 3.7. USING A CUSTOM BUTTON 3.8. INITIATING AUTOMATE FROM AN EVENT 17 17 17 3.9. CREATING A POLICY FOR AUTOMATE 3.10. CREATING A CUSTOM AUTOMATE ACTION 18 19 .APPENDIX . . . . . . . . . A. . . .OBJECTS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .20 ........... A.1. VIRTUAL MACHINE PROPERTIES 20 A.2. CLOUDFORMS MANAGEMENT ENGINE METHODS FOR USE IN RUBY SCRIPTS 27 A.3. HOST PROPERTIES 28 A.4. PROVIDER PROPERTIES A.5. STORAGE PROPERTIES 32 35 .APPENDIX . . . . . . . . . B. . . .FAQS . . . . .AND . . . . FLOWS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .38 ........... B.1. PHASE 1: CREATE PROVISION REQUEST 38 B.2. PHASE 2: REQUEST APPROVAL 39 B.3. PHASE 3: QUOTA VALIDATION B.4. PHASE 4: PROVISIONING B.5. PHASE 5: RETIREMENT 40 41 43 .APPENDIX . . . . . . . . . C. . . .INLINE . . . . . .METHOD . . . . . . . . TO . . . CREATE . . . . . . . .A . .PROVISION . . . . . . . . . . .REQUEST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .44 ........... C.1. RUBY METHOD 44 1 Red Hat CloudForms 4.0 Scripting Actions in CloudForms 2 CHAPTER 1. CLOUDFORMS MANAGEMENT ENGINE AUTOMATION CHAPTER 1. CLOUDFORMS MANAGEMENT ENGINE AUTOMATION Provisioning requires the Automation Engine server role enabled. Check your server role settings in Configure → Configuration → Server → Server Control. 1.1. AUTOMATION CloudForms Management Engine Automate Model provides flexibility to not only change parts of the provisioning process, but also to allow you to automate other operational tasks. Below are some scenarios where CloudForms Management Engine can help accomplish these tasks. Intelligent Workload Management - An enterprise had a requirement that when a virtual machine has reached a High CPU Percent Ready for a specified period of time, a vMotion should occur to a more suitable host. For this reason, VMware’s Distributed Resource Scheduler (DRS) was not practical, as the CPU Ready metric could not trigger DRS. The solution was to leverage CloudForms Management Engine Control and CloudForms Management Engine Automate to drive the management of this workflow. Power on only during business hours - An organization which gave a group of self-service users CloudForms Management Engine access had a requirement to only allow certain virtual machines to be powered during business hours. This was solved with CloudForms Management Engine Automate. Auto-Tagging virtual machines based on file contents - An IT organization needed a way to consume information from a text file on a virtual machine and dynamically populate vCenter. The data used to auto-tag virtual machines is also used to align unmanaged virtual machines to the business. 3 Red Hat CloudForms 4.0 Scripting Actions in CloudForms CHAPTER 2. AUTOMATE MODEL CloudForms Management Engine Automate enables real-time, bi-directional process integration. This provides users with a method to implement adaptive automation for management events and administrative or operational activities. 2.1. AUTOMATE MODEL The Automate model is arranged to provide an object oriented hierarchy to control automation functions. The model uses the following organizational units arranged in a hierarchy: Datastore - The main organization unit that stores the entire model. Domains - Domains act as collection of automation functions. Functions are executed depending on the order of Domain priority, which means a function in a Domain with a higher priority overrides the same functions specified in a lower-priority Domain. This allows CloudForms Management Engine to specify a core Domain (ManageIQ) but allow users to override automate functions with custom Domains. Each Domain contains a set of Namespaces. Namespaces - Containers that organize and categorize functions of the model. Namespaces can contain child Namespaces as well as Classes. Classes - Templates for a specific function of the model. Each Class uses a Schema to apply to Instances to populate with default values. Each class also can contain a set of methods. Instances - An instance is a version of a class populated with initial configuration data. An instance can include a collection of any number of attributes, calls to methods, and relationships. Methods - Methods are functions within the model. Methods use Ruby code to execute various operations needed for a Class. CloudForms Management Engine contains a set of preconfigured Domains for users: ManageIQ - The core domain for CloudForms Management Engine Automate operations. This domain is locked with the following Namespaces: Cloud - General cloud instance lifecycle from provisioning, retirement, methods, email. Control - Control contains email alerts for policy controls. Infrastructure - General infrastructure VM lifecycle from provisioning, retirement, methods, email. Service - Service lifecycle from provisioning, retirement, methods, email. System - System contains classes that can provide the start points for all CloudForms Management Engine Automate activities. RedHat - Domain containing advanced operations, specifically interactions with supported cloud and infrastructure providers. This domain is locked with the following Namespaces: Cloud - Red Hat-supported cloud instance lifecycle from provisioning, retirement, methods, email. Infrastructure - Red Hat-supported cloud instance lifecycle from provisioning, retirement, methods, email. 4 CHAPTER 2. AUTOMATE MODEL Integration - Used to interface with systems outside of CloudForms Management Engine. Use this namespace to integrate with additional systems. You can copy classes and instances from locked Domains into your own custom domains. Note Red Hat does not recommend changing any of the existing classes or instances shipped with the product as this may hinder the operation of the CloudForms Management Engine. You can link to these methods using relationships. To reset the Automate model to default settings, navigate to Automate → Import/Export and click the Reset option. 2.2. CREATING A DOMAIN 1. Navigate to Automate → Explorer. The default view is the Datastore. 2. Click (Configuration), then (Add a New Domain). 3. Type in a unique Name and Description. Choose if the Domain is Enabled. 4. Click Add. The new domain is created. 2.3. EDITING A DOMAIN 1. Navigate to Automate → Explorer. The default view is the Datastore. 2. Select the Domain you want to edit. 3. Click (Configuration), then (Edit Selected Domain). 4. Make the required edits. 5. Click Save. You have edited the selected domain. 2.4. DELETING A DOMAIN 1. Navigate to Automate → Explorer. The default view is the Datastore. 2. Select the Domain that you want to delete. 3. Click (Configuration), then (Remove This Domain). 4. A window to confirm the removal of Domain appears. 5 Red Hat CloudForms 4.0 Scripting Actions in CloudForms 5. Click OK. The selected Domain is deleted. 2.5. CHANGING PRIORITY ORDER OF DOMAINS Functions are executed depending on the order of Domain priority. Use this procedure to change the priority order of domains. 1. Navigate to Automate → Explorer. The default view is the Datastore. 2. Select the Domains you want to change the priority order for. 3. Click (Configuration), then (Edit Priority Order of Domains). 4. The list of Domains selected shows up. Note that you cannot change the priority of locked Domains and therefore locked Domains do not show up on the list. 5. Select one or more consecutive groups to move up or down to change their priority as required. 6. Click Save. 2.6. CREATING A NAMESPACE 1. Navigate to Automate → Explorer. The default view is the Datastore. 2. Navigate through the various Domains and Namespaces until you reach the desired location for your new Namespace. 3. Click (Configuration), then (Add a New Namespace). 4. Type in a unique Name and Description. 5. Click Add. The new Namespace is created. 2.7. CREATING A CLASS 1. Navigate to Automate → Explorer, navigate to the namespace you want to add a class to. 2. Click (Configuration), then (Add a new Class). 3. Type in a unique Name and Description. 4. If you want to use the schema from a class that has already been created, select it from the Inherits From dropdown. If the class that the new class inherits from changes, the new class will also change. 5. Click Add. 6 CHAPTER 2. AUTOMATE MODEL The new class is created and you can create a schema, add instances and methods. Note For each class, create a schema if you did not choose to inherit from an existing class. The schema can include attributes, methods, assertions, and relationships. 2.8. CREATING A SCHEMA FOR A CLASS This procedure shows you how to create a schema. 1. Navigate to Automate → Explorer, and click the class you want to define a schema for. 2. Click on the Schema tab. 3. Click 4. Click (Configuration), then (Edit selected Schema). (Click to add a new field) to create a new field. 5. Type in a Name for the new field. 6. From Type, select Assertion, Attribute, Method, Relationship, or State. 7. If applicable, select a Data Type and set a Default Value. 8. Type in a user friendly Display Name and Description. 9. Check Sub to enable the substitution syntax of ${}. Uncheck it if you want to use that syntax as a regular string. 10. Fill in Collect and Message as required. Collect is used to roll up values from resolved relationships. For example, a relationship can resolve to a large object tree. Use collect to specify how to pull out data from those child objects into the current object. If you give collect a name value, it will store the method result in an attribute of the current object with that name. 11. On Entry, On Exit, On Error, Max Retries, and Max Time are fields used mostly for state machines. Leave blank if not applicable. For more information, see the Provisioning Virtual Machines and Hosts guide, available from https://access.redhat.com/documentation/en/red-hat-cloudforms/. 12. Click (Add this entry) to confirm the fields values. 13. For each new field, repeat steps 4 through 10. 14. When you have created all of the fields, click Save. The class schema is created, and you can now add instances to it. 7 Red Hat CloudForms 4.0 Scripting Actions in CloudForms Note You may need to edit a class schema to reorder, add, edit, or remove a field. Classes define the order in which fields are processed and you may need to process some items before others. 2.9. EDITING A FIELD IN A SCHEMA This procedure describes how to edit schema fields. 1. Navigate to Automate → Explorer. 2. Click the class you want to define a schema for. 3. Click the Schema tab. 4. Click (Configuration), then (Edit selected Schema). 5. Make required changes to any of the definitions for the field. 6. To remove a field, click (Click to delete this field from the schema). 7. Click Save when you are finished editing the schema. Once the schema is created, you can add instances and methods to the class. 2.10. EDITING SCHEMA SEQUENCE This procedure shows you how to change schema sequence. 1. Navigate to Automate → Explorer. 2. Click the class you want to change the schema sequence for. 3. Click the Schema tab. 4. Click (Configuration), then (Edit Sequence). 5. In the Class Schema Sequencing area, click the field you want to change the sequence for. To move a field up in the order of resolving an instance, click field up). To move a field down in the order of resolving an instance, click selected field down). 6. Click Save when you are finished editing the sequence. 8 (Move selected (Move CHAPTER 2. AUTOMATE MODEL 2.11. ADDING AN INSTANCE TO A CLASS This procedure shows you how to create an instance. 1. Navigate to Automate → Explorer. 2. Click the class you want to define a schema for. 3. Click the Instances tab. 4. Click (Configuration), then (Add a new Instance). 5. In the Main Info area, type in a Name, Display Name and Description. 6. In the Fields area, type in an appropriate value for each field, leave the field blank if no value is required, or use the default value. 7. Click Add. 2.12. COPYING A CLASS OR INSTANCE 1. Navigate to Automate → Explorer. The default view is the Datastore. 2. Navigate through the various Domains and Namespaces until you reach the desired class or instance to copy. 3. Click (Configuration), then either (Copy this Class) or (Copy this Instance) depending on the object chosen. 4. Choose the target Domain in the To Domain drop-down menu. 5. The object retains the same path as the From Domain and overrides the class in From Domain if the To Domain has a high priority. You can also untick the Copy to same path option to specify a new Namespace. 6. Click Add. 2.13. RELATIONSHIPS Relationships are used to connect to other instances in the Automation Datastore. Relationships are formed using URI syntax. The following can also be passed through a relationship: Use # to set the message to send to the item in the relationship. To pass an input to the method use ? followed by the item to pass. If you want to use a substitution, the syntax is $\{} with the substitution located between the brackets. 9 Red Hat CloudForms 4.0 Scripting Actions in CloudForms Example Explanation /Cloud/VM/Provisioning/Naming/Default#create This relationships uses the Default instance of the Naming class, which provides a means for other classes to name virtual machines. The relationship sends the create message to the class. /Cloud/VM/Provisioning/StateMachines/VMProvisio n_VM/AcquireMACAddress#$\{#ae_message} This relationships substitutes the message to send to the AcquireMACAddress instance of the VMProvision_VM class with the value in ae_message. /Cloud/VM/Retirement/Email/vm_retirement_email s?event=vm_retired Invokes the vm_retirement_emails instance of the Email class. Also sends the value vm_retired in the event attribute, which is used in the vm_retirement_emails method. /Service/Lifecycle/Retirement?service_id=$\ {process#service_id} Invokes the Retirement instance of the Lifecycle class and send a replacement value in process#service_id to the service_id attribute. 2.14. METHODS Methods are pieces of code associated with a class or object to perform a task. CloudForms Management Engine allows for Ruby methods. You can create your own methods or use relationships to link to pre-existing ones. Red Hat CloudForms ships with a core set of Ruby gems used by the CloudForms Management Engine Rails Application. The Ruby gems in this set are subject to change, and have changed since CloudForms 3.1 (CloudForms Management Engine 5.3). If you are calling gems using Automate that are no longer in the CloudForms Management Engine Appliance, you can install them by using the gem install command. While gems can be imported into automation methods using require, it is recommended that the authors of the automation methods clearly document the use of gems either in the core set or a custom set. It is the responsibility of the author of such custom automation to own the life cycle of any gem being referenced in those methods. The Release Notes list Ruby gems that have been added, updated, or removed in the latest version of CloudForms Management Engine. For lists of Ruby gems included in different CloudForms Management Engine releases, see the following article: https://access.redhat.com/articles/1534753 2.14.1. Creating a Method 10 CHAPTER 2. AUTOMATE MODEL 2.14.1. Creating a Method This procedure shows you how to create a method. 1. Navigate to Automate → Explorer, navigate to the class where you want to create a method. 2. Click the Methods tab. 3. Click (Configuration), (Add a New Method). 4. In the Main Info area, type in a Name and Display Name. 5. For Location, select inline. Once selected, you will be presented with a Data area in which to write or copy the script. 6. Click Validate to check the syntax. 7. Click Add. 2.14.2. Creating a Dynamic Content Dialog The procedure describes the steps to create a dynamic content dialog. 1. Navigate to Automate → Explorer. 2. From the accordion menu, click DOMAIN → Cloud → VM → Operations → Methods. Note DOMAIN must be a user-defined Domain and not the locked ManageIQ Domain. If necessary, you can copy the class from the ManageIQ domain into a custom domain. This example uses the Cloud Namespace but can also use the Infrastructure namespace. 3. Click (Configuration), then (Add a new Instance). 4. In the Main Info area, enter Name = dynamic_list, replacing dynamic_list with an appropriate name for the method. 5. Enter a Display Name and Description. 6. In the Fields area, enter Value = dynamic_list. Leave the other fields blank or use the default values. 7. Click Add. 8. Navigate to Methods tab. 9. In the Main Info area, enter Name = \\dynamic_list and populate the Data section with the example automate method below. 11 Red Hat CloudForms 4.0 Scripting Actions in CloudForms 10. Click Add. 11. Set the automate entry point for the dialog control; use the new instance created in step four. You can create a new domain and copy the method to that domain. # Automate Method dialog_field = $evm.object # sort_by: value / description / none dialog_field["sort_by"] = "value" # sort_order: ascending / descending #dialog_field["sort_order"] = "ascending" # data_type: string / integer dialog_field["data_type"] = "integer" # required: true / false # dialog_field["required"] = "true" dialog_field["values"] = {1 => "one", 2 => "two", 10 => "ten", 50 => "fifty"} dialog_field["default_value"] = 2 2.15. SIMULATION 2.15.1. Simulation After your model is designed, use the simulate page to test it. It allows you to see the results in tree and XML view. 2.15.2. Simulating an Automate Model This procedure shows you how to simulate an automate model. 1. Navigate to Automate → Simulation. 2. In Object Details, select a type of object from /System/Process/ that will initiate the model. The Message should be create. Type in the name of the Request where you are starting from. 12 CHAPTER 2. AUTOMATE MODEL 3. Select the Type of item you want to run the simulation on. Then, select a specific one to use as the example. 4. Check Execute Methods if you want to perform the model and not just simulate it. 5. Type in the Attribute/Value Pairs fields if applicable. 6. Click Submit. Click on the Tree View or XML View tabs to see results. 2.16. IMPORTING, EXPORTING, AND RESETTING THE DATASTORE 2.16.1. Importing, Exporting, and Resetting the Datastore The Automate Model can be exported and imported as a YAML file. CloudForms Management Engine allows you to back up your model by export. Red Hat may provide you with new or updated classes, and provides an import function for either a class or the entire model. Finally, you can reset the datastore to its default. Always be sure to export the current datastore before importing or resetting. 2.16.2. Exporting All Datastore Classes This procedure shows you how export datastore classes as an XML file. 1. Navigate to Automate → Import/Export. 2. Click (Export all Datastore classes and instances to a file). 3. Follow your browsers prompts to save the file. 13 Red Hat CloudForms 4.0 Scripting Actions in CloudForms The datastore is exported as a YAML file. 2.16.3. Importing Datastore Classes This procedure shows you how to import datastore classes. 1. Navigate to Automate → Import/Export. 2. Export the datastore so that you have a backup. 3. Click Browse to navigate to the location of the file to import. 4. Click Upload. The datastore is imported from the YAML file. 2.16.4. Resetting Datastore to Default This procedure shows you how reset datastore to default. 1. Navigate to Automate → Import/Export. 2. Export the datastore so that you have a backup. 3. Click (Reset all Datastore custom classes and instances to default). 4. Read the prompt warning you that communication with the datastore will be lost and all classes and instances will be cleared and reset. 5. After reading the prompt, click OK. 14 CHAPTER 3. INVOKING AUTOMATE CHAPTER 3. INVOKING AUTOMATE 3.1. AUTOMATE EXAMPLES This chapter describes the ways to invoke an Automate workflow. Automation can be initiated through an alert, an event, a CloudForms Management Engine application, or a custom button. The same automation process can be re-used across more than one of these. For example, using automation to remove orphaned virtual machines and instances could be initiated by: An administrator request from the CloudForms Management Engine console (from a custom button) An alert indicating the datastore has less than 20% free-space A virtual machine or instance unregistered event is detected All invocations of an automate model must enter through the /System/Process namespace. 3.2. INVOKING AUTOMATE USING A CUSTOM BUTTON One of the ways to invoke an Automate model is to map an instance from the /System/Process/Request class to a custom button. Before creating the button, you need to have an instance in the /System/Process/Request class to map to it and a button group to assign it to. Create buttons for a cluster, host, datastore, provider, virtual machines or cloud instances. When the button is clicked, the model will be invoked for the selected item. For each of these, you can have up to 15 buttons. 3.3. CREATING A CUSTOM BUTTON GROUP This procedure shows you how to create a custom button group. 1. Navigate to Automate → Customization. 2. Click the Buttons accordion. 3. From the Object Types tree, select the type of object you want to create the button group for. 4. Click (Configuration), (Add a new Button Group). 5. Type in a Button Group Text and Button Group Hover Text, and select the Button Group Image you want to use. 6. If custom buttons have already been created, assign them to the button group. If not, see Section 3.4, “Creating a Custom Button” to create custom buttons. 7. Click Add. The button group will show in the object type you added the button to. 3.4. CREATING A CUSTOM BUTTON 15 Red Hat CloudForms 4.0 Scripting Actions in CloudForms 3.4. CREATING A CUSTOM BUTTON This procedure shows you how to create a custom button. 1. Navigate to Automate → Customization. 2. Click the Buttons accordion. 3. From the Object Types tree, select the type of object you want to create the button for. 4. Click Unassigned Buttons. 5. Click (Configuration), then (Add a new Button). Note If (Add a new Button) is not available, that means you have not created a button group for that object. To continue, create a button group first. See Section 3.3, “Creating a Custom Button Group” 6. In Action, type in a Button Text and Button Hover Text, and select the Button Image you want to use. 7. Select a Dialog if applicable. 8. In Object Details, select Request from the /System/Process/ dropdown. By default, the message is create. Do not change it. 9. Type in a Request name for the /System/Process/Request instance. 10. Type in the Attribute/Value Pairs fields if applicable. 11. Under Visibility, select which Account Roles you want to have access to this button. 12. Click Add when you have confirmed that the button accomplishes the task you want. The button will show in the object type you added the button to. 3.5. EDITING A CUSTOM BUTTON This procedure shows you how to edit a custom button. 1. Navigate to Automate → Customization. 2. From the Object Types dropdown, select the type of object you want to edit the button for. 3. Click the button you want to edit. 4. Click (Configuration), 5. Modify as required. 16 (Edit this Button). CHAPTER 3. INVOKING AUTOMATE 6. Click Save. 3.6. DELETING A CUSTOM BUTTON This procedure shows you how to delete a custom button. 1. Navigate to Automate → Customization, then select the Buttons accordion. 2. From the Object Type tree in the accordion menu, select the type of object you want to remove the button from. 3. Click (Configuration). then click (Remove this button). 4. Click OK to confirm that you want to delete this button. 3.7. USING A CUSTOM BUTTON This procedure shows you how to use custom buttons to invoke a cluster, host, datastore, provider, virtual machine or instance. 1. Go to the page for the item that you created a button for. 2. Click the custom button group from the taskbar, and then your custom button. The automate model is invoked for the specified item. 3.8. INITIATING AUTOMATE FROM AN EVENT You can also use a CloudForms Management Engine Policy Event to initiate automation. You can either use the provided Raise Automation Event action or create a custom automation action. The first case will start in the /System/Process class, but then go to the Event that initiated the Automate model in the /System/Process/Event Class. If you create your own custom action, it will start from the /System/Process class and then go to the /System/Process/Request Class instead. For example, suppose that you always want the same Automate model to occur when a virtual machine is created. You would use the Raise Automation Event Action. There are instances in the /System/Process/Event Class for the following Events that you can select as part of a Policy: 17 Red Hat CloudForms 4.0 Scripting Actions in CloudForms 3.9. CREATING A POLICY FOR AUTOMATE This procedure shows you how to create a policy for automate. 1. Navigate to Control → Explorer. 2. Click the Policies accordion, and select Control Policies. 3. Select VM Control Policies. 4. Click (Configuration), then (Add a New Control Vm Policy). 5. Type in a Description. 6. Uncheck Active if you do not want this policy processed even when assigned to a resource. 7. Click Add. You are brought to the page where you add conditions and events to your new policy. 8. Click (Configuration), then (Edit this Policy's Event assignments). Check the events you want to use to send to an Automate Model. Click Save. From the Events area, click on the Description of the Event you want to assign an action to. 18 CHAPTER 3. INVOKING AUTOMATE Click (Edit Actions for this Policy Event). 9. Select Raise Automation Event, and click this Event). (Move selected Actions into 10. Click Save. You can now assign this policy to a Policy Profile. Then, assign the policy profile to the virtual machines. Every time this event happens on the virtual machine the appropriate Automate Model will be initiated. Note If you want the policy to initiate an Automate Model from the /System/Process/Request class, then you can create your own custom action. Be sure to have an instance in the /System/Process/Request class for it to map to. 3.10. CREATING A CUSTOM AUTOMATE ACTION This procedure shows you how to create a custom Automate action. 1. Navigate to Control → Explorer accordion. 2. Click the Actions accordion. 3. Click (Configuration), then (Add a new Action). 4. Type in a Description for the Action. 5. Select Invoke a Custom Automation from Action Type. 6. In Custom Automation, For Message, type create. For Request, type in the name of the instance of the /System/Process/Request Class in the second. 7. Type in the Attribute/Value Pairs fields if applicable. 8. Click Add. The action is created and can be added to a policy. 19 Red Hat CloudForms 4.0 Scripting Actions in CloudForms APPENDIX A. OBJECTS A.1. VIRTUAL MACHINE PROPERTIES When using these items in a method, prefix them with vm.. For example: vm.storage_id. Table A.1. Virtual Machine Properties 20 Friendly Name or Description Raw Column Name Allocated Disk Storage allocated_disk_storage Autostart autostart Blackbox Exists blackbox_exists Blackbox Validated blackbox_validated Boot Time boot_time Busy busy Cluster ems_cluster_name Configuration XML config_xml Connection State connection_state CPU Affinity cpu_affinity CPU Limit cpu_limit CPU Reserve cpu_reserve APPENDIX A. OBJECTS Friendly Name or Description Raw Column Name CPU Reserve Expand cpu_reserve_expand CPU Shares cpu_shares CPU Shares Level cpu_shares_level Created on Time ems_created_on Currently Used Space used_storage_by_state Datastore Path v_datastore_path Date Created created_on Date Updated updated_on Description description Ems ems_id Evm Owner evm_owner_id Evm Owner Email evm_owner_email Evm Owner Name evm_owner_name CloudForms Management Engine Unique ID (Guid) guid Format format 21 Red Hat CloudForms 4.0 Scripting Actions in CloudForms 22 Friendly Name or Description Raw Column Name Host host_id Host Name host_name Id id Is a Template v_is_a_template Last Analysis Attempt On last_scan_attempt_on Last Analysis Time last_scan_on Last Compliance Status last_compliance_status Last Compliance Timestamp last_compliance_timestamp Last Perf Capture On last_perf_capture_on Last Sync Time last_sync_on Location location Memory Limit memory_limit Memory Reserve memory_reserve Memory Reserve Expand memory_reserve_expand Memory Shares memory_shares APPENDIX A. OBJECTS Friendly Name or Description Raw Column Name Memory Shares Level memory_shares_level Name name OS Name os_image_name Owner owner Paravirtualization paravirtualization Parent Cluster v_owning_cluster Parent Datacenter v_owning_datacenter Parent Folder (Hosts & Clusters) v_owning_folder Parent Folder (VMs & Templates) v_owning_blue_folder Parent Folder Path (Hosts & Clusters) v_owning_folder_path Parent Folder Path (VMs & Templates) v_owning_blue_folder_path Parent Host Platform v_host_vmm_product Parent Resource Pool v_owning_resource_pool Pct Free Disk v_pct_free_disk_space Platform platform 23 Red Hat CloudForms 4.0 Scripting Actions in CloudForms 24 Friendly Name or Description Raw Column Name Power State power_state Previous State previous_state Registered registered Reserved reserved Retired retired Retirement retirement Retires On retires_on Service service_id Smart smart Standby Action standby_action State Changed On state_changed_on Storage storage_id Storage Name storage_name Template template Thin Provisioned thin_provisioned APPENDIX A. OBJECTS Friendly Name or Description Raw Column Name Tools Status tools_status Total Provisioned Space provisioned_storage Total Snapshots v_total_snapshots Total Used Disk Space used_disk_storage Uid Ems uid_ems Uncommitted Space uncommitted_storage Used Storage used_storage V Pct Used Disk Space v_pct_used_disk_space VDI Available vdi_available VDI Connection DNS Name vdi_connection_dns_name VDI Connection Logon Server vdi_connection_logon_server VDI Connection Name vdi_connection_name VDI Connection Remote IP Address vdi_connection_remote_ip_address VDI Connection Session Name vdi_connection_session_name VDI Connection Session Type vdi_connection_session_type 25 Red Hat CloudForms 4.0 Scripting Actions in CloudForms 26 Friendly Name or Description Raw Column Name VDI Connection URL vdi_connection_url VDI Endpoint IP Address vdi_endpoint_ip_address VDI Endpoint MAC Address vdi_endpoint_mac_address VDI Endpoint Name vdi_endpoint_name VDI Endpoint Type vdi_endpoint_type VDI User Appdata vdi_user_appdata VDI User DNS Domain vdi_user_dns_domain VDI User Domain vdi_user_domain VDI User Home Drive vdi_user_home_drive VDI User Home Path vdi_user_home_path VDI User Home Share vdi_user_home_share VDI User Logon Time vdi_user_logon_time VDI User Name vdi_user_name Vendor vendor Version version APPENDIX A. OBJECTS Friendly Name or Description Raw Column Name VMsafe Agent Address vmsafe_agent_address VMsafe Agent Port vmsafe_agent_port VMsafe Enable vmsafe_enable VMsafe Fail Open vmsafe_fail_open VMsafe Immutable VM vmsafe_immutable_vm VMsafe Timeout (ms) vmsafe_timeout_ms A.2. CLOUDFORMS MANAGEMENT ENGINE METHODS FOR USE IN RUBY SCRIPTS To use one of these in one of your own Ruby methods, use the syntax of vm.method. For example, to reboot the guest operating system, use vm.rebootGuest. Method Description start Start Virtual Machine container. stop Stop Virtual Machine container. suspend Suspend Virtual Machine container. unregister Unregister Virtual Machine. collect_running_processes Collect the running processes from a started Virtual Machine. 27 Red Hat CloudForms 4.0 Scripting Actions in CloudForms Method Description shutdownGuest Shutdown the guest operating system of the VM container. Requires VMware tools (or vendors tools) installed on the guest. standbyGuest Put the guest operating system into standby. Requires VMware tools (or vendors tools) installed on the guest. rebootGuest Reboot the guest operating system. Requires VMware tools (or vendors tools) installed on the guest. A.3. HOST PROPERTIES When using these items in a method, prefix them with host, such as host.ems_id. 28 Friendly Name or Description Raw Column Name All Enabled Ports all_enabled_ports Annotation v_annotation Authentication Status Authentication_status Connection State connection_state CPU usage MHz rate average over time period cpu_usagemhz_rate_average_avg_over_time_peri od CPU usage MHz rate high over time period cpu_usagemhz_rate_average_high_over_time_per iod APPENDIX A. OBJECTS Friendly Name or Description Raw Column Name CPU usage MHz rate low over time period cpu_usagemhz_rate_average_low_over_time_peri od Custom Attribute 1 custom_1 Custom Attribute 2 custom_2 Custom Attribute 3 custom_3 Custom Attribute 4 custom_4 Custom Attribute 5 custom_5 Custom Attribute 6 custom_6 Custom Attribute 7 custom_7 Custom Attribute 8 custom_8 Custom Attribute 9 custom_9 Date Created created_on Derived memory usage average over time period derived_memory_used_avg_over_time_period Derived memory usage high over time period derived_memory_used_high_over_time_period Derived memory usage low over time period derived_memory_used_low_over_time_period Ems ems_id 29 Red Hat CloudForms 4.0 Scripting Actions in CloudForms 30 Friendly Name or Description Raw Column Name Enabled Inbound Ports enabled_inbound_ports Enabled Outbound Ports enabled_outbound_ports Enabled Run Level 0 Services enabled_run_level_0_services Enabled Run Level 1 Services enabled_run_level_1_services Enabled Run Level 2 Services enabled_run_level_2_services Enabled Run Level 3 Services enabled_run_level_3_services Enabled Run Level 4 Services enabled_run_level_4_services Enabled Run Level 5 Services enabled_run_level_5_services Enabled Run Level 6 Services enabled_run_level_6_services Enabled TCP Inbound Ports enabled_tcp_inbound_ports Enabled TCP Outbound Ports enabled_tcp_outbound_ports Enabled UDP Inbound Ports enabled_udp_inbound_ports Enabled UDP Outbound Ports enabled_udp_outbound_ports EVM Unique ID (Guid) guid Hostname hostname APPENDIX A. OBJECTS Friendly Name or Description Raw Column Name Id id IP Address ipaddress Last Compliance Status last_compliance_status Last Compliance Timestamp last_compliance_timestamp Last Perf Capture On last_perf_capture_on Last Analysis Time last_scan_on Name name OS Name os_image_name Platform platform Power State power_state Region Description region_description Region Number region_number Reserved reserved Service Names service_names Settings settings 31 Red Hat CloudForms 4.0 Scripting Actions in CloudForms Friendly Name or Description Raw Column Name Smart smart SSH Root Access ssh_permit_root_login Uid Ems uid_ems Date Updated updated_on User Assigned Os user_assigned_os Parent Cluster v_owning_cluster Parent Datacenter v_owning_datacenter Parent Folder (Hosts & Clusters) v_owning_folder Total Datastores v_total_storages Total VMs v_total_vms VMM Build Number vmm_buildnumber VMM Platform vmm_product VMM Vendor vmm_vendor VMM Version vmm_version A.4. PROVIDER PROPERTIES When using these items in a method, prefix them with ems, such as ems.ems_id. 32 APPENDIX A. OBJECTS Friendly Name or Description Raw Column Name Aggregate VM CPUs aggregate_vm_cpus Aggregate VM Memory aggregate_vm_memory CPU Ratio v_cpu_vr_ratio CPU Usage MHZ Rate Average High Over Time Period cpu_usagemhz_rate_average_high_over_time_per iod" CPU Usage MHZ Rate Average Low Over Time Period cpu_usagemhz_rate_average_low_over_time_peri od CPU Usage MHZ Rate Average Over Time Period cpu_usagemhz_rate_average_avg_over_time_peri od Date Created created_on Date Updated updated_on Derived Memory Usage Rate Average High Over Time Period derived_memory_used_high_over_time_period Derived Memory Usage Rate Average Low Time Period derived_memory_used_low_over_time_period Derived Memory Usage Rate Average Over Time Period derived_memory_used_avg_over_time_period Distributed Resource Scheduler Automation Level drs_automation_level Distributed Resource Scheduler Enabled drs_enabled 33 Red Hat CloudForms 4.0 Scripting Actions in CloudForms 34 Friendly Name or Description Raw Column Name Distributed Resource Scheduler Migration Threshold drs_migration_threshold EMS ID ems_id EVM Zone zone_name High-Availability Admission Control ha_admit_control High-Availability Enabled ha_enabled High-Availability Max Failures ha_max_failures Id id Last Performance Data Captured last_perf_capture_on Last Smart State Analysis last_scan_on Memory Ratio v_ram_vr_ratio Name name Parent Datacenter v_parent_datacenter Qualified Description v_qualified_desc Region Description region_description APPENDIX A. OBJECTS Friendly Name or Description Raw Column Name Region Number region_number Reserved reserved Total CPU Speed aggregate_cpu_speed Total Hosts total_hosts Total Memory aggregate_memory Total Number of Logical CPUs aggregate_logical_cpus Total Number of Physical CPUs aggregate_physical_cpus Total Vms total_vms Unique Identifier uid_ems A.5. STORAGE PROPERTIES When using these items in a method, prefix them with storage, such as storage.name. Table A.2. Storage Properties Friendly Name or Description Raw Column Name Date Created created_on Date Updated updated_on Disk Files Percent of Used v_disk_percent_of_used 35 Red Hat CloudForms 4.0 Scripting Actions in CloudForms 36 Friendly Name or Description Raw Column Name Free Space free_space Free Space Percent of Total v_free_space_percent_of_total Id id Last Analysis Time last_scan_on Last Perf Capture On last_perf_capture_on Location location Multiple Host Access multiplehostaccess Name name Non-VM Files Percent of Used v_debris_percent_of_used Other VM Files Percent of Used v_vm_misc_percent_of_used Provisioned Space Percent of Total v_provisioned_percent_of_total Reserved reserved Size of Non-VM Files v_total_debris_size Size of Other VM Files v_total_vm_misc_size Size of VM Memory Files v_total_vm_ram_size APPENDIX A. OBJECTS Friendly Name or Description Raw Column Name Size of VM Snapshot Files v_total_snapshot_size Snapshot Files Percent of Used v_snapshot_percent_of_used Store Type store_type Total Hosts v_total_hosts Total Managed Registered Vms total_managed_registered_vms Total Managed Unregistered Vms total_managed_unregistered_vms Total Provisioned Space v_total_provisioned Total Space total_space Total Unmanaged Vms total_unmanaged_vms Total VMs v_total_vms Uncommitted uncommitted Used Space v_used_space Used Space Percent of Total v_used_space_percent_of_total VM Memory Files Percent of Used v_memory_percent_of_used 37 Red Hat CloudForms 4.0 Scripting Actions in CloudForms APPENDIX B. FAQS AND FLOWS B.1. PHASE 1: CREATE PROVISION REQUEST 38 Question Answer Where do I create a new provisioning profile based on a users LDAP group? Navigate to [VM / Provisioning / Profile] of either the Cloud or Infrastructure namespace in your domain. Where can I specify a pre-dialog to present to a Requester in their LDAP group? Custom pre-dialogs can be defined in [VM / Provisioning / Profile / <LDAP Group Name>] of either the Cloud or Infrastructure namespace in your domain. I would like to customize our dialogs. Where are all the dialogs kept? All dialogs are located on each CloudForms Management Engine Appliance in the [/var/www/miq/vmdb/db/fixtures] directory. APPENDIX B. FAQS AND FLOWS Question Answer What happens if I do not specify any profiles for provisioning? CloudForms Management Engine searches for a matching LDAP group in the [VM / Provisioning / Profile] class of either the Cloud or Infrastructure namespace in your domain. If an LDAP profile is NOT found then CloudForms Management Engine will use the .missing class instance. B.2. PHASE 2: REQUEST APPROVAL Question Answer Where can I specify auto-approval values on a per virtual machine template basis? Tags can be assigned to templates in the form of [prov_max_vms, prov_max_cpus, prov_max_memory, prov_max_retirement_days]. Where can I modify the default Auto-Approval values? These values can be set in the [Service / Provisioning / StateMachines / ServiceProvisionRequestApproval / Default] class instance in your domain. 39 Red Hat CloudForms 4.0 Scripting Actions in CloudForms Question Answer How can I customize the email that is sent when a request is approved? The Request Approved email message can be modified in [VM / Provisioning / Email / MiqProvisionRequest_Approved] in either the Cloud or Infrastructure namespace of your domain. How can I customize the email that is sent when a request is denied? The Request Denied email message can be modified in [VM / Provisioning / Email / MiqProvisionRequest_Denied] in either the Cloud or Infrastructure namespace of your domain. How can I customize the email that is sent when a request is not Auto-approved? The Request Pending email message can be modified in [VM / Provisioning / Email / MiqProvisionRequest_Denied] in either the Cloud or Infrastructure namespace of your domain. If a Request Approval requires manual approval, how does an Approver approve the request? Log into CloudForms Management Engine as an approver/admin and Navigate to Virtual Machines → Requests and then click on the request. B.3. PHASE 3: QUOTA VALIDATION 40 Question Answer Where in CloudForms Management Engine can I set default quota thresholds for users and groups? These values can be set in the [VM / Provisioning / StateMachines / ProvisionRequestQuotaVerification] class instance of either the Cloud or Infrastructure namespace in your domain. Where in CloudForms Management Engine can I set individual and group quota thresholds? Tags can be assigned to groups or users by navigating to Configuration → Access Control. The following are valid tags that can be assigned to group or individual users: [quota_max_cpu, quota_max_memory, quota_max_storage]. Where can I customize the way our virtual machines are named? Virtual machine naming conventions can be altered using the methods in the [VM / Provisioning / Naming] class of either the Cloud or Infrastructure namespace in your domain. APPENDIX B. FAQS AND FLOWS Question Answer How can I customize the email that is sent when a request is denied? The Request Denied email message can be modified in the [VM / Provisioning / Email / MiqProvisionRequest_Denied] in either the Cloud or Infrastructure namespace of your domain. B.4. PHASE 4: PROVISIONING Figure B.1. Target Type: Cloning a Template to a Virtual Machine Figure B.2. Target Type: Clone to Template 41 Red Hat CloudForms 4.0 Scripting Actions in CloudForms 42 Question Answer Where can I customize the email message that is sent upon provisioning completion? This can be customized using the [VM / Provisioning / Email / MiqProvision_Complete] in either the Cloud or Infrastructure namespace of your domain. Where can I change what is put into the virtual machines Annotation after provisioning? These settings can be modified by leveraging the *_PreProvision Ruby methods in [VM / Provisioning / StateMachines / Methods] in either the Cloud or Infrastructure namespace of your domain. Where do I set the default VC folder location for provisioning virtual machines? This can be modified by leveraging by leveraging the *_PreProvision Ruby methods in [VM / Provisioning / StateMachines / Methods] in either the Cloud or Infrastructure namespace of your domain. Where can I modify the virtual machine customization spec mapping? This can be modified by leveraging by leveraging the *_PreProvision Ruby methods in [VM / Provisioning / StateMachines / Methods] in either the Cloud or Infrastructure namespace of your domain. Where can I modify the Clone_to_Template state_machine? Navigate to [VM / Provisioning / StateMachines / VMProvision_VM / template ] in either the Cloud or Infrastructure namespace of your domain. APPENDIX B. FAQS AND FLOWS Question Answer Where can I modify the Clone_to_VM state_machine? Navigate to [VM / Provisioning / StateMachines / VMProvision_VM / clone_to_vm ] in either the Cloud or Infrastructure namespace of your domain. B.5. PHASE 5: RETIREMENT Question Answer Where can I customize the email message that is sent upon completion of virtual machine retirement? This can be customized using the [VM / Retirement / Email / vm_retirement_emails] in either the Cloud or Infrastructure namespace of your domain. Where can I customize the email message that is sent during virtual machine retirement warnings? This can be customized using the [VM / Retirement / Email / vm_retirement_emails] in either the Cloud or Infrastructure namespace of your domain. If I want to customize what gets called during the retirement phase where should I look? This can be customized using the [VM / Retirement / StateMachines / VMRetirement] in either the Cloud or Infrastructure namespace of your domain. How can I extend the virtual machine retirement date an additional number of days? Create a custom button for virtual machines that launches [/System/Request/vm_retire_extend]. Then navigate to the [VM / Retirement / Email / vm_retire_extend] Ruby method in the Cloud and Infrastructure namespaces and set the vm_retire_extend_days value. 43 Red Hat CloudForms 4.0 Scripting Actions in CloudForms APPENDIX C. INLINE METHOD TO CREATE A PROVISION REQUEST C.1. RUBY METHOD # CloudForms Management Engine Automate Method # $evm.log("info", "CloudForms Management Engine Automate Method VM Provisioning Request Started") # Building prov= $evm.root['miq_provision'] # arg1 = version args = ['1.1'] # arg2 = templateFields args << {'name' => 'App'} # arg3 = vmFields args << {'vm_name' => 'CRM_APP', 'request_type' => 'template'} # arg4 = requester args << {'owner_email' => '[email protected]', 'owner_last_name' => 'Admin', 'owner_first_name' => 'Admin', 'user_name' => 'admin'} # arg5 = tags args << {'crm' => 'true'} # arg6 = WS Values args << nil # arg7 = emsCustomAttributes args << nil # arg8 = miqCustomAttributes args << nil $evm.log("info","Building provisioning request with the following arguments: <#{args.inspect}>") result = $evm.execute('create_provision_request', *args) 44
© Copyright 2026 Paperzz