Ansible Integration

Ansible Example

This lab will guide you through the process of creating a Service Catalog Item based on an Ansible Playbook.

Introduction to Ansible

Today, every business is a digital business. Technology is your innovation engine, and delivering your applications faster helps you win. Historically, that required a lot of manual effort and complicated coordination. But today, there is Ansible - the simple, yet powerful IT automation engine that thousands of companies are using to drive complexity out of their environments and accelerate DevOps initiatives.

Red Hat CloudForms can integrate with IaaS, PaaS, public and private cloud, and configuration management providers. Since version 4.2 of CloudForms, it can also integrate with Ansible Tower by Red Hat. The latest version which is 4.6, which has an improved “embedded Ansible” role which allows it to run Playbooks, manage credentials and retrieve Playbooks from a source control management like git.

This integration give customers the capability to build Service Catalogs from Ansible Playbooks to allow end users to easily browse, order and manage resources from Ansible. Ansible Playbooks can be used in Control Policies which can not only detect problems, but also automatically fix them. The User Interface of CloudForms can be extended seamless with additional menus and buttons, which utilize Ansible Playbooks to perform user initiated tasks.

Make sure embedded Ansible role is enabled and running

Before we start, we want to make sure the embedded Ansible role is enabled and running.

Click on your user name on the top right and click on Configuration

navigate to configuration

Make sure the “Embedded Ansible” and the “Git Repositories Owner” Roles are enabled

ansible role enabled

Click on Diagnostics in the accordion on the left and click on the Workers tab

Make sure you can see a line indicating the “Embedded Ansible Worker” is in state “started”

The git role is not represented by a specific worker process.

ansible worker started

We’ve noticed that sometimes the role does not start automatically. You can trigger a restart by clicking on Diagnostics -> Server and then Configuration -> Restart Server. This will trigger a restart of all services and can take a few minutes to complete. Only do this, if your Embedded Ansible role was not in state “started”.

restart CloudForms Server

Add a Git repository of Ansible Playbooks

To be able to run Ansible Playbooks, they have to become available in CloudForms. Custom git repositories can be used as well as GitHub, GitLab or others. Other Source Control Management Systems like Subversion or Mercurial are planned for later versions.

Navigate to Automation, Ansible, Repositories.

navigate to Ansible repositories

Click on Configuration, Add New Repository

Add new repository

If the menu item “Add New Repository” is disabled, the Git Repository Role is not active.

Fill in the form.

Name: Github

An internal name for the git repository.

Description: Example Playbooks

A description for the git repository.

URL: https://github.com/cbolz/summit-fy19.git

How to access the git repository.

SCM Update Options: check “Update on Launch”

Update on Launch causes CloudForms to check for new Playbooks or updated Playbooks before a Playbook is launched.

add a new repository

Click on Add to save the settings

It takes a few seconds for the action to complete. A pop up notification will inform you after the task was completed.

Store Virtual Machine Credentials

Ansible is using SSH by default to perform actions on the target machine. To be able to login, it has to know the login credentials.

Navigate to Automation -> Ansible -> Credentials

navigate to Ansible credentials

Click on Configuration -> Add a new Credential

add new credentials

Use the following settings:

Name: Virtual Machine credentials

A user descriptive name for the Credentials you want to store.

Credential type: Machine

CloudForms supports several credential types to connect to other systems. For this lab we chose “Machine”.

Username: root

The username used to login to the target system.

Password: <to_be_provided>

The password used to login to the target system. Passwords are stored encrypted in the CloudForms database.

provide VM credentials

Click *Add to save the credentials

Once more this is an action which is preformed in the background and it can take a few seconds until you can see the new credentials in the Web UI.

Create an Ansible Service Catalog

To offer a Service Catalog Item to users, they have to be organized in Service Catalogs. Create one by following these steps:

The next step is to create a service catalog. First we have to navigate to Services -> Catalogs.

navigate to services, catalog

On this screen click on Catalogs on the left

You should already see one Service Catalogs:

Virtual Machines: the Service Catalog we created in the Virtual Machine part of the lab

service catalogs

You might already have some catalogs from previous labs.

Click on Configuration and Add a New Catalog

Fill out name and description:

Name: Ansible

A user friendly name of the Service Catalog. End users will see the different Service Catalogs by name.

Description: Order Ansible Playbooks from a Service Catalog

Additional description about the Service Catalog. End users will see the description and it will help them to find the Service Catalog Items they are looking for.

add a new catalog

Click on Add to save the new Catalog

Create a Service Catalog Item

In the following step we create a Service Catalog Item which will execute an Ansible Playbook.

Navigate to Services -> Catalogs

navigate to Services Catalogs

Navigate to Catalog Items in the accordion on the left

navigate to Catalog Items

Click on Configuration -> Add a New Catalog Item

create new catalog item

Select Ansible Playbook as Catalog Item Type

select ansible playbook as type

Use the following parameters when defining the Service Catalog Item:

Name: Install Package

The user friendly name of the Service Catalog Item. It will be presented to the end user.

Description: Install Package via Ansible Playbook

Additional description about the Service Catalog Item to make it easier for the end user to find what they are looking for.

Display in Catalog: Yes

You can hide Service Catalog Items from users by setting this to “No”. For this lab we want to allow users to order the Service Catalog Item, so we set this to “Yes”.

Catalog: Ansible

In which Service Catalog do you want the Service Catalog Item to show up?

Repository: Github

You might have many git repositories, to better identify the correct Ansible Playbook, you first select the Repository. We only have one Repository so far, so this is simple:

Playbook: playbooks/InstallPackage.yml

The actual Playbook which will be exected when the Service Catalog Item is ordered.

Machine Credentials: Virtual Machine credentials

The credentials used to login to the target machine to run the Ansible Playbook:

Variables & Default Values: add one new entry

Ansible Playbooks can use variables which gives us more flexiblity. In this example the package name is not hard coded, but can be set and changed from a variable.

Variable: package_name

Since a Playbook can have multiple variables, you can add multiple lines.

Default Value: httpd

Click the little plus (“+”) icon to save the row. We only use one variable in this playbook, but your Playbooks might use more.

Dialog: Create New

Use “InstallPackage” as the name of the Dialog. CloudForms will automatically create the Service Dialog for us, to save some time. The automatically created Service Dialog is still fully customizable, which we will do in a later part of the lab.

dialog to create InstallPackage Service Catalog Item

Click Add to save all changes

Test the Service Catalog Item

We want to make sure the resulting Service Catalog Item actually works.

Navigate to Services -> Catalogs

navigate to service catalogs

Click on Service Catalogs in the accordion on the left, if not already selected

navigate to Ansible Service Catalog

Select the “Install Package” Service Catalog Item from the “Ansible” Service Catalog

select install package Service Catalog Item

Click Order

Select the following options:

Machine Credentials: Virtual Machine Credentials

These are the credentials stored in CloudForms earlier, to log into the target machine.

Hosts: localhost (should already be the default)

On which machine the Playbook should be executed:

package_name: httpd (should already be the default)

The variable specified when creating the Service Catalog Item, which can be overriden by the end user during order:

parameters for the Ansible InstsallPackage Playboosk

Click on Submit

After submitting your order, you will be redirected to the Requests Queue. You should also see pop up notifications on the top right informing you about the progress of your order.

Click on Refresh to monitor the progress of your order

Navigate to Services -> My Services

navigate to My Services

Every time a user places an order a object under “My Services” gets created. You should see one tile labeled “Install Package”

My Service Install Package

Click on the tile icon to get more details

My Service Install Package Details

Click on the tab Provisioning to see details of the Ansible Playbook run

My Service Install Package Provisioning

In this example the Playbook completed successfully. In your case it might be still running and not be complete. Click the little reload icon on the page to reload the information while the Playbook is executed in the background.

This concludes this part of the lab.