• Notifications
  • Fork

/lightbulb

Permalink
Switch branches/tags
Nothing to show
Find file
540 lines (499 sloc) 32.3 KB
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>Introduction to Ansible Tower</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/reveal.js/3.4.1/css/reveal.css">
<!-- Printing and PDF exports -->
<script>
var link = document.createElement( 'link' );
link.rel = 'stylesheet';
link.type = 'text/css';
link.href = window.location.search.match( /print-pdf/gi ) ? 'https://cdnjs.cloudflare.com/ajax/libs/reveal.js/3.4.1/css/print/pdf.css' : 'https://cdnjs.cloudflare.com/ajax/libs/reveal.js/3.4.1/css/print/paper.css';
document.getElementsByTagName( 'head' )[0].appendChild( link );
</script>
<link rel="stylesheet" href="css/theme/ansible.css">
<!-- Theme used for syntax highlighting of code -->
<!--link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/reveal.js/3.4.1/lib/css/zenburn.css"-->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.6.0/themes/prism.min.css">
</head>
<body>
<div class="ans-mark">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="-449 450 125 125" style="enable-background:new -449 450 125 125;" xml:space="preserve">
<g id="XMLID_3_">
<circle id="XMLID_7_" class="circle" cx="-386.5" cy="512.5" r="62"/>
<path id="XMLID_4_" class="a-mark" d="M-356.9,537.1l-24.7-59.4c-0.7-1.7-2.1-2.6-3.9-2.6c-1.7,0-3.2,0.9-4,2.6l-27.1,65.2h9.2 l10.7-26.9l32,25.9c1.3,1,2.2,1.5,3.4,1.5c2.4,0,4.6-1.8,4.6-4.5C-356.5,538.5-356.6,537.8-356.9,537.1z M-385.4,488.4l16.1,39.6 l-24.2-19L-385.4,488.4z"/>
</g>
</svg>
</div>
<div class="reveal">
<div class="slides">
<section data-state="cover">
<p class="ans-logo"><img src="images/ansible-wordmark-white.svg" width="260" alt="" /></p>
<h1>Introduction to Ansible Tower</h1>
<!--p>NAME HERE, TITLE HERE</p>
<p>COMPANY HERE</p-->
</section>
<section>
<h2>What You Will Learn</h2>
<p>Red Hat<sup>&reg;</sup> Ansible<sup>&reg;</sup> Tower helps you scale IT automation, manage complex deployments and speed productivity. Centralize and control your IT infrastructure with a visual dashboard, role-based access control, job scheduling and graphical inventory management.</p><br>
<ul>
<li>What is Ansible Tower</li>
<li>How Ansible Tower Works</li>
<li>Installing Ansible Tower</li>
<li>Key Features</li>
</ul>
<aside class="notes">
<p>This deck was designed to provide students with a general overview of how ansible core knowledge can be transitioned into Ansible Tower.</p>
<p>This deck supports lecture and hands-on forms of presenting this material. </p>
<p>Allow 2 hours to deliver the lecture-based form and 4 hours for stopping to do the workshop assignments. To access the additional slides for delivering the workshops, navigate down when available. </p>
<p>See the <a href="../facilitator/README.md">Ansible Lighttbulb facilitator&rsquo;s guide</a> for more details on using this deck and it&rsquo;s associated material.</p>
</aside>
</section>
<section>
<h2>What is Ansible Tower?</h2>
<p>Ansible Tower is an <strong>enterprise framework</strong> for controlling, securing and managing your Ansible automation – with a <strong>UI and RESTful API</strong></p><br>
<ul>
<li><strong>Role-based access control</strong> keeps environments secure, and teams efficient</li>
<li>Non-privileged users can <strong>safely deploy</strong> entire applications with <strong>push-button deployment</strong> access</li>
<li>All Ansible automations are <strong>centrally logged</strong>, ensuring <strong>complete auditability and compliance</strong></li>
</ul>
<aside class="notes">
<p>Red Hat Ansible Tower offers the control around ansible automations in the form of RBAC, Job Scheduling, security abstraction from the user and API integrations with other systems.</p>
<p>In Ansible Tower, all Ansible job launches are tracked and logged centrally. What was changed and when it was changed can be viewed, exported to other logging capabilities and controlled within allowances of a user's access based on role.</p>
</aisde>
</section>
<section>
<img src="images/ansible-tower-platform-diagram.svg">
<aside class="notes">
<p>Ansible Core brought you simple and powerful automation, Ansible Tower provides a visual interface to scale out that power. Run jobs against multiple inventories at the same time and schedule jobs to run when you want them too.</p>
<p>With Core, everyone has their own playbooks stored locally or in their own SCM tool. With Ansible Tower, everyone's playbooks can be centralized to one location. Control what teams can see what with RBAC to resources and projects.</p>
<p>Launch playbooks with the click of a button and see the expected results for that same job to compare and confirm the desired outcome.
</aside>
</section>
<section>
<h2>Platform Overview</h2>
<img src="images/ansible-platform-overview.svg"/>
<aside class="notes">
<p>
</aside>
</section>
<section>
<h2>Installing Ansible Tower</h2>
<pre class="language-yaml"><code>
# the most common and preferred way of
# installation for RHEL (Preferred) or Ubuntu
$ wget https://bit.ly/ansibletower
# bundled installer can be downloaded for
# RHEL (and select derivatives) at
$ wget https://bit.ly/ansibletowerbundle
# looking for a specific version? navigate to http://releases.ansible.com/ansible-tower
# to see all the versions available for download
</code></pre>
<aside class="notes">
<p>Installation methods listed here are the most common used. Please note: Do not install Ansible Core via pip before installing Ansible Tower. Ansible Tower expects Ansible Core to be installed via package manager - and it will do this for you.</p>
<p>The standard installer can be used with normal internet access but if you are in a restricted network environment, the bundled installer will be your best choice. Please note that there the bundled installer currently only supports RHEL Based systems.</p>
<p>There are also Vagrant Images and AWS AMIs available. To find out more, visit ansible.com/tower-trial</p>
</aside>
</section>
<section>
<h2>Server Requirements</h2>
<ul>
<li>Red Hat Enterprise Linux (RHEL) 7 (and select derivatives), Ubuntu 14.04 64-bit, and Ubuntu 16.04 LTS 64-bit support required (kernel and runtime).</li>
<li>A currently supported version of Mozilla Firefox or Google Chrome.</li>
<li>2 GB RAM minimum (4+ GB RAM highly recommended)</li>
<li>20 GB of dedicated hard disk space</li>
</ul>
<aside class="notes">
<p>Unlike Ansible Core, Ansible Tower cannot be installed locally on your laptop, it must be installed in a server environment.</p>
<p>Other HTML5 compliant web browsers may work but are not fully tested or supported.</p>
<p>10 GB of the 20 GB requirement must be dedicated to /var/, where Ansible Tower stores its files and working directories (dedicating less space will cause the installation to fail)</p>
</aside>
</section>
<section>
<section data-state="title alt">
<h1>Demo Time: <br/>Installing Ansible Tower</h1>
<aside class="notes">
<p>Installing Ansible Tower is simple and quick. Go ahead and open up a terminal and connect to VM with an os of your choice.</p>
<p>Start by downloading the latest bundled tower installer from https://bit.ly/ansibletowerbundle and unpack the tarball once it is done downloading.</p>
<p>Now that the package is unzipped, move into the directory and look for the inventory file. Here you will set all the neccesary passwords needed for the install to take place. </p>
<p>You will need to set:</p>
<ul>
<li>admin_password</li>
<li>pg_password</li>
<li>rabbitmq_password</li>
</ul>
<p>You are setting the admin password because the admin user account will be the only account at the beginning that can access your Ansible Tower instance.</p>
<p>You are setting the postgres password so that tower will have access to the database that is created</p>
<p>And you are setting rabbitmq password so that rabbitmq will be able to <p>
</aside>
</section>
<section data-state="title alt">
<h1>Workshop: <br/>Installing Ansible Tower</h1>
<aside class="notes">
<p>See</p>
<pre class="language-yaml"><code>workshops/tower_install</code></pre>
<p>in the Ansible Lightbulb repo.</p>
<p>It's solution and addition details can be found in <code>facilitator/solutions/tower_install.md</code>.</p>
</aside>
</section>
</section>
<section>
<h2>Key Features of Ansible Tower</h2>
<ul>
<li>Dashboard and User Interface</li>
<li>User Base -- Organizations, Teams &amp; Users</li>
<li>Credentials</li>
<li>Inventories</li>
<li>Projects</li>
<li>Job Templates &amp; Jobs</li>
<li>Role Based Access Control (RBAC)</li>
</ul>
<aside class="notes">
<p>We now have Ansible Tower installed on a VM, but before we can get started with automating in Ansible Tower, we need to learn how some of the key features of it work.</p>
<p>Listed are some of the key features that we are going to be discussing in the coming slides. </p>
</aside>
</section>
<section>
<h2 style="text-align:center">Dashboard and User Interface</h2>
<div style="text-align: center;"><img src="images/ansible-tower3-monitor-1x.png"/></div>
<aside class="notes">
<p>The Ansible Tower dashboard provides a heads-up NOC-style display and a friendly graphical framework for your IT orchestration needs. Across the top-left side of the Ansible Tower Dashboard, administrators can quickly navigate to their Projects, Inventories, Job Templates, and Jobs.</p>
<p>Across the top-right side of this interface, administrators can access the tools they need to configure organizations, users, groups, and permissions as well as view related documentation, access portal mode, and log out.</p>
</aside>
</section>
<section>
<h2>User Base</h2><br>
<p>A <strong>user</strong> is an account to access Ansible Tower and its services given the permissions granted to it.</p>
<p>An <strong>organization</strong> is a logical collection of users, teams, projects, inventories and more. All entities belong to an organization with the exception of users.</p>
<p><strong>Teams</strong> provide a means to implement role-based access control schemes and delegate responsibilities across organizations.</p>
<aside class="notes">
<p>Users are individuals and can be added to teams and or organizations. There are 3 types of users: Normal User, System Auditor and System Administrator.</p>
<p>A normal user has read write access limited to the resources they are able to access.</p>
<p>A system auditor implicitly inherit the read-only capability for all objects within the Ansible Tower environment.</p>
<p>A system administrator (also known as Superuser) has admin, read, and write privileges over the entire Ansible Tower installation. A System Administrator is typically responsible for managing all aspects of Ansible Tower and delegating responsibilities for day-to-day work to various Users.
<p>An organization is is a logical collection of Users, Teams, Projects, and Inventories, and is the highest level in the Ansible Tower object hierarchy.</p>
<p>A Team is a subdivision of an organization with associated users, projects, credentials, and permissions. Teams provide a means to implement role-based access control schemes and delegate responsibilities across organizations. </p>
<p>The userbase plays an important part in implementing role-based access control schemes across your organization.</p>
</aside>
</section>
<section>
<h2>Credentials</h2>
<p>Credentials are utilized by Ansible Tower for authentication with various external resources:</p>
<ul>
<li>Connecting to <strong>remote machines</strong> to run jobs</li>
<li>Syncing with <strong>inventory</strong> sources</li>
<li>Importing project content from <strong>version control systems</strong></li>
<li>Connecting to and managing <strong>networking devices</strong>
</ul>
<p>Centralized management of various credentials allows end users to leverage a secret without ever exposing that secret to them.</p>
<aside class="notes">
<p>Credentials are utilized by Ansible Tower for authentication when launching Jobs against machines, synchronizing with inventory sources, and importing project content from a version control system.</p>
<p>Ansible Tower credentials are imported and stored encrypted in Ansible Tower, and are not retrievable in plain text on the command line by any user.</p>
<p>You can grant users and teams the ability to use these credentials, without actually exposing the credential to the user.</p>
<p>If you have a user move to a different team or leave the organization, you don’t have to re-key all of your systems just because that credential was available in Ansible Tower.</p>
</aside>
</section>
<section>
<h2>Inventory</h2>
<p>Inventory is a collection of hosts (nodes) with associated data and groupings that Ansible Tower can connect to and manage.</p>
<ul>
<li>Hosts (nodes)</li>
<li>Groups</li>
<li>Inventory-specific data (variables)</li>
<li>Static or dynamic sources</li>
</ul>
<aside class="notes">
<p>Inventory is a collection of the hosts (nodes) with associated metadata and groupings that Ansible can connect and manage. An inventory source can be static files or dynamically retreived from an external system.</p>
<p>In Ansible Tower, there are many features that you can take advantage of in regards to inventory. Groups, all be them not new in the ansible space, are now more easily manipulated and created. Groups can be nested and this allows for you to copy or move the group to a different group.</p>
<p>You also have the ability in Ansible Tower to setup a dynamic inventory within Ansible Tower. We will talk more in depth about dynamic inventories here in a few minutes.</p>
</aside>
</section>
<section>
<h2>Projects</h2>
<p>A Project is a logical collection of Ansible Playbooks, represented in Ansible Tower.</p>
<p>You can manage Playbooks and Playbook directories by placing them in a <strong>source code management system</strong> supported by Ansible Tower, including Git, Subversion, and Mercurial.</li>
<aside class="notes">
<p>As a refresher from the core presentation, a Project is a logical collection of Ansible playbooks. </p>
<p>In Ansible Tower, you can manage playbooks and playbook directories by either placing them manually under the Project Base Path on your Ansible Tower server, or by placing your playbooks into a source code management (SCM) system supported by Ansible Tower, including Git, Subversion, and Mercurial.</p>
<p>Managing your projects with a SCM is recommended to ensure that only those with assigned access to the repository can change the playbook before execution, and for the extra layer of accountability and change control it provides.</p>
<p>Within Ansible Tower, there are a few new things that you can do with your projects.</p>
<ul>
<li>Update: If configured for a particular project, you can invoke an immediate update to source control.</li>
<li>Schedule: If configured for a particular project , you can schedule an update from source control.</li>
<li>Permissions: Any project can have permissions added to it so only a specific set of users or teams can access it.</li>
</ul>
</aside>
</section>
<section>
<h2>Job Templates</h2>
<p>A job template is a definition and set of parameters for running an Ansible Playbook. <br><br>Job templates are useful to <strong>execute</strong> the same job many times and encourage the <strong>reuse</strong> of Ansible Playbook content and collaboration between teams.</p>
<aside class="notes">
<p>While the REST API allows for the execution of jobs directly, Ansible Tower requires that you first create a job template.</p>
<p>To create a job template, there are some things that are required. You will need to have:
<ul>
<li>Name</li>
<li>Job Type</li>
<li>Inventory</li>
<li>Project</li>
<li>Playbook</li>
<li>Credentials (a machine credential is always required but depending on what you are running against, other credentials might be needed)</li>
<li>Verbosity Level (A level 0 is always selected by default but depending on the kind of output that is needed, you can select a level all the way up to 5)</li>
</ul>
<p>Those are required for a job template but their other options for you to cater each job template to your exact needs.</p>
<p>Due to time, we won't go to far into the weeds on some of the advanced configurations that you can do with Job Tempaltes but there are some options that you can select to make life a little easier when running job templates.</p>
<p>Options such as Enable privilege escaltion, enable provisioning callbacks and enable concurrent jobs.</p>
<ul>
<li>Enable Privilege Escalation: If enabled, run this playbook as an administrator. This is the equivalent of passing the --become option to the ansible-playbook command.</li>
<li>Allow Provisioning Callbacks: Enable a host to call back to Ansible Tower via the Ansible Tower API and invoke the launch of a job from this job template.</li>
<li>Allow Provisioning Callbacks: Enable a host to call back to Ansible Tower via the Ansible Tower API and invoke the launch of a job from this job template.</li>
</aside>
</section>
<section>
<h2>Jobs</h2>
<p>A job is an instance of Ansible Tower launching an Ansible Playbook against an inventory of hosts.</p>
<ul>
<li>Job results can be easily viewed</li>
<li>View the standard out for a more in-depth look</li>
</ul>
<aside class="notes">
<p>The Jobs link displays a list of jobs and their status, shown as completed successfully or failed, or as an active (running) job.</p>
<p>Actions you can take against jobs include viewing the details and standard output of a particular job, relaunch jobs, or remove jobs.</p>
<p>Clicking on any type of job takes you to the Job Details View for that job, which consists of two sections:</p>
<ul>
<li>Details: provides information and status about the job</li>
<li>Standard Out: displays the job processes and output</li>
</ul>
</aside>
</section>
<section>
<h2>Role Based Access Control (RBAC)</h2>
<p>Role-Based Access Controls (RBAC) are built into Ansible Tower and allow administrators to <strong>delegate access</strong> to server inventories, organizations, and more. These controls allow Ansible Tower to help you <strong>increase security</strong> and <strong>streamline management</strong> of your Ansible automation.</p>
<aside class="notes">
<p>RBAC is at the core of how Ansible Tower scales organizations while increasing the security of automating.</p>
<p>By delegating access to resources within tower, you are removing an element of human error. Users can only view what they are permitted to see and can only run jobs against inventories that they are permitted to act against.</p>
<p>(increase security) </p>
<p>Streamline management</p>
</aside>
</section>
<section>
<h2>Role Based Access Control (RBAC)</h2><br>
<img src="images/ansible-tower-rbac.svg">
<aside class="notes">
<p>Roles can be granted to individual users, teams and as well as to organizations.</p>
<p>Roles control access to projects, inventories and job templates in the form of permissions.</p>
<p>Tower security centers around role based access for users and teams.</p>
<p>Security can be applied granularly to Credentials, Inventories, Projects, Job Templates and API Access based on the user or team role.</p>
</section>
<section>
<section data-state="title alt">
<h1>Demo Time:<br/>Ansible Tower Basic Setup<br>&amp; Job Run</h1>
<aside class="notes">
<p>Installing Ansible Tower is simple and quick. Go ahead and open up a terminal and connect to VM with an os of your choice..</p>
</aside>
</section>
<section data-state="title alt">
<h1>Workshop:<br/>Ansible Tower Basic Setup<br>&amp; Your First Job Run</h1>
<aside class="notes">
<p>See</p>
<pre class="language-yaml"><code>workshops/tower_basic_setup</code></pre>
<p>in the Ansible Lightbulb repo.</p>
</aside>
</section>
</section>
<section>
<section>
<h2>Dynamic Inventory in Ansible Tower</h2>
<p>Dynamic inventory is a script that queries a service, like a cloud provider API or a management application. This data is formatted in an Ansible-specific JSON data structure and is used in lieu of static inventory files.</p>
<ul>
<li>Groups are generated based on host metadata</li>
<li>Single source of truth saves time, avoids duplication and reduces human error</li>
<li>Dynamic and static inventory sources can be used together</li>
</ul>
<aside class="notes">
<p>Ansible can take inventory from a wide variety of sources on-the-fly. It can draw from many different systems such as VMWare, Openstack, Amazon EC2, Digital Ocean, and other provisioning systems like Cobbler. You can also create your own inventory module to interface with any proprietary or in-house CMDB systems.</p>
<p>Ideally, the source of data for our dynamic inventory scripts is 100% correct, and is automatically updated as infrastructure changes. This is especially useful in environments where machines are coming on and offline all the time, like a cloud or virtual environment.</p>
</aside>
</section>
<section data-state="title alt">
<h1>Demo:<br/>Ansible Tower Dynamic Inventory</h1>
<aside class="notes speaker">
<p>Setup a cloud credential in Ansible Tower to (presumably) AWS EC2 and then manually trigger an inventory update. Show the inventory in the Ansible Tower UI. Note how it generated groups and job templates can be setup to run inventory updates before executing.</p>
<p>Alternatively you can open a terminal window and use Ansible core to demonstrate dyanmic inventory at work. Assuming you have your local credentials setup, run the inventory script and pipe it to less. Then run an ad-hoc ping command using <code>-i</code> switch to call your dynamic inventory.</p>
</aside>
</section>
</section>
<section>
<section>
<h2>More with Ansible Tower</h2>
<ul>
<li>Job Status Updates</li>
<li>Activity Stream</li>
<li>Integrated Notifications</li>
<li>Schedule Jobs</li>
<li>Manage and Track Your Inventory</li>
<li>Self Service IT (User Surveys)</li>
<li>Remote Command Execution</li>
<li>External Logging</li>
<li>Multi-Playbook Workflows</li>
</ul>
<aside class="notes">
<p>What we've shown you so far are only the basics of what Ansible Tower can do to scale the automation activity in your organization. Here are some other features that have been added to Tower.</p>
<p>You can navigate down into slides with more detail on each or return to these at a later date when you the time.</p>
</aside>
</section>
<!-- NEW SLIDES BEGIN HERE -->
<section>
<h2>Job Status Update</h2>
<div class="columns">
<div class="col">
<p>Heads-up NOC-style <strong>automation dashboard</strong> displays everything going on in your Ansible environment.</p>
</div>
<div class="col" style="flex-grow: 10;">
<img src="images/tower/job-status-update.png" alt="" />
</div>
</div>
<aside class="notes speaker">
</aside>
</section>
<section>
<h2>Activity Stream</h2>
<div class="columns">
<div class="col" style="flex-grow: 10;">
<img src="images/tower/activity-stream.png" alt="" />
</div>
<div class="col">
<p>Securely stores every Job that runs, and enables you to view them later, or export details through Ansible Tower’s API.</p>
</div>
</div>
<aside class="notes speaker">
</aside>
</section>
<section>
<h2>Integrated Notifications</h2>
<div class="columns">
<div class="col">
<p>Stay informed of your automation status via integrated notifications. Connect Slack, Hipchat, SMS, email and more. </p>
</div>
<div class="col" style="flex-grow: 10;">
<img src="images/tower/integrated-notifications.png" alt="" />
</div>
</div>
<aside class="notes speaker">
</aside>
</section>
<section>
<h2>Schedule Jobs</h2>
<div class="columns">
<div class="col" style="flex-grow: 10;">
<img src="images/tower/schedule-jobs.png" alt="" />
</div>
<div class="col">
<p>Enables you to any Job now, later, or forever.</p>
</div>
</div>
<aside class="notes speaker">
</aside>
</section>
<section>
<h2>Manage and Track Your Inventory</h2>
<div class="columns">
<div class="col">
<p>Ansible Tower’s <strong>inventory syncing</strong> and <strong>provisioning callbacks</strong> allow nodes to request configuration on demand, enabling autoscaling.</p>
</div>
<div class="col" style="flex-grow: 10;">
<img src="images/tower/manage-track-inventory.png" alt="" />
</div>
</div>
<aside class="notes speaker">
</aside>
</section>
<section>
<h2>Self Service IT</h2>
<div class="columns">
<div class="col" style="flex-grow: 10;">
<img src="images/tower/self-service-it.png" alt="" />
</div>
<div class="col">
<p>Ansible Tower lets you launch Playbooks with just a single click. It can prompt you for variables, let you choose from available secure credentials and monitor the resulting deployments.</p>
</div>
</div>
<aside class="notes speaker">
</aside>
</section>
<section>
<h2>Remote Command Execution</h2>
<div class="columns">
<div class="col">
<p>Run simple tasks on any hosts with Ansible Tower's <strong>remote command execution</strong>. Add users or groups, reset passwords, restart a malfunctioning service or patch a critical security issue, quickly.</p>
</div>
<div class="col" style="flex-grow: 10;">
<img src="images/tower/remote-command-execution.png" alt="" />
</div>
</div>
<aside class="notes speaker">
</aside>
</section>
<section>
<h2>External Logging</h2>
<div class="columns">
<div class="col" style="flex-grow: 10;">
<img src="images/tower/external-logging.png" alt="" />
</div>
<div class="col">
<p>Connect Ansible Tower to your external logging and analytics provider to perform analysis of automation and event correlation across your entire environment.</p>
</div>
</div>
<aside class="notes speaker">
</aside>
</section>
<section>
<h2>Multi-Playbook Workflows</h2>
<div class="columns">
<div class="col">
<p>Ansible Tower’s multi-Playbook workflows chains any number of Playbooks together to create a single workflow. Different Jobs can be run depending on success or failure of the prior Playbook.</p>
</div>
<div class="col" style="flex-grow: 10;">
<img src="images/tower/multi-playbook-workflows.png" alt="" />
</div>
</div>
<aside class="notes speaker">
</aside>
</section>
<!-- NEW SLIDES END HERE -->
</section>
<section>
<h2>Next Steps</h2>
<ul>
<li><strong>It’s easy to get started</strong><br/>ansible.com/get-started</li>
<li><strong>Try Ansible Tower for free:</strong><br/>ansible.com/tower-trial</li>
<li><strong>Would you like to learn a lot more?</strong><br/>redhat.com/en/services/training/do409-automation-ansible-ii-ansible-tower</li>
</ul>
</section>
</div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/reveal.js/3.4.1/lib/js/head.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/reveal.js/3.4.1/js/reveal.js"></script>
<script>
// More info https://github.com/hakimel/reveal.js#configuration
Reveal.initialize({
history: true,
width: "85%",
height: "90%",
transition: "fade",
// More info https://github.com/hakimel/reveal.js#dependencies
// Notes plugin must remain local for now.
// See https://github.com/ansible/lightbulb/issues/125
dependencies: [
{ src: 'https://cdnjs.cloudflare.com/ajax/libs/reveal.js/3.4.1/plugin/markdown/marked.js' },
{ src: 'https://cdnjs.cloudflare.com/ajax/libs/reveal.js/3.4.1/plugin/markdown/markdown.js' },
{ src: 'plugin/notes/notes.js', async: true },
{ src: 'https://cdnjs.cloudflare.com/ajax/libs/prism/1.6.0/prism.min.js'},
{ src: 'https://cdnjs.cloudflare.com/ajax/libs/prism/1.6.0/components/prism-yaml.min.js'}
//{ src: 'https://cdnjs.cloudflare.com/ajax/libs/reveal.js/3.4.1/plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } }
]
});
</script>
</body>
</html>