diff --git a/buildvm.yml b/buildvm.yml index 48acc67..18de909 100644 --- a/buildvm.yml +++ b/buildvm.yml @@ -18,18 +18,9 @@ collections: - netbox.netbox - freeipa.ansible_freeipa + - redhat.rhv tasks: - - name: Get unused IP Address from pool - netbox_ip_address: - netbox_url: "{{ netbox_api }}" - netbox_token: "{{ netbox_token }}" - data: - prefix: 192.168.16.0/20 - state: new - register: new_ip - when: primary_ipv4 is undefined - delegate_to: localhost - name: Obtain SSO token for RHV ovirt_auth: @@ -39,6 +30,20 @@ password: "{{ ovirt_password }}" delegate_to: localhost + - name: Get unused IP Address from pool + netbox_ip_address: + netbox_url: "{{ netbox_api }}" + netbox_token: "{{ netbox_token }}" + data: + prefix: 192.168.90.0/24 + assigned_object: + name: eth0 + virtual_machine: "{{ inventory_hostname }}" + state: new + register: new_ip + when: primary_ipv4 is undefined + delegate_to: localhost + - set_fact: primary_ipv4: "{{ new_ip.ip_address.address|ipaddr('address') }}" vm_hostname: "{{ inventory_hostname.split('.')[0] }}" @@ -46,6 +51,15 @@ delegate_to: localhost when: primary_ipv4 is undefined + - name: Primary IPv4 Assigned in Netbox + netbox_virtual_machine: + netbox_url: "{{ netbox_api }}" + netbox_token: "{{ netbox_token }}" + data: + primary_ip4: "{{ primary_ipv4 }}" + name: "{{ inventory_hostname }}" + delegate_to: localhost + - name: Primary IPv4 Address debug: var: primary_ipv4 @@ -68,7 +82,7 @@ gather_facts: no collections: - netbox.netbox - - ovirt.ovirt + - redhat.rhv vars: # Workaround to get correct venv python interpreter ansible_python_interpreter: "{{ ansible_playbook_python }}" @@ -95,7 +109,7 @@ name: '{{ item.name }}' description: '{{ item.descr }}' interface: '{{ item.interface }}' - size: '{{ item.size }}' + size: '{{ item.size|int * 1024000 }}' state: '{{ item.state }}' sparse: '{{ item.sparse }}' wait: true @@ -104,7 +118,6 @@ poll: 15 loop: '{{ vm_disks }}' - - set_fact: nb_query_filter: "slug={{ platform }}" - debug: msg='{{ query("netbox.netbox.nb_lookup", "platforms", api_filter=nb_query_filter, api_endpoint=netbox_api, token=netbox_token)[0].value.name }}' @@ -130,6 +143,8 @@ - hd async: 300 poll: 15 + notify: PXE Boot + register: vm_result - name: Assign NIC ovirt_nic: @@ -137,12 +152,38 @@ interface: virtio mac_address: '{{ item.mac_address|default(omit) }}' name: '{{ item.name }}' - profile: ovirtmgmt + profile: '{{ item.untagged_vlan.name }}' network: '{{ item.untagged_vlan.name }}' # This is fragile state: '{{ (item.enabled == True) |ternary("plugged","unplugged") }}' linked: yes vm: '{{ inventory_hostname }}' loop: '{{ interfaces }}' + register: interface_result + + + - name: Host configured in Satellite + redhat.satellite.host: + username: "{{ satellite_admin_user }}" + password: "{{ satellite_admin_pass }}" + server_url: "{{ satellite_url }}" + name: "{{ inventory_hostname }}" + hostgroup: "RHEL8/Management" + organization: Toal.ca + location: Lab + ip: "{{ primary_ipv4 }}" + mac: "{{ interface_result.results[0].nic.mac.address }}" #fragile + build: "{{ vm_result.changed |ternary(true,false) }}" + validate_certs: no + + - name: Assign interface MACs to Netbox + netbox_vm_interface: + netbox_url: "{{ netbox_api }}" + netbox_token: "{{ netbox_token }}" + data: + name: "{{ item.nic.name }}" + mac_address: "{{ item.nic.mac.address }}" + virtual_machine: "{{ inventory_hostname }}" + loop: "{{ interface_result.results }}" handlers: - name: PXE Boot @@ -158,6 +199,8 @@ hosts: tag_build gather_facts: no connection: local + collections: + - redhat.rhv vars: # Hack to work around virtualenv python interpreter ansible_python_interpreter: "{{ ansible_playbook_python }}" diff --git a/collections/requirements.yml b/collections/requirements.yml index ce81d70..1609aad 100644 --- a/collections/requirements.yml +++ b/collections/requirements.yml @@ -6,9 +6,7 @@ collections: - name: netbox.netbox source: https://galaxy.ansible.com - # - name: freeipa.ansible_freeipa - - - name: ovirt.ovirt + - name: freeipa.ansible_freeipa source: https://galaxy.ansible.com - name: redhat.rhv @@ -25,3 +23,6 @@ collections: - name: jjaswanson4.configure_satellite source: https://galaxy.ansible.com + + - name: redhat.satellite + source: https://cloud.redhat.com/api/automation-hub/ diff --git a/roles/lightbulb-ansiblered-deck/README.md b/roles/lightbulb-ansiblered-deck/README.md deleted file mode 100644 index d5f0dc7..0000000 --- a/roles/lightbulb-ansiblered-deck/README.md +++ /dev/null @@ -1,88 +0,0 @@ -[![GoKEV](http://GoKEV.com/GoKEV200.png)](http://GoKEV.com/) - -
- -# lightbulb-ansiblered-deck - -This project is the "Ansible Red" deck HTML content. Optionally, a daemon will be started up if you don't exclude tag "phpdaemon" - - -## Example Playbooks -Here's an example of how you could launch this role and deploy the PHP daemon to start on port `php_port` and also place the php redirect in the main `{{ workshop_web_path }}`` directory: -
-## both of these example tags default to "never" and will not execute
-## unless you explicitly call them at launch time. Therefore, the default
-## nature of this role will ONLY synch content and not start the PHP web
-## service or place the HTML redirect in web root unless run with these tags:
-
-ansible-playbook -i ec2.hosts GoKEV-lab-provision.yml --tags "phpdaemon,phpredirect"
-
- -Here's an example of how you could launch this role and and not start the PHP daemon (only synch the content). -
-ansible-playbook -i ec2.hosts GoKEV-lab-provision.yml 
-
- - -## Here's an example of the playbook - -
----
-- name: Deploy the Ansible Red deck and run it as a daemon
-  hosts: myserver
-
-  vars:
-    workshop_web_path: /ansible-php-content/
-    workshop_image: images/ansible-logo.png
-    workshop_name: Ansible Essentials Workshop
-    workshop_presenter: Demo McDemoson
-    workshop_title: Solution Architect, Red Hat
-    workshop_message: my email and contact info
-    php_port: 8000
-
-  roles:
-    - lightbulb-ansiblered-deck
-
-
- - -## Stuff still needing to be done -* Inside `index.php` there are variables for the github star and download counts... probably should be converted to vars in defaults or `extra_vars` params -* Certain presenters have requested dynamic ways to exclude certain sections (exclude entire dir `010_topic_that_bores_my_audience`) -* The HTML ID tags can be manually (accidentally) set to the same name. This has commonly bitten me when duplicating a slide as a starting point and then forgetting to change the ID. At some point, these should be dynamically generated per slide. Two slides with the same ID cause an issue where advancing forward / backward can navigate you all the way back to the first instance of the slide and really make an awkward presentation. - * `
` or something similar would make a more unique and less likely duplicated tag. - - -## Easter Eggs -* Not implemented, but capable: Each directory in `html_slides` can have a `labs` directory. Slides in this dir will automatically be presented as LABS at the end of each section (numbered directory) and presented with a gray intro slide when the deck advances past the topic section. - * example: `html_slides/123_some_topic/labs/00_lab1.html` - -* Troubleshooting: See what files are being included by running a dry run: - * `http://ansible.red/deck-ansible/?dryrun` - -* Changing other dynamic aspects of the content via URL: - * `person=shadd` (if that person has a preferences file, context will switch to it. This parallels and overrides the variable determined by a FQDN of `shadd.ansible.red` ) - * `labs` :: `http://ansible.red/deck-ansible/?labs` (no value is required - simply passing this empty variable forces labs-only display mode and will not show the deck - * `nolabs` :: `http://ansible.red/deck-ansible/?nolabs` (no value is required - opposite of `labs`, this variable forces deck-only display mode and will not show the labs - * without `labs` or `nolabs` the default behavior is to show labs at the end of each section. - * `force` :: `http://ansible.red/deck-ansible/?force` (no value is required). This can be used on its own or in combination with labs, nolabs, person as: `?person=shadd&nolabs&force`. This parameter shows the status on the HTML output to display the mode. Output is something like: "LAB LIMIT 2 = No Labs, only deck" on the very top white line of the deck throughout the entire presentation. - - -## Notes -* index.php includes a lot of stuff as dynamic files from the html_slides directory -* Any file or dir inside `html_slides` can be excluded by starting it with an underscore - * example: `html_slides/_000_skipping_this_section` - * example: `html_slides/001_not_kipping_this_section/_skipping_this_slide.html` - -* Lab slides can also include some variables defined by parsing the directory names. Take a look at this file for a better understanding and see how the `` php tags are used: - * `html_slides/080_Tasks/_labs/00_Tasks_Labs.html` - * all labs (at this point) are committed with underscore prepending the directory name and won't publish until that dir is changed to `labs`. - - -## Author - - Adapted by [Kevin Holmes](http://GoKEV.com/) from the original lightbulb workshop deck, split into dynamic individual slides - -## Changelog - - 2018-11-01 This project was first committed November 1, 2018 by [Kevin Holmes](http://GoKEV.com/). - - 2018-11-02 Added an `index.php` file to deploy to web root, redirecting to `/deck-ansible` directory when called via tag `phpredirect` - diff --git a/roles/lightbulb-ansiblered-deck/defaults/main.yml b/roles/lightbulb-ansiblered-deck/defaults/main.yml deleted file mode 100644 index 7448e8f..0000000 --- a/roles/lightbulb-ansiblered-deck/defaults/main.yml +++ /dev/null @@ -1,11 +0,0 @@ ---- -# defaults file for ansiblered-deck-ansible - -workshop_web_path: /ansible-php-content/ -workshop_image: images/ansible-logo.png -workshop_name: Ansible Essentials Workshop -workshop_presenter: ' ' -workshop_title: ' ' -workshop_message: ' ' - -php_port: 8000 diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/.rsync-filter b/roles/lightbulb-ansiblered-deck/files/deck-ansible/.rsync-filter deleted file mode 100644 index 863cda3..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/.rsync-filter +++ /dev/null @@ -1 +0,0 @@ -- prefs/default.prefs.php diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/ansible-essentials.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/ansible-essentials.html deleted file mode 100644 index d2610bc..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/ansible-essentials.html +++ /dev/null @@ -1,1139 +0,0 @@ - - - - - - - Ansible Essentials Workshop - - - - - - - - - - - - - - - - -
- - - - - - -
-
-
-
- -

Ansible Essentials Workshop

- -
-
-

What You Will Learn

-

Ansible is capable of handling many powerful automation tasks with the flexibility to adapt to many environments and workflows. With Ansible, users can very quickly get up and running to do real work.

-
    -
  • What is Ansible and The Ansible Way
  • -
  • Installing Ansible
  • -
  • How Ansible Works and its Key Components
  • -
  • Ad-Hoc Commands
  • -
  • Playbook Basics
  • -
  • Reuse and Redistribution of Ansible Content with Roles
  • -
- -
-
-

What is Ansible?

-

It's a simple automation language that can perfectly describe an IT application infrastructure in Ansible Playbooks.

-

It's an automation engine that runs Ansible Playbooks.

-

Ansible Tower is an enterprise framework for controlling, securing and managing your Ansible automation with a UI and RESTful API.

- -
-
-

Ansible Is...

- -
-
-

The Ansible Way

-

-

CROSS PLATFORM – Linux, Windows, UNIX
- Agentless support for all major OS variants, physical, virtual, cloud and network

-

HUMAN READABLE – YAML
- Perfectly describe and document every aspect of your application environment

-

PERFECT DESCRIPTION OF APPLICATION
- Every change can be made by playbooks, ensuring everyone is on the same page

-

VERSION CONTROLLED
- Playbooks are plain-text. Treat them like code in your existing version control.

-

DYNAMIC INVENTORIES
- Capture all the servers 100% of the time, regardless of infrastructure, location, etc.

-

ORCHESTRATION THAT PLAYS WELL WITH OTHERS – HP SA, Puppet, Jenkins, RHNSS, etc. Homogenize existing environments by leveraging current toolsets and update mechanisms.

-
- -
-
-

Ansible: The Language of DevOps

-
- -

COMMUNICATION IS THE KEY TO DEVOPS.

-

Ansible is the first automation language
that can be read and written across IT.

-

Ansible is the only automation engine
that can automate the entire application lifecycle
and continuous delivery pipeline.

-
- -
-
-

Batteries Included

-

Ansible comes bundled with hundreds of modules for a wide variety of automation tasks

-
-
-
    -
  • cloud
  • -
  • containers
  • -
  • database
  • -
  • files
  • -
  • messaging
  • -
  • monitoring
  • -
  • network
  • -
-
-
-
    -
  • notifications
  • -
  • packaging
  • -
  • source control
  • -
  • system
  • -
  • testing
  • -
  • utilities
  • -
  • web infrastructure
  • -
-
-
-
-
- -
-
-

Community

-
-

THE MOST POPULAR OPEN-SOURCE AUTOMATION COMMUNITY ON GITHUB

-
-
-
    -
  • 28,000+ stars & 10,000+ forks on GitHub
  • -
  • 3200+ GitHub Contributors
  • -
  • Over 1300 modules shipped with Ansible
  • -
  • New contributors added every day
  • -
  • 1200+ users on IRC channel
  • -
  • Top 10 open source projects in 2017
  • -
  • World-wide meetups taking place every week
  • -
  • Ansible Galaxy: over 18,000 subscribers
  • -
  • 250,000+ downloads a month
  • -
  • AnsibleFest and Ansible Automates events across the globe
  • -
-

http://ansible.com/community

-
-
- -
-
-
- -
-
-

Complete Automation

- - -
-
-

Use Cases

- - -
-
-

Installing Ansible

-

-# the most common and preferred way of
-# installation
-$ sudo pip install ansible
-
-# you will need the extras repo configured on
-# CentOS, RHEL, or Scientific Linux
-$ sudo yum install ansible
-
-# you will need the PPA repo configured on
-# Debian or Ubuntu
-$ sudo apt-get install ansible
-          
- -
-
-
-

Demo Time:
Installing Ansible

- -
-
-

Workshop:
Installing Ansible

- -
-
-
-

How Ansible Works

- - -
-
-

Plays & Playbooks

- - -
-
-

Modules & Tasks

- - -
-
-

Plugins

- - -
-
-

Inventory

- - -
-
-

Inventory

- - -
-
-

Modules

-

Modules are bits of code transferred to the target system and executed to satisfy the task declaration.

-
-
-
    -
  • apt/yum
  • -
  • copy
  • -
  • file
  • -
  • get_url
  • -
  • git
  • -
  • ping
  • -
  • debug
  • -
-
-
-
    -
  • service
  • -
  • synchronize
  • -
  • template
  • -
  • uri
  • -
  • user
  • -
  • wait_for
  • -
  • assert
  • -
-
-
-
-
- -
-
-

Modules Documentation

-
-
-

http://docs.ansible.com/

-
-
- -
-
- -
-
-

Modules Documentation

-

-# List out all modules installed
-$ ansible-doc -l
-...
-copy
-cron
-...
-
-# Read documentation for installed module
-$ ansible-doc copy
-> COPY
-
-  The [copy] module copies a file on the local box to remote locations. Use the [fetch] module to copy files from remote locations to the local
-  box. If you need variable interpolation in copied files, use the [template] module.
-
-  * note: This module has a corresponding action plugin.
-
-Options (= is mandatory):
-...
-          
-
- -
-

Modules: Run Commands

-

If Ansible doesn't have a module that suits your needs there are the “run command” modules:


-
    -
  • command: Takes the command and executes it on the host. The most secure and predictable.
  • -
  • shell: Executes through a shell like /bin/sh so you can use pipes etc. Be careful.
  • -
  • script: Runs a local script on a remote node after transferring it.
  • -
  • raw: Executes a command without going through the Ansible module subsystem.
  • -
-


NOTE: Unlike standard modules, run commands have no concept of desired state and should only be used as a last resort.

- -
-
-

Inventory

-

Inventory is a collection of hosts (nodes) with associated data and groupings that Ansible can connect and manage.

-
    -
  • Hosts (nodes)
  • -
  • Groups
  • -
  • Inventory-specific data (variables)
  • -
  • Static or dynamic sources
  • -
- -
-
-

Static Inventory Example

-

-10.42.0.2
-10.42.0.6
-10.42.0.7
-10.42.0.8
-10.42.0.100
-host.example.com
-          
- -
-
-

Static Inventory Example

-

-[control]
-control ansible_host=10.42.0.2
-
-[web]
-node-[1:3] ansible_host=10.42.0.[6:8]
-
-[haproxy]
-haproxy ansible_host=10.42.0.100
-
-[all:vars]
-ansible_user=vagrant
-ansible_ssh_private_key_file=~/.vagrant.d/insecure_private_key
-          
- -
-
-
-

Ad-Hoc Commands

-

An ad-hoc command is a single Ansible task to perform quickly, but don’t want to save for later.

- -
-
-

Ad-Hoc Commands: Common Options

-
    -
  • -m MODULE_NAME, --module-name=MODULE_NAME
    Module name to execute the ad-hoc command
  • -
  • -a MODULE_ARGS, --args=MODULE_ARGS
    Module arguments for the ad-hoc command
  • -
  • -b, --become
    Run ad-hoc command with elevated rights such as sudo, the default method
  • -
  • -e EXTRA_VARS, --extra-vars=EXTRA_VARS
    Set additional variables as key=value or YAML/JSON
  • -
  • --version
    Display the version of Ansible
  • -
  • --help
    Display the MAN page for the Ansible tool
  • -
- -
-
-
-

Ad-Hoc Commands

-

-# check all my inventory hosts are ready to be
-# managed by Ansible
-$ ansible all -m ping
-
-# collect and display the discovered facts
-# for the localhost
-$ ansible localhost -m setup
-
-# run the uptime command on all hosts in the
-# web group
-$ ansible web -m command -a "uptime"
-          
- -
-
-

Sidebar: Discovered Facts

-

Facts are bits of information derived from examining a host systems that are stored as variables for later use in a play.

-

-$ ansible localhost -m setup
-localhost | success >> {
-  "ansible_facts": {
-      "ansible_default_ipv4": {
-          "address": "192.168.1.37",
-          "alias": "wlan0",
-          "gateway": "192.168.1.1",
-          "interface": "wlan0",
-          "macaddress": "c4:85:08:3b:a9:16",
-          "mtu": 1500,
-          "netmask": "255.255.255.0",
-          "network": "192.168.1.0",
-          "type": "ether"
-      },
-          
- -
-
-
-

Demo Time:
Ad-Hoc Commands

- -
-
-

Workshop:
Ad-Hoc Commands

- -
-
-
-

Variables

-

Ansible can work with metadata from various sources and manage their context in the form of variables.

-
    -
  • Command line parameters
  • -
  • Plays and tasks
  • -
  • Files
  • -
  • Inventory
  • -
  • Discovered facts
  • -
  • Roles
  • -
-
- -
-

Variable Precedence

-

The order in which the same variable from different sources will override each other.

-
-
-
    -
  1. extra vars
  2. -
  3. task vars (only for the task)
  4. -
  5. block vars (only for tasks in block)
  6. -
  7. role and include vars
  8. -
  9. play vars_files
  10. -
  11. play vars_prompt
  12. -
  13. play vars
  14. -
  15. set_facts
  16. -
-
-
-
    -
  1. registered vars
  2. -
  3. host facts
  4. -
  5. playbook host_vars
  6. -
  7. playbook group_vars
  8. -
  9. inventory host_vars
  10. -
  11. inventory group_vars
  12. -
  13. inventory vars
  14. -
  15. role defaults
  16. -
-
-
- -
-
-

Tasks

-

Tasks are the application of a module to perform a specific unit of work.

-
    -
  • file: A directory should exist
  • -
  • yum: A package should be installed
  • -
  • service: A service should be running
  • -
  • template: Render a configuration file from a template
  • -
  • get_url: Fetch an archive file from a URL
  • -
  • git: Clone a source code repository
  • -
-
-
-

Example Tasks in a Play

-

-tasks:
-- name: Ensure httpd package is present
-  yum:
-    name: httpd
-    state: latest
-
-- name: Ensure latest index.html file is present
-  copy:
-    src: files/index.html
-    dest: /var/www/html/
-
-- name: Restart httpd
-  service:
-    name: httpd
-    state: restarted
-          
- -
-
-

Handler Tasks

-

Handlers are special tasks that run at the end of a play if notified by another task when a change occurs.

-
If a package gets installed or updated, notify a service restart task that it needs to run.
- -
-
-

Example Handler Task in a Play

-

-tasks:
-- name: Ensure httpd package is present
-  yum:
-    name: httpd
-    state: latest
-  notify: restart httpd
-
-- name: Ensure latest index.html file is present
-  copy:
-    src: files/index.html
-    dest: /var/www/html/
-
-handlers:
-- name: Restart httpd
-  service:
-    name: httpd
-    state: restarted
-          
- -
-
-

Plays & Playbooks

-

Plays are ordered sets of tasks to execute against host selections from your inventory. A playbook is a file containing one or more plays.

- -
-
-

Playbook Example

-

----
-- name: Ensure apache is installed and started
-  hosts: web
-  become: yes
-  vars:
-    http_port: 80
-
-  tasks:
-  - name: Ensure httpd package is present
-    yum:
-      name: httpd
-      state: latest
-
-  - name: Ensure latest index.html file is present
-    copy:
-      src: files/index.html
-      dest: /var/www/html/
-
-  - name: Ensure httpd is started
-    service:
-      name: httpd
-      state: started
-          
- -
- -
-

Human-Meaningful Naming

-

- ---
- - name: install and start apache
-   hosts: web
-   become: yes
-   vars:
-     http_port: 80
-
-   tasks:
-   - name: httpd package is present
-     yum:
-       name: httpd
-       state: latest
-
-   - name: latest index.html file is present
-     copy:
-       src: files/index.html
-       dest: /var/www/html/
-
-   - name: httpd is started
-     service:
-        name: httpd
-        state: started
-          
- -
- -
-

Host Selector

-

----
-- name: Ensure apache is installed and started
-  hosts: web
-  become: yes
-  vars:
-    http_port: 80
-
-  tasks:
-  - name: Ensure httpd package is present
-    yum:
-      name: httpd
-      state: latest
-
-  - name: Ensure latest index.html file is present
-    copy:
-      src: files/index.html
-      dest: /var/www/html/
-
-  - name: Ensure httpd is started
-    service:
-      name: httpd
-      state: started
-          
- -
-
-

Privilege Escalation

-

----
-- name: Ensure apache is installed and started
-  hosts: web
-  become: yes
-  vars:
-    http_port: 80
-
-  tasks:
-  - name: Ensure httpd package is present
-    yum:
-      name: httpd
-      state: latest
-
-  - name: Ensure latest index.html file is present
-    copy:
-      src: files/index.html
-      dest: /var/www/html/
-
-  - name: Ensure httpd is started
-    service:
-      name: httpd
-      state: started
-          
- -
-
-

Play Variables

-

----
-- name: Ensure apache is installed and started
-  hosts: web
-  become: yes
-  vars:
-    http_port: 80
-
-  tasks:
-  - name: Ensure httpd package is present
-    yum:
-      name: httpd
-      state: latest
-
-  - name: Ensure latest index.html file is present
-    copy:
-      src: files/index.html
-      dest: /var/www/html/
-
-  - name: Ensure httpd is started
-    service:
-      name: httpd
-      state: started
-          
- -
-
-

Tasks

-

----
-- name: Ensure apache is installed and started
-  hosts: web
-  become: yes
-  vars:
-    http_port: 80
-
-  tasks:
-  - name: Ensure latest httpd package is present
-    yum:
-      name: httpd
-      state: latest
-
-  - name: Ensure latest index.html file is present
-    copy:
-      src: files/index.html
-      dest: /var/www/html/
-
-  - name: Ensure httpd is started
-    service:
-      name: httpd
-      state: started
-          
- -
-
-
-

Demo Time:
A Simple Playbook Run

- -
-
-

Workshop:
Your First Playbook

- -
-
-
-
-

Doing More with Playbooks

-

Here are some more essential playbook features that you can apply:

-
    -
  • Templates
  • -
  • Loops
  • -
  • Conditionals
  • -
  • Tags
  • -
  • Blocks
  • -
- -
-
-

Templates

-

Ansible embeds the Jinja2 templating engine that can be used to dynamically:

-
    -
  • Set and modify play variables
  • -
  • Conditional logic
  • -
  • Generate files such as configurations from variables
  • -
- -
-
-

Loops

-

Loops can do one task on multiple things, such as create a lot of users, install a lot of packages, or repeat a polling step until a certain result is reached.

-

-- yum:
-    name: "{{ item }}"
-    state: latest
-  with_items:
-  - httpd
-  - mod_wsgi
-            
- -
-
-

Conditionals

-

Ansible supports the conditional execution of a task based on the run-time evaluation of variable, fact, or previous task result.

-

-- yum:
-    name: httpd
-    state: latest
-  when: ansible_os_family == "RedHat"
-            
- -
-
-

Tags

-

Tags are useful to be able to run a subset of a playbook on-demand.

-

-- yum:
-    name: "{{ item }}"
-    state: latest
-  with_items:
-  - httpd
-  - mod_wsgi
-  tags:
-     - packages
-
- - template:
-     src: templates/httpd.conf.j2
-     dest: /etc/httpd/conf/httpd.conf
-  tags:
-     - configuration
-            
- -
-
-

Blocks

-

Blocks cut down on repetitive task directives, allow for logical grouping of tasks and even in play error handling.

-

-- block:
-  - yum:
-      name: "{{ item }}"
-      state: latest
-    with_items:
-    - httpd
-    - mod_wsgi
-
-  - template:
-      src: templates/httpd.conf.j2
-      dest: /etc/httpd/conf/httpd.conf
-  when: ansible_os_family == "RedHat"
-            
-
-
-
-
-

Demo Time:
A More Practical Playbook

- -
-
-

Workshop:
Practical Playbook Development

- -
-
-
-

Roles

-

Roles are a packages of closely related Ansible content that can be shared more easily than plays alone.

-
    -
  • Improves readability and maintainability of complex plays
  • -
  • Eases sharing, reuse and standardization of automation processes
  • -
  • Enables Ansible content to exist independently of playbooks, projects -- even organizations
  • -
  • Provides functional conveniences such as file path resolution and default values
  • -
- -
-
-

Project with Embedded Roles Example

-

-site.yml
-roles/
-   common/
-     files/
-     templates/
-     tasks/
-     handlers/
-     vars/
-     defaults/
-     meta/
-   apache/
-     files/
-     templates/
-     tasks/
-     handlers/
-     vars/
-     defaults/
-     meta/
-          
- -
-
-

Project with Embedded Roles Example

-

-# site.yml
----
-- name: Execute common and apache role
-  hosts: web
-  roles:
-     - common
-     - apache
-          
- -
-
-

Ansible Galaxy

-

http://galaxy.ansible.com

-

Ansible Galaxy is a hub for finding, reusing and sharing Ansible content.

-

Jump-start your automation project with content contributed and reviewed by the Ansible community.

- -
-
-
-

Demo Time:
A Playbook Using Roles

- -
-
-

Workshop:
Your First Roles

- -
-
-
-

Next Steps

-
    -
  • It's easy to get started
    ansible.com/get-started
  • -
  • Join the Ansible community
    ansible.com/community
  • -
  • Would you like to learn a lot more?
    redhat.com/en/services/training/do407-automation-ansible
  • -
-
-
-
- - - - - - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/css/GoKEV.css b/roles/lightbulb-ansiblered-deck/files/deck-ansible/css/GoKEV.css deleted file mode 100644 index 5126190..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/css/GoKEV.css +++ /dev/null @@ -1,48 +0,0 @@ -/** - * Some GoKEV-specific styling - */ - -div.transbox { - background-color: #000000; - opacity: 0.7; -/* - max-height: 500px; - max-width: 450; - */ - margin: 5%; - text-align: center; - filter: alpha(opacity=60); /* For IE8 and earlier */ - border: 2px solid white; - -} - -div.transbox p { - margin: 5%; - font-weight: bold; - color: #FFFFFF; - text-align: center; -} - -div.transbox h1 { - display: block; - font-size: 2.8em; - text-align: center; - margin-top: .5em; - margin-bottom: .3em; - margin-left: 0; - margin-right: 0; - font-weight: bold; - color: #FFFFFF; -} - -div.transbox h2 { - display: block; - font-size: 2.8em; - text-align: center; - margin-top: -1em; - margin-bottom: .3em; - margin-left: 0; - margin-right: 0; - font-weight: bold; - color: #FFFFFF; -} diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/css/ansible.css b/roles/lightbulb-ansiblered-deck/files/deck-ansible/css/ansible.css deleted file mode 100644 index 3cdee0b..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/css/ansible.css +++ /dev/null @@ -1,600 +0,0 @@ -/** - * An ANSIBLE theme for reveal.js presentations, similar - * to the simple theme. - */ -@import url(https://fonts.googleapis.com/css?family=News+Cycle:400,700); -@import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic); - -@import url('https://fonts.googleapis.com/css?family=Open+Sans:400,700'); - -/********************************************* - * GLOBAL STYLES - *********************************************/ - -*{ - outline: none; -} - -body { - background: #fff; - background-color: #fff; -} - -mark{ - background-color: yellow; - color: black; -} - -mark span.hljs-number{ - color: #286669; -} - -mark span.hljs-symbol, -mark span.hljs-string{ - color: #af2e2e; -} - -.reveal { - font-family: "Open Sans", sans-serif; - font-size: 28px; - font-weight: normal; - color: #555; - text-align: left; -} - -.reveal .slides{ - text-align: left; -} - -::selection { - color: #fff; - background: rgba(0, 0, 0, 0.99); - text-shadow: none; -} - -.reveal .slides > section, -.reveal .slides > section > section { - line-height: 1.3; - font-weight: inherit; -} - - -.text-center{ - text-align: center; -} - -.text-small{ - font-size: 70% !important; -} - -/********************************************* - * HEADERS - *********************************************/ -.reveal h1, -.reveal h2, -.reveal h3, -.reveal h4, -.reveal h5, -.reveal h6 { - margin: 0 0 20px 0; - color: #cc0000; - font-family: "Open Sans", Impact, sans-serif; - font-weight: bold; - letter-spacing: normal; - text-transform: none; - text-shadow: none; - margin-bottom: 0.6em; - word-wrap: break-word; } - -.reveal h1 { - font-size: 2em; -} - -.cover .reveal h1{ - margin: 1em 0; -} - -.reveal h2 { - font-size: 1.35em; } - -.reveal h3 { - font-size: 1.2em; - color: #555; -} - -.reveal h4 { - font-size: 1em; - color: #555; -} - -.reveal h1 { - text-shadow: none; } - -/********************************************* - * OTHER - *********************************************/ -.reveal p { - margin: 20px 0 0.5em; - line-height: 1.3; } - -/* Ensure certain elements are never larger than the slide itself */ -.reveal img, -.reveal video, -.reveal iframe { - max-width: 95%; - max-height: 95%; } - -.reveal strong, -.reveal b { - font-weight: bold; } - -.reveal em { - font-style: italic; } - -.reveal ol, -.reveal dl, -.reveal ul { - /*display: inline-block;*/ - text-align: left; - margin: 0 0 0 1em; } - -.reveal li{ - margin: 0 0 0.3em; -} - -.reveal ol { - list-style-type: decimal; } - -.reveal ul { - list-style-type: disc; } - -.reveal ul ul { - list-style-type: square; } - -.reveal ul ul ul { - list-style-type: circle; } - -.reveal ul ul, -.reveal ul ol, -.reveal ol ol, -.reveal ol ul { - display: block; - margin-left: 40px; } - -.reveal dt { - font-weight: bold; } - -.reveal dd { - margin-left: 40px; } - -.reveal q, -.reveal blockquote { - quotes: none; } - -.reveal blockquote { - display: block; - position: relative; - width: 70%; - margin: 20px auto; - padding: 5px; - font-style: italic; - background: rgba(255, 255, 255, 0.05); - /*box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2);*/ -} - -.reveal blockquote p:first-child, -.reveal blockquote p:last-child { - display: inline-block; } - -.reveal q { - font-style: italic; } - -.reveal pre, -.reveal pre[class*=language-] { - display: block; - position: relative; - margin: 10px auto; - text-align: left; - font-size: 0.55em; - font-family: monospace; - line-height: 1em; - word-wrap: break-word; - box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); - padding: 0px; -} - -.reveal code { - font-family: monospace; } - -.reveal pre code { - display: block; - padding: 5px; - overflow: auto; - max-height: 55vh; - word-wrap: normal; -} - -.reveal table { - margin: auto; - border-collapse: collapse; - border-spacing: 0; } - -.reveal table th { - font-weight: bold; } - -.reveal table th, -.reveal table td { - text-align: left; - padding: 0.2em 0.5em 0.2em 0.5em; - border-bottom: 1px solid; } - -.reveal table th[align="center"], -.reveal table td[align="center"] { - text-align: center; } - -.reveal table th[align="right"], -.reveal table td[align="right"] { - text-align: right; } - -.reveal table tbody tr:last-child th, -.reveal table tbody tr:last-child td { - border-bottom: none; } - -.reveal sup { - vertical-align: super; } - -.reveal sub { - vertical-align: sub; } - -.reveal small { - display: inline-block; - font-size: 0.6em; - line-height: 1.2em; - vertical-align: top; } - -.reveal small * { - vertical-align: top; } - -/********************************************* - * LINKS - *********************************************/ -.reveal a { - color: #00008B; - text-decoration: none; - -webkit-transition: color .15s ease; - -moz-transition: color .15s ease; - transition: color .15s ease; } - -.reveal a:hover { - color: #0000f1; - text-shadow: none; - border: none; } - -.reveal .roll span:after { - color: #fff; - background: #00003f; } - -/********************************************* - * IMAGES - *********************************************/ -.reveal section img { - margin: 15px 0px; - background: rgba(255, 255, 255, 0.12); - max-height: 500px; -} - -.reveal section img.plain { - border: 0; - box-shadow: none; } - -.reveal a img { - -webkit-transition: all .15s linear; - -moz-transition: all .15s linear; - transition: all .15s linear; } - -.reveal a:hover img { - background: rgba(255, 255, 255, 0.2); - border-color: #00008B; - box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); } - -/********************************************* - * NAVIGATION CONTROLS - *********************************************/ - -.reveal .controls { - bottom: auto; - top: 10px; -} - - -.reveal .controls .navigate-left, -.reveal .controls .navigate-left.enabled { - border-right-color: #00008B; } - -.reveal .controls .navigate-right, -.reveal .controls .navigate-right.enabled { - border-left-color: #00008B; } - -.reveal .controls .navigate-up, -.reveal .controls .navigate-up.enabled { - border-bottom-color: #00008B; } - -.reveal .controls .navigate-down, -.reveal .controls .navigate-down.enabled { - border-top-color: #00008B; } - -.reveal .controls .navigate-left.enabled:hover { - border-right-color: #0000f1; } - -.reveal .controls .navigate-right.enabled:hover { - border-left-color: #0000f1; } - -.reveal .controls .navigate-up.enabled:hover { - border-bottom-color: #0000f1; } - -.reveal .controls .navigate-down.enabled:hover { - border-top-color: #0000f1; } - -/********************************************* - * PROGRESS BAR - *********************************************/ -.reveal .progress { - background: rgba(0, 0, 0, 0.2); -} - -.reveal .progress span { - background: #00008B; - -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); - -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); - transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); -} - - -/********************************************* - * CUSTOM STYLES - * - * - * colors: - * - * Pool - #5bbdbf; - * Mango - #ff5850; - *********************************************/ -.reveal section .ans-logo img{ - box-shadow: none; - border: none; - margin: 0px; - background: none; -} - -.cover div.ans-logo{ - display: block; -} - -div.ans-mark{ - position: absolute; - width: 6vw; /*vertical-width*/ - bottom: 0.5em; - right: 1em; - z-index: 9999; -} - -div.ans-mark .circle{ - fill:#CC0000; -} - -.cover div.ans-mark .circle, -.title.alt div.ans-mark .circle{ - fill:#000; -} - -svg .a-mark{ - fill:#FFFFFF; -} - -.reveal { - box-sizing: border-box; - transition: all 300ms ease-in-out; -} - -.reveal p, -.reveal li{ - width: 80%; -} - -.reveal p.fullwidth, -.reveal .col p, -.reveal .col li, -.reveal aside p{ - width: 100%; -} - -.reveal ul, -.reveal ol{ - margin-left: 2em; -} - -.slide-background.present{ - background-color: #fff; -} - -.cover .slide-background.present, -.title.alt .slide-background.present{ - background-color: #cc0000; - display: block !important; -} - -.lab.alt .slide-background.present{ - background-color: #A9A9A9 ; - display: block !important; -} - - -.cover .present, -.cover .present h1, -.cover .present h2, -.cover .present h3, -.cover .present h4, -.cover .present h5, -.cover .present h6, -.cover .present p, -.cover .present li{ - color: #fff; -} - -.title .reveal h1, -.title .reveal h2, -.title .reveal h3, -.title .reveal h4{ - color: #cc0000; -} - - -.title.alt .reveal h1, -.title.alt .reveal h2, -.title.alt .reveal h3, -.title.alt .reveal h4, -.title.alt .reveal p{ - color: #fff; -} - -.columns{ - display: flex; - justify-content: flex-start; -} - -.reveal .columns > *{ - flex-basis: 31%; - margin-right: 2.333%; - flex-grow: 1; -} - -.reveal .progress span { - background: #ff5850; -} - -.monospace{ - font-family: courier, monospace !important; -} - - -/********************************************* - * CONTROLS - *********************************************/ - -.reveal .controls .navigate-left, .reveal .controls .navigate-left.enabled{ - border-right-color: #ccc; -} -.reveal .controls .navigate-left.enabled:hover { - border-right-color: #999; - opacity: 0.5; -} - -.reveal .controls .navigate-right, .reveal .controls .navigate-right.enabled{ - border-left-color: #ccc; -} -.reveal .controls .navigate-right.enabled:hover { - border-left-color: #999; - opacity: 0.5; -} - -.reveal .controls .navigate-down, .reveal .controls .navigate-down.enabled { - border-top-color: #ccc; -} -.reveal .controls .navigate-down.enabled:hover { - border-top-color: #999; - opacity: 0.5; -} - -.reveal .controls .navigate-up, .reveal .controls .navigate-up.enabled { - border-bottom-color: #ccc; -} - -.reveal .controls .navigate-up.enabled:hover { - border-bottom-color: #999; - opacity: 0.5; -} - -.reveal .controls button { - opacity: 0.1; -} - - - -/********************************************* - * PRINT - *********************************************/ - -@media print{ - /*@page {size: landscape}*/ - - .ans-logo{ - padding: 20px !important; - background: #c00; - display: inline-block; - } - - .reveal, - .reveal h1, - .reveal h2, - .reveal h3, - .reveal h4, - .reveal h5, - .reveal h6, - .reveal p, - .reveal ul, - .reveal ol, - .reveal li, - .reveal blockquote{ - font-family: "Open Sans", sans-serif !important; - color: #000 !important; - } - - .reveal blockquote{ - font-size: 20px !important; - border: none !important; - } - - .reveal p, - .reveal li{ - font-size: 20px !important; - } - - .reveal img{ - border: none !important; - } - - .reveal .columns .col { - max-width: 50%; - } - - .reveal pre code{ - max-height: none !important; - } - - .reveal section aside.notes { - display: block; - border-top: 1px solid black; - margin-top: 60px; - padding-top: 20px; - } - - .reveal section aside.notes *{ - font-size: 14px !important; - font-family: sans-serif; - } - - div.ans-mark{ - position: fixed; - width: 6vw; /*vertical-width*/ - z-index: 9999; - } - -} - -/* -@media print and (orientation:landscape) { - .reveal section aside.notes { - display: none !important; - } -} -*/ diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/css/dormant/index.php b/roles/lightbulb-ansiblered-deck/files/deck-ansible/css/dormant/index.php deleted file mode 100644 index 82677dc..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/css/dormant/index.php +++ /dev/null @@ -1,3 +0,0 @@ -code[class*=language-],pre[class*=language-]{background:#f5f2f0}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#708090}.token.punctuation{color:#999}.namespace{opacity:.7}.token.boolean,.token.constant,.token.deleted,.token.number,.token.property,.token.symbol,.token.tag{color:#905}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#690}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url{color:#a67f59;background:hsla(0,0%,100%,.5)}.token.atrule,.token.attr-value,.token.keyword{color:#07a}.token.function{color:#DD4A68}.token.important,.token.regex,.token.variable{color:#e90}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}/*# sourceMappingURL=prism.min.css.map */ \ No newline at end of file diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/css/dormant/zenburn.css b/roles/lightbulb-ansiblered-deck/files/deck-ansible/css/dormant/zenburn.css deleted file mode 100644 index 07be502..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/css/dormant/zenburn.css +++ /dev/null @@ -1,80 +0,0 @@ -/* - -Zenburn style from voldmar.ru (c) Vladimir Epifanov -based on dark.css by Ivan Sagalaev - -*/ - -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - background: #3f3f3f; - color: #dcdcdc; -} - -.hljs-keyword, -.hljs-selector-tag, -.hljs-tag { - color: #e3ceab; -} - -.hljs-template-tag { - color: #dcdcdc; -} - -.hljs-number { - color: #8cd0d3; -} - -.hljs-variable, -.hljs-template-variable, -.hljs-attribute { - color: #efdcbc; -} - -.hljs-literal { - color: #efefaf; -} - -.hljs-subst { - color: #8f8f8f; -} - -.hljs-title, -.hljs-name, -.hljs-selector-id, -.hljs-selector-class, -.hljs-section, -.hljs-type { - color: #efef8f; -} - -.hljs-symbol, -.hljs-bullet, -.hljs-link { - color: #dca3a3; -} - -.hljs-deletion, -.hljs-string, -.hljs-built_in, -.hljs-builtin-name { - color: #cc9393; -} - -.hljs-addition, -.hljs-comment, -.hljs-quote, -.hljs-meta { - color: #7f9f7f; -} - - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/css/faketerminal.css b/roles/lightbulb-ansiblered-deck/files/deck-ansible/css/faketerminal.css deleted file mode 100644 index e0f9165..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/css/faketerminal.css +++ /dev/null @@ -1,110 +0,0 @@ -* { margin: 0; padding: 0; } -.terminal { - border-radius: 5px 5px 0 0; - position: relative; -} -.terminal .top { - background: #E8E6E8; - color: black; - padding: 5px; - border-radius: 3px 3px 0 0; -} -.terminal .btns { - position: absolute; - top: 7px; - left: 5px; -} - -.terminal .circle { - width: 12px; - height: 12px; - display: inline-block; - border-radius: 15px; - margin-left: 2px; - border-width: 1px; - border-style: solid; -} - -.red { background: #EC6A5F; border-color: #D04E42; } -.green { background: #64CC57; border-color: #4EA73B; } -.yellow{ background: #F5C04F; border-color: #D6A13D; } -.clear{clear: both;} - -.title{ - text-align: center; - font-size: 8px; - -} - -.terminal .title { - color: #000000; - padding: 0px; - font-family: verdana; - font-size: 12px; -} - -.terminal .bodys { - background: black; - color: #7AFB4C; - padding: 15px; - overflow: auto; - font-family: monospace; - text-align: center; - font-size: 16px; -} - -.terminal .bodysw { - background: black; - color: #FFFFFF; - padding: 15px; - overflow: auto; - font-family: monospace; - font-size: 16px; -} - - -.terminal .bodym { - background: black; - color: #7AFB4C; - padding: 15px; - overflow: auto; - font-family: monospace; - font-size: 24px; -} - -.terminal .bodymw { - background: black; - color: #FFFFFF; - padding: 15px; - overflow: auto; - font-family: monospace; - font-size: 24px; -} - -.terminal .bodyl { - background: black; - color: #7AFB4C; - padding: 15px; - overflow: auto; - font-family: monospace; - font-size: 36px; -} - -.terminal .bodylw { - background: black; - color: #FFFFFF; - padding: 15px; - overflow: auto; - font-family: monospace; - font-size: 36px; -} - -.space { - background: black; - margin: 5px; -} - -.shadow { - box-shadow: 0px 0px 10px rgba(0,0,0,.4) -} - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/css/index.php b/roles/lightbulb-ansiblered-deck/files/deck-ansible/css/index.php deleted file mode 100644 index 82677dc..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/css/index.php +++ /dev/null @@ -1,3 +0,0 @@ - section { - -ms-perspective: 600px; } - -.reveal .slides > section, -.reveal .slides > section > section { - display: none; - position: absolute; - width: 100%; - padding: 20px 0px; - z-index: 10; - -webkit-transform-style: flat; - transform-style: flat; - -webkit-transition: -webkit-transform-origin 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985), -webkit-transform 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985), visibility 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985), opacity 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); - transition: transform-origin 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985), transform 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985), visibility 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985), opacity 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); } - -/* Global transition speed settings */ -.reveal[data-transition-speed="fast"] .slides section { - -webkit-transition-duration: 400ms; - transition-duration: 400ms; } - -.reveal[data-transition-speed="slow"] .slides section { - -webkit-transition-duration: 1200ms; - transition-duration: 1200ms; } - -/* Slide-specific transition speed overrides */ -.reveal .slides section[data-transition-speed="fast"] { - -webkit-transition-duration: 400ms; - transition-duration: 400ms; } - -.reveal .slides section[data-transition-speed="slow"] { - -webkit-transition-duration: 1200ms; - transition-duration: 1200ms; } - -.reveal .slides > section.stack { - padding-top: 0; - padding-bottom: 0; } - -.reveal .slides > section.present, -.reveal .slides > section > section.present { - display: block; - z-index: 11; - opacity: 1; } - -.reveal.center, -.reveal.center .slides, -.reveal.center .slides section { - min-height: 0 !important; } - -/* Don't allow interaction with invisible slides */ -.reveal .slides > section.future, -.reveal .slides > section > section.future, -.reveal .slides > section.past, -.reveal .slides > section > section.past { - pointer-events: none; } - -.reveal.overview .slides > section, -.reveal.overview .slides > section > section { - pointer-events: auto; } - -.reveal .slides > section.past, -.reveal .slides > section.future, -.reveal .slides > section > section.past, -.reveal .slides > section > section.future { - opacity: 0; } - -/********************************************* - * Mixins for readability of transitions - *********************************************/ -/********************************************* - * SLIDE TRANSITION - * Aliased 'linear' for backwards compatibility - *********************************************/ -.reveal.slide section { - -webkit-backface-visibility: hidden; - backface-visibility: hidden; } - -.reveal .slides > section[data-transition=slide].past, -.reveal .slides > section[data-transition~=slide-out].past, -.reveal.slide .slides > section:not([data-transition]).past { - -webkit-transform: translate(-150%, 0); - transform: translate(-150%, 0); } - -.reveal .slides > section[data-transition=slide].future, -.reveal .slides > section[data-transition~=slide-in].future, -.reveal.slide .slides > section:not([data-transition]).future { - -webkit-transform: translate(150%, 0); - transform: translate(150%, 0); } - -.reveal .slides > section > section[data-transition=slide].past, -.reveal .slides > section > section[data-transition~=slide-out].past, -.reveal.slide .slides > section > section:not([data-transition]).past { - -webkit-transform: translate(0, -150%); - transform: translate(0, -150%); } - -.reveal .slides > section > section[data-transition=slide].future, -.reveal .slides > section > section[data-transition~=slide-in].future, -.reveal.slide .slides > section > section:not([data-transition]).future { - -webkit-transform: translate(0, 150%); - transform: translate(0, 150%); } - -.reveal.linear section { - -webkit-backface-visibility: hidden; - backface-visibility: hidden; } - -.reveal .slides > section[data-transition=linear].past, -.reveal .slides > section[data-transition~=linear-out].past, -.reveal.linear .slides > section:not([data-transition]).past { - -webkit-transform: translate(-150%, 0); - transform: translate(-150%, 0); } - -.reveal .slides > section[data-transition=linear].future, -.reveal .slides > section[data-transition~=linear-in].future, -.reveal.linear .slides > section:not([data-transition]).future { - -webkit-transform: translate(150%, 0); - transform: translate(150%, 0); } - -.reveal .slides > section > section[data-transition=linear].past, -.reveal .slides > section > section[data-transition~=linear-out].past, -.reveal.linear .slides > section > section:not([data-transition]).past { - -webkit-transform: translate(0, -150%); - transform: translate(0, -150%); } - -.reveal .slides > section > section[data-transition=linear].future, -.reveal .slides > section > section[data-transition~=linear-in].future, -.reveal.linear .slides > section > section:not([data-transition]).future { - -webkit-transform: translate(0, 150%); - transform: translate(0, 150%); } - -/********************************************* - * CONVEX TRANSITION - * Aliased 'default' for backwards compatibility - *********************************************/ -.reveal .slides section[data-transition=default].stack, -.reveal.default .slides section.stack { - -webkit-transform-style: preserve-3d; - transform-style: preserve-3d; } - -.reveal .slides > section[data-transition=default].past, -.reveal .slides > section[data-transition~=default-out].past, -.reveal.default .slides > section:not([data-transition]).past { - -webkit-transform: translate3d(-100%, 0, 0) rotateY(-90deg) translate3d(-100%, 0, 0); - transform: translate3d(-100%, 0, 0) rotateY(-90deg) translate3d(-100%, 0, 0); } - -.reveal .slides > section[data-transition=default].future, -.reveal .slides > section[data-transition~=default-in].future, -.reveal.default .slides > section:not([data-transition]).future { - -webkit-transform: translate3d(100%, 0, 0) rotateY(90deg) translate3d(100%, 0, 0); - transform: translate3d(100%, 0, 0) rotateY(90deg) translate3d(100%, 0, 0); } - -.reveal .slides > section > section[data-transition=default].past, -.reveal .slides > section > section[data-transition~=default-out].past, -.reveal.default .slides > section > section:not([data-transition]).past { - -webkit-transform: translate3d(0, -300px, 0) rotateX(70deg) translate3d(0, -300px, 0); - transform: translate3d(0, -300px, 0) rotateX(70deg) translate3d(0, -300px, 0); } - -.reveal .slides > section > section[data-transition=default].future, -.reveal .slides > section > section[data-transition~=default-in].future, -.reveal.default .slides > section > section:not([data-transition]).future { - -webkit-transform: translate3d(0, 300px, 0) rotateX(-70deg) translate3d(0, 300px, 0); - transform: translate3d(0, 300px, 0) rotateX(-70deg) translate3d(0, 300px, 0); } - -.reveal .slides section[data-transition=convex].stack, -.reveal.convex .slides section.stack { - -webkit-transform-style: preserve-3d; - transform-style: preserve-3d; } - -.reveal .slides > section[data-transition=convex].past, -.reveal .slides > section[data-transition~=convex-out].past, -.reveal.convex .slides > section:not([data-transition]).past { - -webkit-transform: translate3d(-100%, 0, 0) rotateY(-90deg) translate3d(-100%, 0, 0); - transform: translate3d(-100%, 0, 0) rotateY(-90deg) translate3d(-100%, 0, 0); } - -.reveal .slides > section[data-transition=convex].future, -.reveal .slides > section[data-transition~=convex-in].future, -.reveal.convex .slides > section:not([data-transition]).future { - -webkit-transform: translate3d(100%, 0, 0) rotateY(90deg) translate3d(100%, 0, 0); - transform: translate3d(100%, 0, 0) rotateY(90deg) translate3d(100%, 0, 0); } - -.reveal .slides > section > section[data-transition=convex].past, -.reveal .slides > section > section[data-transition~=convex-out].past, -.reveal.convex .slides > section > section:not([data-transition]).past { - -webkit-transform: translate3d(0, -300px, 0) rotateX(70deg) translate3d(0, -300px, 0); - transform: translate3d(0, -300px, 0) rotateX(70deg) translate3d(0, -300px, 0); } - -.reveal .slides > section > section[data-transition=convex].future, -.reveal .slides > section > section[data-transition~=convex-in].future, -.reveal.convex .slides > section > section:not([data-transition]).future { - -webkit-transform: translate3d(0, 300px, 0) rotateX(-70deg) translate3d(0, 300px, 0); - transform: translate3d(0, 300px, 0) rotateX(-70deg) translate3d(0, 300px, 0); } - -/********************************************* - * CONCAVE TRANSITION - *********************************************/ -.reveal .slides section[data-transition=concave].stack, -.reveal.concave .slides section.stack { - -webkit-transform-style: preserve-3d; - transform-style: preserve-3d; } - -.reveal .slides > section[data-transition=concave].past, -.reveal .slides > section[data-transition~=concave-out].past, -.reveal.concave .slides > section:not([data-transition]).past { - -webkit-transform: translate3d(-100%, 0, 0) rotateY(90deg) translate3d(-100%, 0, 0); - transform: translate3d(-100%, 0, 0) rotateY(90deg) translate3d(-100%, 0, 0); } - -.reveal .slides > section[data-transition=concave].future, -.reveal .slides > section[data-transition~=concave-in].future, -.reveal.concave .slides > section:not([data-transition]).future { - -webkit-transform: translate3d(100%, 0, 0) rotateY(-90deg) translate3d(100%, 0, 0); - transform: translate3d(100%, 0, 0) rotateY(-90deg) translate3d(100%, 0, 0); } - -.reveal .slides > section > section[data-transition=concave].past, -.reveal .slides > section > section[data-transition~=concave-out].past, -.reveal.concave .slides > section > section:not([data-transition]).past { - -webkit-transform: translate3d(0, -80%, 0) rotateX(-70deg) translate3d(0, -80%, 0); - transform: translate3d(0, -80%, 0) rotateX(-70deg) translate3d(0, -80%, 0); } - -.reveal .slides > section > section[data-transition=concave].future, -.reveal .slides > section > section[data-transition~=concave-in].future, -.reveal.concave .slides > section > section:not([data-transition]).future { - -webkit-transform: translate3d(0, 80%, 0) rotateX(70deg) translate3d(0, 80%, 0); - transform: translate3d(0, 80%, 0) rotateX(70deg) translate3d(0, 80%, 0); } - -/********************************************* - * ZOOM TRANSITION - *********************************************/ -.reveal .slides section[data-transition=zoom], -.reveal.zoom .slides section:not([data-transition]) { - -webkit-transition-timing-function: ease; - transition-timing-function: ease; } - -.reveal .slides > section[data-transition=zoom].past, -.reveal .slides > section[data-transition~=zoom-out].past, -.reveal.zoom .slides > section:not([data-transition]).past { - visibility: hidden; - -webkit-transform: scale(16); - transform: scale(16); } - -.reveal .slides > section[data-transition=zoom].future, -.reveal .slides > section[data-transition~=zoom-in].future, -.reveal.zoom .slides > section:not([data-transition]).future { - visibility: hidden; - -webkit-transform: scale(0.2); - transform: scale(0.2); } - -.reveal .slides > section > section[data-transition=zoom].past, -.reveal .slides > section > section[data-transition~=zoom-out].past, -.reveal.zoom .slides > section > section:not([data-transition]).past { - -webkit-transform: translate(0, -150%); - transform: translate(0, -150%); } - -.reveal .slides > section > section[data-transition=zoom].future, -.reveal .slides > section > section[data-transition~=zoom-in].future, -.reveal.zoom .slides > section > section:not([data-transition]).future { - -webkit-transform: translate(0, 150%); - transform: translate(0, 150%); } - -/********************************************* - * CUBE TRANSITION - *********************************************/ -.reveal.cube .slides { - -webkit-perspective: 1300px; - perspective: 1300px; } - -.reveal.cube .slides section { - padding: 30px; - min-height: 700px; - -webkit-backface-visibility: hidden; - backface-visibility: hidden; - box-sizing: border-box; - -webkit-transform-style: preserve-3d; - transform-style: preserve-3d; } - -.reveal.center.cube .slides section { - min-height: 0; } - -.reveal.cube .slides section:not(.stack):before { - content: ''; - position: absolute; - display: block; - width: 100%; - height: 100%; - left: 0; - top: 0; - background: rgba(0, 0, 0, 0.1); - border-radius: 4px; - -webkit-transform: translateZ(-20px); - transform: translateZ(-20px); } - -.reveal.cube .slides section:not(.stack):after { - content: ''; - position: absolute; - display: block; - width: 90%; - height: 30px; - left: 5%; - bottom: 0; - background: none; - z-index: 1; - border-radius: 4px; - box-shadow: 0px 95px 25px rgba(0, 0, 0, 0.2); - -webkit-transform: translateZ(-90px) rotateX(65deg); - transform: translateZ(-90px) rotateX(65deg); } - -.reveal.cube .slides > section.stack { - padding: 0; - background: none; } - -.reveal.cube .slides > section.past { - -webkit-transform-origin: 100% 0%; - transform-origin: 100% 0%; - -webkit-transform: translate3d(-100%, 0, 0) rotateY(-90deg); - transform: translate3d(-100%, 0, 0) rotateY(-90deg); } - -.reveal.cube .slides > section.future { - -webkit-transform-origin: 0% 0%; - transform-origin: 0% 0%; - -webkit-transform: translate3d(100%, 0, 0) rotateY(90deg); - transform: translate3d(100%, 0, 0) rotateY(90deg); } - -.reveal.cube .slides > section > section.past { - -webkit-transform-origin: 0% 100%; - transform-origin: 0% 100%; - -webkit-transform: translate3d(0, -100%, 0) rotateX(90deg); - transform: translate3d(0, -100%, 0) rotateX(90deg); } - -.reveal.cube .slides > section > section.future { - -webkit-transform-origin: 0% 0%; - transform-origin: 0% 0%; - -webkit-transform: translate3d(0, 100%, 0) rotateX(-90deg); - transform: translate3d(0, 100%, 0) rotateX(-90deg); } - -/********************************************* - * PAGE TRANSITION - *********************************************/ -.reveal.page .slides { - -webkit-perspective-origin: 0% 50%; - perspective-origin: 0% 50%; - -webkit-perspective: 3000px; - perspective: 3000px; } - -.reveal.page .slides section { - padding: 30px; - min-height: 700px; - box-sizing: border-box; - -webkit-transform-style: preserve-3d; - transform-style: preserve-3d; } - -.reveal.page .slides section.past { - z-index: 12; } - -.reveal.page .slides section:not(.stack):before { - content: ''; - position: absolute; - display: block; - width: 100%; - height: 100%; - left: 0; - top: 0; - background: rgba(0, 0, 0, 0.1); - -webkit-transform: translateZ(-20px); - transform: translateZ(-20px); } - -.reveal.page .slides section:not(.stack):after { - content: ''; - position: absolute; - display: block; - width: 90%; - height: 30px; - left: 5%; - bottom: 0; - background: none; - z-index: 1; - border-radius: 4px; - box-shadow: 0px 95px 25px rgba(0, 0, 0, 0.2); - -webkit-transform: translateZ(-90px) rotateX(65deg); } - -.reveal.page .slides > section.stack { - padding: 0; - background: none; } - -.reveal.page .slides > section.past { - -webkit-transform-origin: 0% 0%; - transform-origin: 0% 0%; - -webkit-transform: translate3d(-40%, 0, 0) rotateY(-80deg); - transform: translate3d(-40%, 0, 0) rotateY(-80deg); } - -.reveal.page .slides > section.future { - -webkit-transform-origin: 100% 0%; - transform-origin: 100% 0%; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); } - -.reveal.page .slides > section > section.past { - -webkit-transform-origin: 0% 0%; - transform-origin: 0% 0%; - -webkit-transform: translate3d(0, -40%, 0) rotateX(80deg); - transform: translate3d(0, -40%, 0) rotateX(80deg); } - -.reveal.page .slides > section > section.future { - -webkit-transform-origin: 0% 100%; - transform-origin: 0% 100%; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); } - -/********************************************* - * FADE TRANSITION - *********************************************/ -.reveal .slides section[data-transition=fade], -.reveal.fade .slides section:not([data-transition]), -.reveal.fade .slides > section > section:not([data-transition]) { - -webkit-transform: none; - transform: none; - -webkit-transition: opacity 0.5s; - transition: opacity 0.5s; } - -.reveal.fade.overview .slides section, -.reveal.fade.overview .slides > section > section { - -webkit-transition: none; - transition: none; } - -/********************************************* - * NO TRANSITION - *********************************************/ -.reveal .slides section[data-transition=none], -.reveal.none .slides section:not([data-transition]) { - -webkit-transform: none; - transform: none; - -webkit-transition: none; - transition: none; } - -/********************************************* - * PAUSED MODE - *********************************************/ -.reveal .pause-overlay { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - background: black; - visibility: hidden; - opacity: 0; - z-index: 100; - -webkit-transition: all 1s ease; - transition: all 1s ease; } - -.reveal.paused .pause-overlay { - visibility: visible; - opacity: 1; } - -/********************************************* - * FALLBACK - *********************************************/ -.no-transforms { - overflow-y: auto; } - -.no-transforms .reveal .slides { - position: relative; - width: 80%; - height: auto !important; - top: 0; - left: 50%; - margin: 0; - text-align: center; } - -.no-transforms .reveal .controls, -.no-transforms .reveal .progress { - display: none !important; } - -.no-transforms .reveal .slides section { - display: block !important; - opacity: 1 !important; - position: relative !important; - height: auto; - min-height: 0; - top: 0; - left: -50%; - margin: 70px 0; - -webkit-transform: none; - transform: none; } - -.no-transforms .reveal .slides section section { - left: 0; } - -.reveal .no-transition, -.reveal .no-transition * { - -webkit-transition: none !important; - transition: none !important; } - -/********************************************* - * PER-SLIDE BACKGROUNDS - *********************************************/ -.reveal .backgrounds { - position: absolute; - width: 100%; - height: 100%; - top: 0; - left: 0; - -webkit-perspective: 600px; - perspective: 600px; } - -.reveal .slide-background { - display: none; - position: absolute; - width: 100%; - height: 100%; - opacity: 0; - visibility: hidden; - background-color: transparent; - background-position: 50% 50%; - background-repeat: no-repeat; - background-size: cover; - -webkit-transition: all 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); - transition: all 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); } - -.reveal .slide-background.stack { - display: block; } - -.reveal .slide-background.present { - opacity: 1; - visibility: visible; } - -.print-pdf .reveal .slide-background { - opacity: 1 !important; - visibility: visible !important; } - -/* Video backgrounds */ -.reveal .slide-background video { - position: absolute; - width: 100%; - height: 100%; - max-width: none; - max-height: none; - top: 0; - left: 0; } - -/* Immediate transition style */ -.reveal[data-background-transition=none] > .backgrounds .slide-background, -.reveal > .backgrounds .slide-background[data-background-transition=none] { - -webkit-transition: none; - transition: none; } - -/* Slide */ -.reveal[data-background-transition=slide] > .backgrounds .slide-background, -.reveal > .backgrounds .slide-background[data-background-transition=slide] { - opacity: 1; - -webkit-backface-visibility: hidden; - backface-visibility: hidden; } - -.reveal[data-background-transition=slide] > .backgrounds .slide-background.past, -.reveal > .backgrounds .slide-background.past[data-background-transition=slide] { - -webkit-transform: translate(-100%, 0); - transform: translate(-100%, 0); } - -.reveal[data-background-transition=slide] > .backgrounds .slide-background.future, -.reveal > .backgrounds .slide-background.future[data-background-transition=slide] { - -webkit-transform: translate(100%, 0); - transform: translate(100%, 0); } - -.reveal[data-background-transition=slide] > .backgrounds .slide-background > .slide-background.past, -.reveal > .backgrounds .slide-background > .slide-background.past[data-background-transition=slide] { - -webkit-transform: translate(0, -100%); - transform: translate(0, -100%); } - -.reveal[data-background-transition=slide] > .backgrounds .slide-background > .slide-background.future, -.reveal > .backgrounds .slide-background > .slide-background.future[data-background-transition=slide] { - -webkit-transform: translate(0, 100%); - transform: translate(0, 100%); } - -/* Convex */ -.reveal[data-background-transition=convex] > .backgrounds .slide-background.past, -.reveal > .backgrounds .slide-background.past[data-background-transition=convex] { - opacity: 0; - -webkit-transform: translate3d(-100%, 0, 0) rotateY(-90deg) translate3d(-100%, 0, 0); - transform: translate3d(-100%, 0, 0) rotateY(-90deg) translate3d(-100%, 0, 0); } - -.reveal[data-background-transition=convex] > .backgrounds .slide-background.future, -.reveal > .backgrounds .slide-background.future[data-background-transition=convex] { - opacity: 0; - -webkit-transform: translate3d(100%, 0, 0) rotateY(90deg) translate3d(100%, 0, 0); - transform: translate3d(100%, 0, 0) rotateY(90deg) translate3d(100%, 0, 0); } - -.reveal[data-background-transition=convex] > .backgrounds .slide-background > .slide-background.past, -.reveal > .backgrounds .slide-background > .slide-background.past[data-background-transition=convex] { - opacity: 0; - -webkit-transform: translate3d(0, -100%, 0) rotateX(90deg) translate3d(0, -100%, 0); - transform: translate3d(0, -100%, 0) rotateX(90deg) translate3d(0, -100%, 0); } - -.reveal[data-background-transition=convex] > .backgrounds .slide-background > .slide-background.future, -.reveal > .backgrounds .slide-background > .slide-background.future[data-background-transition=convex] { - opacity: 0; - -webkit-transform: translate3d(0, 100%, 0) rotateX(-90deg) translate3d(0, 100%, 0); - transform: translate3d(0, 100%, 0) rotateX(-90deg) translate3d(0, 100%, 0); } - -/* Concave */ -.reveal[data-background-transition=concave] > .backgrounds .slide-background.past, -.reveal > .backgrounds .slide-background.past[data-background-transition=concave] { - opacity: 0; - -webkit-transform: translate3d(-100%, 0, 0) rotateY(90deg) translate3d(-100%, 0, 0); - transform: translate3d(-100%, 0, 0) rotateY(90deg) translate3d(-100%, 0, 0); } - -.reveal[data-background-transition=concave] > .backgrounds .slide-background.future, -.reveal > .backgrounds .slide-background.future[data-background-transition=concave] { - opacity: 0; - -webkit-transform: translate3d(100%, 0, 0) rotateY(-90deg) translate3d(100%, 0, 0); - transform: translate3d(100%, 0, 0) rotateY(-90deg) translate3d(100%, 0, 0); } - -.reveal[data-background-transition=concave] > .backgrounds .slide-background > .slide-background.past, -.reveal > .backgrounds .slide-background > .slide-background.past[data-background-transition=concave] { - opacity: 0; - -webkit-transform: translate3d(0, -100%, 0) rotateX(-90deg) translate3d(0, -100%, 0); - transform: translate3d(0, -100%, 0) rotateX(-90deg) translate3d(0, -100%, 0); } - -.reveal[data-background-transition=concave] > .backgrounds .slide-background > .slide-background.future, -.reveal > .backgrounds .slide-background > .slide-background.future[data-background-transition=concave] { - opacity: 0; - -webkit-transform: translate3d(0, 100%, 0) rotateX(90deg) translate3d(0, 100%, 0); - transform: translate3d(0, 100%, 0) rotateX(90deg) translate3d(0, 100%, 0); } - -/* Zoom */ -.reveal[data-background-transition=zoom] > .backgrounds .slide-background, -.reveal > .backgrounds .slide-background[data-background-transition=zoom] { - -webkit-transition-timing-function: ease; - transition-timing-function: ease; } - -.reveal[data-background-transition=zoom] > .backgrounds .slide-background.past, -.reveal > .backgrounds .slide-background.past[data-background-transition=zoom] { - opacity: 0; - visibility: hidden; - -webkit-transform: scale(16); - transform: scale(16); } - -.reveal[data-background-transition=zoom] > .backgrounds .slide-background.future, -.reveal > .backgrounds .slide-background.future[data-background-transition=zoom] { - opacity: 0; - visibility: hidden; - -webkit-transform: scale(0.2); - transform: scale(0.2); } - -.reveal[data-background-transition=zoom] > .backgrounds .slide-background > .slide-background.past, -.reveal > .backgrounds .slide-background > .slide-background.past[data-background-transition=zoom] { - opacity: 0; - visibility: hidden; - -webkit-transform: scale(16); - transform: scale(16); } - -.reveal[data-background-transition=zoom] > .backgrounds .slide-background > .slide-background.future, -.reveal > .backgrounds .slide-background > .slide-background.future[data-background-transition=zoom] { - opacity: 0; - visibility: hidden; - -webkit-transform: scale(0.2); - transform: scale(0.2); } - -/* Global transition speed settings */ -.reveal[data-transition-speed="fast"] > .backgrounds .slide-background { - -webkit-transition-duration: 400ms; - transition-duration: 400ms; } - -.reveal[data-transition-speed="slow"] > .backgrounds .slide-background { - -webkit-transition-duration: 1200ms; - transition-duration: 1200ms; } - -/********************************************* - * OVERVIEW - *********************************************/ -.reveal.overview { - -webkit-perspective-origin: 50% 50%; - perspective-origin: 50% 50%; - -webkit-perspective: 700px; - perspective: 700px; } - .reveal.overview .slides { - -moz-transform-style: preserve-3d; } - .reveal.overview .slides section { - height: 100%; - top: 0 !important; - opacity: 1 !important; - overflow: hidden; - visibility: visible !important; - cursor: pointer; - box-sizing: border-box; } - .reveal.overview .slides section:hover, - .reveal.overview .slides section.present { - outline: 10px solid rgba(150, 150, 150, 0.4); - outline-offset: 10px; } - .reveal.overview .slides section .fragment { - opacity: 1; - -webkit-transition: none; - transition: none; } - .reveal.overview .slides section:after, - .reveal.overview .slides section:before { - display: none !important; } - .reveal.overview .slides > section.stack { - padding: 0; - top: 0 !important; - background: none; - outline: none; - overflow: visible; } - .reveal.overview .backgrounds { - -webkit-perspective: inherit; - perspective: inherit; - -moz-transform-style: preserve-3d; } - .reveal.overview .backgrounds .slide-background { - opacity: 1; - visibility: visible; - outline: 10px solid rgba(150, 150, 150, 0.1); - outline-offset: 10px; } - -.reveal.overview .slides section, -.reveal.overview-deactivating .slides section { - -webkit-transition: none; - transition: none; } - -.reveal.overview .backgrounds .slide-background, -.reveal.overview-deactivating .backgrounds .slide-background { - -webkit-transition: none; - transition: none; } - -.reveal.overview-animated .slides { - -webkit-transition: -webkit-transform 0.4s ease; - transition: transform 0.4s ease; } - -/********************************************* - * RTL SUPPORT - *********************************************/ -.reveal.rtl .slides, -.reveal.rtl .slides h1, -.reveal.rtl .slides h2, -.reveal.rtl .slides h3, -.reveal.rtl .slides h4, -.reveal.rtl .slides h5, -.reveal.rtl .slides h6 { - direction: rtl; - font-family: sans-serif; } - -.reveal.rtl pre, -.reveal.rtl code { - direction: ltr; } - -.reveal.rtl ol, -.reveal.rtl ul { - text-align: right; } - -.reveal.rtl .progress span { - float: right; } - -/********************************************* - * PARALLAX BACKGROUND - *********************************************/ -.reveal.has-parallax-background .backgrounds { - -webkit-transition: all 0.8s ease; - transition: all 0.8s ease; } - -/* Global transition speed settings */ -.reveal.has-parallax-background[data-transition-speed="fast"] .backgrounds { - -webkit-transition-duration: 400ms; - transition-duration: 400ms; } - -.reveal.has-parallax-background[data-transition-speed="slow"] .backgrounds { - -webkit-transition-duration: 1200ms; - transition-duration: 1200ms; } - -/********************************************* - * LINK PREVIEW OVERLAY - *********************************************/ -.reveal .overlay { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - z-index: 1000; - background: rgba(0, 0, 0, 0.9); - opacity: 0; - visibility: hidden; - -webkit-transition: all 0.3s ease; - transition: all 0.3s ease; } - -.reveal .overlay.visible { - opacity: 1; - visibility: visible; } - -.reveal .overlay .spinner { - position: absolute; - display: block; - top: 50%; - left: 50%; - width: 32px; - height: 32px; - margin: -16px 0 0 -16px; - z-index: 10; - background-image: url(data:image/gif;base64,R0lGODlhIAAgAPMAAJmZmf%2F%2F%2F6%2Bvr8nJybW1tcDAwOjo6Nvb26ioqKOjo7Ozs%2FLy8vz8%2FAAAAAAAAAAAACH%2FC05FVFNDQVBFMi4wAwEAAAAh%2FhpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh%2BQQJCgAAACwAAAAAIAAgAAAE5xDISWlhperN52JLhSSdRgwVo1ICQZRUsiwHpTJT4iowNS8vyW2icCF6k8HMMBkCEDskxTBDAZwuAkkqIfxIQyhBQBFvAQSDITM5VDW6XNE4KagNh6Bgwe60smQUB3d4Rz1ZBApnFASDd0hihh12BkE9kjAJVlycXIg7CQIFA6SlnJ87paqbSKiKoqusnbMdmDC2tXQlkUhziYtyWTxIfy6BE8WJt5YJvpJivxNaGmLHT0VnOgSYf0dZXS7APdpB309RnHOG5gDqXGLDaC457D1zZ%2FV%2FnmOM82XiHRLYKhKP1oZmADdEAAAh%2BQQJCgAAACwAAAAAIAAgAAAE6hDISWlZpOrNp1lGNRSdRpDUolIGw5RUYhhHukqFu8DsrEyqnWThGvAmhVlteBvojpTDDBUEIFwMFBRAmBkSgOrBFZogCASwBDEY%2FCZSg7GSE0gSCjQBMVG023xWBhklAnoEdhQEfyNqMIcKjhRsjEdnezB%2BA4k8gTwJhFuiW4dokXiloUepBAp5qaKpp6%2BHo7aWW54wl7obvEe0kRuoplCGepwSx2jJvqHEmGt6whJpGpfJCHmOoNHKaHx61WiSR92E4lbFoq%2BB6QDtuetcaBPnW6%2BO7wDHpIiK9SaVK5GgV543tzjgGcghAgAh%2BQQJCgAAACwAAAAAIAAgAAAE7hDISSkxpOrN5zFHNWRdhSiVoVLHspRUMoyUakyEe8PTPCATW9A14E0UvuAKMNAZKYUZCiBMuBakSQKG8G2FzUWox2AUtAQFcBKlVQoLgQReZhQlCIJesQXI5B0CBnUMOxMCenoCfTCEWBsJColTMANldx15BGs8B5wlCZ9Po6OJkwmRpnqkqnuSrayqfKmqpLajoiW5HJq7FL1Gr2mMMcKUMIiJgIemy7xZtJsTmsM4xHiKv5KMCXqfyUCJEonXPN2rAOIAmsfB3uPoAK%2B%2BG%2Bw48edZPK%2BM6hLJpQg484enXIdQFSS1u6UhksENEQAAIfkECQoAAAAsAAAAACAAIAAABOcQyEmpGKLqzWcZRVUQnZYg1aBSh2GUVEIQ2aQOE%2BG%2BcD4ntpWkZQj1JIiZIogDFFyHI0UxQwFugMSOFIPJftfVAEoZLBbcLEFhlQiqGp1Vd140AUklUN3eCA51C1EWMzMCezCBBmkxVIVHBWd3HHl9JQOIJSdSnJ0TDKChCwUJjoWMPaGqDKannasMo6WnM562R5YluZRwur0wpgqZE7NKUm%2BFNRPIhjBJxKZteWuIBMN4zRMIVIhffcgojwCF117i4nlLnY5ztRLsnOk%2BaV%2BoJY7V7m76PdkS4trKcdg0Zc0tTcKkRAAAIfkECQoAAAAsAAAAACAAIAAABO4QyEkpKqjqzScpRaVkXZWQEximw1BSCUEIlDohrft6cpKCk5xid5MNJTaAIkekKGQkWyKHkvhKsR7ARmitkAYDYRIbUQRQjWBwJRzChi9CRlBcY1UN4g0%2FVNB0AlcvcAYHRyZPdEQFYV8ccwR5HWxEJ02YmRMLnJ1xCYp0Y5idpQuhopmmC2KgojKasUQDk5BNAwwMOh2RtRq5uQuPZKGIJQIGwAwGf6I0JXMpC8C7kXWDBINFMxS4DKMAWVWAGYsAdNqW5uaRxkSKJOZKaU3tPOBZ4DuK2LATgJhkPJMgTwKCdFjyPHEnKxFCDhEAACH5BAkKAAAALAAAAAAgACAAAATzEMhJaVKp6s2nIkolIJ2WkBShpkVRWqqQrhLSEu9MZJKK9y1ZrqYK9WiClmvoUaF8gIQSNeF1Er4MNFn4SRSDARWroAIETg1iVwuHjYB1kYc1mwruwXKC9gmsJXliGxc%2BXiUCby9ydh1sOSdMkpMTBpaXBzsfhoc5l58Gm5yToAaZhaOUqjkDgCWNHAULCwOLaTmzswadEqggQwgHuQsHIoZCHQMMQgQGubVEcxOPFAcMDAYUA85eWARmfSRQCdcMe0zeP1AAygwLlJtPNAAL19DARdPzBOWSm1brJBi45soRAWQAAkrQIykShQ9wVhHCwCQCACH5BAkKAAAALAAAAAAgACAAAATrEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq%2BE71SRQeyqUToLA7VxF0JDyIQh%2FMVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiRMDjI0Fd30%2FiI2UA5GSS5UDj2l6NoqgOgN4gksEBgYFf0FDqKgHnyZ9OX8HrgYHdHpcHQULXAS2qKpENRg7eAMLC7kTBaixUYFkKAzWAAnLC7FLVxLWDBLKCwaKTULgEwbLA4hJtOkSBNqITT3xEgfLpBtzE%2FjiuL04RGEBgwWhShRgQExHBAAh%2BQQJCgAAACwAAAAAIAAgAAAE7xDISWlSqerNpyJKhWRdlSAVoVLCWk6JKlAqAavhO9UkUHsqlE6CwO1cRdCQ8iEIfzFVTzLdRAmZX3I2SfZiCqGk5dTESJeaOAlClzsJsqwiJwiqnFrb2nS9kmIcgEsjQydLiIlHehhpejaIjzh9eomSjZR%2BipslWIRLAgMDOR2DOqKogTB9pCUJBagDBXR6XB0EBkIIsaRsGGMMAxoDBgYHTKJiUYEGDAzHC9EACcUGkIgFzgwZ0QsSBcXHiQvOwgDdEwfFs0sDzt4S6BK4xYjkDOzn0unFeBzOBijIm1Dgmg5YFQwsCMjp1oJ8LyIAACH5BAkKAAAALAAAAAAgACAAAATwEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq%2BE71SRQeyqUToLA7VxF0JDyIQh%2FMVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiUd6GGl6NoiPOH16iZKNlH6KmyWFOggHhEEvAwwMA0N9GBsEC6amhnVcEwavDAazGwIDaH1ipaYLBUTCGgQDA8NdHz0FpqgTBwsLqAbWAAnIA4FWKdMLGdYGEgraigbT0OITBcg5QwPT4xLrROZL6AuQAPUS7bxLpoWidY0JtxLHKhwwMJBTHgPKdEQAACH5BAkKAAAALAAAAAAgACAAAATrEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq%2BE71SRQeyqUToLA7VxF0JDyIQh%2FMVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiUd6GAULDJCRiXo1CpGXDJOUjY%2BYip9DhToJA4RBLwMLCwVDfRgbBAaqqoZ1XBMHswsHtxtFaH1iqaoGNgAIxRpbFAgfPQSqpbgGBqUD1wBXeCYp1AYZ19JJOYgH1KwA4UBvQwXUBxPqVD9L3sbp2BNk2xvvFPJd%2BMFCN6HAAIKgNggY0KtEBAAh%2BQQJCgAAACwAAAAAIAAgAAAE6BDISWlSqerNpyJKhWRdlSAVoVLCWk6JKlAqAavhO9UkUHsqlE6CwO1cRdCQ8iEIfzFVTzLdRAmZX3I2SfYIDMaAFdTESJeaEDAIMxYFqrOUaNW4E4ObYcCXaiBVEgULe0NJaxxtYksjh2NLkZISgDgJhHthkpU4mW6blRiYmZOlh4JWkDqILwUGBnE6TYEbCgevr0N1gH4At7gHiRpFaLNrrq8HNgAJA70AWxQIH1%2BvsYMDAzZQPC9VCNkDWUhGkuE5PxJNwiUK4UfLzOlD4WvzAHaoG9nxPi5d%2BjYUqfAhhykOFwJWiAAAIfkECQoAAAAsAAAAACAAIAAABPAQyElpUqnqzaciSoVkXVUMFaFSwlpOCcMYlErAavhOMnNLNo8KsZsMZItJEIDIFSkLGQoQTNhIsFehRww2CQLKF0tYGKYSg%2BygsZIuNqJksKgbfgIGepNo2cIUB3V1B3IvNiBYNQaDSTtfhhx0CwVPI0UJe0%2Bbm4g5VgcGoqOcnjmjqDSdnhgEoamcsZuXO1aWQy8KAwOAuTYYGwi7w5h%2BKr0SJ8MFihpNbx%2B4Erq7BYBuzsdiH1jCAzoSfl0rVirNbRXlBBlLX%2BBP0XJLAPGzTkAuAOqb0WT5AH7OcdCm5B8TgRwSRKIHQtaLCwg1RAAAOwAAAAAAAAAAAA%3D%3D); - visibility: visible; - opacity: 0.6; - -webkit-transition: all 0.3s ease; - transition: all 0.3s ease; } - -.reveal .overlay header { - position: absolute; - left: 0; - top: 0; - width: 100%; - height: 40px; - z-index: 2; - border-bottom: 1px solid #222; } - -.reveal .overlay header a { - display: inline-block; - width: 40px; - height: 40px; - line-height: 36px; - padding: 0 10px; - float: right; - opacity: 0.6; - box-sizing: border-box; } - -.reveal .overlay header a:hover { - opacity: 1; } - -.reveal .overlay header a .icon { - display: inline-block; - width: 20px; - height: 20px; - background-position: 50% 50%; - background-size: 100%; - background-repeat: no-repeat; } - -.reveal .overlay header a.close .icon { - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAABkklEQVRYR8WX4VHDMAxG6wnoJrABZQPYBCaBTWAD2g1gE5gg6OOsXuxIlr40d81dfrSJ9V4c2VLK7spHuTJ/5wpM07QXuXc5X0opX2tEJcadjHuV80li/FgxTIEK/5QBCICBD6xEhSMGHgQPgBgLiYVAB1dpSqKDawxTohFw4JSEA3clzgIBPCURwE2JucBR7rhPJJv5OpJwDX+SfDjgx1wACQeJG1aChP9K/IMmdZ8DtESV1WyP3Bt4MwM6sj4NMxMYiqUWHQu4KYA/SYkIjOsm3BXYWMKFDwU2khjCQ4ELJUJ4SmClRArOCmSXGuKma0fYD5CbzHxFpCSGAhfAVSSUGDUk2BWZaff2g6GE15BsBQ9nwmpIGDiyHQddwNTMKkbZaf9fajXQca1EX44puJZUsnY0ObGmITE3GVLCbEhQUjGVt146j6oasWN+49Vph2w1pZ5EansNZqKBm1txbU57iRRcZ86RWMDdWtBJUHBHwoQPi1GV+JCbntmvok7iTX4/Up9mgyTc/FJYDTcndgH/AA5A/CHsyEkVAAAAAElFTkSuQmCC); } - -.reveal .overlay header a.external .icon { - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAcElEQVRYR+2WSQoAIQwEzf8f7XiOMkUQxUPlGkM3hVmiQfQR9GYnH1SsAQlI4DiBqkCMoNb9y2e90IAEJPAcgdznU9+engMaeJ7Azh5Y1U67gAho4DqBqmB1buAf0MB1AlVBek83ZPkmJMGc1wAR+AAqod/B97TRpQAAAABJRU5ErkJggg==); } - -.reveal .overlay .viewport { - position: absolute; - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - top: 40px; - right: 0; - bottom: 0; - left: 0; } - -.reveal .overlay.overlay-preview .viewport iframe { - width: 100%; - height: 100%; - max-width: 100%; - max-height: 100%; - border: 0; - opacity: 0; - visibility: hidden; - -webkit-transition: all 0.3s ease; - transition: all 0.3s ease; } - -.reveal .overlay.overlay-preview.loaded .viewport iframe { - opacity: 1; - visibility: visible; } - -.reveal .overlay.overlay-preview.loaded .viewport-inner { - position: absolute; - z-index: -1; - left: 0; - top: 45%; - width: 100%; - text-align: center; - letter-spacing: normal; } - -.reveal .overlay.overlay-preview .x-frame-error { - opacity: 0; - -webkit-transition: opacity 0.3s ease 0.3s; - transition: opacity 0.3s ease 0.3s; } - -.reveal .overlay.overlay-preview.loaded .x-frame-error { - opacity: 1; } - -.reveal .overlay.overlay-preview.loaded .spinner { - opacity: 0; - visibility: hidden; - -webkit-transform: scale(0.2); - transform: scale(0.2); } - -.reveal .overlay.overlay-help .viewport { - overflow: auto; - color: #fff; } - -.reveal .overlay.overlay-help .viewport .viewport-inner { - width: 600px; - margin: auto; - padding: 20px 20px 80px 20px; - text-align: center; - letter-spacing: normal; } - -.reveal .overlay.overlay-help .viewport .viewport-inner .title { - font-size: 20px; } - -.reveal .overlay.overlay-help .viewport .viewport-inner table { - border: 1px solid #fff; - border-collapse: collapse; - font-size: 16px; } - -.reveal .overlay.overlay-help .viewport .viewport-inner table th, -.reveal .overlay.overlay-help .viewport .viewport-inner table td { - width: 200px; - padding: 14px; - border: 1px solid #fff; - vertical-align: middle; } - -.reveal .overlay.overlay-help .viewport .viewport-inner table th { - padding-top: 20px; - padding-bottom: 20px; } - -/********************************************* - * PLAYBACK COMPONENT - *********************************************/ -.reveal .playback { - position: fixed; - left: 15px; - bottom: 20px; - z-index: 30; - cursor: pointer; - -webkit-transition: all 400ms ease; - transition: all 400ms ease; } - -.reveal.overview .playback { - opacity: 0; - visibility: hidden; } - -/********************************************* - * ROLLING LINKS - *********************************************/ -.reveal .roll { - display: inline-block; - line-height: 1.2; - overflow: hidden; - vertical-align: top; - -webkit-perspective: 400px; - perspective: 400px; - -webkit-perspective-origin: 50% 50%; - perspective-origin: 50% 50%; } - -.reveal .roll:hover { - background: none; - text-shadow: none; } - -.reveal .roll span { - display: block; - position: relative; - padding: 0 2px; - pointer-events: none; - -webkit-transition: all 400ms ease; - transition: all 400ms ease; - -webkit-transform-origin: 50% 0%; - transform-origin: 50% 0%; - -webkit-transform-style: preserve-3d; - transform-style: preserve-3d; - -webkit-backface-visibility: hidden; - backface-visibility: hidden; } - -.reveal .roll:hover span { - background: rgba(0, 0, 0, 0.5); - -webkit-transform: translate3d(0px, 0px, -45px) rotateX(90deg); - transform: translate3d(0px, 0px, -45px) rotateX(90deg); } - -.reveal .roll span:after { - content: attr(data-title); - display: block; - position: absolute; - left: 0; - top: 0; - padding: 0 2px; - -webkit-backface-visibility: hidden; - backface-visibility: hidden; - -webkit-transform-origin: 50% 0%; - transform-origin: 50% 0%; - -webkit-transform: translate3d(0px, 110%, 0px) rotateX(-90deg); - transform: translate3d(0px, 110%, 0px) rotateX(-90deg); } - -/********************************************* - * SPEAKER NOTES - *********************************************/ -.reveal aside.notes { - display: none; } - -.reveal .speaker-notes { - display: none; - position: absolute; - width: 70%; - max-height: 15%; - left: 15%; - bottom: 26px; - padding: 10px; - z-index: 1; - font-size: 18px; - line-height: 1.4; - color: #fff; - background-color: rgba(0, 0, 0, 0.5); - overflow: auto; - box-sizing: border-box; - text-align: left; - font-family: Helvetica, sans-serif; - -webkit-overflow-scrolling: touch; } - -.reveal .speaker-notes.visible:not(:empty) { - display: block; } - -@media screen and (max-width: 1024px) { - .reveal .speaker-notes { - font-size: 14px; } } - -@media screen and (max-width: 600px) { - .reveal .speaker-notes { - width: 90%; - left: 5%; } } - -/********************************************* - * ZOOM PLUGIN - *********************************************/ -.zoomed .reveal *, -.zoomed .reveal *:before, -.zoomed .reveal *:after { - -webkit-backface-visibility: visible !important; - backface-visibility: visible !important; } - -.zoomed .reveal .progress, -.zoomed .reveal .controls { - opacity: 0; } - -.zoomed .reveal .roll span { - background: none; } - -.zoomed .reveal .roll span:after { - visibility: hidden; } diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/css/urls.txt b/roles/lightbulb-ansiblered-deck/files/deck-ansible/css/urls.txt deleted file mode 100644 index 0fb09de..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/css/urls.txt +++ /dev/null @@ -1,12 +0,0 @@ -https://cdnjs.cloudflare.com/ajax/libs/reveal.js/3.4.1/css/reveal.css -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 -https://cdnjs.cloudflare.com/ajax/libs/reveal.js/3.4.1/lib/css/zenburn.css -https://cdnjs.cloudflare.com/ajax/libs/prism/1.6.0/themes/prism.min.css -https://cdnjs.cloudflare.com/ajax/libs/reveal.js/3.4.1/lib/js/head.min.js -https://cdnjs.cloudflare.com/ajax/libs/reveal.js/3.4.1/js/reveal.js -https://cdnjs.cloudflare.com/ajax/libs/reveal.js/3.4.1/plugin/markdown/marked.js -https://cdnjs.cloudflare.com/ajax/libs/reveal.js/3.4.1/plugin/markdown/markdown.js -https://cdnjs.cloudflare.com/ajax/libs/prism/1.6.0/prism.min.js -https://cdnjs.cloudflare.com/ajax/libs/prism/1.6.0/components/prism-yaml.min.js -https://cdnjs.cloudflare.com/ajax/libs/reveal.js/3.4.1/plugin/highlight/highlight.js diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/envars.php b/roles/lightbulb-ansiblered-deck/files/deck-ansible/envars.php deleted file mode 100644 index 5f69117..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/envars.php +++ /dev/null @@ -1,89 +0,0 @@ -\n\t\t

\$_ENV

\n\t\n"; -foreach( $_ENV as $key => $value){ - $count++; - $linefront = "\t\n\t\t$count\n\t\t"; - $lineend = "\n\t\t$value\n\t\n"; - $outvars .= "$linefront\$_ENV['$key']$lineend"; -} - - -$outvars .= "\t\n\t\t

\$_SERVER

\n\t\n"; -foreach( $_SERVER as $key => $value){ - if ($key == "PHP_AUTH_PW"){ - $value = ereg_replace("[^.*]", "*", $value) . " <--- (this value displays in plaintext but has been obfusticated in this script)"; - } - $count++; - $linefront = "\t\n\t\t$count\n\t\t"; - $lineend = "\n\t\t$value\n\t\n"; - $outvars .= "$linefront\$_SERVER['$key']$lineend"; -} - - -$outvars .= "\t\n\t\t

\$_POST

\n\t\n"; -foreach( $_POST as $key => $value){ - $count++; - $linefront = "\t\n\t\t$count\n\t\t"; - $lineend = "\n\t\t$value\n\t\n"; - $outvars .= "$linefront\$_POST['$key']$lineend"; -} - - -$outvars .= "\t\n\t\t

\$_GET

\n\t\n"; -foreach( $_GET as $key => $value){ - $count++; - $linefront = "\t\n\t\t$count\n\t\t"; - $lineend = "\n\t\t$value\n\t\n"; - $outvars .= "$linefront\$_GET['$key']$lineend"; -} - - -?> - -
- - - (this script)
-
-
-
- -
- -
diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/favicon.ico b/roles/lightbulb-ansiblered-deck/files/deck-ansible/favicon.ico deleted file mode 100644 index 07cd505..0000000 Binary files a/roles/lightbulb-ansiblered-deck/files/deck-ansible/favicon.ico and /dev/null differ diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/000_Intro_and_Preamble/010_What_You_Will_Learn.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/000_Intro_and_Preamble/010_What_You_Will_Learn.html deleted file mode 100644 index 934c864..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/000_Intro_and_Preamble/010_What_You_Will_Learn.html +++ /dev/null @@ -1,17 +0,0 @@ -
-

What You Will Learn

-

Ansible is capable of handling many powerful automation tasks with the flexibility to adapt to many environments and workflows. With Ansible, users can very quickly get up and running to do real work.

-
    -
  • What is Ansible? / "The Ansible Way"
  • -
  • How Ansible Works and its Key Components
  • -
  • Automating with Ad-Hoc Commands
  • -
  • Writing Playbooks / Playbook Basics
  • -
  • Reuse and Redistribution of Ansible Content with Roles
  • -
- -
diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/000_Intro_and_Preamble/020_A_What_is_Ansible.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/000_Intro_and_Preamble/020_A_What_is_Ansible.html deleted file mode 100644 index 5067657..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/000_Intro_and_Preamble/020_A_What_is_Ansible.html +++ /dev/null @@ -1,13 +0,0 @@ -
-

What is Ansible?

-

It's a simple automation language that can perfectly describe an IT application infrastructure in Ansible Playbooks.

-

It's an automation engine that runs Ansible Playbooks.


-

Ansible is an automation platform: -

    -
  • Playbooks make up the automation language
  • -
  • The code base is the automation engine.
  • -
  • Ansible Tower manages existing automation
  • -
-

- -
diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/000_Intro_and_Preamble/021_B_What_is_Tower.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/000_Intro_and_Preamble/021_B_What_is_Tower.html deleted file mode 100644 index 03ed4a9..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/000_Intro_and_Preamble/021_B_What_is_Tower.html +++ /dev/null @@ -1,14 +0,0 @@ -
-

What is Ansible Tower?

-

Ansible Tower is an enterprise framework for controlling, securing and managing your Ansible automation with a UI and RESTful API.

- - -
diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/000_Intro_and_Preamble/030_WhyAnsible.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/000_Intro_and_Preamble/030_WhyAnsible.html deleted file mode 100644 index 75bfdcb..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/000_Intro_and_Preamble/030_WhyAnsible.html +++ /dev/null @@ -1,38 +0,0 @@ -
-

Why Ansible?    What Sets Ansible Apart?

- -
- -
-

Why Ansible?    What Sets Ansible Apart?

- -
- -
-

Why Ansible?    What Sets Ansible Apart?

- -
- -
-

Why Ansible?    What Sets Ansible Apart?

- -
- diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/000_Intro_and_Preamble/031_UseCasesIndividual.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/000_Intro_and_Preamble/031_UseCasesIndividual.html deleted file mode 100644 index 0702c36..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/000_Intro_and_Preamble/031_UseCasesIndividual.html +++ /dev/null @@ -1,58 +0,0 @@ -
- -
- -

-

-

-

-

-

-

-

-

-

-

-

- -
- - - - - - - - - - - - - - - - - -
-

Ansible Provides End To End Goodness

-
  - - - - - -
  - - - - - -
- - - -
diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/000_Intro_and_Preamble/040_The_Ansible_Way.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/000_Intro_and_Preamble/040_The_Ansible_Way.html deleted file mode 100644 index c360b4d..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/000_Intro_and_Preamble/040_The_Ansible_Way.html +++ /dev/null @@ -1,146 +0,0 @@ -
-

The Ansible Way

-

- -

CROSS PLATFORM – Linux, Windows, UNIX
- Agentless support for all major OS variants, physical, virtual, cloud and network

-

HUMAN READABLE – YAML
- Perfectly describe and document every aspect of your application environment

-

PERFECT DESCRIPTION OF APPLICATION
- Every change can be made by playbooks, ensuring everyone is on the same page

-

VERSION CONTROLLED
- Playbooks are plain-text. Treat them like code in your existing version control.

-

DYNAMIC INVENTORIES
- Capture all the servers 100% of the time, regardless of infrastructure, location, etc.

-

ORCHESTRATION THAT PLAYS WELL WITH OTHERS – HP SA, Puppet, Jenkins, RHNSS, etc. Homogenize existing environments by leveraging current toolsets and update mechanisms.

-
- - -
- -
-

The Ansible Way - Venture Across The Platform

-

- -

CROSS PLATFORM – Linux, Windows, UNIX
- Agentless support for all major OS variants, physical, virtual, cloud and network

-

HUMAN READABLE – YAML
- Perfectly describe and document every aspect of your application environment

-

PERFECT DESCRIPTION OF APPLICATION
- Every change can be made by playbooks, ensuring everyone is on the same page

-

VERSION CONTROLLED
- Playbooks are plain-text. Treat them like code in your existing version control.

-

DYNAMIC INVENTORIES
- Capture all the servers 100% of the time, regardless of infrastructure, location, etc.

-

ORCHESTRATION THAT PLAYS WELL WITH OTHERS – HP SA, Puppet, Jenkins, RHNSS, etc. Homogenize existing environments by leveraging current toolsets and update mechanisms.

-
- - -
- -
-

The Ansible Way - Communicate Clearly

-

- -

CROSS PLATFORM – Linux, Windows, UNIX
- Agentless support for all major OS variants, physical, virtual, cloud and network

-

HUMAN READABLE – YAML
- Perfectly describe and document every aspect of your application environment

-

PERFECT DESCRIPTION OF APPLICATION
- Every change can be made by playbooks, ensuring everyone is on the same page

-

VERSION CONTROLLED
- Playbooks are plain-text. Treat them like code in your existing version control.

-

DYNAMIC INVENTORIES
- Capture all the servers 100% of the time, regardless of infrastructure, location, etc.

-

ORCHESTRATION THAT PLAYS WELL WITH OTHERS – HP SA, Puppet, Jenkins, RHNSS, etc. Homogenize existing environments by leveraging current toolsets and update mechanisms.

-
- - -
- -
-

The Ansible Way - One Source To Rule Them All

-

- -

CROSS PLATFORM – Linux, Windows, UNIX
- Agentless support for all major OS variants, physical, virtual, cloud and network

-

HUMAN READABLE – YAML
- Perfectly describe and document every aspect of your application environment

-

PERFECT DESCRIPTION OF APPLICATION
- Every change can be made by playbooks, ensuring everyone is on the same page

-

VERSION CONTROLLED
- Playbooks are plain-text. Treat them like code in your existing version control.

-

DYNAMIC INVENTORIES
- Capture all the servers 100% of the time, regardless of infrastructure, location, etc.

-

ORCHESTRATION THAT PLAYS WELL WITH OTHERS – HP SA, Puppet, Jenkins, RHNSS, etc. Homogenize existing environments by leveraging current toolsets and update mechanisms.

-
- - -
- -
-

The Ansible Way - Version Controlled Goodness

-

-

CROSS PLATFORM – Linux, Windows, UNIX
- Agentless support for all major OS variants, physical, virtual, cloud and network

-

HUMAN READABLE – YAML
- Perfectly describe and document every aspect of your application environment

-

PERFECT DESCRIPTION OF APPLICATION
- Every change can be made by playbooks, ensuring everyone is on the same page

-

VERSION CONTROLLED
- Playbooks are plain-text. Treat them like code in your existing version control.

-

DYNAMIC INVENTORIES
- Capture all the servers 100% of the time, regardless of infrastructure, location, etc.

-

ORCHESTRATION THAT PLAYS WELL WITH OTHERS – HP SA, Puppet, Jenkins, RHNSS, etc. Homogenize existing environments by leveraging current toolsets and update mechanisms.

-
- - -
- -
-

The Ansible Way - Dynamically Utilize Inventories

-

- -

CROSS PLATFORM – Linux, Windows, UNIX
- Agentless support for all major OS variants, physical, virtual, cloud and network

-

HUMAN READABLE – YAML
- Perfectly describe and document every aspect of your application environment

-

PERFECT DESCRIPTION OF APPLICATION
- Every change can be made by playbooks, ensuring everyone is on the same page

-

VERSION CONTROLLED
- Playbooks are plain-text. Treat them like code in your existing version control.

-

DYNAMIC INVENTORIES
- Capture all the servers 100% of the time, regardless of infrastructure, location, etc.

-

ORCHESTRATION THAT PLAYS WELL WITH OTHERS – HP SA, Puppet, Jenkins, RHNSS, etc. Homogenize existing environments by leveraging current toolsets and update mechanisms.

-
- - -
- - -
-

The Ansible Way - Play Nicely With Others

-

- -

CROSS PLATFORM – Linux, Windows, UNIX
- Agentless support for all major OS variants, physical, virtual, cloud and network

-

HUMAN READABLE – YAML
- Perfectly describe and document every aspect of your application environment

-

PERFECT DESCRIPTION OF APPLICATION
- Every change can be made by playbooks, ensuring everyone is on the same page

-

VERSION CONTROLLED
- Playbooks are plain-text. Treat them like code in your existing version control.

-

DYNAMIC INVENTORIES
- Capture all the servers 100% of the time, regardless of infrastructure, location, etc.

-

ORCHESTRATION THAT PLAYS WELL WITH OTHERS – HP SA, Puppet, Jenkins, RHNSS, etc. Homogenize existing environments by leveraging current toolsets and update mechanisms.

-
- - -
diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/000_Intro_and_Preamble/050_Batteries_Included.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/000_Intro_and_Preamble/050_Batteries_Included.html deleted file mode 100644 index f00baca..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/000_Intro_and_Preamble/050_Batteries_Included.html +++ /dev/null @@ -1,63 +0,0 @@ -
-

Batteries Included

-

Ansible comes bundled with hundreds of modules for a wide variety of automation tasks

- -
-

- -

-
- - - - - -
-

- -

-
- - -
-

- -

-
- - - - -
-
-
    -
  • cloud
  • -
  • containers
  • -
  • database
  • -
  • files
  • -
  • messaging
  • -
  • monitoring
  • -
  • network
  • -
-
-
-
    -
  • notifications
  • -
  • packaging
  • -
  • source control
  • -
  • system
  • -
  • testing
  • -
  • utilities
  • -
  • web infrastructure
  • -
-
-
-
-
- -
diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/000_Intro_and_Preamble/060_The_Language_of_DevOps.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/000_Intro_and_Preamble/060_The_Language_of_DevOps.html deleted file mode 100644 index 34b29f6..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/000_Intro_and_Preamble/060_The_Language_of_DevOps.html +++ /dev/null @@ -1,14 +0,0 @@ -
-

Ansible: The Language of DevOps

-
- -

COMMUNICATION IS THE KEY TO DEVOPS.

-

Ansible is the first automation language
that can be read and written across IT.

-

Ansible is the only automation engine
that can automate the entire application lifecycle
and continuous delivery pipeline.

-
- -
diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/000_Intro_and_Preamble/090_A_UseCasesIntro.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/000_Intro_and_Preamble/090_A_UseCasesIntro.html deleted file mode 100644 index 69b8b4a..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/000_Intro_and_Preamble/090_A_UseCasesIntro.html +++ /dev/null @@ -1,19 +0,0 @@ -
-

Ansible: Endless Use Cases

-

Ansible fills virtually countless use cases with its versatility.

-
  • ✾  Ansible is NOT just a Config Management Tool.
  • -
  • ☇  Ansible is NOT just an Application Deployment Tool.
  • -
  • ☁  Ansible is NOT just a Provisioning Tool.
  • -
  • ☡  Ansible is NOT just a CI/CD Tool.
  • -
  • ✎  Ansible is NOT just an Audit and Compliance Tool.
  • -
  • ➰   Ansible is NOT just an Orchestration Tool.
  • -

    Ansible is a powerful automation engine...

    -

    with strong use cases for all of the above tasks.

    -

    - - -
    - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/000_Intro_and_Preamble/_061_TowerAndDevOps.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/000_Intro_and_Preamble/_061_TowerAndDevOps.html deleted file mode 100644 index 60c85f2..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/000_Intro_and_Preamble/_061_TowerAndDevOps.html +++ /dev/null @@ -1,17 +0,0 @@ -
    - -
    -
    -

    Practical Workflows

    -

    Deployment and CICD Pipelines

    -
    -
    - - - - - - -
    diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/010_Promoting_Ansible/000__RedIntro.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/010_Promoting_Ansible/000__RedIntro.html deleted file mode 100644 index 61add93..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/010_Promoting_Ansible/000__RedIntro.html +++ /dev/null @@ -1,11 +0,0 @@ -
    -
    -

    PEOPLE LOVE ANSIBLE.

    - -

    Ansible is taking the world by storm with unbelievable popularity.

    - -
    -
    - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/010_Promoting_Ansible/065_Meetups.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/010_Promoting_Ansible/065_Meetups.html deleted file mode 100644 index 9133518..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/010_Promoting_Ansible/065_Meetups.html +++ /dev/null @@ -1,5 +0,0 @@ -
    - -
    diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/010_Promoting_Ansible/066_AnsibleFest.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/010_Promoting_Ansible/066_AnsibleFest.html deleted file mode 100644 index 9a48789..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/010_Promoting_Ansible/066_AnsibleFest.html +++ /dev/null @@ -1,34 +0,0 @@ -
    - - -
    -
    -

    -

    Stars on GitHub

    -
    -
    - -
    -
    -

    -

    Ansible Modules

    -
    -
    - - -
    -
    -

    -

    Downloads Per Month

    -
    -
    - - - - - - - -
    diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/010_Promoting_Ansible/067_GitContributions.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/010_Promoting_Ansible/067_GitContributions.html deleted file mode 100644 index e634945..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/010_Promoting_Ansible/067_GitContributions.html +++ /dev/null @@ -1,5 +0,0 @@ -
    - -
    diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/010_Promoting_Ansible/068_MostSearched.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/010_Promoting_Ansible/068_MostSearched.html deleted file mode 100644 index 79bfe60..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/010_Promoting_Ansible/068_MostSearched.html +++ /dev/null @@ -1,5 +0,0 @@ -
    - -
    diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/010_Promoting_Ansible/_090_A_UseCasesIntro.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/010_Promoting_Ansible/_090_A_UseCasesIntro.html deleted file mode 100644 index d86bab7..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/010_Promoting_Ansible/_090_A_UseCasesIntro.html +++ /dev/null @@ -1,19 +0,0 @@ -
    -

    Ansible: Endless Use Cases

    -

    Ansible fills virtually countless use cases with its versatility.

    -
  • ✾  Ansible is NOT just a Config Management Tool.
  • -
  • ☇  Ansible is NOT just an Application Deployment Tool.
  • -
  • ☁  Ansible is NOT just a Provisioning Tool.
  • -
  • ☡  Ansible is NOT just a CI/CD Tool.
  • -
  • ✎  Ansible is NOT just an Audit and Compliance Tool.
  • -
  • ➰   Ansible is NOT just an Orchestration Tool.
  • -

    Ansible is a powerful automation engine...

    -

    with strong use cases for all of the above tasks.

    -

    - - -
    - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/011_Installing_Ansible/000_RedIntro-InstallingAnsible.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/011_Installing_Ansible/000_RedIntro-InstallingAnsible.html deleted file mode 100644 index fbce0e7..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/011_Installing_Ansible/000_RedIntro-InstallingAnsible.html +++ /dev/null @@ -1,12 +0,0 @@ -
    - -

    INSTALLING ANSIBLE

    - -

    It Could Not Be Simpler.

    - - -
    - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/011_Installing_Ansible/01_InstallingAnsible.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/011_Installing_Ansible/01_InstallingAnsible.html deleted file mode 100644 index 886f02a..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/011_Installing_Ansible/01_InstallingAnsible.html +++ /dev/null @@ -1,26 +0,0 @@ -
    -
    -
    -
    Ansible Terminal
    -
    -
    -# RHEL "extras" repo or CentOS EPEL:
    -$ sudo yum install ansible
    -
    -# you will need the PPA repo configured on
    -# Debian or Ubuntu
    -$ sudo apt-get install ansible
    -
    -# from your MacBook:
    -$ brew install ansible
    -
    -# For bleeding edge python versions,
    -$ sudo pip install ansible
    -    
    -
    - - - - -
    - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/011_Installing_Ansible/02_InstallingAnsibleVideo.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/011_Installing_Ansible/02_InstallingAnsibleVideo.html deleted file mode 100644 index c95a0cb..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/011_Installing_Ansible/02_InstallingAnsibleVideo.html +++ /dev/null @@ -1,22 +0,0 @@ -
    -

    Simple: Installing Ansible

    - - - - - - - - - - -
    - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/020_How_Ansible_Works/000__Red_Slide_HowANsibleWorks.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/020_How_Ansible_Works/000__Red_Slide_HowANsibleWorks.html deleted file mode 100644 index 3b597a9..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/020_How_Ansible_Works/000__Red_Slide_HowANsibleWorks.html +++ /dev/null @@ -1,12 +0,0 @@ -
    - -

    HOW ANSIBLE WORKS

    - -

    Let's Take A Look At The Technology

    - - -
    - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/020_How_Ansible_Works/014__How_Ansible_Works.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/020_How_Ansible_Works/014__How_Ansible_Works.html deleted file mode 100644 index 7f4b21e..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/020_How_Ansible_Works/014__How_Ansible_Works.html +++ /dev/null @@ -1,10 +0,0 @@ -
    - -

    How Ansible Works

    - - -
    - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/020_How_Ansible_Works/015__Plays_amp_Playbooks.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/020_How_Ansible_Works/015__Plays_amp_Playbooks.html deleted file mode 100644 index 18dd970..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/020_How_Ansible_Works/015__Plays_amp_Playbooks.html +++ /dev/null @@ -1,11 +0,0 @@ -
    - -

    Plays & Playbooks

    - - -
    - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/020_How_Ansible_Works/016__Modules_amp_Tasks.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/020_How_Ansible_Works/016__Modules_amp_Tasks.html deleted file mode 100644 index 84f6735..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/020_How_Ansible_Works/016__Modules_amp_Tasks.html +++ /dev/null @@ -1,12 +0,0 @@ -
    - -

    Modules & Tasks

    - - -
    - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/020_How_Ansible_Works/017__Plugins.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/020_How_Ansible_Works/017__Plugins.html deleted file mode 100644 index 0daa619..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/020_How_Ansible_Works/017__Plugins.html +++ /dev/null @@ -1,19 +0,0 @@ -
    - -

    Plugins

    - - -
    - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/020_How_Ansible_Works/018__Inventory.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/020_How_Ansible_Works/018__Inventory.html deleted file mode 100644 index 3fc061c..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/020_How_Ansible_Works/018__Inventory.html +++ /dev/null @@ -1,14 +0,0 @@ -
    - -

    Inventory

    - - -
    - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/020_How_Ansible_Works/019__Inventory.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/020_How_Ansible_Works/019__Inventory.html deleted file mode 100644 index 93dc48b..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/020_How_Ansible_Works/019__Inventory.html +++ /dev/null @@ -1,11 +0,0 @@ -
    - -

    Inventory

    - - -
    - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/040_Ansible_Modules/000_RedIntro-Modules.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/040_Ansible_Modules/000_RedIntro-Modules.html deleted file mode 100644 index 60020c4..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/040_Ansible_Modules/000_RedIntro-Modules.html +++ /dev/null @@ -1,12 +0,0 @@ -
    - -

    MODULES

    - -

    We leverage modules within our playbooks to do the heavy lifting.

    - - -
    - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/040_Ansible_Modules/100_What-Are-Modules.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/040_Ansible_Modules/100_What-Are-Modules.html deleted file mode 100644 index c04eeb6..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/040_Ansible_Modules/100_What-Are-Modules.html +++ /dev/null @@ -1,39 +0,0 @@ -
    - -

    Modules

    -

    Modules are bits of code transferred to the target system and executed to satisfy the task declaration.

    -
    -
    -
      -
    • apt/yum
    • -
    • copy
    • -
    • file
    • -
    • get_url
    • -
    • git
    • -
    • ping
    • -
    • debug
    • -
    -
    -
    -
      -
    • service
    • -
    • synchronize
    • -
    • template
    • -
    • uri
    • -
    • user
    • -
    • wait_for
    • -
    • assert
    • -
    -
    -
    -
    -
    - -
    - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/040_Ansible_Modules/210_Modules_ansible-doc-CLI-SCROLL.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/040_Ansible_Modules/210_Modules_ansible-doc-CLI-SCROLL.html deleted file mode 100644 index 644465a..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/040_Ansible_Modules/210_Modules_ansible-doc-CLI-SCROLL.html +++ /dev/null @@ -1,1876 +0,0 @@ -
    -

    Modules Documentation

    -

    Returns a list of literally every module available on the system

    - - -
    - -
    - ansible-doc -l
    -Provides a long list of all available modules
    -
    -
    -a10_server Manage A10 Networks AX... -a10_server_axapi3 Manage A10 Networks AX... -a10_service_group Manage A10 Networks AX... -a10_virtual_server Manage A10 Networks AX... -accelerate Enable accelerated mod... -aci_aaa_user Manage AAA users (aaa:... -aci_aaa_user_certificate Manage AAA user certif... -aci_access_port_to_interface_policy_leaf_profile Manage Fabric interfac... -aci_aep Manage attachable Acce... -aci_aep_to_domain Bind AEPs to Physical ... -aci_ap Manage top level Appli... -aci_bd Manage Bridge Domains ... -aci_bd_subnet Manage Subnets (fv:Sub... -aci_bd_to_l3out Bind Bridge Domain to ... -aci_config_rollback Provides rollback and ... -aci_config_snapshot Manage Config Snapshot... -aci_contract Manage contract resour... -aci_contract_subject Manage initial Contrac... -aci_contract_subject_to_filter Bind Contract Subjects... -aci_domain Manage physical, virtu... -aci_domain_to_encap_pool Bind Domain to Encap P... -aci_domain_to_vlan_pool Bind Domain to VLAN Po... -aci_encap_pool Manage encap pools (fv... -aci_encap_pool_range Manage encap ranges as... -aci_epg Manage End Point Group... -aci_epg_monitoring_policy Manage monitoring poli... -aci_epg_to_contract Bind EPGs to Contracts... -aci_epg_to_domain Bind EPGs to Domains (... -aci_fabric_node Manage Fabric Node Mem... -aci_filter Manages top level filt... -aci_filter_entry Manage filter entries ... -aci_firmware_source Manage firmware image ... -aci_interface_policy_fc Manage Fibre Channel i... -aci_interface_policy_l2 Manage Layer 2 interfa... -aci_interface_policy_leaf_policy_group Manage fabric interfac... -aci_interface_policy_leaf_profile Manage fabric interfac... -aci_interface_policy_lldp Manage LLDP interface ... -aci_interface_policy_mcp Manage MCP interface p... -aci_interface_policy_port_channel Manage port channel in... -aci_interface_policy_port_security Manage port security (... -aci_interface_selector_to_switch_policy_leaf_profile Bind interface selecto... -aci_l3out Manage Layer 3 Outside... -aci_l3out_route_tag_policy Manage route tag polic... -aci_rest Direct access to the C... -aci_static_binding_to_epg Bind static paths to E... -aci_switch_leaf_selector Bind leaf selectors to... -aci_switch_policy_leaf_profile Manage switch policy l... -aci_switch_policy_vpc_protection_group Manage switch policy e... -aci_taboo_contract Manage taboo contracts... -aci_tenant Manage tenants (fv:Ten... -aci_tenant_action_rule_profile Manage action rule pro... -aci_tenant_ep_retention_policy Manage End Point (EP) ... -aci_tenant_span_dst_group Manage SPAN destinatio... -aci_tenant_span_src_group Manage SPAN source gro... -aci_tenant_span_src_group_to_dst_group Bind SPAN source group... -aci_vlan_pool Manage VLAN pools (fvn... -aci_vlan_pool_encap_block Manage encap blocks as... -aci_vrf Manage contexts or VRF... -acl Sets and retrieves fil... -acme_account Create, modify or dele... -acme_certificate Create SSL certificate... -add_host add a host (and altern... -airbrake_deployment Notify airbrake about ... -aireos_command Run commands on remote... -aireos_config Manage Cisco WLC confi... -aix_inittab Manages the inittab on... -aix_lvol Configure AIX LVM logi... -alternatives Manages alternative pr... -aos_asn_pool Manage AOS ASN Pool -aos_blueprint Manage AOS blueprint i... -aos_blueprint_param Manage AOS blueprint p... -aos_blueprint_virtnet Manage AOS blueprint p... -aos_device Manage Devices on AOS ... -aos_external_router Manage AOS External Ro... -aos_ip_pool Manage AOS IP Pool -aos_logical_device Manage AOS Logical Dev... -aos_logical_device_map Manage AOS Logical Dev... -aos_login Login to AOS server fo... -aos_rack_type Manage AOS Rack Type -aos_template Manage AOS Template -apache2_mod_proxy Set and/or get members... -apache2_module Enables/disables a mod... -apk Manages apk packages -apt Manages apt-packages -apt_key Add or remove an apt k... -apt_repository Add and remove APT rep... -apt_rpm apt_rpm package manage... -archive Creates a compressed a... -aruba_command Run commands on remote... -aruba_config Manage Aruba configura... -asa_acl Manage access-lists on... -asa_command Run arbitrary commands... -asa_config Manage configuration s... -assemble Assembles a configurat... -assert Asserts given expressi... -async_status Obtain status of async... -at Schedule the execution... -atomic_container Manage the containers ... -atomic_host Manage the atomic host... -atomic_image Manage the container i... -authorized_key Adds or removes an SSH... -avi_actiongroupconfig Module for setup of Ac... -avi_alertconfig Module for setup of Al... -avi_alertemailconfig Module for setup of Al... -avi_alertscriptconfig Module for setup of Al... -avi_alertsyslogconfig Module for setup of Al... -avi_analyticsprofile Module for setup of An... -avi_api_session Avi API Module -avi_api_version Avi API Version Module -avi_applicationpersistenceprofile Module for setup of Ap... -avi_applicationprofile Module for setup of Ap... -avi_authprofile Module for setup of Au... -avi_autoscalelaunchconfig Module for setup of Au... -avi_backup Module for setup of Ba... -avi_backupconfiguration Module for setup of Ba... -avi_certificatemanagementprofile Module for setup of Ce... -avi_cloud Module for setup of Cl... -avi_cloudconnectoruser Module for setup of Cl... -avi_cloudproperties Module for setup of Cl... -avi_cluster Module for setup of Cl... -avi_clusterclouddetails Module for setup of Cl... -avi_controllerproperties Module for setup of Co... -avi_customipamdnsprofile Module for setup of Cu... -avi_dnspolicy Module for setup of Dn... -avi_errorpagebody Module for setup of Er... -avi_errorpageprofile Module for setup of Er... -avi_gslb Module for setup of Gs... -avi_gslbapplicationpersistenceprofile Module for setup of Gs... -avi_gslbgeodbprofile Module for setup of Gs... -avi_gslbhealthmonitor Module for setup of Gs... -avi_gslbservice Module for setup of Gs... -avi_gslbservice_patch_member Avi API Module -avi_hardwaresecuritymodulegroup Module for setup of Ha... -avi_healthmonitor Module for setup of He... -avi_httppolicyset Module for setup of HT... -avi_ipaddrgroup Module for setup of Ip... -avi_ipamdnsproviderprofile Module for setup of Ip... -avi_l4policyset Module for setup of L4... -avi_microservicegroup Module for setup of Mi... -avi_network Module for setup of Ne... -avi_networkprofile Module for setup of Ne... -avi_networksecuritypolicy Module for setup of Ne... -avi_pkiprofile Module for setup of PK... -avi_pool Module for setup of Po... -avi_poolgroup Module for setup of Po... -avi_poolgroupdeploymentpolicy Module for setup of Po... -avi_prioritylabels Module for setup of Pr... -avi_role Module for setup of Ro... -avi_scheduler Module for setup of Sc... -avi_seproperties Module for setup of Se... -avi_serverautoscalepolicy Module for setup of Se... -avi_serviceengine Module for setup of Se... -avi_serviceenginegroup Module for setup of Se... -avi_snmptrapprofile Module for setup of Sn... -avi_sslkeyandcertificate Module for setup of SS... -avi_sslprofile Module for setup of SS... -avi_stringgroup Module for setup of St... -avi_systemconfiguration Module for setup of Sy... -avi_tenant Module for setup of Te... -avi_trafficcloneprofile Module for setup of Tr... -avi_useraccount Avi UserAccount Module -avi_useraccountprofile Module for setup of Us... -avi_virtualservice Module for setup of Vi... -avi_vrfcontext Module for setup of Vr... -avi_vsdatascriptset Module for setup of VS... -avi_vsvip Module for setup of Vs... -avi_wafpolicy Module for setup of Wa... -avi_wafprofile Module for setup of Wa... -avi_webhook Module for setup of We... -awall Manage awall policies -aws_acm_facts Retrieve certificate f... -aws_api_gateway Manage AWS API Gateway... -aws_application_scaling_policy Manage Application Aut... -aws_az_facts Gather facts about ava... -aws_batch_compute_environment Manage AWS Batch Compu... -aws_batch_job_definition Manage AWS Batch Job D... -aws_batch_job_queue Manage AWS Batch Job Q... -aws_caller_facts Get facts about the us... -aws_config_aggregation_authorization Manage cross-account A... -aws_config_aggregator Manage AWS Config aggr... -aws_config_delivery_channel Manage AWS Config deli... -aws_config_recorder Manage AWS Config Reco... -aws_config_rule Manage AWS Config reso... -aws_direct_connect_connection Creates, deletes, modi... -aws_direct_connect_gateway Manage AWS Direct Conn... -aws_direct_connect_link_aggregation_group Manage Direct Connect ... -aws_direct_connect_virtual_interface Manage Direct Connect ... -aws_elasticbeanstalk_app create, update, and de... -aws_glue_connection Manage an AWS Glue con... -aws_glue_job Manage an AWS Glue job -aws_inspector_target Create, Update and Del... -aws_kms Perform various KMS ma... -aws_kms_facts Gather facts about AWS... -aws_region_facts Gather facts about AWS... -aws_s3 manage objects in S3. -aws_s3_bucket_facts Lists S3 buckets in AW... -aws_s3_cors Manage CORS for S3 buc... -aws_ses_identity Manages SES email and ... -aws_ses_identity_policy Manages SES sending au... -aws_sgw_facts Fetch AWS Storage Gate... -aws_ssm_parameter_store Manage key-value pairs... -aws_waf_condition create and delete WAF ... -aws_waf_facts Retrieve facts for WAF... -aws_waf_rule create and delete WAF ... -aws_waf_web_acl create and delete WAF ... -azure create or terminate a ... -azure_rm_acs Manage an Azure Contai... -azure_rm_aks Manage a managed Azure... -azure_rm_aks_facts Get Azure Kubernetes S... -azure_rm_availabilityset Manage Azure availabil... -azure_rm_availabilityset_facts Get availability set f... -azure_rm_containerinstance Manage an Azure Contai... -azure_rm_containerregistry Manage an Azure Contai... -azure_rm_deployment Create or destroy Azur... -azure_rm_dnsrecordset Create, delete and upd... -azure_rm_dnsrecordset_facts Get DNS Record Set fac... -azure_rm_dnszone Manage Azure DNS zones... -azure_rm_dnszone_facts Get DNS zone facts. -azure_rm_functionapp Manage Azure Function ... -azure_rm_functionapp_facts Get Azure Function App... -azure_rm_image Manage Azure image. -azure_rm_keyvault Manage Key Vault insta... -azure_rm_keyvaultkey Use Azure KeyVault key... -azure_rm_keyvaultsecret Use Azure KeyVault Sec... -azure_rm_loadbalancer Manage Azure load bala... -azure_rm_loadbalancer_facts Get load balancer fact... -azure_rm_managed_disk Manage Azure Manage Di... -azure_rm_managed_disk_facts Get managed disk facts... -azure_rm_mysqldatabase Manage MySQL Database ... -azure_rm_mysqlserver Manage MySQL Server in... -azure_rm_networkinterface Manage Azure network i... -azure_rm_networkinterface_facts Get network interface ... -azure_rm_postgresqldatabase Manage PostgreSQL Data... -azure_rm_postgresqlserver Manage PostgreSQL Serv... -azure_rm_publicipaddress Manage Azure Public IP... -azure_rm_publicipaddress_facts Get public IP facts. -azure_rm_resource Create any Azure resou... -azure_rm_resource_facts Generic facts of Azure... -azure_rm_resourcegroup Manage Azure resource ... -azure_rm_resourcegroup_facts Get resource group fac... -azure_rm_securitygroup Manage Azure network s... -azure_rm_securitygroup_facts Get security group fac... -azure_rm_sqldatabase Manage SQL Database in... -azure_rm_sqlserver Manage SQL Server inst... -azure_rm_sqlserver_facts Get SQL Server facts. -azure_rm_storageaccount Manage Azure storage a... -azure_rm_storageaccount_facts Get storage account fa... -azure_rm_storageblob Manage blob containers... -azure_rm_subnet Manage Azure subnets. -azure_rm_virtualmachine Manage Azure virtual m... -azure_rm_virtualmachine_extension Managed Azure Virtual ... -azure_rm_virtualmachine_scaleset Manage Azure virtual m... -azure_rm_virtualmachine_scaleset_facts Get Virtual Machine Sc... -azure_rm_virtualmachineimage_facts Get virtual machine im... -azure_rm_virtualnetwork Manage Azure virtual n... -azure_rm_virtualnetwork_facts Get virtual network fa... -bcf_switch Create and remove a bc... -beadm Manage ZFS boot enviro... -bearychat Send BearyChat notific... -bigip_asm_policy Manage BIG-IP ASM poli... -bigip_command Run arbitrary command ... -bigip_config Manage BIG-IP configur... -bigip_configsync_action Perform different acti... -bigip_data_group Manage data groups on ... -bigip_device_connectivity Manages device IP conf... -bigip_device_dns Manage BIG-IP device D... -bigip_device_group Manage device groups o... -bigip_device_group_member Manages members in a d... -bigip_device_httpd Manage HTTPD related s... -bigip_device_license Manage license install... -bigip_device_ntp Manage NTP servers on ... -bigip_device_sshd Manage the SSHD settin... -bigip_device_trust Manage the trust relat... -bigip_facts Collect facts from F5 ... -bigip_gtm_datacenter Manage Datacenter conf... -bigip_gtm_facts Collect facts from F5 ... -bigip_gtm_global Manages global GTM set... -bigip_gtm_monitor_bigip Manages F5 BIG-IP GTM ... -bigip_gtm_monitor_external Manages external GTM m... -bigip_gtm_monitor_firepass Manages F5 BIG-IP GTM ... -bigip_gtm_monitor_http Manages F5 BIG-IP GTM ... -bigip_gtm_monitor_https Manages F5 BIG-IP GTM ... -bigip_gtm_monitor_tcp Manages F5 BIG-IP GTM ... -bigip_gtm_monitor_tcp_half_open Manages F5 BIG-IP GTM ... -bigip_gtm_pool Manages F5 BIG-IP GTM ... -bigip_gtm_pool_member Manage GTM pool member... -bigip_gtm_server Manages F5 BIG-IP GTM ... -bigip_gtm_virtual_server Manages F5 BIG-IP GTM ... -bigip_gtm_wide_ip Manages F5 BIG-IP GTM ... -bigip_hostname Manage the hostname of... -bigip_iapp_service Manages TCL iApp servi... -bigip_iapp_template Manages TCL iApp templ... -bigip_iapplx_package Manages Javascript iAp... -bigip_irule Manage iRules across d... -bigip_log_destination Manages log destinatio... -bigip_log_publisher Manages log publishers... -bigip_management_route Manage system manageme... -bigip_monitor_external Manages external LTM m... -bigip_monitor_http Manages F5 BIG-IP LTM ... -bigip_monitor_https Manages F5 BIG-IP LTM ... -bigip_monitor_snmp_dca Manages BIG-IP SNMP da... -bigip_monitor_tcp Manages F5 BIG-IP LTM ... -bigip_monitor_tcp_echo Manages F5 BIG-IP LTM ... -bigip_monitor_tcp_half_open Manages F5 BIG-IP LTM ... -bigip_monitor_udp Manages F5 BIG-IP LTM ... -bigip_node Manages F5 BIG-IP LTM ... -bigip_partition Manage BIG-IP partitio... -bigip_policy Manage general policy ... -bigip_policy_rule Manage LTM policy rule... -bigip_pool Manages F5 BIG-IP LTM ... -bigip_pool_member Manages F5 BIG-IP LTM ... -bigip_profile_client_ssl Manages client SSL pro... -bigip_profile_dns Manage DNS profiles on... -bigip_profile_tcp Manage TCP profiles on... -bigip_profile_udp Manage UDP profiles on... -bigip_provision Manage BIG-IP module p... -bigip_qkview Manage qkviews on the ... -bigip_remote_syslog Manipulate remote sysl... -bigip_routedomain Manage route domains o... -bigip_security_address_list Manage address lists o... -bigip_security_port_list Manage port lists on B... -bigip_selfip Manage Self-IPs on a B... -bigip_service_policy Manages service polici... -bigip_smtp Manages SMTP settings ... -bigip_snat_pool Manage SNAT pools on a... -bigip_snmp Manipulate general SNM... -bigip_snmp_community Manages SNMP communiti... -bigip_snmp_trap Manipulate SNMP trap i... -bigip_software_update Manage the software up... -bigip_ssl_certificate Import/Delete certific... -bigip_ssl_key Import/Delete SSL keys... -bigip_static_route Manipulate static rout... -bigip_sys_db Manage BIG-IP system d... -bigip_sys_global Manage BIG-IP global s... -bigip_timer_policy Manage timer policies ... -bigip_traffic_group Manages traffic groups... -bigip_trunk Manage trunks on a BIG... -bigip_ucs Manage upload, install... -bigip_ucs_fetch Fetches a UCS file fro... -bigip_user Manage user accounts a... -bigip_vcmp_guest Manages vCMP guests on... -bigip_virtual_address Manage LTM virtual add... -bigip_virtual_server Manage LTM virtual ser... -bigip_vlan Manage VLANs on a BIG-... -bigip_wait Wait for a BIG-IP cond... -bigiq_application_fasthttp Manages BIG-IQ FastHTT... -bigiq_application_fastl4_tcp Manages BIG-IQ FastL4 ... -bigiq_application_fastl4_udp Manages BIG-IQ FastL4 ... -bigiq_application_http Manages BIG-IQ HTTP ap... -bigiq_application_https_offload Manages BIG-IQ HTTPS o... -bigiq_application_https_waf Manages BIG-IQ HTTPS W... -bigiq_regkey_license Manages licenses in a ... -bigiq_regkey_license_assignment Manage regkey license ... -bigiq_regkey_pool Manages registration k... -bigiq_utility_license Manage utility license... -bigmon_chain Create and remove a bi... -bigmon_policy Create and remove a bi... -bigpanda Notify BigPanda about ... -blockinfile Insert/update/remove a... -bower Manage bower packages ... -bundler Manage Ruby Gem depend... -bzr Deploy software (or fi... -campfire Send a message to Camp... -capabilities Manage Linux capabilit... -catapult Send a sms / mms using... -ce_aaa_server Manages AAA server glo... -ce_aaa_server_host Manages AAA server hos... -ce_acl Manages base ACL confi... -ce_acl_advance Manages advanced ACL c... -ce_acl_interface Manages applying ACLs ... -ce_bfd_global Manages BFD global con... -ce_bfd_session Manages BFD session co... -ce_bfd_view Manages BFD session vi... -ce_bgp Manages BGP configurat... -ce_bgp_af Manages BGP Address-fa... -ce_bgp_neighbor Manages BGP peer confi... -ce_bgp_neighbor_af Manages BGP neighbor A... -ce_command Run arbitrary command ... -ce_config Manage Huawei CloudEng... -ce_dldp Manages global DLDP co... -ce_dldp_interface Manages interface DLDP... -ce_eth_trunk Manages Eth-Trunk inte... -ce_evpn_bd_vni Manages EVPN VXLAN Net... -ce_evpn_bgp Manages BGP EVPN confi... -ce_evpn_bgp_rr Manages RR for the VXL... -ce_evpn_global Manages global configu... -ce_facts Gets facts about HUAWE... -ce_file_copy Copy a file to a remot... -ce_info_center_debug Manages information ce... -ce_info_center_global Manages outputting log... -ce_info_center_log Manages information ce... -ce_info_center_trap Manages information ce... -ce_interface Manages physical attri... -ce_interface_ospf Manages configuration ... -ce_ip_interface Manages L3 attributes ... -ce_link_status Get interface link sta... -ce_mlag_config Manages MLAG configura... -ce_mlag_interface Manages MLAG interface... -ce_mtu Manages MTU settings o... -ce_netconf Run an arbitrary netco... -ce_netstream_aging Manages timeout mode o... -ce_netstream_export Manages netstream expo... -ce_netstream_global Manages global paramet... -ce_netstream_template Manages NetStream temp... -ce_ntp Manages core NTP confi... -ce_ntp_auth Manages NTP authentica... -ce_ospf Manages configuration ... -ce_ospf_vrf Manages configuration ... -ce_reboot Reboot a HUAWEI CloudE... -ce_rollback Set a checkpoint or ro... -ce_sflow Manages sFlow configur... -ce_snmp_community Manages SNMP community... -ce_snmp_contact Manages SNMP contact c... -ce_snmp_location Manages SNMP location ... -ce_snmp_target_host Manages SNMP target ho... -ce_snmp_traps Manages SNMP traps con... -ce_snmp_user Manages SNMP user conf... -ce_startup Manages a system start... -ce_static_route Manages static route c... -ce_stp Manages STP configurat... -ce_switchport Manages Layer 2 switch... -ce_vlan Manages VLAN resources... -ce_vrf Manages VPN instance o... -ce_vrf_af Manages VPN instance a... -ce_vrf_interface Manages interface spec... -ce_vrrp Manages VRRP interface... -ce_vxlan_arp Manages ARP attributes... -ce_vxlan_gateway Manages gateway for th... -ce_vxlan_global Manages global attribu... -ce_vxlan_tunnel Manages VXLAN tunnel c... -ce_vxlan_vap Manages VXLAN virtual ... -circonus_annotation create an annotation i... -cisco_spark Send a message to a Ci... -cl_bond Configures a bond port... -cl_bridge Configures a bridge po... -cl_img_install Install a different Cu... -cl_interface Configures a front pan... -cl_interface_policy Configure interface en... -cl_license Install licenses for C... -cl_ports Configure Cumulus Swit... -clc_aa_policy Create or Delete Anti ... -clc_alert_policy Create or Delete Alert... -clc_blueprint_package deploys a blue print p... -clc_firewall_policy Create/delete/update f... -clc_group Create/delete Server G... -clc_loadbalancer Create, Delete shared ... -clc_modify_server modify servers in Cent... -clc_publicip Add and Delete public ... -clc_server Create, Delete, Start ... -clc_server_snapshot Create, Delete and Res... -cloud_init_data_facts Retrieve facts of clou... -cloudflare_dns manage Cloudflare DNS ... -cloudformation Create or delete an AW... -cloudformation_facts Obtain facts about an ... -cloudfront_distribution create, update and del... -cloudfront_facts Obtain facts about an ... -cloudfront_invalidation create invalidations f... -cloudfront_origin_access_identity create, update and del... -cloudscale_floating_ip Manages floating IPs o... -cloudscale_server Manages servers on the... -cloudtrail manage CloudTrail crea... -cloudwatchevent_rule Manage CloudWatch Even... -cloudwatchlogs_log_group create or delete log_g... -cloudwatchlogs_log_group_facts get facts about log_gr... -cnos_backup Backup the current run... -cnos_bgp Manage BGP resources a... -cnos_command Run arbitrary commands... -cnos_conditional_command Execute a single comma... -cnos_conditional_template Manage switch configur... -cnos_config Manage Lenovo CNOS con... -cnos_factory Reset the switch's sta... -cnos_facts Collect facts from rem... -cnos_image Perform firmware upgra... -cnos_interface Manage interface confi... -cnos_portchannel Manage portchannel (po... -cnos_reload Perform switch restart... -cnos_rollback Roll back the running ... -cnos_save Save the running confi... -cnos_showrun Collect the current ru... -cnos_template Manage switch configur... -cnos_vlag Manage VLAG resources ... -cnos_vlan Manage VLAN resources ... -command Executes a command on ... -composer Dependency Manager for... -consul Add, modify & delete s... -consul_acl Manipulate Consul ACL ... -consul_kv Manipulate entries in ... -consul_session Manipulate consul sess... -copy Copies files to remote... -cpanm Manages Perl library d... -cron Manage cron.d and cron... -cronvar Manage variables in cr... -crypttab Encrypted Linux block ... -cs_account Manages accounts on Ap... -cs_affinitygroup Manages affinity group... -cs_cluster Manages host clusters ... -cs_configuration Manages configuration ... -cs_domain Manages domains on Apa... -cs_facts Gather facts on instan... -cs_firewall Manages firewall rules... -cs_host Manages hosts on Apach... -cs_instance Manages instances and ... -cs_instance_facts Gathering facts from t... -cs_instance_nic Manages NICs of an ins... -cs_instance_nic_secondaryip Manages secondary IPs ... -cs_instancegroup Manages instance group... -cs_ip_address Manages public IP addr... -cs_iso Manages ISO images on ... -cs_loadbalancer_rule Manages load balancer ... -cs_loadbalancer_rule_member Manages load balancer ... -cs_network Manages networks on Ap... -cs_network_acl Manages network access... -cs_network_acl_rule Manages network access... -cs_network_offering Manages network offeri... -cs_nic Manages NICs and secon... -cs_pod Manages pods on Apache... -cs_portforward Manages port forwardin... -cs_project Manages projects on Ap... -cs_region Manages regions on Apa... -cs_resourcelimit Manages resource limit... -cs_role Manages user roles on ... -cs_role_permission Manages role permissio... -cs_router Manages routers on Apa... -cs_securitygroup Manages security group... -cs_securitygroup_rule Manages security group... -cs_service_offering Manages service offeri... -cs_snapshot_policy Manages volume snapsho... -cs_sshkeypair Manages SSH keys on Ap... -cs_staticnat Manages static NATs on... -cs_storage_pool Manages Primary Storag... -cs_template Manages templates on A... -cs_user Manages users on Apach... -cs_vmsnapshot Manages VM snapshots o... -cs_volume Manages volumes on Apa... -cs_vpc Manages VPCs on Apache... -cs_vpc_offering Manages vpc offerings ... -cs_vpn_connection Manages site-to-site V... -cs_vpn_customer_gateway Manages site-to-site V... -cs_vpn_gateway Manages site-to-site V... -cs_zone Manages zones on Apach... -cs_zone_facts Gathering facts of zon... -cv_server_provision Provision server port ... -cyberark_authentication Module for CyberArk Va... -cyberark_user Module for CyberArk Us... -data_pipeline Create and manage AWS ... -datadog_event Posts events to DataDo... -datadog_monitor Manages Datadog monito... -dconf Modify and read dconf ... -debconf Configure a .deb packa... -debug Print statements durin... -dellos10_command Run commands on remote... -dellos10_config Manage Dell EMC Networ... -dellos10_facts Collect facts from rem... -dellos6_command Run commands on remote... -dellos6_config Manage Dell EMC Networ... -dellos6_facts Collect facts from rem... -dellos9_command Run commands on remote... -dellos9_config Manage Dell EMC Networ... -dellos9_facts Collect facts from rem... -deploy_helper Manages some of the st... -digital_ocean Create/delete a drople... -digital_ocean_account_facts Gather facts about Dig... -digital_ocean_block_storage Create/destroy or atta... -digital_ocean_certificate Manage certificates in... -digital_ocean_certificate_facts Gather facts about Dig... -digital_ocean_domain Create/delete a DNS re... -digital_ocean_domain_facts Gather facts about Dig... -digital_ocean_floating_ip Manage DigitalOcean Fl... -digital_ocean_floating_ip_facts DigitalOcean Floating ... -digital_ocean_image_facts Gather facts about Dig... -digital_ocean_load_balancer_facts Gather facts about Dig... -digital_ocean_region_facts Gather facts about Dig... -digital_ocean_size_facts Gather facts about Dig... -digital_ocean_snapshot_facts Gather facts about Dig... -digital_ocean_sshkey Manage DigitalOcean SS... -digital_ocean_sshkey_facts DigitalOcean SSH keys ... -digital_ocean_tag Create and remove tag(... -digital_ocean_tag_facts Gather facts about Dig... -digital_ocean_volume_facts Gather facts about Dig... -dimensiondata_network Create, update, and de... -dimensiondata_vlan Manage a VLAN in a Clo... -django_manage Manages a Django appli... -dladm_etherstub Manage etherstubs on S... -dladm_iptun Manage IP tunnel inter... -dladm_linkprop Manage link properties... -dladm_vlan Manage VLAN interfaces... -dladm_vnic Manage VNICs on Solari... -dnf Manages packages with ... -dnsimple Interface with dnsimpl... -dnsmadeeasy Interface with dnsmade... -docker manage docker containe... -docker_container manage docker containe... -docker_image Manage docker images. -docker_image_facts Inspect docker images -docker_login Log into a Docker regi... -docker_network Manage Docker networks -docker_secret Manage docker secrets. -docker_service Manage docker services... -docker_volume Manage Docker volumes -dpkg_selections Dpkg package selection... -dynamodb_table Create, update or dele... -dynamodb_ttl set TTL for a given Dy... -easy_install Installs Python librar... -ec2 create, terminate, sta... -ec2_ami create or destroy an i... -ec2_ami_copy copies AMI between AWS... -ec2_ami_facts Gather facts about ec2... -ec2_ami_find Searches for AMIs to o... -ec2_ami_search Retrieve AWS AMI infor... -ec2_asg Create or delete AWS A... -ec2_asg_facts Gather facts about ec2... -ec2_asg_lifecycle_hook Create, delete or upda... -ec2_customer_gateway Manage an AWS customer... -ec2_customer_gateway_facts Gather facts about cus... -ec2_eip manages EC2 elastic IP... -ec2_eip_facts List EC2 EIP details -ec2_elb De-registers or regist... -ec2_elb_facts Gather facts about EC2... -ec2_elb_lb Creates or destroys Am... -ec2_eni Create and optionally ... -ec2_eni_facts Gather facts about ec2... -ec2_group maintain an ec2 VPC se... -ec2_group_facts Gather facts about ec2... -ec2_instance Create & manage EC2 in... -ec2_instance_facts Gather facts about ec2... -ec2_key create or delete an ec... -ec2_lc Create or delete AWS A... -ec2_lc_facts Gather facts about AWS... -ec2_lc_find Find AWS Autoscaling L... -ec2_metadata_facts Gathers facts (instanc... -ec2_metric_alarm Create/update or delet... -ec2_placement_group Create or delete an EC... -ec2_placement_group_facts List EC2 Placement Gro... -ec2_remote_facts Gather facts about ec2... -ec2_scaling_policy Create or delete AWS s... -ec2_snapshot creates a snapshot fro... -ec2_snapshot_copy copies an EC2 snapshot... -ec2_snapshot_facts Gather facts about ec2... -ec2_tag create and remove tag(... -ec2_vol create and attach a vo... -ec2_vol_facts Gather facts about ec2... -ec2_vpc configure AWS virtual ... -ec2_vpc_dhcp_option Manages DHCP Options, ... -ec2_vpc_dhcp_option_facts Gather facts about dhc... -ec2_vpc_egress_igw Manage an AWS VPC Egre... -ec2_vpc_endpoint Create and delete AWS ... -ec2_vpc_endpoint_facts Retrieves AWS VPC endp... -ec2_vpc_igw Manage an AWS VPC Inte... -ec2_vpc_igw_facts Gather facts about int... -ec2_vpc_nacl create and delete Netw... -ec2_vpc_nacl_facts Gather facts about Net... -ec2_vpc_nat_gateway Manage AWS VPC NAT Gat... -ec2_vpc_nat_gateway_facts Retrieves AWS VPC Mana... -ec2_vpc_net Configure AWS virtual ... -ec2_vpc_net_facts Gather facts about ec2... -ec2_vpc_peer create, delete, accept... -ec2_vpc_peering_facts Retrieves AWS VPC Peer... -ec2_vpc_route_table Manage route tables fo... -ec2_vpc_route_table_facts Gather facts about ec2... -ec2_vpc_subnet Manage subnets in AWS ... -ec2_vpc_subnet_facts Gather facts about ec2... -ec2_vpc_vgw Create and delete AWS ... -ec2_vpc_vgw_facts Gather facts about vir... -ec2_vpc_vpn Create, modify, and de... -ec2_vpc_vpn_facts Gather facts about VPN... -ec2_win_password gets the default admin... -ecs_attribute manage ecs attributes -ecs_cluster create or terminate ec... -ecs_ecr Manage Elastic Contain... -ecs_service create, terminate, sta... -ecs_service_facts list or describe servi... -ecs_task run, start or stop a t... -ecs_taskdefinition register a task defini... -ecs_taskdefinition_facts describe a task defini... -edgeos_command Run one or more comman... -edgeos_config Manage EdgeOS configur... -edgeos_facts Collect facts from rem... -efs create and maintain EF... -efs_facts Get information about ... -ejabberd_user Manages users for ejab... -elasticache Manage cache clusters ... -elasticache_facts Retrieve facts for AWS... -elasticache_parameter_group Manage cache security ... -elasticache_snapshot Manage cache snapshots... -elasticache_subnet_group manage Elasticache sub... -elasticsearch_plugin Manage Elasticsearch p... -elb_application_lb Manage an Application ... -elb_application_lb_facts Gather facts about app... -elb_classic_lb Creates or destroys Am... -elb_classic_lb_facts Gather facts about EC2... -elb_instance De-registers or regist... -elb_network_lb Manage a Network Load ... -elb_target Manage a target in a t... -elb_target_group Manage a target group ... -elb_target_group_facts Gather facts about ELB... -enos_command Run arbitrary commands... -enos_config Manage Lenovo ENOS con... -enos_facts Collect facts from rem... -eos_banner Manage multiline banne... -eos_command Run arbitrary commands... -eos_config Manage Arista EOS conf... -eos_eapi Manage and configure A... -eos_facts Collect facts from rem... -eos_interface Manage Interface on Ar... -eos_l2_interface Manage L2 interfaces o... -eos_l3_interface Manage L3 interfaces o... -eos_linkagg Manage link aggregatio... -eos_lldp Manage LLDP configurat... -eos_logging Manage logging on netw... -eos_static_route Manage static IP route... -eos_system Manage the system attr... -eos_user Manage the collection ... -eos_vlan Manage VLANs on Arista... -eos_vrf Manage VRFs on Arista ... -etcd3 Set or delete key valu... -execute_lambda Execute an AWS Lambda ... -exo_dns_domain Manages domain records... -exo_dns_record Manages DNS records on... -exos_command Run commands on remote... -expect Executes a command and... -facter Runs the discovery pro... -fail Fail with custom messa... -fetch Fetches a file from re... -file Sets attributes of fil... -filesystem Makes a filesystem -find Return a list of files... -firewalld Manage arbitrary ports... -flatpak Manage flatpaks -flatpak_remote Manage flatpak reposit... -flowadm Manage bandwidth resou... -flowdock Send a message to a fl... -fmgr_script Add/Edit/Delete and ex... -foreman Manage Foreman Resourc... -fortios_address Manage fortios firewal... -fortios_config Manage config on Forti... -fortios_ipv4_policy Manage IPv4 policy obj... -fortios_webfilter Configure webfilter ca... -gc_storage This module manages ob... -gcdns_record Creates or removes res... -gcdns_zone Creates or removes zon... -gce create or terminate GC... -gce_eip Create or Destroy Glob... -gce_img utilize GCE image reso... -gce_instance_template create or destroy inst... -gce_labels Create, Update or Dest... -gce_lb create/destroy GCE loa... -gce_mig Create, Update or Dest... -gce_net create/destroy GCE net... -gce_pd utilize GCE persistent... -gce_snapshot Create or destroy snap... -gce_tag add or remove tag(s) t... -gconftool2 Edit GNOME Configurati... -gcp_backend_service Create or Destroy a Ba... -gcp_compute_address Creates a GCP Address -gcp_compute_backend_bucket Creates a GCP BackendB... -gcp_compute_backend_service Creates a GCP BackendS... -gcp_compute_disk Creates a GCP Disk -gcp_compute_firewall Creates a GCP Firewall -gcp_compute_forwarding_rule Creates a GCP Forwardi... -gcp_compute_global_address Creates a GCP GlobalAd... -gcp_compute_global_forwarding_rule Creates a GCP GlobalFo... -gcp_compute_health_check Creates a GCP HealthCh... -gcp_compute_http_health_check Creates a GCP HttpHeal... -gcp_compute_https_health_check Creates a GCP HttpsHea... -gcp_compute_image Creates a GCP Image -gcp_compute_instance Creates a GCP Instance -gcp_compute_instance_group Creates a GCP Instance... -gcp_compute_instance_group_manager Creates a GCP Instance... -gcp_compute_instance_template Creates a GCP Instance... -gcp_compute_network Creates a GCP Network -gcp_compute_route Creates a GCP Route -gcp_compute_ssl_certificate Creates a GCP SslCerti... -gcp_compute_subnetwork Creates a GCP Subnetwo... -gcp_compute_target_http_proxy Creates a GCP TargetHt... -gcp_compute_target_https_proxy Creates a GCP TargetHt... -gcp_compute_target_pool Creates a GCP TargetPo... -gcp_compute_target_ssl_proxy Creates a GCP TargetSs... -gcp_compute_target_tcp_proxy Creates a GCP TargetTc... -gcp_compute_url_map Creates a GCP UrlMap -gcp_container_cluster Creates a GCP Cluster -gcp_container_node_pool Creates a GCP NodePool -gcp_dns_managed_zone Creates a GCP ManagedZ... -gcp_dns_resource_record_set Creates a GCP Resource... -gcp_forwarding_rule Create, Update or Dest... -gcp_healthcheck Create, Update or Dest... -gcp_pubsub_subscription Creates a GCP Subscrip... -gcp_pubsub_topic Creates a GCP Topic -gcp_storage_bucket Creates a GCP Bucket -gcp_storage_bucket_access_control Creates a GCP BucketAc... -gcp_target_proxy Create, Update or Dest... -gcp_url_map Create, Update or Dest... -gcpubsub Create and Delete Topi... -gcpubsub_facts List Topics/Subscripti... -gcspanner Create and Delete Inst... -gem Manage Ruby gems -get_url Downloads files from H... -getent A wrapper to the unix ... -git Deploy software (or fi... -git_config Read and write git con... -github_deploy_key Manages deploy keys fo... -github_hooks Manages GitHub service... -github_issue View GitHub issue. -github_key Manage GitHub access k... -github_release Interact with GitHub R... -gitlab_deploy_key Manages GitLab project... -gitlab_group Creates/updates/delete... -gitlab_hooks Manages GitLab project... -gitlab_project Creates/updates/delete... -gitlab_user Creates/updates/delete... -gluster_peer Attach/Detach peers to... -gluster_volume Manage GlusterFS volum... -grafana_dashboard Manage Grafana dashboa... -grafana_datasource Manage Grafana datasou... -grafana_plugin Manage Grafana plugins... -group Add or remove groups -group_by Create Ansible groups ... -grove Sends a notification t... -gunicorn Run gunicorn with vari... -hall Send notification to H... -haproxy Enable, disable, and s... -helm Manages Kubernetes pac... -heroku_collaborator Add or delete app coll... -hg Manages Mercurial (hg)... -hipchat Send a message to Hipc... -homebrew Package manager for Ho... -homebrew_cask Install/uninstall home... -homebrew_tap Tap a Homebrew reposit... -honeybadger_deployment Notify Honeybadger.io ... -hostname Manage hostname -hpilo_boot Boot system using spec... -hpilo_facts Gather facts through a... -hponcfg Configure HP iLO inter... -htpasswd manage user files for ... -iam Manage IAM users, grou... -iam_cert Manage server certific... -iam_group Manage AWS IAM groups -iam_managed_policy Manage User Managed IA... -iam_mfa_device_facts List the MFA (Multi-Fa... -iam_policy Manage IAM policies fo... -iam_role Manage AWS IAM roles -iam_role_facts Gather information on ... -iam_server_certificate_facts Retrieve the facts of ... -iam_user Manage AWS IAM users -icinga2_feature Manage Icinga2 feature -icinga2_host Manage a host in Icing... -imc_rest Manage Cisco IMC hardw... -imgadm Manage SmartOS images -import_playbook Import a playbook -import_role Import a role into a p... -import_tasks Import a task list -include Include a play or task... -include_role Load and execute a rol... -include_tasks Dynamically include a ... -include_vars Load variables from fi... -infini_export Create, Delete or Modi... -infini_export_client Create, Delete or Modi... -infini_fs Create, Delete or Modi... -infini_host Create, Delete and Mod... -infini_pool Create, Delete and Mod... -infini_vol Create, Delete or Modi... -infinity manage Infinity IPAM u... -influxdb_database Manage InfluxDB databa... -influxdb_query Query data points from... -influxdb_retention_policy Manage InfluxDB retent... -influxdb_user Manage InfluxDB users -influxdb_write Write data points into... -ini_file Tweak settings in INI ... -interfaces_file Tweak settings in /etc... -ios_banner Manage multiline banne... -ios_command Run commands on remote... -ios_config Manage Cisco IOS confi... -ios_facts Collect facts from rem... -ios_interface Manage Interface on Ci... -ios_l2_interface Manage Layer-2 interfa... -ios_l3_interface Manage L3 interfaces o... -ios_linkagg Manage link aggregatio... -ios_lldp Manage LLDP configurat... -ios_logging Manage logging on netw... -ios_ping Tests reachability usi... -ios_static_route Manage static IP route... -ios_system Manage the system attr... -ios_user Manage the aggregate o... -ios_vlan Manage VLANs on IOS ne... -ios_vrf Manage the collection ... -iosxr_banner Manage multiline banne... -iosxr_command Run commands on remote... -iosxr_config Manage Cisco IOS XR co... -iosxr_facts Collect facts from rem... -iosxr_interface Manage Interface on Ci... -iosxr_logging Configuration manageme... -iosxr_netconf Configures NetConf sub... -iosxr_system Manage the system attr... -iosxr_user Manage the aggregate o... -ip_netns Manage network namespa... -ipa_dnsrecord Manage FreeIPA DNS rec... -ipa_dnszone Manage FreeIPA DNS Zon... -ipa_group Manage FreeIPA group -ipa_hbacrule Manage FreeIPA HBAC ru... -ipa_host Manage FreeIPA host -ipa_hostgroup Manage FreeIPA host-gr... -ipa_role Manage FreeIPA role -ipa_service Manage FreeIPA service -ipa_subca Manage FreeIPA Lightwe... -ipa_sudocmd Manage FreeIPA sudo co... -ipa_sudocmdgroup Manage FreeIPA sudo co... -ipa_sudorule Manage FreeIPA sudo ru... -ipa_user Manage FreeIPA users -ipadm_addr Manage IP addresses on... -ipadm_addrprop Manage IP address prop... -ipadm_if Manage IP interfaces ... -ipadm_ifprop Manage IP interface pr... -ipadm_prop Manage protocol proper... -ipify_facts Retrieve the public IP... -ipinfoio_facts Retrieve IP geolocatio... -ipmi_boot Management of order of... -ipmi_power Power management for m... -iptables Modify the systems ipt... -irc Send a message to an I... -ironware_command Run arbitrary commands... -ironware_config Manage configuration s... -ironware_facts Collect facts from dev... -iso_extract Extract files from an ... -jabber Send a message to jabb... -java_cert Uses keytool to import... -jboss deploy applications to... -jenkins_job Manage jenkins jobs -jenkins_job_facts Get facts about Jenkin... -jenkins_plugin Add or remove Jenkins ... -jenkins_script Executes a groovy scri... -jira create and modify issu... -junos_banner Manage multiline banne... -junos_command Run arbitrary commands... -junos_config Manage configuration o... -junos_facts Collect facts from rem... -junos_interface Manage Interface on Ju... -junos_l2_interface Manage Layer-2 interfa... -junos_l3_interface Manage L3 interfaces o... -junos_linkagg Manage link aggregatio... -junos_lldp Manage LLDP configurat... -junos_lldp_interface Manage LLDP interfaces... -junos_logging Manage logging on netw... -junos_netconf Configures the Junos N... -junos_package Installs packages on r... -junos_rpc Runs an arbitrary RPC ... -junos_scp Transfer files from or... -junos_static_route Manage static IP route... -junos_system Manage the system attr... -junos_user Manage local user acco... -junos_vlan Manage VLANs on Junipe... -junos_vrf Manage the VRF definit... -k8s Manage Kubernetes (K8s... -k8s_scale Set a new size for a D... -katello Manage Katello Resourc... -kernel_blacklist Blacklist kernel modul... -keycloak_client Allows administration ... -keycloak_clienttemplate Allows administration ... -kibana_plugin Manage Kibana plugins -kinesis_stream Manage a Kinesis Strea... -known_hosts Add or remove a host f... -kubernetes Manage Kubernetes reso... -lambda Manage AWS Lambda func... -lambda_alias Creates, updates or de... -lambda_event Creates, updates or de... -lambda_facts Gathers AWS Lambda fun... -lambda_policy Creates, updates or de... -layman Manage Gentoo overlays -ldap_attr Add or remove LDAP att... -ldap_entry Add or remove LDAP ent... -ldap_passwd Set passwords in LDAP. -librato_annotation create an annotation i... -lightsail Create or delete a vir... -lineinfile Manage lines in text f... -linode Manage instances on th... -lldp get details reported b... -locale_gen Creates or removes loc... -logentries Module for tracking lo... -logentries_msg Send a message to loge... -logicmonitor Manage your LogicMonit... -logicmonitor_facts Collect facts about Lo... -logstash_plugin Manage Logstash plugin... -lvg Configure LVM volume g... -lvol Configure LVM logical ... -lxc_container Manage LXC Containers -lxd_container Manage LXD Containers -lxd_profile Manage LXD profiles -macports Package manager for Ma... -mail Send an email -make Run targets in a Makef... -manageiq_alert_profiles Configuration of alert... -manageiq_alerts Configuration of alert... -manageiq_policies Management of resource... -manageiq_provider Management of provider... -manageiq_tags Management of resource... -manageiq_user Management of users in... -mattermost Send Mattermost notifi... -maven_artifact Downloads an Artifact ... -memset_dns_reload Request reload of Mems... -memset_zone Creates and deletes Me... -memset_zone_domain Create and delete doma... -memset_zone_record Create and delete reco... -meraki_admin Manage administrators ... -meraki_network Manage networks in the... -meraki_organization Manage organizations i... -meraki_snmp Manage organizations i... -meta Execute Ansible 'actio... -mksysb Generates AIX mksysb r... -modprobe Load or unload kernel ... -mongodb_parameter Change an administrati... -mongodb_user Adds or removes a user... -monit Manage the state of a ... -mount Control active and con... -mqtt Publish a message on a... -mssql_db Add or remove MSSQL da... -mysql_db Add or remove MySQL da... -mysql_replication Manage MySQL replicati... -mysql_user Adds or removes a user... -mysql_variables Manage MySQL global va... -na_cdot_aggregate Manage NetApp cDOT agg... -na_cdot_license Manage NetApp cDOT pro... -na_cdot_lun Manage NetApp cDOT lu... -na_cdot_qtree Manage qtrees -na_cdot_svm Manage NetApp cDOT svm -na_cdot_user useradmin configuratio... -na_cdot_user_role useradmin configuratio... -na_cdot_volume Manage NetApp cDOT vol... -na_ontap_aggregate Manage NetApp ONTAP ag... -na_ontap_broadcast_domain Manage NetApp ONTAP br... -na_ontap_broadcast_domain_ports Manage NetApp Ontap br... -na_ontap_cifs Manage NetApp cifs-sha... -na_ontap_cifs_acl Manage NetApp cifs-sha... -na_ontap_cifs_server cifs server configurat... -na_ontap_cluster Create/Join ONTAP clus... -na_ontap_cluster_ha Manage HA status for c... -na_ontap_export_policy Manage NetApp ONTAP ex... -na_ontap_export_policy_rule Manage ONTAP Export ru... -na_ontap_igroup ONTAP iSCSI igroup con... -na_ontap_interface ONTAP LIF configuratio... -na_ontap_iscsi Manage NetApp Ontap is... -na_ontap_job_schedule Manage NetApp Ontap Jo... -na_ontap_license Manage NetApp ONTAP pr... -na_ontap_lun Manage NetApp Ontap l... -na_ontap_lun_map Manage NetApp Ontap lu... -na_ontap_net_ifgrp Create, modify, destro... -na_ontap_net_port Manage NetApp Ontap ne... -na_ontap_net_routes Manage NetApp Ontap ne... -na_ontap_net_vlan Manage NetApp Ontap ne... -na_ontap_nfs Manage Ontap NFS statu... -na_ontap_ntp Create/Delete/modify_v... -na_ontap_qtree Manage qtrees -na_ontap_service_processor_network Manage NetApp Ontap se... -na_ontap_snapshot Manage NetApp Sanpshot... -na_ontap_snmp Manage NetApp SNMP com... -na_ontap_svm Manage NetApp Ontap sv... -na_ontap_ucadapter ONTAP UC adapter confi... -na_ontap_user useradmin configuratio... -na_ontap_user_role useradmin configuratio... -na_ontap_volume Manage NetApp ONTAP vo... -na_ontap_volume_clone Manage NetApp Ontap vo... -nagios Perform common tasks i... -nclu Configure network inte... -net_banner Manage multiline banne... -net_get Copy a file from a net... -net_interface Manage Interface on ne... -net_l2_interface Manage Layer-2 interfa... -net_l3_interface Manage L3 interfaces o... -net_linkagg Manage link aggregatio... -net_lldp Manage LLDP service co... -net_lldp_interface Manage LLDP interfaces... -net_logging Manage logging on netw... -net_ping Tests reachability usi... -net_put Copy a file from Ansib... -net_static_route Manage static IP route... -net_system Manage the system attr... -net_user Manage the aggregate o... -net_vlan Manage VLANs on networ... -net_vrf Manage VRFs on network... -netact_cm_command Manage network configu... -netapp_e_amg Create, Remove, and Up... -netapp_e_amg_role Update the role of a s... -netapp_e_amg_sync Conduct synchronizatio... -netapp_e_auth Sets or updates the pa... -netapp_e_facts Get facts about NetApp... -netapp_e_flashcache Manage NetApp SSD cach... -netapp_e_host manage eseries hosts -netapp_e_hostgroup Manage NetApp Storage ... -netapp_e_lun_mapping Create or Remove LUN M... -netapp_e_snapshot_group Manage snapshot groups -netapp_e_snapshot_images Create and delete snap... -netapp_e_snapshot_volume Manage E/EF-Series sna... -netapp_e_storage_system Add/remove arrays from... -netapp_e_storagepool Manage disk groups and... -netapp_e_volume Manage storage volumes... -netapp_e_volume_copy Create volume copy pai... -netconf_config netconf device configu... -netconf_get Fetch configuration/st... -netconf_rpc Execute operations on ... -netscaler Manages Citrix NetScal... -netscaler_cs_action Manage content switchi... -netscaler_cs_policy Manage content switchi... -netscaler_cs_vserver Manage content switchi... -netscaler_gslb_service Manage gslb service en... -netscaler_gslb_site Manage gslb site entit... -netscaler_gslb_vserver Configure gslb vserver... -netscaler_lb_monitor Manage load balancing ... -netscaler_lb_vserver Manage load balancing ... -netscaler_nitro_request Issue Nitro API reques... -netscaler_save_config Save Netscaler configu... -netscaler_server Manage server configur... -netscaler_service Manage service configu... -netscaler_servicegroup Manage service group c... -netscaler_ssl_certkey Manage ssl cerificate ... -newrelic_deployment Notify newrelic about ... -nexmo Send a SMS via nexmo -nginx_status_facts Retrieve nginx status ... -nios_dns_view Configure Infoblox NIO... -nios_host_record Configure Infoblox NIO... -nios_network Configure Infoblox NIO... -nios_network_view Configure Infoblox NIO... -nios_zone Configure Infoblox NIO... -nmcli Manage Networking -nosh Manage services with n... -npm Manage node.js package... -nso_action Executes Cisco NSO act... -nso_config Manage Cisco NSO confi... -nso_query Query data from Cisco ... -nso_show Displays data from Cis... -nso_verify Verifies Cisco NSO con... -nsupdate Manage DNS records. -nuage_vspk Manage Nuage VSP envir... -nxos_aaa_server Manages AAA server glo... -nxos_aaa_server_host Manages AAA server hos... -nxos_acl Manages access list en... -nxos_acl_interface Manages applying ACLs ... -nxos_banner Manage multiline banne... -nxos_bgp Manages BGP configurat... -nxos_bgp_af Manages BGP Address-fa... -nxos_bgp_neighbor Manages BGP neighbors ... -nxos_bgp_neighbor_af Manages BGP address-fa... -nxos_command Run arbitrary command ... -nxos_config Manage Cisco NXOS conf... -nxos_evpn_global Handles the EVPN contr... -nxos_evpn_vni Manages Cisco EVPN VXL... -nxos_facts Gets facts about NX-OS... -nxos_feature Manage features in NX-... -nxos_file_copy Copy a file to a remot... -nxos_gir Trigger a graceful rem... -nxos_gir_profile_management Create a maintenance-m... -nxos_hsrp Manages HSRP configura... -nxos_igmp Manages IGMP global co... -nxos_igmp_interface Manages IGMP interface... -nxos_igmp_snooping Manages IGMP snooping ... -nxos_install_os Set boot options like ... -nxos_interface Manages physical attri... -nxos_interface_ospf Manages configuration ... -nxos_ip_interface Manages L3 attributes ... -nxos_l2_interface Manage Layer-2 interfa... -nxos_l3_interface Manage L3 interfaces o... -nxos_linkagg Manage link aggregatio... -nxos_lldp Manage LLDP configurat... -nxos_logging Manage logging on netw... -nxos_mtu Manages MTU settings o... -nxos_ntp Manages core NTP confi... -nxos_ntp_auth Manages NTP authentica... -nxos_ntp_options Manages NTP options. -nxos_nxapi Manage NXAPI configura... -nxos_ospf Manages configuration ... -nxos_ospf_vrf Manages a VRF for an O... -nxos_overlay_global Configures anycast gat... -nxos_pim Manages configuration ... -nxos_pim_interface Manages PIM interface ... -nxos_pim_rp_address Manages configuration ... -nxos_ping Tests reachability usi... -nxos_portchannel Manages port-channel i... -nxos_reboot Reboot a network devic... -nxos_rollback Set a checkpoint or ro... -nxos_smu Perform SMUs on Cisco ... -nxos_snapshot Manage snapshots of th... -nxos_snmp_community Manages SNMP community... -nxos_snmp_contact Manages SNMP contact i... -nxos_snmp_host Manages SNMP host conf... -nxos_snmp_location Manages SNMP location ... -nxos_snmp_traps Manages SNMP traps. -nxos_snmp_user Manages SNMP users for... -nxos_static_route Manages static route c... -nxos_switchport Manages Layer 2 switch... -nxos_system Manage the system attr... -nxos_udld Manages UDLD global co... -nxos_udld_interface Manages UDLD interface... -nxos_user Manage the collection ... -nxos_vlan Manages VLAN resources... -nxos_vpc Manages global VPC con... -nxos_vpc_interface Manages interface VPC ... -nxos_vrf Manages global VRF con... -nxos_vrf_af Manages VRF AF. -nxos_vrf_interface Manages interface spec... -nxos_vrrp Manages VRRP configura... -nxos_vtp_domain Manages VTP domain con... -nxos_vtp_password Manages VTP password c... -nxos_vtp_version Manages VTP version co... -nxos_vxlan_vtep Manages VXLAN Network ... -nxos_vxlan_vtep_vni Creates a Virtual Netw... -oc Manage OpenShift Resou... -office_365_connector_card Use webhooks to create... -ohai Returns inventory data... -omapi_host Setup OMAPI hosts. -one_host Manages OpenNebula Hos... -one_image Manages OpenNebula ima... -one_image_facts Gather facts about Ope... -one_service Deploy and manage Open... -one_vm Creates or terminates ... -oneandone_firewall_policy Configure 1&1 firewall... -oneandone_load_balancer Configure 1&1 load bal... -oneandone_monitoring_policy Configure 1&1 monitori... -oneandone_private_network Configure 1&1 private ... -oneandone_public_ip Configure 1&1 public I... -oneandone_server Create, destroy, start... -oneview_datacenter_facts Retrieve facts about t... -oneview_enclosure_facts Retrieve facts about o... -oneview_ethernet_network Manage OneView Etherne... -oneview_ethernet_network_facts Retrieve the facts abo... -oneview_fc_network Manage OneView Fibre C... -oneview_fc_network_facts Retrieve the facts abo... -oneview_fcoe_network Manage OneView FCoE Ne... -oneview_fcoe_network_facts Retrieve the facts abo... -oneview_logical_interconnect_group Manage OneView Logical... -oneview_logical_interconnect_group_facts Retrieve facts about o... -oneview_network_set Manage HPE OneView Net... -oneview_network_set_facts Retrieve facts about t... -oneview_san_manager Manage OneView SAN Man... -oneview_san_manager_facts Retrieve facts about o... -onyx_bgp Configures BGP on Mell... -onyx_command Run commands on remote... -onyx_config Manage Mellanox ONYX c... -onyx_facts Collect facts from Mel... -onyx_interface Manage Interfaces on M... -onyx_l2_interface Manage Layer-2 interfa... -onyx_l3_interface Manage L3 interfaces o... -onyx_linkagg Manage link aggregatio... -onyx_lldp Manage LLDP configurat... -onyx_lldp_interface Manage LLDP interfaces... -onyx_magp Manage MAGP protocol o... -onyx_mlag_ipl Manage IPL (inter-peer... -onyx_mlag_vip Configures MLAG VIP on... -onyx_ospf Manage OSPF protocol o... -onyx_pfc_interface Manage priority flow c... -onyx_protocol Enables/Disables proto... -onyx_vlan Manage VLANs on Mellan... -open_iscsi Manage iscsi targets w... -openbsd_pkg Manage packages on Ope... -opendj_backendprop Will update the backen... -openshift_raw Manage Kubernetes (K8s... -openshift_scale Set a new size for a D... -openssl_certificate Generate and/or check ... -openssl_csr Generate OpenSSL Certi... -openssl_dhparam Generate OpenSSL Diffi... -openssl_privatekey Generate OpenSSL priva... -openssl_publickey Generate an OpenSSL pu... -openvswitch_bridge Manage Open vSwitch br... -openvswitch_db Configure open vswitch... -openvswitch_port Manage Open vSwitch po... -openwrt_init Manage services on Ope... -opkg Package manager for Op... -ordnance_config Manage Ordnance config... -ordnance_facts Collect facts from Ord... -os_auth Retrieve an auth token -os_client_config Get OpenStack Client c... -os_flavor_facts Retrieve facts about o... -os_floating_ip Add/Remove floating IP... -os_group Manage OpenStack Ident... -os_image Add/Delete images from... -os_image_facts Retrieve facts about a... -os_ironic Create/Delete Bare Met... -os_ironic_inspect Explicitly triggers ba... -os_ironic_node Activate/Deactivate Ba... -os_keypair Add/Delete a keypair f... -os_keystone_domain Manage OpenStack Ident... -os_keystone_domain_facts Retrieve facts about o... -os_keystone_endpoint Manage OpenStack Ident... -os_keystone_role Manage OpenStack Ident... -os_keystone_service Manage OpenStack Ident... -os_network Creates/removes networ... -os_networks_facts Retrieve facts about o... -os_nova_flavor Manage OpenStack compu... -os_nova_host_aggregate Manage OpenStack host ... -os_object Create or Delete objec... -os_port Add/Update/Delete port... -os_port_facts Retrieve facts about p... -os_project Manage OpenStack Proje... -os_project_access Manage OpenStack compu... -os_project_facts Retrieve facts about o... -os_quota Manage OpenStack Quota... -os_recordset Manage OpenStack DNS r... -os_router Create or delete route... -os_security_group Add/Delete security gr... -os_security_group_rule Add/Delete rule from a... -os_server Create/Delete Compute ... -os_server_action Perform actions on Com... -os_server_facts Retrieve facts about o... -os_server_group Manage OpenStack serve... -os_server_metadata Add/Update/Delete Meta... -os_server_volume Attach/Detach Volumes ... -os_stack Add/Remove Heat Stack -os_subnet Add/Remove subnet to a... -os_subnets_facts Retrieve facts about o... -os_user Manage OpenStack Ident... -os_user_facts Retrieve facts about o... -os_user_group Associate OpenStack Id... -os_user_role Associate OpenStack Id... -os_volume Create/Delete Cinder V... -os_volume_snapshot Create/Delete Cinder V... -os_zone Manage OpenStack DNS z... -osx_defaults osx_defaults allows us... -ovh_ip_loadbalancing_backend Manage OVH IP LoadBala... -ovirt oVirt/RHEV platform ma... -ovirt_affinity_group Module to manage affin... -ovirt_affinity_label Module to manage affin... -ovirt_affinity_label_facts Retrieve facts about o... -ovirt_api_facts Retrieve facts about t... -ovirt_auth Module to manage authe... -ovirt_cluster Module to manage clust... -ovirt_cluster_facts Retrieve facts about o... -ovirt_datacenter Module to manage data ... -ovirt_datacenter_facts Retrieve facts about o... -ovirt_disk Module to manage Virtu... -ovirt_disk_facts Retrieve facts about o... -ovirt_external_provider Module to manage exter... -ovirt_external_provider_facts Retrieve facts about o... -ovirt_group Module to manage group... -ovirt_group_facts Retrieve facts about o... -ovirt_host_networks Module to manage host ... -ovirt_host_pm Module to manage power... -ovirt_host_storage_facts Retrieve facts about o... -ovirt_hosts Module to manage hosts... -ovirt_hosts_facts Retrieve facts about o... -ovirt_mac_pools Module to manage MAC p... -ovirt_networks Module to manage logic... -ovirt_networks_facts Retrieve facts about o... -ovirt_nics Module to manage netwo... -ovirt_nics_facts Retrieve facts about o... -ovirt_permissions Module to manage permi... -ovirt_permissions_facts Retrieve facts about o... -ovirt_quotas Module to manage datac... -ovirt_quotas_facts Retrieve facts about o... -ovirt_scheduling_policies_facts Retrieve facts about o... -ovirt_snapshots Module to manage Virtu... -ovirt_snapshots_facts Retrieve facts about o... -ovirt_storage_connections Module to manage stora... -ovirt_storage_domains Module to manage stora... -ovirt_storage_domains_facts Retrieve facts about o... -ovirt_storage_templates_facts Retrieve facts about o... -ovirt_storage_vms_facts Retrieve facts about o... -ovirt_tags Module to manage tags ... -ovirt_tags_facts Retrieve facts about o... -ovirt_templates Module to manage virtu... -ovirt_templates_facts Retrieve facts about o... -ovirt_users Module to manage users... -ovirt_users_facts Retrieve facts about o... -ovirt_vmpools Module to manage VM po... -ovirt_vmpools_facts Retrieve facts about o... -ovirt_vms Module to manage Virtu... -ovirt_vms_facts Retrieve facts about o... -pacemaker_cluster Manage pacemaker clust... -package Generic OS package man... -package_facts package information as... -packet_device Manage a bare metal se... -packet_sshkey Create/delete an SSH k... -pacman Manage packages with `... -pagerduty Create PagerDuty maint... -pagerduty_alert Trigger, acknowledge o... -pam_limits Modify Linux PAM limit... -pamd Manage PAM Modules -panos_admin Add or modify PAN-OS u... -panos_admpwd change admin password ... -panos_cert_gen_ssh generates a self-signe... -panos_check check if PAN-OS device... -panos_commit commit firewall's cand... -panos_dag create a dynamic addre... -panos_dag_tags Create tags for DAG's ... -panos_import import file on PAN-OS ... -panos_interface configure data-port ne... -panos_lic apply authcode to a de... -panos_loadcfg load configuration on ... -panos_match_rule Test for match against... -panos_mgtconfig configure management s... -panos_nat_policy create a policy NAT ru... -panos_nat_rule create a policy NAT ru... -panos_object create/read/update/del... -panos_op execute arbitrary OP c... -panos_pg create a security prof... -panos_query_rules PANOS module that allo... -panos_restart restart a device -panos_sag Create a static addres... -panos_security_policy Create security rule p... -panos_security_rule Create security rule p... -parted Configure block device... -patch Apply patch files usin... -pause Pause playbook executi... -pear Manage pear/pecl packa... -ping Try to connect to host... -pingdom Pause/unpause Pingdom ... -pip Manages Python library... -pkg5 Manages packages with ... -pkg5_publisher Manages Solaris 11 Ima... -pkgin Package manager for Sm... -pkgng Package manager for Fr... -pkgutil Manage CSW-Packages on... -pn_cluster CLI command to create/... -pn_ospf CLI command to add/rem... -pn_ospfarea CLI command to add/rem... -pn_show Run show commands on n... -pn_trunk CLI command to create/... -pn_vlag CLI command to create/... -pn_vlan CLI command to create/... -pn_vrouter CLI command to create/... -pn_vrouterbgp CLI command to add/rem... -pn_vrouterif CLI command to add/rem... -pn_vrouterlbif CLI command to add/rem... -portage Package manager for Ge... -portinstall Installing packages fr... -postgresql_db Add or remove PostgreS... -postgresql_ext Add or remove PostgreS... -postgresql_lang Adds, removes or chang... -postgresql_privs Grant or revoke privil... -postgresql_schema Add or remove PostgreS... -postgresql_user Adds or removes a user... -profitbricks Create, destroy, start... -profitbricks_datacenter Create or destroy a Pr... -profitbricks_nic Create or Remove a NIC... -profitbricks_volume Create or destroy a vo... -profitbricks_volume_attachments Attach or detach a vol... -proxmox management of instance... -proxmox_kvm Management of Qemu(KVM... -proxmox_template management of OS templ... -proxysql_backend_servers Adds or removes mysql ... -proxysql_global_variables Gets or sets the proxy... -proxysql_manage_config Writes the proxysql co... -proxysql_mysql_users Adds or removes mysql ... -proxysql_query_rules Modifies query rules u... -proxysql_replication_hostgroups Manages replication ho... -proxysql_scheduler Adds or removes schedu... -psexec Runs commands on a rem... -pubnub_blocks PubNub blocks manageme... -pulp_repo Add or remove Pulp rep... -puppet Runs puppet -purefa_ds Configure FlashArray D... -purefa_facts Collect facts from Pur... -purefa_hg Manage hostgroups on P... -purefa_host Manage hosts on Pure S... -purefa_pg Manage protection grou... -purefa_pgsnap Manage protection grou... -purefa_snap Manage volume snapshot... -purefa_volume Manage volumes on Pure... -purefb_fs Manage filesystemon Pu... -purefb_snap Manage filesystem snap... -pushbullet Sends notifications to... -pushover Send notifications via... -rabbitmq_binding This module manages ra... -rabbitmq_exchange This module manages ra... -rabbitmq_parameter Adds or removes parame... -rabbitmq_plugin Manage RabbitMQ plugin... -rabbitmq_policy Manage the state of po... -rabbitmq_queue This module manages ra... -rabbitmq_user Adds or removes users ... -rabbitmq_vhost Manage the state of a ... -raw Executes a low-down an... -rax create / delete an ins... -rax_cbs Manipulate Rackspace C... -rax_cbs_attachments Manipulate Rackspace C... -rax_cdb create/delete or resiz... -rax_cdb_database create / delete a data... -rax_cdb_user create / delete a Rack... -rax_clb create / delete a load... -rax_clb_nodes add, modify and remove... -rax_clb_ssl Manage SSL termination... -rax_dns Manage domains on Rack... -rax_dns_record Manage DNS records on ... -rax_facts Gather facts for Racks... -rax_files Manipulate Rackspace C... -rax_files_objects Upload, download, and ... -rax_identity Load Rackspace Cloud I... -rax_keypair Create a keypair for u... -rax_meta Manipulate metadata fo... -rax_mon_alarm Create or delete a Rac... -rax_mon_check Create or delete a Rac... -rax_mon_entity Create or delete a Rac... -rax_mon_notification Create or delete a Rac... -rax_mon_notification_plan Create or delete a Rac... -rax_network create / delete an iso... -rax_queue create / delete a queu... -rax_scaling_group Manipulate Rackspace C... -rax_scaling_policy Manipulate Rackspace C... -rds create, delete, or mod... -rds_instance_facts obtain facts about one... -rds_param_group manage RDS parameter g... -rds_snapshot_facts obtain facts about one... -rds_subnet_group manage RDS database su... -redhat_subscription Manage registration an... -redis Various redis commands... -redshift create, delete, or mod... -redshift_facts Gather facts about Red... -redshift_subnet_group manage Redshift cluste... -replace Replace all instances ... -rhevm RHEV/oVirt automation -rhn_channel Adds or removes Red Ha... -rhn_register Manage Red Hat Network... -rhsm_repository Manage RHSM repositori... -riak This module handles so... -rocketchat Send notifications to ... -rollbar_deployment Notify Rollbar about a... -route53 add or delete entries ... -route53_facts Retrieves route53 deta... -route53_health_check add or delete health-c... -route53_zone add or delete Route53 ... -rpm_key Adds or removes a gpg ... -rundeck_acl_policy Manage Rundeck ACL pol... -rundeck_project Manage Rundeck project... -runit Manage runit services -s3_bucket Manage S3 buckets in A... -s3_lifecycle Manage s3 bucket lifec... -s3_logging Manage logging facilit... -s3_sync Efficiently upload mul... -s3_website Configure an s3 bucket... -say Makes a computer to sp... -scaleway_compute Scaleway compute manag... -scaleway_sshkey Scaleway SSH keys mana... -script Runs a local script on... -seboolean Toggles SELinux boolea... -sefcontext Manages SELinux file c... -selinux Change policy and stat... -selinux_permissive Change permissive doma... -sendgrid Sends an email with th... -sensu_check Manage Sensu checks -sensu_client Manages Sensu client c... -sensu_handler Manages Sensu handler ... -sensu_silence Manage Sensu silence e... -sensu_subscription Manage Sensu subscript... -seport Manages SELinux networ... -serverless Manages a Serverless F... -service Manage services -service_facts Return service state i... -set_fact Set host facts from a ... -set_stats Set stats for the curr... -setup Gathers facts about re... -sf_account_manager Manage SolidFire accou... -sf_check_connections Check connectivity to ... -sf_snapshot_schedule_manager Manage SolidFire snaps... -sf_volume_access_group_manager Manage SolidFire Volum... -sf_volume_manager Manage SolidFire volum... -shell Execute commands in no... -sl_vm create or cancel a vir... -slack Send Slack notificatio... -slackpkg Package manager for Sl... -slurp Slurps a file from rem... -slxos_command Run commands on remote... -slxos_config Manage Extreme Network... -slxos_facts Collect facts from dev... -slxos_interface Manage Interfaces on E... -slxos_l2_interface Manage Layer-2 interfa... -slxos_l3_interface Manage L3 interfaces o... -slxos_linkagg Manage link aggregatio... -slxos_vlan Manage VLANs on Extrem... -smartos_image_facts Get SmartOS image deta... -snmp_facts Retrieve facts for a d... -snow_record Create/Delete/Update r... -sns Send Amazon Simple Not... -sns_topic Manages AWS SNS topics... -solaris_zone Manage Solaris zones -sorcery Package manager for So... -spectrum_device Creates/deletes device... -spotinst_aws_elastigroup Create, update or dele... -sqs_queue Creates or deletes AWS... -sros_command Run commands on remote... -sros_config Manage Nokia SR OS dev... -sros_rollback Configure Nokia SR OS ... -stackdriver Send code deploy and a... -stacki_host Add or remove host to ... -stat Retrieve file or file ... -statusio_maintenance Create maintenance win... -sts_assume_role Assume a role using AW... -sts_session_token Obtain a session token... -subversion Deploys a subversion r... -supervisorctl Manage the state of a ... -svc Manage daemontools ser... -svr4pkg Manage Solaris SVR4 pa... -swdepot Manage packages with s... -swupd Manages updates and bu... -synchronize A wrapper around rsync... -sysctl Manage entries in sysc... -syslogger Log messages in the sy... -systemd Manage services -sysvinit Manage SysV services. -taiga_issue Creates/deletes an iss... -telegram module for sending not... -telnet Executes a low-down an... -tempfile Creates temporary file... -template Templates a file out t... -terraform Manages a Terraform de... -timezone Configure timezone set... -tower_credential create, update, or des... -tower_group create, update, or des... -tower_host create, update, or des... -tower_inventory create, update, or des... -tower_job_cancel Cancel an Ansible Towe... -tower_job_launch Launch an Ansible Job. -tower_job_list List Ansible Tower job... -tower_job_template create, update, or des... -tower_job_wait Wait for Ansible Tower... -tower_label create, update, or des... -tower_organization create, update, or des... -tower_project create, update, or des... -tower_role create, update, or des... -tower_team create, update, or des... -tower_user create, update, or des... -twilio Sends a text message t... -typetalk Send a message to type... -ucs_ip_pool Configures IP address ... -ucs_lan_connectivity Configures LAN Connect... -ucs_mac_pool Configures MAC address... -ucs_san_connectivity Configures SAN Connect... -ucs_vhba_template Configures vHBA templa... -ucs_vlans Configures VLANs on Ci... -ucs_vnic_template Configures vNIC templa... -ucs_vsans Configures VSANs on Ci... -ucs_wwn_pool Configures WWNN or WWP... -udm_dns_record Manage dns entries on ... -udm_dns_zone Manage dns zones on a ... -udm_group Manage of the posix gr... -udm_share Manage samba shares on... -udm_user Manage posix users on ... -ufw Manage firewall with U... -unarchive Unpacks an archive aft... -uptimerobot Pause and start Uptime... -uri Interacts with webserv... -urpmi Urpmi manager -user Manage user accounts -vca_fw add remove firewall ru... -vca_nat add remove nat rules i... -vca_vapp Manages vCloud Air vAp... -vcenter_folder Manage folders on give... -vcenter_license Manage VMware vCenter ... -vdirect_commit Commits pending config... -vdirect_file Uploads a new or updat... -vdirect_runnable Runs templates and wor... -vdo Module to control VDO -vertica_configuration Updates Vertica config... -vertica_facts Gathers Vertica databa... -vertica_role Adds or removes Vertic... -vertica_schema Adds or removes Vertic... -vertica_user Adds or removes Vertic... -virt Manages virtual machin... -virt_net Manage libvirt network... -virt_pool Manage libvirt storage... -vmadm Manage SmartOS virtual... -vmware_cfg_backup Backup / Restore / Res... -vmware_cluster Manage VMware vSphere ... -vmware_cluster_facts Gather facts about clu... -vmware_datacenter Manage VMware vSphere ... -vmware_datastore_cluster Manage VMware vSphere ... -vmware_datastore_facts Gather facts about dat... -vmware_datastore_maintenancemode Place a datastore into... -vmware_dns_config Manage VMware ESXi DNS... -vmware_drs_rule_facts Gathers facts about DR... -vmware_dvs_host Add or remove a host f... -vmware_dvs_portgroup Create or remove a Dis... -vmware_dvswitch Create or remove a dis... -vmware_guest Manages virtual machin... -vmware_guest_disk_facts Gather facts about dis... -vmware_guest_facts Gather facts about a s... -vmware_guest_file_operation Files operation in a V... -vmware_guest_find Find the folder path(s... -vmware_guest_powerstate Manages power states o... -vmware_guest_snapshot Manages virtual machin... -vmware_guest_snapshot_facts Gather facts about vir... -vmware_guest_tools_wait Wait for VMware tools ... -vmware_host Add / Remove ESXi host... -vmware_host_acceptance Manage acceptance leve... -vmware_host_capability_facts Gathers facts about an... -vmware_host_config_facts Gathers facts about an... -vmware_host_config_manager Manage advance configu... -vmware_host_datastore Manage a datastore on ... -vmware_host_dns_facts Gathers facts about an... -vmware_host_facts Gathers facts about re... -vmware_host_firewall_facts Gathers facts about an... -vmware_host_firewall_manager Manage firewall config... -vmware_host_lockdown Manage administrator p... -vmware_host_ntp Manage NTP configurati... -vmware_host_package_facts Gathers facts about av... -vmware_host_powerstate Manages power states o... -vmware_host_service_facts Gathers facts about an... -vmware_host_service_manager Manage services on a g... -vmware_host_vmnic_facts Gathers facts about vm... -vmware_local_role_manager Manage local roles on ... -vmware_local_user_facts Gather facts about use... -vmware_local_user_manager Manage local users on ... -vmware_maintenancemode Place a host into main... -vmware_migrate_vmk Migrate a VMK interfac... -vmware_portgroup Create a VMware portgr... -vmware_portgroup_facts Gathers facts about an... -vmware_resource_pool Add/remove resource po... -vmware_resource_pool_facts Gathers facts about re... -vmware_tag Manage VMware tags -vmware_tag_facts Manage VMware tag fact... -vmware_target_canonical_facts Return canonical (NAA)... -vmware_vm_facts Return basic facts per... -vmware_vm_shell Run commands in a VMwa... -vmware_vm_vm_drs_rule Configure VMware DRS A... -vmware_vm_vss_dvs_migrate Migrates a virtual mac... -vmware_vmkernel Manage a VMware VMkern... -vmware_vmkernel_facts Gathers VMKernel facts... -vmware_vmkernel_ip_config Configure the VMkernel... -vmware_vmotion Move a virtual machine... -vmware_vsan_cluster Configure VSAN cluster... -vmware_vswitch Manage a VMware Standa... -vmware_vswitch_facts Gathers facts about an... -vr_account_facts Gather facts about the... -vr_dns_domain Manages DNS domains on... -vr_dns_record Manages DNS records on... -vr_firewall_group Manages firewall group... -vr_firewall_rule Manages firewall rules... -vr_server Manages virtual server... -vr_ssh_key Manages ssh keys on Vu... -vr_startup_script Manages startup script... -vr_user Manages users on Vultr... -vsphere_copy Copy a file to a vCent... -vsphere_guest Create/delete/manage a... -vyos_banner Manage multiline banne... -vyos_command Run one or more comman... -vyos_config Manage VyOS configurat... -vyos_facts Collect facts from rem... -vyos_interface Manage Interface on Vy... -vyos_l3_interface Manage L3 interfaces o... -vyos_linkagg Manage link aggregatio... -vyos_lldp Manage LLDP configurat... -vyos_lldp_interface Manage LLDP interfaces... -vyos_logging Manage logging on netw... -vyos_static_route Manage static IP route... -vyos_system Run `set system` comma... -vyos_user Manage the collection ... -vyos_vlan Manage VLANs on VyOS n... -wait_for Waits for a condition ... -wait_for_connection Waits until remote sys... -wakeonlan Send a magic Wake-on-L... -webfaction_app Add or remove applicat... -webfaction_db Add or remove a databa... -webfaction_domain Add or remove domains ... -webfaction_mailbox Add or remove mailboxe... -webfaction_site Add or remove a websit... -win_acl Set file/directory/reg... -win_acl_inheritance Change ACL inheritance -win_audit_policy_system Used to make changes t... -win_audit_rule Adds an audit rule to ... -win_certificate_store Manages the certificat... -win_chocolatey Manage packages using ... -win_command Executes a command on ... -win_copy Copies files to remote... -win_defrag Consolidate fragmented... -win_disk_facts Show the attached disk... -win_disk_image Manage ISO/VHD/VHDX mo... -win_dns_client Configures DNS lookup ... -win_domain Ensures the existence ... -win_domain_computer Manage computers in Ac... -win_domain_controller Manage domain controll... -win_domain_group Creates, modifies or r... -win_domain_membership Manage domain/workgrou... -win_domain_user Manages Windows Active... -win_dotnet_ngen Runs ngen to recompile... -win_dsc Invokes a PowerShell D... -win_environment Modify environment var... -win_eventlog Manage Windows event l... -win_eventlog_entry Write entries to Windo... -win_feature Installs and uninstall... -win_file Creates, touches or re... -win_file_version Get DLL or EXE file bu... -win_find Return a list of files... -win_firewall Enable or disable the ... -win_firewall_rule Windows firewall autom... -win_get_url Downloads file from HT... -win_group Add and remove local g... -win_group_membership Manage Windows local g... -win_hostname Manages local Windows ... -win_hotfix Install and uninstalls... -win_iis_virtualdirectory Configures a virtual d... -win_iis_webapplication Configures IIS web app... -win_iis_webapppool Configure IIS Web Appl... -win_iis_webbinding Configures a IIS Web s... -win_iis_website Configures a IIS Web s... -win_lineinfile Ensure a particular li... -win_mapped_drive Map network drives for... -win_msg Sends a message to log... -win_msi Installs and uninstall... -win_nssm NSSM - the Non-Sucking... -win_owner Set owner -win_package Installs/uninstalls an... -win_pagefile Query or change pagefi... -win_path Manage Windows path en... -win_pester Run Pester tests on Wi... -win_ping A windows version of t... -win_power_plan Changes the power plan... -win_product_facts Provides Windows produ... -win_psexec Runs commands (remotel... -win_psmodule Adds or removes a Powe... -win_rabbitmq_plugin Manage RabbitMQ plugin... -win_reboot Reboot a windows machi... -win_reg_stat Get information about ... -win_regedit Add, change, or remove... -win_region Set the region and for... -win_regmerge Merges the contents of... -win_robocopy Synchronizes the conte... -win_route Add or remove a static... -win_say Text to speech module ... -win_scheduled_task Manage scheduled tasks -win_scheduled_task_stat Get information about ... -win_security_policy Change local security ... -win_service Manage and query Windo... -win_share Manage Windows shares -win_shell Execute shell commands... -win_shortcut Manage shortcuts on Wi... -win_stat Get information about ... -win_tempfile Creates temporary file... -win_template Templates a file out t... -win_timezone Sets Windows machine t... -win_toast Sends Toast windows no... -win_unzip Unzips compressed file... -win_updates Download and install W... -win_uri Interacts with webserv... -win_user Manages local Windows ... -win_user_right Manage Windows User Ri... -win_wait_for Waits for a condition ... -win_wakeonlan Send a magic Wake-on-L... -win_webpicmd Installs packages usin... -win_whoami Get information about ... -xattr Manage user defined ex... -xbps Manage packages with X... -xenserver_facts get facts reported on ... -xml Manage bits and pieces... -yarn Manage node.js package... -yum Manages packages with ... -yum_repository Add or remove YUM repo... -zabbix_group Zabbix host groups cre... -zabbix_group_facts Gather facts about Zab... -zabbix_host Zabbix host creates/up... -zabbix_hostmacro Zabbix host macro crea... -zabbix_maintenance Create Zabbix maintena... -zabbix_proxy Zabbix proxy creates/d... -zabbix_screen Zabbix screen creates/... -zabbix_template create/delete/dump zab... -zfs Manage zfs -zfs_facts Gather facts about ZFS... -znode Create, delete, retrie... -zpool_facts Gather facts about ZFS... -zypper Manage packages on SUS... -zypper_repository Add and remove Zypper ... -
    -
    -
    - -
    diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/040_Ansible_Modules/220_Modules_ansible-doc-CLI-Info.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/040_Ansible_Modules/220_Modules_ansible-doc-CLI-Info.html deleted file mode 100644 index 4efa040..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/040_Ansible_Modules/220_Modules_ansible-doc-CLI-Info.html +++ /dev/null @@ -1,208 +0,0 @@ -
    -

    Modules Documentation

    -

    Returns a thorough description of the parameters in the module.

    - -
    - -
    - ansible-doc copy 
    -
    -> COPY (/usr/lib/python2.7/site-packages/ansible/modules/files/copy.py) - - The `copy' module copies a file from the local or remote machine to a - location on the remote machine. Use the [fetch] module to copy files - from remote locations to the local box. If you need variable - interpolation in copied files, use the [template] module. For Windows - targets, use the [win_copy] module instead. - - * note: This module has a corresponding action plugin. - -OPTIONS (= is mandatory): - -- attributes - Attributes the file or directory should have. To get supported flags - look at the man page for `chattr' on the target system. This string - should contain the attributes in the same order as the one displayed by - `lsattr'. - (Aliases: attr)[Default: (null)] - version_added: 2.3 - -- backup - Create a backup file including the timestamp information so you can get - the original file back if you somehow clobbered it incorrectly. - [Default: no] - type: bool - version_added: 0.7 - -- checksum - SHA1 checksum of the file being transferred. Used to validate that the - copy of the file was successful. - If this is not provided, ansible will use the local calculated checksum - of the src file. - [Default: (null)] - version_added: 2.5 - -- content - When used instead of `src', sets the contents of a file directly to the - specified value. For anything advanced or with formatting also look at - the template module. - [Default: (null)] - version_added: 1.1 - -- decrypt - This option controls the autodecryption of source files using vault. - [Default: Yes] - type: bool - version_added: 2.4 - -= dest - Remote absolute path where the file should be copied to. If `src' is a - directory, this must be a directory too. If `dest' is a nonexistent path - and if either `dest' ends with "/" or `src' is a directory, `dest' is - created. If `src' and `dest' are files, the parent directory of `dest' - isn't created: the task fails if it doesn't already exist. - - -- directory_mode - When doing a recursive copy set the mode for the directories. If this is - not set we will use the system defaults. The mode is only set on - directories which are newly created, and will not affect those that - already existed. - [Default: (null)] - version_added: 1.5 - -- follow - This flag indicates that filesystem links in the destination, if they - exist, should be followed. - [Default: no] - type: bool - version_added: 1.8 - -- force - the default is `yes', which will replace the remote file when contents - are different than the source. If `no', the file will only be - transferred if the destination does not exist. - (Aliases: thirsty)[Default: yes] - type: bool - version_added: 1.1 - -- group - Name of the group that should own the file/directory, as would be fed to - `chown'. - [Default: (null)] - -- local_follow - This flag indicates that filesystem links in the source tree, if they - exist, should be followed. - [Default: yes] - type: bool - version_added: 2.4 - -- mode - Mode the file or directory should be. For those used to `/usr/bin/chmod' - remember that modes are actually octal numbers. You must either specify - the leading zero so that Ansible's YAML parser knows it is an octal - number (like `0644' or `01777') or quote it (like `'644'' or `'0644'' so - Ansible receives a string and can do its own conversion from string into - number. Giving Ansible a number without following one of these rules - will end up with a decimal number which will have unexpected results. - As of version 1.8, the mode may be specified as a symbolic mode (for - example, `u+rwx' or `u=rw,g=r,o=r'). As of version 2.3, the mode may - also be the special string `preserve'. `preserve' means that the file - will be given the same permissions as the source file. - [Default: (null)] - -- owner - Name of the user that should own the file/directory, as would be fed to - `chown'. - [Default: (null)] - -- remote_src - If `no', it will search for `src' at originating/master machine. - If `yes' it will go to the remote/target machine for the `src'. Default - is `no'. - Currently `remote_src' does not support recursive copying. - `remote_src' only works with `mode=preserve' as of version 2.6. - [Default: no] - type: bool - version_added: 2.0 - -- selevel - Level part of the SELinux file context. This is the MLS/MCS attribute, - sometimes known as the `range'. `_default' feature works as for - `seuser'. - [Default: s0] - -- serole - Role part of SELinux file context, `_default' feature works as for - `seuser'. - [Default: (null)] - -- setype - Type part of SELinux file context, `_default' feature works as for - `seuser'. - [Default: (null)] - -- seuser - User part of SELinux file context. Will default to system policy, if - applicable. If set to `_default', it will use the `user' portion of the - policy if available. - [Default: (null)] - -- src - Local path to a file to copy to the remote server; can be absolute or - relative. If path is a directory, it is copied recursively. In this - case, if path ends with "/", only inside contents of that directory are - copied to destination. Otherwise, if it does not end with "/", the - directory itself with all contents is copied. This behavior is similar - to Rsync. - [Default: (null)] - -- unsafe_writes - Normally this module uses atomic operations to prevent data corruption - or inconsistent reads from the target files, sometimes systems are - configured or just broken in ways that prevent this. One example are - docker mounted files, they cannot be updated atomically and can only be - done in an unsafe manner. - This boolean option allows ansible to fall back to unsafe methods of - updating files for those cases in which you do not have any other - choice. Be aware that this is subject to race conditions and can lead to - data corruption. - [Default: no] - type: bool - version_added: 2.2 - -- validate - The validation command to run before copying into place. The path to the - file to validate is passed in via '%s' which must be present as in the - example below. The command is passed securely so shell features like - expansion and pipes won't work. - [Default: (null)] - - -NOTES: - * The [copy] module recursively copy facility does not scale to lots - (>hundreds) of files. For alternative, see [synchronize] module, - which is a wrapper around `rsync'. - * For Windows targets, use the [win_copy] module instead. - -AUTHOR: Ansible Core Team, Michael DeHaan - METADATA: - status: - - stableinterface - supported_by: core - - -
    -
    -
    - - -
    diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/040_Ansible_Modules/230_Modules_ansible-doc-CLI-examples.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/040_Ansible_Modules/230_Modules_ansible-doc-CLI-examples.html deleted file mode 100644 index 42029de..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/040_Ansible_Modules/230_Modules_ansible-doc-CLI-examples.html +++ /dev/null @@ -1,140 +0,0 @@ -
    -

    Modules Documentation

    -

    Also displays usable copy / paste examples of working functional tasks with this module.

    - -
    - -
    - ansible-doc copy
    -
    - -EXAMPLES: - -- name: example copying file with owner and permissions - copy: - src: /srv/myfiles/foo.conf - dest: /etc/foo.conf - owner: foo - group: foo - mode: 0644 - -- name: The same example as above, but using a symbolic mode equivalent to 0644 - copy: - src: /srv/myfiles/foo.conf - dest: /etc/foo.conf - owner: foo - group: foo - mode: u=rw,g=r,o=r - -- name: Another symbolic mode example, adding some permissions and removing others - copy: - src: /srv/myfiles/foo.conf - dest: /etc/foo.conf - owner: foo - group: foo - mode: u+rw,g-wx,o-rwx - -- name: Copy a new "ntp.conf file into place, backing up the original if it differs from the... - copy: - src: /mine/ntp.conf - dest: /etc/ntp.conf - owner: root - group: root - mode: 0644 - backup: yes - -- name: Copy a new "sudoers" file into place, after passing validation with visudo - copy: - src: /mine/sudoers - dest: /etc/sudoers - validate: /usr/sbin/visudo -cf %s - -- name: Copy a "sudoers" file on the remote machine for editing - copy: - src: /etc/sudoers - dest: /etc/sudoers.edit - remote_src: yes - validate: /usr/sbin/visudo -cf %s - -- name: Copy using the 'content' for inline data - copy: - content: '# This file was moved to /etc/other.conf' - dest: /etc/mine.conf' - -RETURN VALUES: - - -dest: - description: destination file/path - returned: success - type: string - sample: /path/to/file.txt -src: - description: source file used for the copy on the target machine - returned: changed - type: string - sample: /home/httpd/.ansible/tmp/ansible-tmp-1423796390.97-147729857856000/source -md5sum: - description: md5 checksum of the file after running copy - returned: when supported - type: string - sample: 2a5aeecc61dc98c4d780b14b330e3282 -checksum: - description: sha1 checksum of the file after running copy - returned: success - type: string - sample: 6e642bb8dd5c2e027bf21dd923337cbb4214f827 -backup_file: - description: name of backup file created - returned: changed and if backup=yes - type: string - sample: /path/to/file.txt.2015-02-12@22:09~ -gid: - description: group id of the file, after execution - returned: success - type: int - sample: 100 -group: - description: group of the file, after execution - returned: success - type: string - sample: httpd -owner: - description: owner of the file, after execution - returned: success - type: string - sample: httpd -uid: - description: owner id of the file, after execution - returned: success - type: int - sample: 100 -mode: - description: permissions of the target, after execution - returned: success - type: string - sample: 0644 -size: - description: size of the target, after execution - returned: success - type: int - sample: 1220 -state: - description: state of the target, after execution - returned: success - type: string - sample: file -
    -
    -
    - - - -
    diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/040_Ansible_Modules/240_Modules_ansible-doc-CLI-snippets.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/040_Ansible_Modules/240_Modules_ansible-doc-CLI-snippets.html deleted file mode 100644 index dec94c1..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/040_Ansible_Modules/240_Modules_ansible-doc-CLI-snippets.html +++ /dev/null @@ -1,76 +0,0 @@ -
    -

    Modules Documentation

    -

    Starting with the snippet view, you can create your task from pre-formatted scratch.

    - -
    - -
    - ansible-doc copy -s
    -
    - -- name: Copies files to remote locations - copy: - attributes: # Attributes the file or directory should have. To get supported flags look at the man page for `chattr' on the target system. This string - should contain the attributes in the same order as the one displayed by `lsattr'. - backup: # Create a backup file including the timestamp information so you can get the original file back if you somehow clobbered it incorrectly. - checksum: # SHA1 checksum of the file being transferred. Used to validate that the copy of the file was successful. If this is not provided, ansible - will use the local calculated checksum of the src file. - content: # When used instead of `src', sets the contents of a file directly to the specified value. For anything advanced or with formatting also - look at the template module. - decrypt: # This option controls the autodecryption of source files using vault. - dest: # (required) Remote absolute path where the file should be copied to. If `src' is a directory, this must be a directory too. If `dest' is a - nonexistent path and if either `dest' ends with "/" or `src' is a directory, `dest' is created. If `src' - and `dest' are files, the parent directory of `dest' isn't created: the task fails if it doesn't already - exist. - directory_mode: # When doing a recursive copy set the mode for the directories. If this is not set we will use the system defaults. The mode is only set on - directories which are newly created, and will not affect those that already existed. - follow: # This flag indicates that filesystem links in the destination, if they exist, should be followed. - force: # the default is `yes', which will replace the remote file when contents are different than the source. If `no', the file will only be - transferred if the destination does not exist. - group: # Name of the group that should own the file/directory, as would be fed to `chown'. - local_follow: # This flag indicates that filesystem links in the source tree, if they exist, should be followed. - mode: # Mode the file or directory should be. For those used to `/usr/bin/chmod' remember that modes are actually octal numbers. You must either - specify the leading zero so that Ansible's YAML parser knows it is an octal number (like `0644' or - `01777') or quote it (like `'644'' or `'0644'' so Ansible receives a string and can do its own conversion - from string into number. Giving Ansible a number without following one of these rules will end up with a - decimal number which will have unexpected results. As of version 1.8, the mode may be specified as a - symbolic mode (for example, `u+rwx' or `u=rw,g=r,o=r'). As of version 2.3, the mode may also be the - special string `preserve'. `preserve' means that the file will be given the same permissions as the - source file. - owner: # Name of the user that should own the file/directory, as would be fed to `chown'. - remote_src: # If `no', it will search for `src' at originating/master machine. If `yes' it will go to the remote/target machine for the `src'. Default - is `no'. Currently `remote_src' does not support recursive copying. `remote_src' only works with - `mode=preserve' as of version 2.6. - selevel: # Level part of the SELinux file context. This is the MLS/MCS attribute, sometimes known as the `range'. `_default' feature works as for - `seuser'. - serole: # Role part of SELinux file context, `_default' feature works as for `seuser'. - setype: # Type part of SELinux file context, `_default' feature works as for `seuser'. - seuser: # User part of SELinux file context. Will default to system policy, if applicable. If set to `_default', it will use the `user' portion of - the policy if available. - src: # Local path to a file to copy to the remote server; can be absolute or relative. If path is a directory, it is copied recursively. In this - case, if path ends with "/", only inside contents of that directory are copied to destination. Otherwise, - if it does not end with "/", the directory itself with all contents is copied. This behavior is similar to - Rsync. - unsafe_writes: # Normally this module uses atomic operations to prevent data corruption or inconsistent reads from the target files, sometimes systems are - configured or just broken in ways that prevent this. One example are docker mounted files, they cannot be - updated atomically and can only be done in an unsafe manner. This boolean option allows ansible to fall - back to unsafe methods of updating files for those cases in which you do not have any other choice. Be - aware that this is subject to race conditions and can lead to data corruption. - validate: # The validation command to run before copying into place. The path to the file to validate is passed in via '%s' which must be present as - in the example below. The command is passed securely so shell features like expansion and pipes won't - work. - -
    -
    -
    - - - -
    diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/040_Ansible_Modules/250_ModulesDocWebSite.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/040_Ansible_Modules/250_ModulesDocWebSite.html deleted file mode 100644 index 180ecb9..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/040_Ansible_Modules/250_ModulesDocWebSite.html +++ /dev/null @@ -1,9 +0,0 @@ -
    - - -
    -

    Modules Documentation

    -
    -
    - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/040_Ansible_Modules/260_Modules_Run_Commands.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/040_Ansible_Modules/260_Modules_Run_Commands.html deleted file mode 100644 index 5b00500..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/040_Ansible_Modules/260_Modules_Run_Commands.html +++ /dev/null @@ -1,18 +0,0 @@ -
    - -

    Modules: Run Commands

    -

    If Ansible doesn't have a module that suits your needs there are the “run command” modules:


    -
      -
    • command: Takes the command and executes it on the host. The most secure and predictable.
    • -
    • shell: Executes through a shell like /bin/sh so you can use pipes etc. Be careful.
    • -
    • raw: Executes a command without going through the Ansible module subsystem.

    • -
    -


    NOTE: Unlike standard modules, run commands have no concept of desired state and should only be used as a last resort.

    - -
    - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/040_Ansible_Modules/_200_Modules_ansible-doc-CLI-LIST.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/040_Ansible_Modules/_200_Modules_ansible-doc-CLI-LIST.html deleted file mode 100644 index 2e8199c..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/040_Ansible_Modules/_200_Modules_ansible-doc-CLI-LIST.html +++ /dev/null @@ -1,25 +0,0 @@ -
    -

    Modules Documentation

    -

    Returns a list of literally every module available on the system

    - -
    -
    -
    Ansible Terminal
    -
    -
    -# List out all modules installed -- returns MANY lines
    - ansible-doc -l
    -
    -copy			Copies files to remote...
    -stat			Retrieve file or file ...
    -synchronize		A wrapper around rsync...
    -template		Templates a file out t...
    -vmware_guest		Manages virtual machin...
    -yum			Manages packages with ...
    -
    -Many, many lines have been truncated.  This is a very small sample
    -of the incredibly long list of modules.
    -    
    -
    - -
    diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/050_Ansible_Inventory/000_RedIntro-Inventory.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/050_Ansible_Inventory/000_RedIntro-Inventory.html deleted file mode 100644 index 5be3d91..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/050_Ansible_Inventory/000_RedIntro-Inventory.html +++ /dev/null @@ -1,12 +0,0 @@ -
    - -

    INVENTORY

    - -

    Define hosts on which the playbook will run.

    - - -
    - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/050_Ansible_Inventory/024__Inventory.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/050_Ansible_Inventory/024__Inventory.html deleted file mode 100644 index b162ebf..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/050_Ansible_Inventory/024__Inventory.html +++ /dev/null @@ -1,19 +0,0 @@ -
    - -

    Inventory

    -

    Inventory is a collection of hosts (nodes) with associated data and groupings that Ansible can connect and manage.

    -
      -
    • Hosts (nodes)
    • -
    • Groups
    • -
    • Inventory-specific data (variables)
    • -
    • Static or dynamic sources
    • -
    - -
    - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/050_Ansible_Inventory/025__Static_Inventory_Basic.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/050_Ansible_Inventory/025__Static_Inventory_Basic.html deleted file mode 100644 index 18ed1d3..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/050_Ansible_Inventory/025__Static_Inventory_Basic.html +++ /dev/null @@ -1,28 +0,0 @@ -
    -

    Static Inventory Example

    - -
    -
    -
    Ansible Terminal
    -
    -
    -# Static inventory example:
    -[myservers]
    -10.42.0.2
    -10.42.0.6
    -10.42.0.7
    -10.42.0.8
    -10.42.0.100
    -host.example.com
    -
    -    
    -
    - - - -
    - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/050_Ansible_Inventory/026__Static_Inventory_Advanced.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/050_Ansible_Inventory/026__Static_Inventory_Advanced.html deleted file mode 100644 index a225feb..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/050_Ansible_Inventory/026__Static_Inventory_Advanced.html +++ /dev/null @@ -1,179 +0,0 @@ -
    - -

    A MORE ADVANCED STATIC INVENTORY EXAMPLE

    - -
    -
    -
    Ansible Terminal
    -
    -
    -# A more advanced static inventory example:
    -[control]
    -mainserver ansible_host=10.42.0.2
    -
    -[web]
    -node-[1:30] ansible_host=10.42.0.[31:60]
    -
    -[haproxy]
    -haproxy ansible_host=10.42.0.100
    -
    -[all:vars]
    -ansible_user=kev
    -ansible_ssh_private_key_file=/home/kev/.ssh/id_rsa
    -    
    -
    - - -
    - - - - - - - -
    - -

    A MORE ADVANCED STATIC INVENTORY EXAMPLE

    - -
    -
    -
    Ansible Terminal
    -
    -
    -# A more advanced static inventory example:
    -[control]
    -mainserver ansible_host=10.42.0.2
    -
    -[web]
    -node-[1:30] ansible_host=10.42.0.[31:60]
    -
    -[haproxy]
    -haproxy ansible_host=10.42.0.100
    -
    -[all:vars]
    -ansible_user=kev
    -ansible_ssh_private_key_file=/home/kev/.ssh/id_rsa
    -    
    -
    - - -
    - - - -
    - -

    A MORE ADVANCED STATIC INVENTORY EXAMPLE

    - -
    -
    -
    Ansible Terminal
    -
    -
    -# A more advanced static inventory example:
    -[control]
    -mainserver ansible_host=10.42.0.2
    -
    -[web]
    -node-[1:30] ansible_host=10.42.0.[31:60]
    -
    -[haproxy]
    -haproxy ansible_host=10.42.0.100
    -
    -[all:vars]
    -ansible_user=kev
    -ansible_ssh_private_key_file=/home/kev/.ssh/id_rsa
    -    
    -
    - - -
    - - - - - - - -
    - -

    A MORE ADVANCED STATIC INVENTORY EXAMPLE

    - -
    -
    -
    Ansible Terminal
    -
    -
    -# A more advanced static inventory example:
    -[control]
    -mainserver ansible_host=10.42.0.2
    -
    -[web]
    -node-[1:30] ansible_host=10.42.0.[31:60]
    -
    -[haproxy]
    -haproxy ansible_host=10.42.0.100
    -
    -[all:vars]
    -ansible_user=kev
    -ansible_ssh_private_key_file=/home/kev/.ssh/id_rsa
    -    
    -
    - - -
    - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/050_Ansible_Inventory/027__Static_Inventory_Windows.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/050_Ansible_Inventory/027__Static_Inventory_Windows.html deleted file mode 100644 index 7b77547..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/050_Ansible_Inventory/027__Static_Inventory_Windows.html +++ /dev/null @@ -1,60 +0,0 @@ -
    - -

    A WINDOWS STATIC INVENTORY EXAMPLE

    - -
    -
    -
    Ansible Terminal
    -
    -
    -# Windows vars inventory example:
    -[winservers]
    -blueiris	ansible_host=10.10.2.20
    -winfileprd[1:3]	ansible_host=10.13.128.[7:9]
    -winwebsrv01	ansible_host=10.14.27.16
    -
    -[winservers:vars]
    -ansible_connection: winrm
    -ansible_winrm_transport: credssp
    -ansible_port: 5986
    -ansible_winrm_server_cert_validation: ignore
    -    
    -
    - - -
    - - -
    - -

    A WINDOWS STATIC INVENTORY EXAMPLE

    - -
    -
    -
    Ansible Terminal
    -
    -
    -# Windows vars inventory example:
    -[winservers]
    -blueiris	ansible_host=10.10.2.20
    -winfileprd[1:3]	ansible_host=10.13.128.[7:9]
    -winwebsrv01	ansible_host=10.14.27.16
    -
    -[winservers:vars]
    -ansible_connection: winrm                   
    -ansible_winrm_transport: credssp            
    -ansible_port: 5986                          
    -ansible_winrm_server_cert_validation: ignore
    -    
    -
    - - -
    - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/050_Ansible_Inventory/_labs/00_InventoryLabs.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/050_Ansible_Inventory/_labs/00_InventoryLabs.html deleted file mode 100644 index 614994e..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/050_Ansible_Inventory/_labs/00_InventoryLabs.html +++ /dev/null @@ -1,10 +0,0 @@ -
    -

    - -

    Take a moment to get familiar with your lab inventory. Look at the file:
    /some/path/to/something

    -
    -
    -

    - -

    Notice the items in the inventory. This vague statement will be updated soon to be more clear about what this lab involes.

    -
    diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/060_Ad-Hoc_Commands/000__Red_Slide_Ad-Hoc_Commands.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/060_Ad-Hoc_Commands/000__Red_Slide_Ad-Hoc_Commands.html deleted file mode 100644 index 33deedc..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/060_Ad-Hoc_Commands/000__Red_Slide_Ad-Hoc_Commands.html +++ /dev/null @@ -1,14 +0,0 @@ -
    - -

    AD-HOC COMMANDS

    - -

    An ad-hoc command is a single Ansible task to perform quickly, but don’t want to save for later.

    - - -
    - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/060_Ad-Hoc_Commands/029__Ad-Hoc_Commands_Common_Options.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/060_Ad-Hoc_Commands/029__Ad-Hoc_Commands_Common_Options.html deleted file mode 100644 index 796cd73..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/060_Ad-Hoc_Commands/029__Ad-Hoc_Commands_Common_Options.html +++ /dev/null @@ -1,17 +0,0 @@ -
    -

    Ad-Hoc Commands: Common Options

    -
      -
    • -m MODULE_NAME, --module-name=MODULE_NAME
      Module name to execute the ad-hoc command
    • -
    • -a MODULE_ARGS, --args=MODULE_ARGS
      Module arguments for the ad-hoc command
    • -
    • -b, --become
      Run ad-hoc command with elevated rights such as sudo, the default method
    • -
    • -e EXTRA_VARS, --extra-vars=EXTRA_VARS
      Set additional variables as key=value or YAML/JSON
    • -
    • --version
      Display the version of Ansible
    • -
    • --help
      Display the MAN page for the Ansible tool
    • -
    - -
    -
    - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/060_Ad-Hoc_Commands/030__Ad-Hoc_Commands.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/060_Ad-Hoc_Commands/030__Ad-Hoc_Commands.html deleted file mode 100644 index a2d0102..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/060_Ad-Hoc_Commands/030__Ad-Hoc_Commands.html +++ /dev/null @@ -1,29 +0,0 @@ -
    - -

    AD HOC COMMANDS

    - -
    -
    -
    Ansible Terminal
    -
    -
    -# Check connections (submarine ping, not ICMP)
    - ansible all -m ping
    -
    -# Run a command on all the hosts in the web group
    - ansible web -m command -a "uptime"
    -
    -# Collect and display known facts
    - ansible localhost -m setup
    -    
    -
    - - -
    - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/060_Ad-Hoc_Commands/035__SetupM.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/060_Ad-Hoc_Commands/035__SetupM.html deleted file mode 100644 index 05bc4b9..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/060_Ad-Hoc_Commands/035__SetupM.html +++ /dev/null @@ -1,584 +0,0 @@ -
    -

    Full Fact List

    -

    Returns a list of literally every fact available on the system

    - - - -
    - -
    - ansible myserver.mine -m setup 
    -Provides a long list of all facts known of this system
    -
    -
    -localhost | SUCCESS => { - "ansible_facts": { - "ansible_all_ipv4_addresses": [ - "10.0.20.5" - ], - "ansible_all_ipv6_addresses": [ - "fe80::4e98:35fe:3b14:33dc" - ], - "ansible_apparmor": { - "status": "disabled" - }, - "ansible_architecture": "x86_64", - "ansible_bios_date": "04/05/2016", - "ansible_bios_version": "6.00", - "ansible_cmdline": { - "BOOT_IMAGE": "/vmlinuz-3.10.0-693.21.1.el7.x86_64", - "LANG": "en_US.UTF-8", - "crashkernel": "auto", - "quiet": true, - "rhgb": true, - "ro": true, - "root": "UUID=d49a9903-d546-4981-bffb-4e5147e1199b" - }, - "ansible_date_time": { - "date": "2018-08-14", - "day": "14", - "epoch": "1534279494", - "hour": "16", - "iso8601": "2018-08-14T20:44:54Z", - "iso8601_basic": "20180814T164454915629", - "iso8601_basic_short": "20180814T164454", - "iso8601_micro": "2018-08-14T20:44:54.915745Z", - "minute": "44", - "month": "08", - "second": "54", - "time": "16:44:54", - "tz": "EDT", - "tz_offset": "-0400", - "weekday": "Tuesday", - "weekday_number": "2", - "weeknumber": "33", - "year": "2018" - }, - "ansible_default_ipv4": { - "address": "10.0.20.5", - "alias": "ens192", - "broadcast": "10.0.20.255", - "gateway": "10.0.20.1", - "interface": "ens192", - "macaddress": "00:50:56:bb:30:e8", - "mtu": 1500, - "netmask": "255.255.255.0", - "network": "10.0.20.0", - "type": "ether" - }, - "ansible_default_ipv6": {}, - "ansible_device_links": { - "ids": { - "sr0": [ - "ata-VMware_Virtual_SATA_CDRW_Drive_00000000000000000001" - ] - }, - "labels": {}, - "masters": {}, - "uuids": { - "sda1": [ - "619dcc55-451d-44be-b364-8c94278c567c" - ], - "sda2": [ - "d49a9903-d546-4981-bffb-4e5147e1199b" - ] - } - }, - "ansible_devices": { - "sda": { - "holders": [], - "host": "Serial Attached SCSI controller: VMware PVSCSI SCSI Controller (rev 02)", - "links": { - "ids": [], - "labels": [], - "masters": [], - "uuids": [] - }, - "model": "Virtual disk", - "partitions": { - "sda1": { - "holders": [], - "links": { - "ids": [], - "labels": [], - "masters": [], - "uuids": [ - "619dcc55-451d-44be-b364-8c94278c567c" - ] - }, - "sectors": "2097152", - "sectorsize": 512, - "size": "1.00 GB", - "start": "2048", - "uuid": "619dcc55-451d-44be-b364-8c94278c567c" - }, - "sda2": { - "holders": [], - "links": { - "ids": [], - "labels": [], - "masters": [], - "uuids": [ - "d49a9903-d546-4981-bffb-4e5147e1199b" - ] - }, - "sectors": "31455232", - "sectorsize": 512, - "size": "15.00 GB", - "start": "2099200", - "uuid": "d49a9903-d546-4981-bffb-4e5147e1199b" - } - }, - "removable": "0", - "rotational": "1", - "sas_address": null, - "sas_device_handle": null, - "scheduler_mode": "deadline", - "sectors": "41943040", - "sectorsize": "512", - "size": "20.00 GB", - "support_discard": "0", - "vendor": "VMware", - "virtual": 1 - }, - "sr0": { - "holders": [], - "host": "SATA controller: VMware SATA AHCI controller", - "links": { - "ids": [ - "ata-VMware_Virtual_SATA_CDRW_Drive_00000000000000000001" - ], - "labels": [], - "masters": [], - "uuids": [] - }, - "model": "VMware SATA CD00", - "partitions": {}, - "removable": "1", - "rotational": "1", - "sas_address": null, - "sas_device_handle": null, - "scheduler_mode": "cfq", - "sectors": "2097151", - "sectorsize": "512", - "size": "1024.00 MB", - "support_discard": "0", - "vendor": "NECVMWar", - "virtual": 1 - } - }, - "ansible_distribution": "CentOS", - "ansible_distribution_file_parsed": true, - "ansible_distribution_file_path": "/etc/redhat-release", - "ansible_distribution_file_variety": "RedHat", - "ansible_distribution_major_version": "7", - "ansible_distribution_release": "Core", - "ansible_distribution_version": "7.4.1708", - "ansible_dns": { - "nameservers": [ - "10.0.20.1" - ], - "search": [ - "kev" - ] - }, - "ansible_domain": "kev", - "ansible_effective_group_id": 0, - "ansible_effective_user_id": 0, - "ansible_ens192": { - "active": true, - "device": "ens192", - "features": { - "busy_poll": "off [fixed]", - "fcoe_mtu": "off [fixed]", - "generic_receive_offload": "on", - "generic_segmentation_offload": "on", - "highdma": "on", - "hw_tc_offload": "off [fixed]", - "l2_fwd_offload": "off [fixed]", - "large_receive_offload": "on", - "loopback": "off [fixed]", - "netns_local": "off [fixed]", - "ntuple_filters": "off [fixed]", - "receive_hashing": "off [fixed]", - "rx_all": "off [fixed]", - "rx_checksumming": "on", - "rx_fcs": "off [fixed]", - "rx_vlan_filter": "on [fixed]", - "rx_vlan_offload": "on", - "rx_vlan_stag_filter": "off [fixed]", - "rx_vlan_stag_hw_parse": "off [fixed]", - "scatter_gather": "on", - "tcp_segmentation_offload": "on", - "tx_checksum_fcoe_crc": "off [fixed]", - "tx_checksum_ip_generic": "on", - "tx_checksum_ipv4": "off [fixed]", - "tx_checksum_ipv6": "off [fixed]", - "tx_checksum_sctp": "off [fixed]", - "tx_checksumming": "on", - "tx_fcoe_segmentation": "off [fixed]", - "tx_gre_csum_segmentation": "off [fixed]", - "tx_gre_segmentation": "off [fixed]", - "tx_gso_partial": "off [fixed]", - "tx_gso_robust": "off [fixed]", - "tx_ipip_segmentation": "off [fixed]", - "tx_lockless": "off [fixed]", - "tx_mpls_segmentation": "off [fixed]", - "tx_nocache_copy": "off", - "tx_scatter_gather": "on", - "tx_scatter_gather_fraglist": "off [fixed]", - "tx_sctp_segmentation": "off [fixed]", - "tx_sit_segmentation": "off [fixed]", - "tx_tcp6_segmentation": "on", - "tx_tcp_ecn_segmentation": "off [fixed]", - "tx_tcp_mangleid_segmentation": "off", - "tx_tcp_segmentation": "on", - "tx_udp_tnl_csum_segmentation": "off [fixed]", - "tx_udp_tnl_segmentation": "off [fixed]", - "tx_vlan_offload": "on", - "tx_vlan_stag_hw_insert": "off [fixed]", - "udp_fragmentation_offload": "off [fixed]", - "vlan_challenged": "off [fixed]" - }, - "hw_timestamp_filters": [], - "ipv4": { - "address": "10.0.20.5", - "broadcast": "10.0.20.255", - "netmask": "255.255.255.0", - "network": "10.0.20.0" - }, - "ipv6": [ - { - "address": "fe80::4e98:35fe:3b14:33dc", - "prefix": "64", - "scope": "link" - } - ], - "macaddress": "00:50:56:bb:30:e8", - "module": "vmxnet3", - "mtu": 1500, - "pciid": "0000:0b:00.0", - "promisc": false, - "speed": 10000, - "timestamping": [ - "rx_software", - "software" - ], - "type": "ether" - }, - "ansible_env": { - "HISTCONTROL": "ignoredups", - "HISTSIZE": "1000", - "HOME": "/root", - "HOSTNAME": "myserver", - "LANG": "en_US.UTF-8", - "LESSOPEN": "||/usr/bin/lesspipe.sh %s", - "LOGNAME": "root", - "LS_COLORS": "rs=0:di=38;5;27:ln=38;5;51:mh=44;38;5;15:pi=40;38;5;11:so=38;5;13:do=38;5;5:bd=48;5;232;38;5;11:cd=48;5;232;38;5;3:or=48;5;232;38;5;9:mi=05;48;5;232;38;5;15:su=48;5;196;38;5;15:sg=48;5;11;38;5;16:ca=48;5;196;38;5;226:tw=48;5;10;38;5;16:ow=48;5;10;38;5;21:st=48;5;21;38;5;15:ex=38;5;34:*.tar=38;5;9:*.tgz=38;5;9:*.arc=38;5;9:*.arj=38;5;9:*.taz=38;5;9:*.lha=38;5;9:*.lz4=38;5;9:*.lzh=38;5;9:*.lzma=38;5;9:*.tlz=38;5;9:*.txz=38;5;9:*.tzo=38;5;9:*.t7z=38;5;9:*.zip=38;5;9:*.z=38;5;9:*.Z=38;5;9:*.dz=38;5;9:*.gz=38;5;9:*.lrz=38;5;9:*.lz=38;5;9:*.lzo=38;5;9:*.xz=38;5;9:*.bz2=38;5;9:*.bz=38;5;9:*.tbz=38;5;9:*.tbz2=38;5;9:*.tz=38;5;9:*.deb=38;5;9:*.rpm=38;5;9:*.jar=38;5;9:*.war=38;5;9:*.ear=38;5;9:*.sar=38;5;9:*.rar=38;5;9:*.alz=38;5;9:*.ace=38;5;9:*.zoo=38;5;9:*.cpio=38;5;9:*.7z=38;5;9:*.rz=38;5;9:*.cab=38;5;9:*.jpg=38;5;13:*.jpeg=38;5;13:*.gif=38;5;13:*.bmp=38;5;13:*.pbm=38;5;13:*.pgm=38;5;13:*.ppm=38;5;13:*.tga=38;5;13:*.xbm=38;5;13:*.xpm=38;5;13:*.tif=38;5;13:*.tiff=38;5;13:*.png=38;5;13:*.svg=38;5;13:*.svgz=38;5;13:*.mng=38;5;13:*.pcx=38;5;13:*.mov=38;5;13:*.mpg=38;5;13:*.mpeg=38;5;13:*.m2v=38;5;13:*.mkv=38;5;13:*.webm=38;5;13:*.ogm=38;5;13:*.mp4=38;5;13:*.m4v=38;5;13:*.mp4v=38;5;13:*.vob=38;5;13:*.qt=38;5;13:*.nuv=38;5;13:*.wmv=38;5;13:*.asf=38;5;13:*.rm=38;5;13:*.rmvb=38;5;13:*.flc=38;5;13:*.avi=38;5;13:*.fli=38;5;13:*.flv=38;5;13:*.gl=38;5;13:*.dl=38;5;13:*.xcf=38;5;13:*.xwd=38;5;13:*.yuv=38;5;13:*.cgm=38;5;13:*.emf=38;5;13:*.axv=38;5;13:*.anx=38;5;13:*.ogv=38;5;13:*.ogx=38;5;13:*.aac=38;5;45:*.au=38;5;45:*.flac=38;5;45:*.mid=38;5;45:*.midi=38;5;45:*.mka=38;5;45:*.mp3=38;5;45:*.mpc=38;5;45:*.ogg=38;5;45:*.ra=38;5;45:*.wav=38;5;45:*.axa=38;5;45:*.oga=38;5;45:*.spx=38;5;45:*.xspf=38;5;45:", - "MAIL": "/var/spool/mail/root", - "PATH": "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin", - "PWD": "/root", - "SHELL": "/bin/bash", - "SHLVL": "3", - "SSH_CLIENT": "10.0.0.74 53446 22", - "SSH_CONNECTION": "10.0.0.74 53446 10.0.20.5 22", - "SSH_TTY": "/dev/pts/0", - "TERM": "xterm-256color", - "USER": "root", - "XDG_RUNTIME_DIR": "/run/user/0", - "XDG_SESSION_ID": "270", - "_": "/usr/bin/python2" - }, - "ansible_fips": false, - "ansible_form_factor": "Other", - "ansible_fqdn": "myserver.mine", - "ansible_hostname": "myserver", - "ansible_interfaces": [ - "lo", - "ens192" - ], - "ansible_is_chroot": false, - "ansible_iscsi_iqn": "", - "ansible_kernel": "3.10.0-693.21.1.el7.x86_64", - "ansible_lo": { - "active": true, - "device": "lo", - "features": { - "busy_poll": "off [fixed]", - "fcoe_mtu": "off [fixed]", - "generic_receive_offload": "on", - "generic_segmentation_offload": "on", - "highdma": "on [fixed]", - "hw_tc_offload": "off [fixed]", - "l2_fwd_offload": "off [fixed]", - "large_receive_offload": "off [fixed]", - "loopback": "on [fixed]", - "netns_local": "on [fixed]", - "ntuple_filters": "off [fixed]", - "receive_hashing": "off [fixed]", - "rx_all": "off [fixed]", - "rx_checksumming": "on [fixed]", - "rx_fcs": "off [fixed]", - "rx_vlan_filter": "off [fixed]", - "rx_vlan_offload": "off [fixed]", - "rx_vlan_stag_filter": "off [fixed]", - "rx_vlan_stag_hw_parse": "off [fixed]", - "scatter_gather": "on", - "tcp_segmentation_offload": "on", - "tx_checksum_fcoe_crc": "off [fixed]", - "tx_checksum_ip_generic": "on [fixed]", - "tx_checksum_ipv4": "off [fixed]", - "tx_checksum_ipv6": "off [fixed]", - "tx_checksum_sctp": "on [fixed]", - "tx_checksumming": "on", - "tx_fcoe_segmentation": "off [fixed]", - "tx_gre_csum_segmentation": "off [fixed]", - "tx_gre_segmentation": "off [fixed]", - "tx_gso_partial": "off [fixed]", - "tx_gso_robust": "off [fixed]", - "tx_ipip_segmentation": "off [fixed]", - "tx_lockless": "on [fixed]", - "tx_mpls_segmentation": "off [fixed]", - "tx_nocache_copy": "off [fixed]", - "tx_scatter_gather": "on [fixed]", - "tx_scatter_gather_fraglist": "on [fixed]", - "tx_sctp_segmentation": "on", - "tx_sit_segmentation": "off [fixed]", - "tx_tcp6_segmentation": "on", - "tx_tcp_ecn_segmentation": "on", - "tx_tcp_mangleid_segmentation": "on", - "tx_tcp_segmentation": "on", - "tx_udp_tnl_csum_segmentation": "off [fixed]", - "tx_udp_tnl_segmentation": "off [fixed]", - "tx_vlan_offload": "off [fixed]", - "tx_vlan_stag_hw_insert": "off [fixed]", - "udp_fragmentation_offload": "on", - "vlan_challenged": "on [fixed]" - }, - "hw_timestamp_filters": [], - "ipv4": { - "address": "127.0.0.1", - "broadcast": "host", - "netmask": "255.0.0.0", - "network": "127.0.0.0" - }, - "ipv6": [ - { - "address": "::1", - "prefix": "128", - "scope": "host" - } - ], - "mtu": 65536, - "promisc": false, - "timestamping": [ - "rx_software", - "software" - ], - "type": "loopback" - }, - "ansible_local": { - "is_installed": { - "is_vim_installed": { - "vim": "true" - } - }, - "package_list": { - "all_kev_packages": { - "package1": "acl-2.2.51-12.el7.x86_64", - "package10": "authconfig-6.2.8-30.el7.x86_64", - "package11": "basesystem-10.0-7.el7.centos.noarch", - "package2": "aic94xx-firmware-30-6.el7.noarch", - "package3": "alsa-firmware-1.0.28-2.el7.noarch", - "package4": "alsa-lib-1.1.3-3.el7.x86_64", - "package5": "alsa-tools-firmware-1.1.0-1.el7.x86_64", - "package6": "ansible-2.6.1-1.el7.noarch", - "package7": "ansible-lint-3.4.21-1.el7.noarch", - "package8": "audit-2.7.6-3.el7.x86_64", - "package9": "audit-libs-2.7.6-3.el7.x86_64" - } - }, - "system_owner": { - "system_owner": { - "owner": "kev" - } - } - }, - "ansible_lsb": {}, - "ansible_machine": "x86_64", - "ansible_machine_id": "072bb764550746bd9695d73f43c9cf3b", - "ansible_memfree_mb": 1307, - "ansible_memory_mb": { - "nocache": { - "free": 1579, - "used": 260 - }, - "real": { - "free": 1307, - "total": 1839, - "used": 532 - }, - "swap": { - "cached": 0, - "free": 0, - "total": 0, - "used": 0 - } - }, - "ansible_memtotal_mb": 1839, - "ansible_mounts": [ - { - "block_available": 3300883, - "block_size": 4096, - "block_total": 3929344, - "block_used": 628461, - "device": "/dev/sda2", - "fstype": "xfs", - "inode_available": 7804215, - "inode_total": 7863808, - "inode_used": 59593, - "mount": "/", - "options": "rw,relatime,attr2,inode64,noquota", - "size_available": 13520416768, - "size_total": 16094593024, - "uuid": "d49a9903-d546-4981-bffb-4e5147e1199b" - }, - { - "block_available": 207739, - "block_size": 4096, - "block_total": 259584, - "block_used": 51845, - "device": "/dev/sda1", - "fstype": "xfs", - "inode_available": 523947, - "inode_total": 524288, - "inode_used": 341, - "mount": "/boot", - "options": "rw,relatime,attr2,inode64,noquota", - "size_available": 850898944, - "size_total": 1063256064, - "uuid": "619dcc55-451d-44be-b364-8c94278c567c" - } - ], - "ansible_nodename": "myserver", - "ansible_os_family": "RedHat", - "ansible_pkg_mgr": "yum", - "ansible_processor": [ - "0", - "GenuineIntel", - "Intel(R) Xeon(R) CPU X5660 @ 2.80GHz" - ], - "ansible_processor_cores": 1, - "ansible_processor_count": 1, - "ansible_processor_threads_per_core": 1, - "ansible_processor_vcpus": 1, - "ansible_product_name": "VMware Virtual Platform", - "ansible_product_serial": "VMware-42 3b 24 ce 91 e0 3a be-b1 02 3c 83 0f 86 02 e8", - "ansible_product_uuid": "CE243B42-E091-BE3A-B102-3C830F8602E8", - "ansible_product_version": "None", - "ansible_python": { - "executable": "/usr/bin/python2", - "has_sslcontext": true, - "type": "CPython", - "version": { - "major": 2, - "micro": 5, - "minor": 7, - "releaselevel": "final", - "serial": 0 - }, - "version_info": [ - 2, - 7, - 5, - "final", - 0 - ] - }, - "ansible_python_version": "2.7.5", - "ansible_real_group_id": 0, - "ansible_real_user_id": 0, - "ansible_selinux": { - "status": "disabled" - }, - "ansible_selinux_python_present": true, - "ansible_service_mgr": "systemd", - "ansible_ssh_host_key_ecdsa_public": "AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBHa2kNk4tpZ4/rXxM6969XkR29JQa91M7sSRHheXeQxmZjnRp/5o2ADQjFmXz+PouYA8PMiBU9u5Mx44oEXxDmU=", - "ansible_ssh_host_key_ed25519_public": "AAAAC3NzaC1lZDI1NTE5AAAAIE5MKxH1C+uyIHjAz48pwHj+6HdXw/9vCnc2PHRQZVND", - "ansible_ssh_host_key_rsa_public": "AAAAB3NzaC1yc2EAAAADAQABAAABAQDMNVNNOgPb+L9rnrm0D2dQWRVEjtnWAgbgVDtdixE79+jDR5TGfxuUmf74yRXM0flrdvirQtBvZjSwsj3/fUReUas0gt3LVs1b7jsxK6QeGgQCx6CCeopMgUb0JYXsMexbekZxxnpBcWAXh/Bjhko/8FpZaZhIvk0VTzQMCP7+/netcTi1m+CCCF1YhQmy8bGhN+aJuaaP2VMSDSauOFGUQUUaJkw+pjata+qWMwYemDabszkePFp0rBQEDSo6fIMlXvInm75Jf24tyb+X9+kOycGk4Rits/jXseB6j+L3rZRCX6b/F3JMNtqoBc7nybGvD/8Njn9Sl67DQUZenkcX", - "ansible_swapfree_mb": 0, - "ansible_swaptotal_mb": 0, - "ansible_system": "Linux", - "ansible_system_capabilities": [ - "cap_chown", - "cap_dac_override", - "cap_dac_read_search", - "cap_fowner", - "cap_fsetid", - "cap_kill", - "cap_setgid", - "cap_setuid", - "cap_setpcap", - "cap_linux_immutable", - "cap_net_bind_service", - "cap_net_broadcast", - "cap_net_admin", - "cap_net_raw", - "cap_ipc_lock", - "cap_ipc_owner", - "cap_sys_module", - "cap_sys_rawio", - "cap_sys_chroot", - "cap_sys_ptrace", - "cap_sys_pacct", - "cap_sys_admin", - "cap_sys_boot", - "cap_sys_nice", - "cap_sys_resource", - "cap_sys_time", - "cap_sys_tty_config", - "cap_mknod", - "cap_lease", - "cap_audit_write", - "cap_audit_control", - "cap_setfcap", - "cap_mac_override", - "cap_mac_admin", - "cap_syslog", - "35", - "36+ep" - ], - "ansible_system_capabilities_enforced": "True", - "ansible_system_vendor": "VMware, Inc.", - "ansible_uptime_seconds": 137627, - "ansible_user_dir": "/root", - "ansible_user_gecos": "root", - "ansible_user_gid": 0, - "ansible_user_id": "root", - "ansible_user_shell": "/bin/bash", - "ansible_user_uid": 0, - "ansible_userspace_architecture": "x86_64", - "ansible_userspace_bits": "64", - "ansible_virtualization_role": "guest", - "ansible_virtualization_type": "VMware", - "gather_subset": [ - "all" - ], - "module_setup": true - }, - "changed": false -} - - -
    -
    -
    - -
    diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/060_Ad-Hoc_Commands/040__SetupM-Filtered.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/060_Ad-Hoc_Commands/040__SetupM-Filtered.html deleted file mode 100644 index 40a4320..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/060_Ad-Hoc_Commands/040__SetupM-Filtered.html +++ /dev/null @@ -1,37 +0,0 @@ -
    - -

    DISCOVERED FACTS

    -
    - -
    -
    -
    Ansible Terminal
    -
    -
    -# Small filtered subset of discovered facts
    - ansible myserver.mine -m setup -a "filter=ansible_default_ipv4"
    -
    -myserver.mine | success >> {
    -  "ansible_facts": {
    -      "ansible_default_ipv4": {
    -          "address": "10.41.17.37",
    -          "alias": "eth0",
    -          "gateway": "10.41.17.1",
    -          "interface": "eth0",
    -          "macaddress": "00:69:08:3b:a9:16",
    -          "mtu": 1500,
    -          "netmask": "255.255.255.0",
    -          "network": "10.41.17.0",
    -          "type": "ether"
    -      },
    -    
    -
    - - -
    - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/060_Ad-Hoc_Commands/_028__Ad-Hoc_Commands.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/060_Ad-Hoc_Commands/_028__Ad-Hoc_Commands.html deleted file mode 100644 index 80ae8b0..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/060_Ad-Hoc_Commands/_028__Ad-Hoc_Commands.html +++ /dev/null @@ -1,11 +0,0 @@ -
    -

    Ad-Hoc Commands

    -

    An ad-hoc command is a single Ansible task to perform quickly, but don’t want to save for later.

    - -
    - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/060_Ad-Hoc_Commands/_labs/00_Lab_AdHoc_1-2-3.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/060_Ad-Hoc_Commands/_labs/00_Lab_AdHoc_1-2-3.html deleted file mode 100644 index c0ae5af..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/060_Ad-Hoc_Commands/_labs/00_Lab_AdHoc_1-2-3.html +++ /dev/null @@ -1,17 +0,0 @@ -
    -

    - -

    Ad-hoc command exercise number one

    -
    - -
    -

    - -

    Ad-hoc command exercise number two

    -
    - -
    -

    - -

    Ad-hoc command exercise number three

    -
    diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/060_Ad-Hoc_Commands/_labs/10_Terminal.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/060_Ad-Hoc_Commands/_labs/10_Terminal.html deleted file mode 100644 index 8d6552b..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/060_Ad-Hoc_Commands/_labs/10_Terminal.html +++ /dev/null @@ -1,29 +0,0 @@ -
    - -

    AD HOC COMMANDS

    - -
    -
    -
    Ansible Terminal
    -
    -
    -# Check connections (submarine ping, not ICMP)
    - ansible all -m ping
    -
    -# Run a command on all the hosts in the web group
    - ansible web -m command -a "uptime"
    -
    -# Collect and display known facts
    - ansible localhost -m setup
    -    
    -
    - - -
    - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/060_Ad-Hoc_Commands/_labs/20_Lab_AdHoc_4-5-6.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/060_Ad-Hoc_Commands/_labs/20_Lab_AdHoc_4-5-6.html deleted file mode 100644 index c59700f..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/060_Ad-Hoc_Commands/_labs/20_Lab_AdHoc_4-5-6.html +++ /dev/null @@ -1,17 +0,0 @@ -
    -

    - -

    Ad-hoc command exercise number four

    -
    - -
    -

    - -

    Ad-hoc command exercise number five

    -
    - -
    -

    - -

    Ad-hoc command exercise number six

    -
    diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/060_Ad-Hoc_Commands/setup.json b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/060_Ad-Hoc_Commands/setup.json deleted file mode 100644 index 56e3504..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/060_Ad-Hoc_Commands/setup.json +++ /dev/null @@ -1,557 +0,0 @@ -localhost | SUCCESS => { - "ansible_facts": { - "ansible_all_ipv4_addresses": [ - "10.0.20.5" - ], - "ansible_all_ipv6_addresses": [ - "fe80::4e98:35fe:3b14:33dc" - ], - "ansible_apparmor": { - "status": "disabled" - }, - "ansible_architecture": "x86_64", - "ansible_bios_date": "04/05/2016", - "ansible_bios_version": "6.00", - "ansible_cmdline": { - "BOOT_IMAGE": "/vmlinuz-3.10.0-693.21.1.el7.x86_64", - "LANG": "en_US.UTF-8", - "crashkernel": "auto", - "quiet": true, - "rhgb": true, - "ro": true, - "root": "UUID=d49a9903-d546-4981-bffb-4e5147e1199b" - }, - "ansible_date_time": { - "date": "2018-08-14", - "day": "14", - "epoch": "1534279494", - "hour": "16", - "iso8601": "2018-08-14T20:44:54Z", - "iso8601_basic": "20180814T164454915629", - "iso8601_basic_short": "20180814T164454", - "iso8601_micro": "2018-08-14T20:44:54.915745Z", - "minute": "44", - "month": "08", - "second": "54", - "time": "16:44:54", - "tz": "EDT", - "tz_offset": "-0400", - "weekday": "Tuesday", - "weekday_number": "2", - "weeknumber": "33", - "year": "2018" - }, - "ansible_default_ipv4": { - "address": "10.0.20.5", - "alias": "ens192", - "broadcast": "10.0.20.255", - "gateway": "10.0.20.1", - "interface": "ens192", - "macaddress": "00:50:56:bb:30:e8", - "mtu": 1500, - "netmask": "255.255.255.0", - "network": "10.0.20.0", - "type": "ether" - }, - "ansible_default_ipv6": {}, - "ansible_device_links": { - "ids": { - "sr0": [ - "ata-VMware_Virtual_SATA_CDRW_Drive_00000000000000000001" - ] - }, - "labels": {}, - "masters": {}, - "uuids": { - "sda1": [ - "619dcc55-451d-44be-b364-8c94278c567c" - ], - "sda2": [ - "d49a9903-d546-4981-bffb-4e5147e1199b" - ] - } - }, - "ansible_devices": { - "sda": { - "holders": [], - "host": "Serial Attached SCSI controller: VMware PVSCSI SCSI Controller (rev 02)", - "links": { - "ids": [], - "labels": [], - "masters": [], - "uuids": [] - }, - "model": "Virtual disk", - "partitions": { - "sda1": { - "holders": [], - "links": { - "ids": [], - "labels": [], - "masters": [], - "uuids": [ - "619dcc55-451d-44be-b364-8c94278c567c" - ] - }, - "sectors": "2097152", - "sectorsize": 512, - "size": "1.00 GB", - "start": "2048", - "uuid": "619dcc55-451d-44be-b364-8c94278c567c" - }, - "sda2": { - "holders": [], - "links": { - "ids": [], - "labels": [], - "masters": [], - "uuids": [ - "d49a9903-d546-4981-bffb-4e5147e1199b" - ] - }, - "sectors": "31455232", - "sectorsize": 512, - "size": "15.00 GB", - "start": "2099200", - "uuid": "d49a9903-d546-4981-bffb-4e5147e1199b" - } - }, - "removable": "0", - "rotational": "1", - "sas_address": null, - "sas_device_handle": null, - "scheduler_mode": "deadline", - "sectors": "41943040", - "sectorsize": "512", - "size": "20.00 GB", - "support_discard": "0", - "vendor": "VMware", - "virtual": 1 - }, - "sr0": { - "holders": [], - "host": "SATA controller: VMware SATA AHCI controller", - "links": { - "ids": [ - "ata-VMware_Virtual_SATA_CDRW_Drive_00000000000000000001" - ], - "labels": [], - "masters": [], - "uuids": [] - }, - "model": "VMware SATA CD00", - "partitions": {}, - "removable": "1", - "rotational": "1", - "sas_address": null, - "sas_device_handle": null, - "scheduler_mode": "cfq", - "sectors": "2097151", - "sectorsize": "512", - "size": "1024.00 MB", - "support_discard": "0", - "vendor": "NECVMWar", - "virtual": 1 - } - }, - "ansible_distribution": "CentOS", - "ansible_distribution_file_parsed": true, - "ansible_distribution_file_path": "/etc/redhat-release", - "ansible_distribution_file_variety": "RedHat", - "ansible_distribution_major_version": "7", - "ansible_distribution_release": "Core", - "ansible_distribution_version": "7.4.1708", - "ansible_dns": { - "nameservers": [ - "10.0.20.1" - ], - "search": [ - "kev" - ] - }, - "ansible_domain": "kev", - "ansible_effective_group_id": 0, - "ansible_effective_user_id": 0, - "ansible_ens192": { - "active": true, - "device": "ens192", - "features": { - "busy_poll": "off [fixed]", - "fcoe_mtu": "off [fixed]", - "generic_receive_offload": "on", - "generic_segmentation_offload": "on", - "highdma": "on", - "hw_tc_offload": "off [fixed]", - "l2_fwd_offload": "off [fixed]", - "large_receive_offload": "on", - "loopback": "off [fixed]", - "netns_local": "off [fixed]", - "ntuple_filters": "off [fixed]", - "receive_hashing": "off [fixed]", - "rx_all": "off [fixed]", - "rx_checksumming": "on", - "rx_fcs": "off [fixed]", - "rx_vlan_filter": "on [fixed]", - "rx_vlan_offload": "on", - "rx_vlan_stag_filter": "off [fixed]", - "rx_vlan_stag_hw_parse": "off [fixed]", - "scatter_gather": "on", - "tcp_segmentation_offload": "on", - "tx_checksum_fcoe_crc": "off [fixed]", - "tx_checksum_ip_generic": "on", - "tx_checksum_ipv4": "off [fixed]", - "tx_checksum_ipv6": "off [fixed]", - "tx_checksum_sctp": "off [fixed]", - "tx_checksumming": "on", - "tx_fcoe_segmentation": "off [fixed]", - "tx_gre_csum_segmentation": "off [fixed]", - "tx_gre_segmentation": "off [fixed]", - "tx_gso_partial": "off [fixed]", - "tx_gso_robust": "off [fixed]", - "tx_ipip_segmentation": "off [fixed]", - "tx_lockless": "off [fixed]", - "tx_mpls_segmentation": "off [fixed]", - "tx_nocache_copy": "off", - "tx_scatter_gather": "on", - "tx_scatter_gather_fraglist": "off [fixed]", - "tx_sctp_segmentation": "off [fixed]", - "tx_sit_segmentation": "off [fixed]", - "tx_tcp6_segmentation": "on", - "tx_tcp_ecn_segmentation": "off [fixed]", - "tx_tcp_mangleid_segmentation": "off", - "tx_tcp_segmentation": "on", - "tx_udp_tnl_csum_segmentation": "off [fixed]", - "tx_udp_tnl_segmentation": "off [fixed]", - "tx_vlan_offload": "on", - "tx_vlan_stag_hw_insert": "off [fixed]", - "udp_fragmentation_offload": "off [fixed]", - "vlan_challenged": "off [fixed]" - }, - "hw_timestamp_filters": [], - "ipv4": { - "address": "10.0.20.5", - "broadcast": "10.0.20.255", - "netmask": "255.255.255.0", - "network": "10.0.20.0" - }, - "ipv6": [ - { - "address": "fe80::4e98:35fe:3b14:33dc", - "prefix": "64", - "scope": "link" - } - ], - "macaddress": "00:50:56:bb:30:e8", - "module": "vmxnet3", - "mtu": 1500, - "pciid": "0000:0b:00.0", - "promisc": false, - "speed": 10000, - "timestamping": [ - "rx_software", - "software" - ], - "type": "ether" - }, - "ansible_env": { - "HISTCONTROL": "ignoredups", - "HISTSIZE": "1000", - "HOME": "/root", - "HOSTNAME": "kev-ansible", - "LANG": "en_US.UTF-8", - "LESSOPEN": "||/usr/bin/lesspipe.sh %s", - "LOGNAME": "root", - "LS_COLORS": "rs=0:di=38;5;27:ln=38;5;51:mh=44;38;5;15:pi=40;38;5;11:so=38;5;13:do=38;5;5:bd=48;5;232;38;5;11:cd=48;5;232;38;5;3:or=48;5;232;38;5;9:mi=05;48;5;232;38;5;15:su=48;5;196;38;5;15:sg=48;5;11;38;5;16:ca=48;5;196;38;5;226:tw=48;5;10;38;5;16:ow=48;5;10;38;5;21:st=48;5;21;38;5;15:ex=38;5;34:*.tar=38;5;9:*.tgz=38;5;9:*.arc=38;5;9:*.arj=38;5;9:*.taz=38;5;9:*.lha=38;5;9:*.lz4=38;5;9:*.lzh=38;5;9:*.lzma=38;5;9:*.tlz=38;5;9:*.txz=38;5;9:*.tzo=38;5;9:*.t7z=38;5;9:*.zip=38;5;9:*.z=38;5;9:*.Z=38;5;9:*.dz=38;5;9:*.gz=38;5;9:*.lrz=38;5;9:*.lz=38;5;9:*.lzo=38;5;9:*.xz=38;5;9:*.bz2=38;5;9:*.bz=38;5;9:*.tbz=38;5;9:*.tbz2=38;5;9:*.tz=38;5;9:*.deb=38;5;9:*.rpm=38;5;9:*.jar=38;5;9:*.war=38;5;9:*.ear=38;5;9:*.sar=38;5;9:*.rar=38;5;9:*.alz=38;5;9:*.ace=38;5;9:*.zoo=38;5;9:*.cpio=38;5;9:*.7z=38;5;9:*.rz=38;5;9:*.cab=38;5;9:*.jpg=38;5;13:*.jpeg=38;5;13:*.gif=38;5;13:*.bmp=38;5;13:*.pbm=38;5;13:*.pgm=38;5;13:*.ppm=38;5;13:*.tga=38;5;13:*.xbm=38;5;13:*.xpm=38;5;13:*.tif=38;5;13:*.tiff=38;5;13:*.png=38;5;13:*.svg=38;5;13:*.svgz=38;5;13:*.mng=38;5;13:*.pcx=38;5;13:*.mov=38;5;13:*.mpg=38;5;13:*.mpeg=38;5;13:*.m2v=38;5;13:*.mkv=38;5;13:*.webm=38;5;13:*.ogm=38;5;13:*.mp4=38;5;13:*.m4v=38;5;13:*.mp4v=38;5;13:*.vob=38;5;13:*.qt=38;5;13:*.nuv=38;5;13:*.wmv=38;5;13:*.asf=38;5;13:*.rm=38;5;13:*.rmvb=38;5;13:*.flc=38;5;13:*.avi=38;5;13:*.fli=38;5;13:*.flv=38;5;13:*.gl=38;5;13:*.dl=38;5;13:*.xcf=38;5;13:*.xwd=38;5;13:*.yuv=38;5;13:*.cgm=38;5;13:*.emf=38;5;13:*.axv=38;5;13:*.anx=38;5;13:*.ogv=38;5;13:*.ogx=38;5;13:*.aac=38;5;45:*.au=38;5;45:*.flac=38;5;45:*.mid=38;5;45:*.midi=38;5;45:*.mka=38;5;45:*.mp3=38;5;45:*.mpc=38;5;45:*.ogg=38;5;45:*.ra=38;5;45:*.wav=38;5;45:*.axa=38;5;45:*.oga=38;5;45:*.spx=38;5;45:*.xspf=38;5;45:", - "MAIL": "/var/spool/mail/root", - "PATH": "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin", - "PWD": "/root", - "SHELL": "/bin/bash", - "SHLVL": "3", - "SSH_CLIENT": "10.0.0.74 53446 22", - "SSH_CONNECTION": "10.0.0.74 53446 10.0.20.5 22", - "SSH_TTY": "/dev/pts/0", - "TERM": "xterm-256color", - "USER": "root", - "XDG_RUNTIME_DIR": "/run/user/0", - "XDG_SESSION_ID": "270", - "_": "/usr/bin/python2" - }, - "ansible_fips": false, - "ansible_form_factor": "Other", - "ansible_fqdn": "kev-ansible.kev", - "ansible_hostname": "kev-ansible", - "ansible_interfaces": [ - "lo", - "ens192" - ], - "ansible_is_chroot": false, - "ansible_iscsi_iqn": "", - "ansible_kernel": "3.10.0-693.21.1.el7.x86_64", - "ansible_lo": { - "active": true, - "device": "lo", - "features": { - "busy_poll": "off [fixed]", - "fcoe_mtu": "off [fixed]", - "generic_receive_offload": "on", - "generic_segmentation_offload": "on", - "highdma": "on [fixed]", - "hw_tc_offload": "off [fixed]", - "l2_fwd_offload": "off [fixed]", - "large_receive_offload": "off [fixed]", - "loopback": "on [fixed]", - "netns_local": "on [fixed]", - "ntuple_filters": "off [fixed]", - "receive_hashing": "off [fixed]", - "rx_all": "off [fixed]", - "rx_checksumming": "on [fixed]", - "rx_fcs": "off [fixed]", - "rx_vlan_filter": "off [fixed]", - "rx_vlan_offload": "off [fixed]", - "rx_vlan_stag_filter": "off [fixed]", - "rx_vlan_stag_hw_parse": "off [fixed]", - "scatter_gather": "on", - "tcp_segmentation_offload": "on", - "tx_checksum_fcoe_crc": "off [fixed]", - "tx_checksum_ip_generic": "on [fixed]", - "tx_checksum_ipv4": "off [fixed]", - "tx_checksum_ipv6": "off [fixed]", - "tx_checksum_sctp": "on [fixed]", - "tx_checksumming": "on", - "tx_fcoe_segmentation": "off [fixed]", - "tx_gre_csum_segmentation": "off [fixed]", - "tx_gre_segmentation": "off [fixed]", - "tx_gso_partial": "off [fixed]", - "tx_gso_robust": "off [fixed]", - "tx_ipip_segmentation": "off [fixed]", - "tx_lockless": "on [fixed]", - "tx_mpls_segmentation": "off [fixed]", - "tx_nocache_copy": "off [fixed]", - "tx_scatter_gather": "on [fixed]", - "tx_scatter_gather_fraglist": "on [fixed]", - "tx_sctp_segmentation": "on", - "tx_sit_segmentation": "off [fixed]", - "tx_tcp6_segmentation": "on", - "tx_tcp_ecn_segmentation": "on", - "tx_tcp_mangleid_segmentation": "on", - "tx_tcp_segmentation": "on", - "tx_udp_tnl_csum_segmentation": "off [fixed]", - "tx_udp_tnl_segmentation": "off [fixed]", - "tx_vlan_offload": "off [fixed]", - "tx_vlan_stag_hw_insert": "off [fixed]", - "udp_fragmentation_offload": "on", - "vlan_challenged": "on [fixed]" - }, - "hw_timestamp_filters": [], - "ipv4": { - "address": "127.0.0.1", - "broadcast": "host", - "netmask": "255.0.0.0", - "network": "127.0.0.0" - }, - "ipv6": [ - { - "address": "::1", - "prefix": "128", - "scope": "host" - } - ], - "mtu": 65536, - "promisc": false, - "timestamping": [ - "rx_software", - "software" - ], - "type": "loopback" - }, - "ansible_local": { - "is_installed": { - "is_vim_installed": { - "vim": "true" - } - }, - "package_list": { - "all_kev_packages": { - "package1": "acl-2.2.51-12.el7.x86_64", - "package10": "authconfig-6.2.8-30.el7.x86_64", - "package11": "basesystem-10.0-7.el7.centos.noarch", - "package2": "aic94xx-firmware-30-6.el7.noarch", - "package3": "alsa-firmware-1.0.28-2.el7.noarch", - "package4": "alsa-lib-1.1.3-3.el7.x86_64", - "package5": "alsa-tools-firmware-1.1.0-1.el7.x86_64", - "package6": "ansible-2.6.1-1.el7.noarch", - "package7": "ansible-lint-3.4.21-1.el7.noarch", - "package8": "audit-2.7.6-3.el7.x86_64", - "package9": "audit-libs-2.7.6-3.el7.x86_64" - } - }, - "system_owner": { - "system_owner": { - "owner": "kev" - } - } - }, - "ansible_lsb": {}, - "ansible_machine": "x86_64", - "ansible_machine_id": "072bb764550746bd9695d73f43c9cf3b", - "ansible_memfree_mb": 1307, - "ansible_memory_mb": { - "nocache": { - "free": 1579, - "used": 260 - }, - "real": { - "free": 1307, - "total": 1839, - "used": 532 - }, - "swap": { - "cached": 0, - "free": 0, - "total": 0, - "used": 0 - } - }, - "ansible_memtotal_mb": 1839, - "ansible_mounts": [ - { - "block_available": 3300883, - "block_size": 4096, - "block_total": 3929344, - "block_used": 628461, - "device": "/dev/sda2", - "fstype": "xfs", - "inode_available": 7804215, - "inode_total": 7863808, - "inode_used": 59593, - "mount": "/", - "options": "rw,relatime,attr2,inode64,noquota", - "size_available": 13520416768, - "size_total": 16094593024, - "uuid": "d49a9903-d546-4981-bffb-4e5147e1199b" - }, - { - "block_available": 207739, - "block_size": 4096, - "block_total": 259584, - "block_used": 51845, - "device": "/dev/sda1", - "fstype": "xfs", - "inode_available": 523947, - "inode_total": 524288, - "inode_used": 341, - "mount": "/boot", - "options": "rw,relatime,attr2,inode64,noquota", - "size_available": 850898944, - "size_total": 1063256064, - "uuid": "619dcc55-451d-44be-b364-8c94278c567c" - } - ], - "ansible_nodename": "kev-ansible", - "ansible_os_family": "RedHat", - "ansible_pkg_mgr": "yum", - "ansible_processor": [ - "0", - "GenuineIntel", - "Intel(R) Xeon(R) CPU X5660 @ 2.80GHz" - ], - "ansible_processor_cores": 1, - "ansible_processor_count": 1, - "ansible_processor_threads_per_core": 1, - "ansible_processor_vcpus": 1, - "ansible_product_name": "VMware Virtual Platform", - "ansible_product_serial": "VMware-42 3b 24 ce 91 e0 3a be-b1 02 3c 83 0f 86 02 e8", - "ansible_product_uuid": "CE243B42-E091-BE3A-B102-3C830F8602E8", - "ansible_product_version": "None", - "ansible_python": { - "executable": "/usr/bin/python2", - "has_sslcontext": true, - "type": "CPython", - "version": { - "major": 2, - "micro": 5, - "minor": 7, - "releaselevel": "final", - "serial": 0 - }, - "version_info": [ - 2, - 7, - 5, - "final", - 0 - ] - }, - "ansible_python_version": "2.7.5", - "ansible_real_group_id": 0, - "ansible_real_user_id": 0, - "ansible_selinux": { - "status": "disabled" - }, - "ansible_selinux_python_present": true, - "ansible_service_mgr": "systemd", - "ansible_ssh_host_key_ecdsa_public": "AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBHa2kNk4tpZ4/rXxM6969XkR29JQa91M7sSRHheXeQxmZjnRp/5o2ADQjFmXz+PouYA8PMiBU9u5Mx44oEXxDmU=", - "ansible_ssh_host_key_ed25519_public": "AAAAC3NzaC1lZDI1NTE5AAAAIE5MKxH1C+uyIHjAz48pwHj+6HdXw/9vCnc2PHRQZVND", - "ansible_ssh_host_key_rsa_public": "AAAAB3NzaC1yc2EAAAADAQABAAABAQDMNVNNOgPb+L9rnrm0D2dQWRVEjtnWAgbgVDtdixE79+jDR5TGfxuUmf74yRXM0flrdvirQtBvZjSwsj3/fUReUas0gt3LVs1b7jsxK6QeGgQCx6CCeopMgUb0JYXsMexbekZxxnpBcWAXh/Bjhko/8FpZaZhIvk0VTzQMCP7+/netcTi1m+CCCF1YhQmy8bGhN+aJuaaP2VMSDSauOFGUQUUaJkw+pjata+qWMwYemDabszkePFp0rBQEDSo6fIMlXvInm75Jf24tyb+X9+kOycGk4Rits/jXseB6j+L3rZRCX6b/F3JMNtqoBc7nybGvD/8Njn9Sl67DQUZenkcX", - "ansible_swapfree_mb": 0, - "ansible_swaptotal_mb": 0, - "ansible_system": "Linux", - "ansible_system_capabilities": [ - "cap_chown", - "cap_dac_override", - "cap_dac_read_search", - "cap_fowner", - "cap_fsetid", - "cap_kill", - "cap_setgid", - "cap_setuid", - "cap_setpcap", - "cap_linux_immutable", - "cap_net_bind_service", - "cap_net_broadcast", - "cap_net_admin", - "cap_net_raw", - "cap_ipc_lock", - "cap_ipc_owner", - "cap_sys_module", - "cap_sys_rawio", - "cap_sys_chroot", - "cap_sys_ptrace", - "cap_sys_pacct", - "cap_sys_admin", - "cap_sys_boot", - "cap_sys_nice", - "cap_sys_resource", - "cap_sys_time", - "cap_sys_tty_config", - "cap_mknod", - "cap_lease", - "cap_audit_write", - "cap_audit_control", - "cap_setfcap", - "cap_mac_override", - "cap_mac_admin", - "cap_syslog", - "35", - "36+ep" - ], - "ansible_system_capabilities_enforced": "True", - "ansible_system_vendor": "VMware, Inc.", - "ansible_uptime_seconds": 137627, - "ansible_user_dir": "/root", - "ansible_user_gecos": "root", - "ansible_user_gid": 0, - "ansible_user_id": "root", - "ansible_user_shell": "/bin/bash", - "ansible_user_uid": 0, - "ansible_userspace_architecture": "x86_64", - "ansible_userspace_bits": "64", - "ansible_virtualization_role": "guest", - "ansible_virtualization_type": "VMware", - "gather_subset": [ - "all" - ], - "module_setup": true - }, - "changed": false -} diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/070_Facts_And_Vars/000_Red-Variables.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/070_Facts_And_Vars/000_Red-Variables.html deleted file mode 100644 index 3e707d1..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/070_Facts_And_Vars/000_Red-Variables.html +++ /dev/null @@ -1,12 +0,0 @@ -
    -

    VARIABLES:

    -
  • What are they?
  • -
  • How do they work for me?
  • -
  • What can I do with them?
  • -
  • How do I override or redefine them in flight?
  • -
    - - -
    diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/070_Facts_And_Vars/010_Variables.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/070_Facts_And_Vars/010_Variables.html deleted file mode 100644 index d61ea42..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/070_Facts_And_Vars/010_Variables.html +++ /dev/null @@ -1,19 +0,0 @@ -
    - -

    Variables

    -

    Ansible can work with metadata from various sources and manage their context in the form of variables.

    - -
    - - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/070_Facts_And_Vars/020_Variable_Precedence.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/070_Facts_And_Vars/020_Variable_Precedence.html deleted file mode 100644 index 23dd3b0..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/070_Facts_And_Vars/020_Variable_Precedence.html +++ /dev/null @@ -1,39 +0,0 @@ -
    - -

    Variable Precedence

    -

    The order in which the same variable from different sources will override each other.

    -
    -
    -
      -
    1. extra vars
    2. -
    3. task vars (only for the task)
    4. -
    5. block vars (only for tasks in block)
    6. -
    7. role and include vars
    8. -
    9. play vars_files
    10. -
    11. play vars_prompt
    12. -
    13. play vars
    14. -
    15. set_facts
    16. -
    -
    -
    -
      -
    1. registered vars
    2. -
    3. host facts
    4. -
    5. playbook host_vars
    6. -
    7. playbook group_vars
    8. -
    9. inventory host_vars
    10. -
    11. inventory group_vars
    12. -
    13. inventory vars
    14. -
    15. role defaults
    16. -
    -
    -
    - -
    - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/080_Tasks/000__RedIntro.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/080_Tasks/000__RedIntro.html deleted file mode 100644 index 043994a..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/080_Tasks/000__RedIntro.html +++ /dev/null @@ -1,11 +0,0 @@ -
    -
    -

    Tasks in a Play

    - -

    Tasks are the powerful pieces within a playbook that state paremeters and instruct the Ansible engine

    - -
    -
    - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/080_Tasks/100__Tasks.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/080_Tasks/100__Tasks.html deleted file mode 100644 index 8256275..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/080_Tasks/100__Tasks.html +++ /dev/null @@ -1,19 +0,0 @@ -
    - -

    Tasks

    -

    Tasks are the application of a module to perform a specific unit of work.

    - -
    - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/080_Tasks/200__Example_Tasks_in_a_Play.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/080_Tasks/200__Example_Tasks_in_a_Play.html deleted file mode 100644 index 104c379..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/080_Tasks/200__Example_Tasks_in_a_Play.html +++ /dev/null @@ -1,43 +0,0 @@ -
    - -

    EXAMPLE TASKS IN A PLAY

    - -
    -
    -
    Ansible Terminal
    -
    -
    ----
    -tasks:
    -- name: Ensure httpd package is present
    -  yum:
    -    name: httpd
    -    state: latest
    -
    -- name: Ensure latest index.html file is present
    -  copy:
    -    src: files/index.html
    -    dest: /var/www/html/
    -
    -- name: Restart httpd
    -  service:
    -    name: httpd
    -    state: restarted
    -    
    -
    - - - - -
    - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/080_Tasks/300__Handler_Tasks.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/080_Tasks/300__Handler_Tasks.html deleted file mode 100644 index 2679234..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/080_Tasks/300__Handler_Tasks.html +++ /dev/null @@ -1,11 +0,0 @@ -
    -

    Handler Tasks

    -

    Handlers are special tasks that run at the end of a play if notified by another task when a change occurs.

    -
    If a package gets installed or updated, notify a service restart task that it needs to run.
    - -
    - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/080_Tasks/400__Example_Handler_Task_in_a_Play.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/080_Tasks/400__Example_Handler_Task_in_a_Play.html deleted file mode 100644 index 5659f31..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/080_Tasks/400__Example_Handler_Task_in_a_Play.html +++ /dev/null @@ -1,176 +0,0 @@ -
    -

    Example Handler Task in a Play

    -
    -
    -
    Ansible Terminal
    -
    -
    -  tasks:
    -
    -  - name: Ensure httpd package is present
    -    yum:
    -      name: httpd
    -      state: latest
    -    notify: httpd_running
    -
    -  - name: Verify correct config file is present
    -    copy:
    -      src: files/index.html
    -      dest: /var/www/html/index.html
    -
    -  handlers:
    -
    -  - name: httpd_running
    -    service:
    -      name: httpd
    -      state: restarted
    -			
    -
    - - -
    - - - -
    -

    Example Handler Task in a Play

    -
    -
    -
    Ansible Terminal
    -
    -
    -  tasks:
    -
    -  - name: Ensure httpd package is present
    -    yum:
    -      name: httpd
    -      state: latest
    -    notify: httpd_running                                    
    -
    -  - name: Verify correct config file is present
    -    copy:
    -      src: files/index.html
    -      dest: /var/www/html/index.html
    -
    -  handlers:
    -
    -  - name: httpd_running
    -    service:
    -      name: httpd
    -      state: restarted
    -			
    -
    - - -
    - - - -
    -

    Example Handler Task in a Play

    -
    -
    -
    Ansible Terminal
    -
    -
    -  tasks:
    -
    -  - name: Ensure httpd package is present
    -    yum:
    -      name: httpd
    -      state: latest
    -    notify: httpd_running
    -
    -  - name: Verify correct config file is present
    -    copy:
    -      src: files/index.html
    -      dest: /var/www/html/index.html
    -
    -  handlers:                                                  
    -
    -  - name: httpd_running
    -    service:
    -      name: httpd
    -      state: restarted
    -			
    -
    - - -
    - - -
    -

    Example Handler Task in a Play

    -
    -
    -
    Ansible Terminal
    -
    -
    -  tasks:
    -
    -  - name: Ensure httpd package is present
    -    yum:
    -      name: httpd
    -      state: latest
    -    notify: httpd_running
    -
    -  - name: Verify correct config file is present
    -    copy:
    -      src: files/index.html
    -      dest: /var/www/html/index.html
    -
    -  handlers:
    -
    -  - name: httpd_running                                      
    -    service:
    -      name: httpd
    -      state: restarted
    -			
    -
    - - -
    - - -
    -

    Example Handler Task in a Play

    -
    -
    -
    Ansible Terminal
    -
    -
    -  tasks:
    -
    -  - name: Ensure httpd package is present
    -    yum:
    -      name: httpd
    -      state: latest
    -    notify: httpd_running                                    
    -
    -  - name: Verify correct config file is present
    -    copy:
    -      src: files/index.html
    -      dest: /var/www/html/index.html
    -
    -  handlers:                                                  
    -                                                             
    -  - name: httpd_running                                      
    -    service:
    -      name: httpd
    -      state: restarted
    -			
    -
    - - -
    - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/080_Tasks/500__Example_Multiple_Handler_Task_in_a_Play.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/080_Tasks/500__Example_Multiple_Handler_Task_in_a_Play.html deleted file mode 100644 index bd8e665..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/080_Tasks/500__Example_Multiple_Handler_Task_in_a_Play.html +++ /dev/null @@ -1,145 +0,0 @@ -
    -

    Multiple Tasks Calling a Handler in a Play

    -
    -
    -
    Ansible Terminal
    -
    -
    -  tasks:
    -
    -  - name: Ensure httpd package is present
    -    yum:
    -      name: httpd
    -      state: latest
    -    notify: httpd_running
    -
    -  - name: Verify correct config file is present
    -    template:
    -      src: files/httpd.conf.j2
    -      dest: /etc/httpd/conf/httpd.conf
    -    notify: httpd_running
    -
    -  handlers:
    -
    -  - name: httpd_running
    -    service:
    -      name: httpd
    -      state: restarted
    -			
    -
    - - -
    - - - -
    -

    Multiple Tasks Calling a Handler in a Play

    -
    -
    -
    Ansible Terminal
    -
    -
    -  tasks:
    -
    -  - name: Ensure httpd package is present
    -    yum:
    -      name: httpd
    -      state: latest
    -    notify: httpd_running                                    
    -
    -  - name: Verify correct config file is present
    -    template:
    -      src: files/httpd.conf.j2
    -      dest: /etc/httpd/conf/httpd.conf
    -    notify: httpd_running                                    
    -
    -  handlers:
    -
    -  - name: httpd_running
    -    service:
    -      name: httpd
    -      state: restarted
    -			
    -
    - - -
    - - - -
    -

    Multiple Tasks Calling a Handler in a Play

    -
    -
    -
    Ansible Terminal
    -
    -
    -  tasks:
    -
    -  - name: Ensure httpd package is present
    -    yum:
    -      name: httpd
    -      state: latest
    -    notify: httpd_running
    -
    -  - name: Verify correct config file is present
    -    template:
    -      src: files/httpd.conf.j2
    -      dest: /etc/httpd/conf/httpd.conf
    -    notify: httpd_running
    -
    -  handlers:                                                  
    -                                                             
    -  - name: httpd_running                                      
    -    service:
    -      name: httpd
    -      state: restarted
    -			
    -
    - - -
    - - -
    -

    Multiple Tasks Calling a Handler in a Play

    -
    -
    -
    Ansible Terminal
    -
    -
    -  tasks:
    -  
    -  - name: Ensure httpd package is present
    -    yum:
    -      name: httpd
    -      state: latest
    -    notify: httpd_running                                    
    -
    -  - name: Verify correct config file is present
    -    template:
    -      src: files/httpd.conf.j2
    -      dest: /etc/httpd/conf/httpd.conf
    -    notify: httpd_running                                    
    -
    -  handlers:                                                  
    -                                                             
    -  - name: httpd_running                                      
    -    service:
    -      name: httpd
    -      state: restarted
    -			
    -
    - - -
    - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/080_Tasks/_labs/00_Tasks_Labs.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/080_Tasks/_labs/00_Tasks_Labs.html deleted file mode 100644 index f82dcc7..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/080_Tasks/_labs/00_Tasks_Labs.html +++ /dev/null @@ -1,10 +0,0 @@ -
    -

    LAB STUFF 01

    - -

    Let's do some stuff with tasks.

    -
    -
    -

    LAB STUFF 02

    - -

    Let's do some more stuff with tasks.

    -
    diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/090_Anatomy_Of_A_Playbook/000__RedIntro.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/090_Anatomy_Of_A_Playbook/000__RedIntro.html deleted file mode 100644 index 354db99..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/090_Anatomy_Of_A_Playbook/000__RedIntro.html +++ /dev/null @@ -1,11 +0,0 @@ -
    -
    -

    ANATOMY OF A PLAYBOOK

    - -

    Let's dissect the basics of a playbook and make sure we understand the core components.

    - -
    -
    - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/090_Anatomy_Of_A_Playbook/039__Plays_amp_Playbooks.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/090_Anatomy_Of_A_Playbook/039__Plays_amp_Playbooks.html deleted file mode 100644 index 119a5dc..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/090_Anatomy_Of_A_Playbook/039__Plays_amp_Playbooks.html +++ /dev/null @@ -1,11 +0,0 @@ -
    - -

    Plays & Playbooks

    -

    Plays are ordered sets of tasks to execute against host selections from your inventory. A playbook is a file containing one or more plays.

    - -
    - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/090_Anatomy_Of_A_Playbook/040__Playbook_Example.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/090_Anatomy_Of_A_Playbook/040__Playbook_Example.html deleted file mode 100644 index aea4b20..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/090_Anatomy_Of_A_Playbook/040__Playbook_Example.html +++ /dev/null @@ -1,40 +0,0 @@ -
    - -

    PLAYBOOK EXAMPLE

    - -
    -
    -
    Ansible Terminal
    -
    -
    -- name: Ensure apache is installed and started
    -  hosts: web
    -  become: yes
    -
    -  tasks:
    -  - name: Ensure httpd package is present
    -    yum:
    -      name: httpd
    -      state: latest
    -
    -  - name: Ensure latest index.html file is present
    -    copy:
    -      src: files/index.html
    -      dest: /var/www/html/index.html
    -
    -  - name: Ensure httpd is started
    -    service:
    -      name: httpd
    -      state: started
    -    
    -
    - - - - -
    - - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/090_Anatomy_Of_A_Playbook/041__Human-Meaningful_Naming.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/090_Anatomy_Of_A_Playbook/041__Human-Meaningful_Naming.html deleted file mode 100644 index 0745e77..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/090_Anatomy_Of_A_Playbook/041__Human-Meaningful_Naming.html +++ /dev/null @@ -1,39 +0,0 @@ -
    - -

    HUMAN MEANINGFUL NAMING

    - -
    -
    -
    Ansible Terminal
    -
    -
    -- name: Ensure apache is installed and started
    -  hosts: web
    -  become: yes
    -  
    -  tasks:
    -  - name: Ensure httpd package is present
    -    yum:
    -      name: httpd
    -      state: latest
    -
    -  - name: Ensure latest index.html file is present
    -    copy:
    -      src: files/index.html
    -      dest: /var/www/html/
    -
    -  - name: Ensure httpd is started
    -    service:
    -      name: httpd
    -      state: started
    -    
    -
    - - -
    - - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/090_Anatomy_Of_A_Playbook/042__Host_Selector.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/090_Anatomy_Of_A_Playbook/042__Host_Selector.html deleted file mode 100644 index 352135d..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/090_Anatomy_Of_A_Playbook/042__Host_Selector.html +++ /dev/null @@ -1,38 +0,0 @@ -
    - -

    HOST SELECTOR

    - -
    -
    -
    Ansible Terminal
    -
    -
    -- name: Ensure apache is installed and started
    -  hosts: web
    -  become: yes
    -
    -  tasks:
    -  - name: Ensure httpd package is present
    -    yum:
    -      name: httpd
    -      state: latest
    -
    -  - name: Ensure latest index.html file is present
    -    copy:
    -      src: files/index.html
    -      dest: /var/www/html/
    -
    -  - name: Ensure httpd is started
    -    service:
    -      name: httpd
    -      state: started
    -    
    -
    - -
    - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/090_Anatomy_Of_A_Playbook/043__Privilege_Escalation.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/090_Anatomy_Of_A_Playbook/043__Privilege_Escalation.html deleted file mode 100644 index fc1cd8a..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/090_Anatomy_Of_A_Playbook/043__Privilege_Escalation.html +++ /dev/null @@ -1,37 +0,0 @@ -
    - -

    PRIVILEGE ESCALATION

    - -
    -
    -
    Ansible Terminal
    -
    -
    -- name: Ensure apache is installed and started
    -  hosts: web
    -  become: yes
    -
    -  tasks:
    -  - name: Ensure httpd package is present
    -    yum:
    -      name: httpd
    -      state: latest
    -
    -  - name: Ensure latest index.html file is present
    -    copy:
    -      src: files/index.html
    -      dest: /var/www/html/
    -
    -  - name: Ensure httpd is started
    -    service:
    -      name: httpd
    -      state: started
    -    
    -
    - -
    - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/090_Anatomy_Of_A_Playbook/044__Play_Variables.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/090_Anatomy_Of_A_Playbook/044__Play_Variables.html deleted file mode 100644 index 01a7018..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/090_Anatomy_Of_A_Playbook/044__Play_Variables.html +++ /dev/null @@ -1,46 +0,0 @@ -
    -

    PLAY VARIABLES

    - -
    -
    -
    Ansible Terminal
    -
    -
    -- name: Ensure apache is installed and started
    -  hosts: web
    -  become: yes
    -  vars:                                
    -    http_port: 80                      
    -    http_docroot: /var/www/gokev.com   
    -
    -  tasks:
    -  - name: Ensure httpd package is present
    -    yum:
    -      name: httpd
    -      state: latest
    -
    -  - name: Verify correct config file is present
    -    template:
    -      src: templates/httpd.conf.j2
    -      dest: /etc/httpd/conf/httpd.conf
    -
    -  - name: Ensure httpd is started
    -    service:
    -      name: httpd
    -      state: started
    -    
    -
    - -
    -

    - -

    -
    - - -
    - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/090_Anatomy_Of_A_Playbook/045__Tasks.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/090_Anatomy_Of_A_Playbook/045__Tasks.html deleted file mode 100644 index eb010ce..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/090_Anatomy_Of_A_Playbook/045__Tasks.html +++ /dev/null @@ -1,40 +0,0 @@ -
    -

    PLAYBOOK TASKS

    - -
    -
    -
    Ansible Terminal
    -
    -
    -- name: Ensure apache is installed and started
    -  hosts: web
    -  become: yes
    -  vars:
    -    http_port: 80
    -    http_docroot: /var/www/gokev.com
    -
    -  tasks:
    -  - name: Ensure latest httpd package is present
    -    yum:
    -      name: httpd
    -      state: latest
    -
    -  - name: Verify correct config file is present
    -    template:
    -      src: templates/httpd.conf.j2
    -      dest: /etc/httpd/conf/httpd.conf
    -
    -  - name: Ensure httpd is started
    -    service:
    -      name: httpd
    -      state: started
    -    
    -
    - - - -
    - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/090_Anatomy_Of_A_Playbook/_labs/00_LABS-AdvancedPlaybookPieces.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/090_Anatomy_Of_A_Playbook/_labs/00_LABS-AdvancedPlaybookPieces.html deleted file mode 100644 index a14bb57..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/090_Anatomy_Of_A_Playbook/_labs/00_LABS-AdvancedPlaybookPieces.html +++ /dev/null @@ -1,10 +0,0 @@ -
    -

    LAB STUFF 01

    - -

    Let's do some stuff with advanced pieces.

    -
    -
    -

    LAB STUFF 02

    - -

    Let's do some more stuff with advanced pieces!

    -
    diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/100_Do_More_With_Playbooks/000__RedIntro_DoingMore.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/100_Do_More_With_Playbooks/000__RedIntro_DoingMore.html deleted file mode 100644 index fe48656..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/100_Do_More_With_Playbooks/000__RedIntro_DoingMore.html +++ /dev/null @@ -1,11 +0,0 @@ -
    -
    -

    DO MORE.

    - -

    Let's get a bit more advanced with some rich functionality that Ansible provides.

    - -
    -
    - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/100_Do_More_With_Playbooks/048__Doing_More_with_Playbooks.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/100_Do_More_With_Playbooks/048__Doing_More_with_Playbooks.html deleted file mode 100644 index 856e586..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/100_Do_More_With_Playbooks/048__Doing_More_with_Playbooks.html +++ /dev/null @@ -1,17 +0,0 @@ -
    -

    Doing More with Playbooks

    -

    Here are some more essential playbook features that you can apply:

    - - -
    - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/100_Do_More_With_Playbooks/049__Templates.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/100_Do_More_With_Playbooks/049__Templates.html deleted file mode 100644 index e343cf7..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/100_Do_More_With_Playbooks/049__Templates.html +++ /dev/null @@ -1,21 +0,0 @@ -
    -

    Templates

    -

    Ansible embeds the Jinja2 templating engine that can be used to dynamically:

    - - -
    - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/100_Do_More_With_Playbooks/050__Loops.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/100_Do_More_With_Playbooks/050__Loops.html deleted file mode 100644 index 2c23924..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/100_Do_More_With_Playbooks/050__Loops.html +++ /dev/null @@ -1,33 +0,0 @@ -
    -

    WORKING WITH LOOPS

    -

    Loops can do one task on multiple things: create a lot of users, install a lot of packages, or repeat a polling step until a certain result is reached.

    -
    - -
    -
    -
    Ansible Terminal
    -
    -
    -- yum:
    -    name: "{{ item }}"
    -    state: latest
    -  with_items:
    -  - httpd
    -  - mysql-server
    -  - php56-mysqlnd
    -  - php56-common
    -  - php56-gd
    -  - php56-soap
    -  - php56-xml
    -    
    -
    - - - - -
    - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/100_Do_More_With_Playbooks/051__Conditionals.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/100_Do_More_With_Playbooks/051__Conditionals.html deleted file mode 100644 index 6570266..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/100_Do_More_With_Playbooks/051__Conditionals.html +++ /dev/null @@ -1,26 +0,0 @@ -
    -

    WORKING WITH CONDITIONALS

    -

    Ansible supports the conditional execution of a task based on the run-time evaluation of variable, fact, or previous task result.

    -
    - -
    -
    -
    Ansible Terminal
    -
    -
    -- yum:
    -    name: httpd
    -    state: latest
    -  when: ansible_os_family == "RedHat"
    -    
    -
    - - - -
    - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/100_Do_More_With_Playbooks/052__Tags.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/100_Do_More_With_Playbooks/052__Tags.html deleted file mode 100644 index 8fde527..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/100_Do_More_With_Playbooks/052__Tags.html +++ /dev/null @@ -1,40 +0,0 @@ -
    -

    WORKING WITH TAGS

    -

    Tags are useful to be able to run a subset of a playbook on-demand.

    -
    - -
    -
    -
    Ansible Terminal
    -
    -
    -- yum:
    -    name: "{{ item }}"
    -    state: latest
    -  with_items:
    -  - httpd
    -  - php56
    -  tags:
    -     - packages
    -
    - - template:
    -     src: templates/httpd.conf.j2
    -     dest: /etc/httpd/conf/httpd.conf
    -  tags:
    -     - configuration
    -    
    -
    -
    -

    - -

    -
    - - - -
    - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/100_Do_More_With_Playbooks/054__Blocks Conditional.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/100_Do_More_With_Playbooks/054__Blocks Conditional.html deleted file mode 100644 index 4eb044d..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/100_Do_More_With_Playbooks/054__Blocks Conditional.html +++ /dev/null @@ -1,34 +0,0 @@ -
    -

    WORKING WITH BLOCKS

    -

    Blocks cut down on repetitive task directives, allow for logical grouping of tasks and even in play error handling.

    -
    - -
    -
    -
    Ansible Terminal
    -
    -
    -  block:
    -  - yum:
    -      name: "{{ item }}"
    -      state: latest
    -    with_items:
    -    - httpd
    -    - php56
    -
    -  - template:
    -      src: templates/httpd.conf.j2
    -      dest: /etc/httpd/conf/httpd.conf
    -  when: ansible_os_family == "RedHat"
    -    
    -
    - - -
    - - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/100_Do_More_With_Playbooks/_labs/00_LABS-DoMore.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/100_Do_More_With_Playbooks/_labs/00_LABS-DoMore.html deleted file mode 100644 index a14bb57..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/100_Do_More_With_Playbooks/_labs/00_LABS-DoMore.html +++ /dev/null @@ -1,10 +0,0 @@ -
    -

    LAB STUFF 01

    - -

    Let's do some stuff with advanced pieces.

    -
    -
    -

    LAB STUFF 02

    - -

    Let's do some more stuff with advanced pieces!

    -
    diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/110_Ansible_Vault/000__Red_Slide_AnsibleVault.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/110_Ansible_Vault/000__Red_Slide_AnsibleVault.html deleted file mode 100644 index 232afa5..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/110_Ansible_Vault/000__Red_Slide_AnsibleVault.html +++ /dev/null @@ -1,16 +0,0 @@ -
    - -
    -

    ANSIBLE VAULT:
    ENCRYPTION

    -

    Using ansible-vault to keep your secrets a secret.


    - - - -
    - - -
    - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/110_Ansible_Vault/050_Vault_2Types.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/110_Ansible_Vault/050_Vault_2Types.html deleted file mode 100644 index 7c6ff62..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/110_Ansible_Vault/050_Vault_2Types.html +++ /dev/null @@ -1,52 +0,0 @@ -
    -
    -

    ANSIBLE VAULT

    -

    Encrypt an entire file or just a string inside a non-encrypted file.

    -
    -
    -
    -
    Ansible Terminal : Encrypted File
    -
    -
    - cat ronin_secret.yml 
    -
    -$ANSIBLE_VAULT;1.1;AES256
    -61336361663664353737663637366334383030393736353532345
    -66532383233393438653965633333326632363935663132326163
    -306637626335643365630a653066396533313738316266653
    -
    -
    -
    - - - -
    -
    -
    Ansible Terminal : Encrypted Variable
    -
    -
    - cat fonzie_secret.yml
    -
    -fonzie_show: Happy Days
    -fonzie_secret: !vault |
    -          $ANSIBLE_VAULT;1.1;AES256
    -          6632363237353065633237633937353164646564633
    -          6376461326235386539663733343539666234332664
    -          6664616266316339383838373734653364346163633
    -          6663864366534633063303062363238393139
    -          
    -
    -
    - - - -

    - - -
    - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/110_Ansible_Vault/100__Red_Slide_AnsibleVault_Ronin.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/110_Ansible_Vault/100__Red_Slide_AnsibleVault_Ronin.html deleted file mode 100644 index 06065fc..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/110_Ansible_Vault/100__Red_Slide_AnsibleVault_Ronin.html +++ /dev/null @@ -1,17 +0,0 @@ -
    - -
    -

    ANSIBLE VAULT:
    ENCRYPTED FILE EXAMPLE

    -

    (Variables In An Encrypted File)


    - - -

    Encrypting Sensitive Variables Inside Your Playbooks With An Entire Encrypted YAML File

    - -
    - - -
    - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/110_Ansible_Vault/110_Init_Ronin_Vault.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/110_Ansible_Vault/110_Init_Ronin_Vault.html deleted file mode 100644 index b3803c4..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/110_Ansible_Vault/110_Init_Ronin_Vault.html +++ /dev/null @@ -1,124 +0,0 @@ -
    -

    ANSIBLE VAULT: COMPLETE ENCRYPTED FILE

    -

    Encrypting an entire file with Ansible Vault.

    -
    - -
    -
    -
    Ansible Terminal
    -
    -
    - ansible-vault create ronin_secret.yml
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -		    
    -
    - - - - -
    - - - -
    -

    ANSIBLE VAULT: COMPLETE ENCRYPTED FILE

    -

    Encrypting an entire file with Ansible Vault.

    -
    - -
    -
    -
    Ansible Terminal
    -
    -
    - ansible-vault create ronin_secret.yml
    -
    -New Vault password: redhat
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -		    
    -
    - - - - -
    - - - - -
    -

    ANSIBLE VAULT: COMPLETE ENCRYPTED FILE

    -

    Encrypting an entire file with Ansible Vault.

    -
    - -
    -
    -
    Ansible Terminal
    -
    -
    - ansible-vault create ronin_secret.yml
    -
    -New Vault password: 
    -Confirm New Vault password: 
    -
    - [WARNING]:  does not exist, creating...
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -		    
    -
    - - - - -
    - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/110_Ansible_Vault/120_Edit_Ronin_Vault.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/110_Ansible_Vault/120_Edit_Ronin_Vault.html deleted file mode 100644 index 02e3fa4..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/110_Ansible_Vault/120_Edit_Ronin_Vault.html +++ /dev/null @@ -1,123 +0,0 @@ -
    -

    ANSIBLE VAULT: COMPLETE ENCRYPTED FILE

    -

    Editing an encrypted file with Ansible Vault.

    -
    - -
    -
    -
    Ansible Terminal
    -
    -
    - ansible-vault edit ronin_secret.yml 
    -
    -Vault password: redhat
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -		    
    -
    - - - - -
    - - -
    -

    ANSIBLE VAULT: COMPLETE ENCRYPTED FILE

    -

    Editing an encrypted file with Ansible Vault.

    -
    - -
    -
    -
    Ansible Terminal
    -
    -
    -~                                                                               
    -~                                                                               
    -~                                                                               
    -~                                                                               
    -~                                                                               
    -~                                                                               
    -~                                                                               
    -~                                                                               
    -~                                                                               
    -~                                                                               
    -~                                                                               
    -~                                                                               
    -~                                                                               
    -~                                                                               
    -~                                                                               
    -~                                                                               
    -~                                                                               
    -~                                                                               
    -~                                                                               
    -~                                                                               
    -"/tmp/tmpQD4uZF.yml" 0L, 0C
    -
    - - - - -
    - - -
    -

    ANSIBLE VAULT: COMPLETE ENCRYPTED FILE

    -

    Editing an encrypted file with Ansible Vault.

    -
    - -
    -
    -
    Ansible Terminal
    -
    -
    -movie_title: Ronin
    -movie_phrase: 'Whenever there is any doubt, there is no doubt'
    -movie_actor: Robert De Niro
    -movie_character: Sam
    -~
    -~
    -~
    -~
    -~
    -~
    -~
    -~
    -~
    -~
    -~
    -~
    -~
    -~
    -~
    -~
    -:wq
    -
    - - - - -
    - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/110_Ansible_Vault/130_View_Ronin_Vault.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/110_Ansible_Vault/130_View_Ronin_Vault.html deleted file mode 100644 index b019dbe..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/110_Ansible_Vault/130_View_Ronin_Vault.html +++ /dev/null @@ -1,84 +0,0 @@ -
    -

    ANSIBLE VAULT: COMPLETE ENCRYPTED FILE

    -

    Viewing an encrypted file with Ansible Vault without the password.

    -
    - -
    -
    -
    Ansible Terminal
    -
    -
    - cat ronin_secret.yml 
    -
    -$ANSIBLE_VAULT;1.1;AES256
    -6133636166366435373766363736633438303039373635353234
    -6465306431313861616533653164373061323463356238323530
    -6363383735336661323964330a30303730383863656633613862
    -3339653531346137643334616664366532383233393438653965
    -633333326632363935663132326163306637626335643365630a
    -6530663965333137383162666538303062386539356366313237
    -633531363239
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    - - - - -
    - - - - -
    -

    ANSIBLE VAULT: COMPLETE ENCRYPTED FILE

    -

    Viewing an encrypted file with Ansible Vault with the password.

    -
    - -
    -
    -
    Ansible Terminal
    -
    -
    - ansible-vault view ronin_secret.yml 
    -
    -Vault password:  redhat
    -
    -movie_title: Ronin
    -movie_phrase: 'Whenever there is any doubt, there is no doubt'
    -movie_actor: Robert De Niro
    -movie_character: Sam
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    - - -
    - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/110_Ansible_Vault/140_Include_Ronin_Vars.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/110_Ansible_Vault/140_Include_Ronin_Vars.html deleted file mode 100644 index aa96ae0..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/110_Ansible_Vault/140_Include_Ronin_Vars.html +++ /dev/null @@ -1,86 +0,0 @@ -
    -

    ANSIBLE VAULT: COMPLETE ENCRYPTED FILE

    -

    Including vaulted files in your playbook.

    -
    - -
    -
    -
    Ansible Terminal
    -
    -
    ----
    -- hosts: web
    -  become: yes
    -  vars:
    -    country_setting: France
    -    city_opening_scene: Montmartre
    -
    -  vars_files:
    -    - ronin_secret.yml
    -
    -  tasks:
    -  - name: Ensure httpd package is present
    -    yum:
    -      name: httpd
    -      state: latest
    -
    -  - name: Verify correct index file is present
    -    template:
    -      src: templates/index.html.j2
    -      dest: /var/www/html/index.html
    -
    -
    -
    - - - - -
    - - - -
    -

    ANSIBLE VAULT: COMPLETE ENCRYPTED FILE

    -

    Including vaulted files in your playbook.

    -
    - -
    -
    -
    Ansible Terminal
    -
    -
    ----
    -- hosts: web
    -  become: yes
    -  vars:
    -    country_setting: France
    -    city_opening_scene: Montmartre
    -
    -  vars_files:          
    -    - ronin_secret.yml 
    -
    -  tasks:
    -  - name: Ensure httpd package is present
    -    yum:
    -      name: httpd
    -      state: latest
    -
    -  - name: Verify correct index file is present
    -    template:
    -      src: templates/index.html.j2
    -      dest: /var/www/html/index.html
    -
    -
    -
    - - - - -
    - - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/110_Ansible_Vault/200__Red_Slide_AnsibleVaultFonzie.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/110_Ansible_Vault/200__Red_Slide_AnsibleVaultFonzie.html deleted file mode 100644 index ead5e2d..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/110_Ansible_Vault/200__Red_Slide_AnsibleVaultFonzie.html +++ /dev/null @@ -1,17 +0,0 @@ -
    - -
    -

    ANSIBLE VAULT:
    ENCRYPTED STRING EXAMPLE

    -

    (Encrypted Variables In A Plain File)


    - - -

    Encrypting Sensitive Variables Inside Your Playbooks With An Encrypted String

    - -
    - - -
    - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/110_Ansible_Vault/210_Init_Fonzie_Vault.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/110_Ansible_Vault/210_Init_Fonzie_Vault.html deleted file mode 100644 index ca12661..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/110_Ansible_Vault/210_Init_Fonzie_Vault.html +++ /dev/null @@ -1,116 +0,0 @@ -
    -

    ANSIBLE VAULT: ENCRYPTED VARIABLE

    -

    Use ansible-vault to create a new encrypted variable string.

    -
    - -
    -
    -
    Ansible Terminal
    -
    -
    - ansible-vault encrypt_string 'Jumped The Shark' --name 'fonzie_stunt'
    -
    -		    
    -
    - -

    Here are the pieces

    -

    A breakdown of the command:

    -
    - -
    -
    -
    Ansible Terminal
    -
    -
    -ansible-vault
    -     encrypt_string 
    -         'this phrase will be encrypted' 
    -             --name 'variable_name_of_encrypted_var'
    -
    -		    
    -
    - - - - -
    - - - -
    -

    ANSIBLE VAULT: ENCRYPTED VARIABLE

    -

    Use ansible-vault to create a new encrypted variable string.

    -
    - -
    -
    -
    Ansible Terminal
    -
    -
    - ansible-vault encrypt_string 'Jumped The Shark' --name 'fonzie_stunt'
    -New Vault password: fonzie
    -Confirm New Vault password: fonzie
    -
    -fonzie_stunt: !vault |
    -          $ANSIBLE_VAULT;1.1;AES256
    -          35613061636564623138646464393731633534343261393532343263633763356364633366636633
    -          6430663339613762306235323035326663363665316234650a303434333462343731356632333136
    -          37393966336465386131666635333537636133313864383865303138303262343939326563373730
    -          3063376263303037340a356263333131626239316630653465313931353863623237666464613030
    -          37346537336430386265633239346566313466323764336234346361626666643334
    -
    -Encryption successful
    -
    - 
    -
    -
    -
    -
    -
    -
    -		    
    -
    - - - - -
    - - - - - - -
    -

    ANSIBLE VAULT: ENCRYPTED VARIABLE

    -

    The pipe separates the multi-line value from the variable name.

    -
    - -
    -
    -
    Ansible Terminal
    -
    -
    -
    -fonzie_stunt: !vault | 
    -    $ANSIBLE_VAULT;1.1;AES256
    -    35613061636564623138646464393731633534343261393532343263633763356364633366636633
    -    6430663339613762306235323035326663363665316234650a303434333462343731356632333136
    -    37393966336465386131666635333537636133313864383865303138303262343939326563373730
    -    3063376263303037340a356263333131626239316630653465313931353863623237666464613030
    -    37346537336430386265633239346566313466323764336234346361626666643334               
    -
    -
    -		    
    -
    - - - - -
    diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/110_Ansible_Vault/220_View_Fonzie_Vault.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/110_Ansible_Vault/220_View_Fonzie_Vault.html deleted file mode 100644 index 1c2cc2c..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/110_Ansible_Vault/220_View_Fonzie_Vault.html +++ /dev/null @@ -1,108 +0,0 @@ -
    -

    ANSIBLE VAULT: ENCRYPTED VARIABLE

    -

    Including an encrypted variable in a plaintext playbook.

    -
    - -
    -
    -
    Ansible Terminal
    -
    -
    ----
    -- hosts: localhost
    -  connection: local
    -  vars:
    -    fonzie_show: Happy Days
    -    fonzie_transport: Motorcycle
    -    fonzie_stunt: !vault |
    -        $ANSIBLE_VAULT;1.1;AES256
    -        35613061636564623138646464393731633534343261393532343263633763356364633366636633
    -        6430663339613762306235323035326663363665316234650a303434333462343731356632333136
    -        37393966336465386131666635333537636133313864383865303138303262343939326563373730
    -        3063376263303037340a356263333131626239316630653465313931353863623237666464613030
    -        37346537336430386265633239346566313466323764336234346361626666643334               
    -    fonzie_office: Mens room at Arnold's Diner
    -    fonzie_jacket: Leather
    -    fonzie_phrase: Aaaaaaayyyyyyyy
    -
    -  tasks:
    -  - name: prove that we can read the variables within the encrypted string
    -    debug:
    -      msg: |
    -        Fonzie is a character from the TV show, {{ fonzie_show }}. He rides a {{ fonzie_transport }},
    -        wears a {{ fonzie_jacket }} jacket, and has an office in the {{ fonzie_office }}.
    -
    -        Fonzie is most famous for his stunt where he {{ fonzie_stunt }}, after which,
    -        he said {{ fonzie_phrase }}!
    -
    -
    -
    -
    - - - - -
    - - - - - - - - - - - - - -
    -

    ANSIBLE VAULT: ENCRYPTED VARIABLE

    -

    Including an encrypted variable in a plaintext playbook.

    -
    - -
    -
    -
    Ansible Terminal
    -
    -
    ----
    -- hosts: localhost
    -  connection: local
    -  vars:
    -    fonzie_show: Happy Days
    -    fonzie_transport: Motorcycle
    -    fonzie_stunt: !vault |                                                               
    -        $ANSIBLE_VAULT;1.1;AES256                                                        
    -        35613061636564623138646464393731633534343261393532343263633763356364633366636633 
    -        6430663339613762306235323035326663363665316234650a303434333462343731356632333136 
    -        37393966336465386131666635333537636133313864383865303138303262343939326563373730 
    -        3063376263303037340a356263333131626239316630653465313931353863623237666464613030 
    -        37346537336430386265633239346566313466323764336234346361626666643334                    
    -    fonzie_office: Mens room at Arnold's Diner
    -    fonzie_jacket: Leather
    -    fonzie_phrase: Aaaaaaayyyyyyyy
    -
    -  tasks:
    -  - name: prove that we can read the variables within the encrypted string
    -    debug:
    -      msg: |
    -        Fonzie is a character from the TV show, {{ fonzie_show }}. He rides a {{ fonzie_transport }},
    -        wears a {{ fonzie_jacket }} jacket, and has an office in the {{ fonzie_office }}.
    -
    -        Fonzie is most famous for his stunt where he {{ fonzie_stunt }}, after which,
    -        he said {{ fonzie_phrase }}!
    -
    -
    -
    -
    - - - - -
    - \ No newline at end of file diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/110_Ansible_Vault/230_View_Fonzie_Vault_Playbook.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/110_Ansible_Vault/230_View_Fonzie_Vault_Playbook.html deleted file mode 100644 index 0868653..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/110_Ansible_Vault/230_View_Fonzie_Vault_Playbook.html +++ /dev/null @@ -1,46 +0,0 @@ -
    -

    ANSIBLE VAULT: ENCRYPTED VARIABLE

    -

    Including an encrypted variable in a plaintext playbook.

    -
    - -
    -
    -
    Ansible Terminal
    -
    -
    -
    - ansible-playbook --ask-vault-pass fonzie_playbook.yml 
    -
    -Vault password: 
    -
    -PLAY [localhost] *************************************************************************************************************
    -
    -TASK [Gathering Facts] *******************************************************************************************************
    -ok: [localhost]
    -
    -TASK [prove that we can read the variable within the encrypted string] *******************************************************
    -ok: [localhost] => {
    -    "msg": "Fonzie is a character from the TV show, Happy Days. He rides a Motorcycle,
    -    wears a Leather jacket, and has an office in the Mens room at Arnold's Diner.
    -    
    -    Fonzie is most famous for his stunt where he Jumped The Shark, after which, 
    -    he said Aaaaaaayyyyyyyy!"
    -}
    -
    -PLAY RECAP *******************************************************************************************************************
    -localhost                  : ok=2    changed=0    unreachable=0    failed=0   
    -
    -
    -
    -
    -
    - - - - -
    - - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/110_Ansible_Vault/_labs/00_Dynamic_Lab_Placeholder.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/110_Ansible_Vault/_labs/00_Dynamic_Lab_Placeholder.html deleted file mode 100644 index 5a00762..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/110_Ansible_Vault/_labs/00_Dynamic_Lab_Placeholder.html +++ /dev/null @@ -1,15 +0,0 @@ -
    -

    Lab Sample 01

    - -

    This is sample page #1 that discusses things about and is meant strictly as a lab placeholder to show dynamic content.

    -
    -
    -

    Lab Sample 02

    - -

    This is sample page #2 that discusses things about and is meant strictly as a lab placeholder to show dynamic content.

    -
    -
    -

    Lab Sample 03

    - -

    This is sample page #3 that discusses things about and is meant strictly as a lab placeholder to show dynamic content.

    -
    diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/120_Ansible_Roles/000_RedIntro-Roles.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/120_Ansible_Roles/000_RedIntro-Roles.html deleted file mode 100644 index d9e0bbc..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/120_Ansible_Roles/000_RedIntro-Roles.html +++ /dev/null @@ -1,13 +0,0 @@ -
    -

    USING ROLES:

    - - -
  • Improves readability and maintainability of complex plays
  • -
  • Eases sharing, reuse and standardization of automation processes
  • -
  • Enables Ansible content to exist independently of playbooks, projects -- even organizations
  • -
  • Provides functional conveniences such as file path resolution and default values
  • -
    - -
    diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/120_Ansible_Roles/200__AnatomyOfRoles.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/120_Ansible_Roles/200__AnatomyOfRoles.html deleted file mode 100644 index 50f9525..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/120_Ansible_Roles/200__AnatomyOfRoles.html +++ /dev/null @@ -1,363 +0,0 @@ -
    -

    ROLES ANATOMY

    - -
    -
    -
    Ansible Terminal
    -
    -
    - tree example_role/
    -
    -example_role/
    -├── defaults
    -│   └── main.yml
    -├── files
    -├── handlers
    -│   └── main.yml
    -├── meta
    -│   └── main.yml
    -├── README.md
    -├── tasks
    -│   └── main.yml
    -├── templates
    -├── tests
    -│   ├── inventory
    -│   └── test.yml
    -└── vars
    -    └── main.yml
    -		
    -
    - - -
    - - -
    -

    MAIN ROLE DIRECTORY

    - -
    -
    -
    Ansible Terminal
    -
    -
    - tree example_role/
    -
    -example_role/
    -├── defaults
    -│   └── main.yml
    -├── files
    -├── handlers
    -│   └── main.yml
    -├── meta
    -│   └── main.yml
    -├── README.md
    -├── tasks
    -│   └── main.yml
    -├── templates
    -├── tests
    -│   ├── inventory
    -│   └── test.yml
    -└── vars
    -    └── main.yml
    -		
    -
    - - -
    - - - - - - -
    -

    DEFAULTS AND VARIABLES

    - -
    -
    -
    Ansible Terminal
    -
    -
    - tree example_role/
    -
    -example_role/
    -├── defaults
    -│   └── main.yml
    -├── files
    -├── handlers
    -│   └── main.yml
    -├── meta
    -│   └── main.yml
    -├── README.md
    -├── tasks
    -│   └── main.yml
    -├── templates
    -├── tests
    -│   ├── inventory
    -│   └── test.yml
    -└── vars
    -    └── main.yml
    -		
    -
    - - -
    - - - - - - - -
    -

    FILES DIRECTORY

    - -
    -
    -
    Ansible Terminal
    -
    -
    - tree example_role/
    -
    -example_role/
    -├── defaults
    -│   └── main.yml
    -├── files
    -├── handlers
    -│   └── main.yml
    -├── meta
    -│   └── main.yml
    -├── README.md
    -├── tasks
    -│   └── main.yml
    -├── templates
    -├── tests
    -│   ├── inventory
    -│   └── test.yml
    -└── vars
    -    └── main.yml
    -		
    -
    - - -
    - - - - - - -
    -

    HANDLERS DIRECTORY

    - -
    -
    -
    Ansible Terminal
    -
    -
    - tree example_role/
    -
    -example_role/
    -├── defaults
    -│   └── main.yml
    -├── files
    -├── handlers
    -│   └── main.yml
    -├── meta
    -│   └── main.yml
    -├── README.md
    -├── tasks
    -│   └── main.yml
    -├── templates
    -├── tests
    -│   ├── inventory
    -│   └── test.yml
    -└── vars
    -    └── main.yml
    -		
    -
    - - -
    - - - - - - -
    -

    METADATA AND README

    - -
    -
    -
    Ansible Terminal
    -
    -
    - tree example_role/
    -
    -example_role/
    -├── defaults
    -│   └── main.yml
    -├── files
    -├── handlers
    -│   └── main.yml
    -├── meta
    -│   └── main.yml
    -├── README.md
    -├── tasks
    -│   └── main.yml
    -├── templates
    -├── tests
    -│   ├── inventory
    -│   └── test.yml
    -└── vars
    -    └── main.yml
    -		
    -
    - - -
    - - - - - - - - -
    -

    TASKS DIRECTORY

    - -
    -
    -
    Ansible Terminal
    -
    -
    - tree example_role/
    -
    -example_role/
    -├── defaults
    -│   └── main.yml
    -├── files
    -├── handlers
    -│   └── main.yml
    -├── meta
    -│   └── main.yml
    -├── README.md
    -├── tasks
    -│   └── main.yml
    -├── templates
    -├── tests
    -│   ├── inventory
    -│   └── test.yml
    -└── vars
    -    └── main.yml
    -		
    -
    - - -
    - - - - - - - - - -
    -

    TEMPLATES DIRECTORY

    - -
    -
    -
    Ansible Terminal
    -
    -
    - tree example_role/
    -
    -example_role/
    -├── defaults
    -│   └── main.yml
    -├── files
    -├── handlers
    -│   └── main.yml
    -├── meta
    -│   └── main.yml
    -├── README.md
    -├── tasks
    -│   └── main.yml
    -├── templates
    -├── tests
    -│   ├── inventory
    -│   └── test.yml
    -└── vars
    -    └── main.yml
    -		
    -
    - - -
    - - - - - - - - - -
    -

    TESTS DIRECTORY

    - -
    -
    -
    Ansible Terminal
    -
    -
    - tree example_role/
    -
    -example_role/
    -├── defaults
    -│   └── main.yml
    -├── files
    -├── handlers
    -│   └── main.yml
    -├── meta
    -│   └── main.yml
    -├── README.md
    -├── tasks
    -│   └── main.yml
    -├── templates
    -├── tests
    -│   ├── inventory
    -│   └── test.yml
    -└── vars
    -    └── main.yml
    -		
    -
    - - -
    - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/120_Ansible_Roles/300__InitializingARole.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/120_Ansible_Roles/300__InitializingARole.html deleted file mode 100644 index 6759b27..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/120_Ansible_Roles/300__InitializingARole.html +++ /dev/null @@ -1,25 +0,0 @@ -
    -

    INITIALIZING A ROLE

    -

    ansible-galaxy command to init a new role:

    -
    - -
    -
    -
    Ansible Terminal
    -
    -
    - ansible-galaxy init example_role
    -
    -- example_role was created successfully
    -
    - 
    -
    -
    -
    - - -
    - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/120_Ansible_Roles/400__Roles_Structure.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/120_Ansible_Roles/400__Roles_Structure.html deleted file mode 100644 index 1226bab..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/120_Ansible_Roles/400__Roles_Structure.html +++ /dev/null @@ -1,41 +0,0 @@ -
    -

    INTRODUCTION TO ROLES

    -

    Project with Embedded Roles Example:

    -
    - -
    -
    -
    Ansible Terminal
    -
    -
    - tree example_role/
    -
    -example_role/
    -├── defaults
    -│   └── main.yml
    -├── files
    -├── handlers
    -│   └── main.yml
    -├── meta
    -│   └── main.yml
    -├── README.md
    -├── tasks
    -│   └── main.yml
    -├── templates
    -├── tests
    -│   ├── inventory
    -│   └── test.yml
    -└── vars
    -    └── main.yml
    -
    -
    -
    -
    -
    - - -
    - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/120_Ansible_Roles/500__Project_with_Embedded_Roles_Example.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/120_Ansible_Roles/500__Project_with_Embedded_Roles_Example.html deleted file mode 100644 index 7555a46..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/120_Ansible_Roles/500__Project_with_Embedded_Roles_Example.html +++ /dev/null @@ -1,79 +0,0 @@ -
    -

    INTRODUCTION TO ROLES

    -

    Project with Embedded Roles Example:

    -
    - - - - - - -
    -
    -
    -
    Ansible Terminal
    -
    -
    -Some directories omitted for readability
    -├── site.yml
    -└── roles
    -    ├── apache_role
    -    │   ├── defaults
    -    │   │   └── main.yml
    -    │   ├── files
    -    │   │   └── index.html
    -    │   ├── handlers 
    -    │   │   └── main.yml
    -    │   ├── tasks
    -    │   │   └── main.yml
    -    │   ├── templates
    -    │   │   └── http.conf.j2
    -    │   └── vars
    -    │       └── main.yml
    -    └── security_standards
    -        ├── defaults
    -        │   └── main.yml
    -        ├── files
    -        │   ├── sshd_conf
    -        │   └── sudoers
    -        ├── handlers
    -        │   └── main.yml
    -        ├── tasks
    -        │   └── main.yml
    -        ├── templates
    -        │   ├── etc_issue
    -        │   └── etc_motd
    -        └── vars
    -            └── main.yml    
    -
    -
    -
    -
    -
    Some Interesting Files To Consider
    -
    -
    -apache_role
    -    tasks/main.yml
    -    defaults/main.yml
    -    files/index.html
    -    templates/http.conf.j2
    -    vars/main.yml
    - 
    -security_standards
    -    tasks/main.yml
    -    defaults/main.yml
    -    files/sshd_conf
    -    files/sudoers
    -    templates/etc_issue
    -    templates/etc_motd
    -    vars/main.yml
    -    
    -
    -
    - - -
    - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/120_Ansible_Roles/600__Project_with_Embedded_Roles_Example.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/120_Ansible_Roles/600__Project_with_Embedded_Roles_Example.html deleted file mode 100644 index a3a4c52..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/120_Ansible_Roles/600__Project_with_Embedded_Roles_Example.html +++ /dev/null @@ -1,28 +0,0 @@ -
    -

    PLAYBOOKS WITH ROLES

    -

    See how simple it is to of a playbook with embedded roles.

    -
    - -
    -
    -
    Ansible Terminal
    -
    -
    -# site.yml
    ----
    -- name: Apply some roles to our web servers
    -  hosts: web
    -  roles:
    -     - security_standards
    -     - apache_role
    -
    -    
    -
    - - - -
    - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/120_Ansible_Roles/_100__Roles.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/120_Ansible_Roles/_100__Roles.html deleted file mode 100644 index d33fa12..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/120_Ansible_Roles/_100__Roles.html +++ /dev/null @@ -1,21 +0,0 @@ -
    -

    USING ROLES:
    A More Practical Playbook

    -

    Roles are a packages of closely related Ansible content that can be shared more easily than plays alone.

    - - - - - -
    - - - - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/120_Ansible_Roles/_labs/00_Dynamic_Lab_Placeholder.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/120_Ansible_Roles/_labs/00_Dynamic_Lab_Placeholder.html deleted file mode 100644 index 5a00762..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/120_Ansible_Roles/_labs/00_Dynamic_Lab_Placeholder.html +++ /dev/null @@ -1,15 +0,0 @@ -
    -

    Lab Sample 01

    - -

    This is sample page #1 that discusses things about and is meant strictly as a lab placeholder to show dynamic content.

    -
    -
    -

    Lab Sample 02

    - -

    This is sample page #2 that discusses things about and is meant strictly as a lab placeholder to show dynamic content.

    -
    -
    -

    Lab Sample 03

    - -

    This is sample page #3 that discusses things about and is meant strictly as a lab placeholder to show dynamic content.

    -
    diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/130_Role_Sharing_And_Distribution/000_RedIntro-Roles.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/130_Role_Sharing_And_Distribution/000_RedIntro-Roles.html deleted file mode 100644 index c607fba..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/130_Role_Sharing_And_Distribution/000_RedIntro-Roles.html +++ /dev/null @@ -1,16 +0,0 @@ -
    -

    SHARING YOUR CONTENT WITH OTHER TEAMS:

    - - -
  • Publishing a catalog of roles
  • -
  • Creating best practices for use of roles
  • -
  • Roles as collaboration
  • -
  • Style guide
  • -
  • Code review
  • -
  • Galaxy or GIT?
  • -
  • requirements.yml and including roles
  • -
    - -
    diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/130_Role_Sharing_And_Distribution/700_AnsibleGalaxy.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/130_Role_Sharing_And_Distribution/700_AnsibleGalaxy.html deleted file mode 100644 index eb05928..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/130_Role_Sharing_And_Distribution/700_AnsibleGalaxy.html +++ /dev/null @@ -1,16 +0,0 @@ -
    - -
    -
    -

    Ansible Galaxy

    -

    http://galaxy.ansible.com

    -

    Ansible Galaxy is a hub for finding, reusing and sharing Ansible content.

    -

    Jump-start your automation project with content contributed and reviewed by the Ansible community.

    -
    -
    - - - -
    diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/900_Closing/000_Closing_Next_Steps.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/900_Closing/000_Closing_Next_Steps.html deleted file mode 100644 index 8c6edff..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/html_slides/900_Closing/000_Closing_Next_Steps.html +++ /dev/null @@ -1,8 +0,0 @@ -
    -

    Next Steps

    - -
    diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/Ansible-Fest-Row-Background.png b/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/Ansible-Fest-Row-Background.png deleted file mode 100644 index 8511569..0000000 Binary files a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/Ansible-Fest-Row-Background.png and /dev/null differ diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/Ansible-Fest-Row-Background_GoKEV.png b/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/Ansible-Fest-Row-Background_GoKEV.png deleted file mode 100644 index 2e6dfc6..0000000 Binary files a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/Ansible-Fest-Row-Background_GoKEV.png and /dev/null differ diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/AnsibleTowerFlow.png b/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/AnsibleTowerFlow.png deleted file mode 100644 index 64023e2..0000000 Binary files a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/AnsibleTowerFlow.png and /dev/null differ diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/AnsibleUseCases.xcf b/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/AnsibleUseCases.xcf deleted file mode 100644 index c97efd1..0000000 Binary files a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/AnsibleUseCases.xcf and /dev/null differ diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/AnsibleUseCases00_Blank.png b/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/AnsibleUseCases00_Blank.png deleted file mode 100644 index 14aeb5e..0000000 Binary files a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/AnsibleUseCases00_Blank.png and /dev/null differ diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/AnsibleUseCases01_ConfigMgmt.png b/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/AnsibleUseCases01_ConfigMgmt.png deleted file mode 100644 index 69be85c..0000000 Binary files a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/AnsibleUseCases01_ConfigMgmt.png and /dev/null differ diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/AnsibleUseCases02_AppDeployment.png b/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/AnsibleUseCases02_AppDeployment.png deleted file mode 100644 index 873f773..0000000 Binary files a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/AnsibleUseCases02_AppDeployment.png and /dev/null differ diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/AnsibleUseCases03_Provisioning.png b/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/AnsibleUseCases03_Provisioning.png deleted file mode 100644 index 16ff3d2..0000000 Binary files a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/AnsibleUseCases03_Provisioning.png and /dev/null differ diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/AnsibleUseCases04_CICD.png b/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/AnsibleUseCases04_CICD.png deleted file mode 100644 index e118d3f..0000000 Binary files a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/AnsibleUseCases04_CICD.png and /dev/null differ diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/AnsibleUseCases05_SecurityCompliance.png b/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/AnsibleUseCases05_SecurityCompliance.png deleted file mode 100644 index ddf1fa0..0000000 Binary files a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/AnsibleUseCases05_SecurityCompliance.png and /dev/null differ diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/AnsibleUseCases06_Orchestration.png b/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/AnsibleUseCases06_Orchestration.png deleted file mode 100644 index b5bed6e..0000000 Binary files a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/AnsibleUseCases06_Orchestration.png and /dev/null differ diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/BatteriesNotIncluded.png b/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/BatteriesNotIncluded.png deleted file mode 100644 index 8ffb196..0000000 Binary files a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/BatteriesNotIncluded.png and /dev/null differ diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/GoKEV_Chrome_Color_Ansible.png b/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/GoKEV_Chrome_Color_Ansible.png deleted file mode 100644 index 870171b..0000000 Binary files a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/GoKEV_Chrome_Color_Ansible.png and /dev/null differ diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/SPA-Agentless.png b/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/SPA-Agentless.png deleted file mode 100644 index 458168e..0000000 Binary files a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/SPA-Agentless.png and /dev/null differ diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/SPA-All.png b/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/SPA-All.png deleted file mode 100644 index fe32140..0000000 Binary files a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/SPA-All.png and /dev/null differ diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/SPA-None.png b/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/SPA-None.png deleted file mode 100644 index 6f0e713..0000000 Binary files a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/SPA-None.png and /dev/null differ diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/SPA-Powerful.png b/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/SPA-Powerful.png deleted file mode 100644 index d3a2715..0000000 Binary files a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/SPA-Powerful.png and /dev/null differ diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/SPA-Simple.png b/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/SPA-Simple.png deleted file mode 100644 index 57f93ff..0000000 Binary files a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/SPA-Simple.png and /dev/null differ diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/Tower-3-Dashboard-1x.png b/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/Tower-3-Dashboard-1x.png deleted file mode 100644 index cecda05..0000000 Binary files a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/Tower-3-Dashboard-1x.png and /dev/null differ diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/ansibe-up-and-running-ebook.png b/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/ansibe-up-and-running-ebook.png deleted file mode 100644 index 9cebdb7..0000000 Binary files a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/ansibe-up-and-running-ebook.png and /dev/null differ diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/ansible-automation-diagram.svg b/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/ansible-automation-diagram.svg deleted file mode 100644 index 5ff16be..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/ansible-automation-diagram.svg +++ /dev/null @@ -1,778 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/ansible-logo.png b/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/ansible-logo.png deleted file mode 100644 index 817c2dc..0000000 Binary files a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/ansible-logo.png and /dev/null differ diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/ansible-logomark-red.svg b/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/ansible-logomark-red.svg deleted file mode 100644 index 780c244..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/ansible-logomark-red.svg +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/ansible-platform-overview.svg b/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/ansible-platform-overview.svg deleted file mode 100644 index 9672250..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/ansible-platform-overview.svg +++ /dev/null @@ -1,962 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Ansible-Platform-Overview - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/ansible-tower-platform-diagram.svg b/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/ansible-tower-platform-diagram.svg deleted file mode 100644 index 988a69d..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/ansible-tower-platform-diagram.svg +++ /dev/null @@ -1,705 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/ansible-tower-rbac.svg b/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/ansible-tower-rbac.svg deleted file mode 100644 index ea8665f..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/ansible-tower-rbac.svg +++ /dev/null @@ -1 +0,0 @@ -Tower-RBAC \ No newline at end of file diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/ansible-tower3-monitor-1x.png b/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/ansible-tower3-monitor-1x.png deleted file mode 100644 index 0e18810..0000000 Binary files a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/ansible-tower3-monitor-1x.png and /dev/null differ diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/ansible-use-case-diagram.svg b/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/ansible-use-case-diagram.svg deleted file mode 100644 index 96130ea..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/ansible-use-case-diagram.svg +++ /dev/null @@ -1,4623 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/ansible-wordmark-white.svg b/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/ansible-wordmark-white.svg deleted file mode 100644 index 10fd49b..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/ansible-wordmark-white.svg +++ /dev/null @@ -1,27 +0,0 @@ - - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/ansible_tagging.png b/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/ansible_tagging.png deleted file mode 100644 index 8597942..0000000 Binary files a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/ansible_tagging.png and /dev/null differ diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/devops-language-diagram.svg b/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/devops-language-diagram.svg deleted file mode 100644 index 1ffc08d..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/devops-language-diagram.svg +++ /dev/null @@ -1 +0,0 @@ -DevOps-Language-Diagram \ No newline at end of file diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/fiero.jpg b/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/fiero.jpg deleted file mode 100644 index b66fac7..0000000 Binary files a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/fiero.jpg and /dev/null differ diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/fussypants.jpg b/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/fussypants.jpg deleted file mode 100644 index 076070d..0000000 Binary files a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/fussypants.jpg and /dev/null differ diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/galaxy-10996_1280.jpg b/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/galaxy-10996_1280.jpg deleted file mode 100644 index 7c697cb..0000000 Binary files a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/galaxy-10996_1280.jpg and /dev/null differ diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/how-ansible-works-diagram-01.svg b/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/how-ansible-works-diagram-01.svg deleted file mode 100644 index 7998bb2..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/how-ansible-works-diagram-01.svg +++ /dev/null @@ -1,235 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - How-Ansible-Works-Diagram - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/how-ansible-works-diagram-02.svg b/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/how-ansible-works-diagram-02.svg deleted file mode 100644 index 1ea1b04..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/how-ansible-works-diagram-02.svg +++ /dev/null @@ -1,332 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - How-Ansible-Works-Diagram - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/how-ansible-works-diagram-03.svg b/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/how-ansible-works-diagram-03.svg deleted file mode 100644 index bf3d46a..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/how-ansible-works-diagram-03.svg +++ /dev/null @@ -1,356 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - How-Ansible-Works-Diagram - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/how-ansible-works-diagram-04.svg b/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/how-ansible-works-diagram-04.svg deleted file mode 100644 index d0d5de7..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/how-ansible-works-diagram-04.svg +++ /dev/null @@ -1,347 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - How-Ansible-Works-Diagram - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/how-ansible-works-diagram-05.svg b/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/how-ansible-works-diagram-05.svg deleted file mode 100644 index 2f9c43e..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/how-ansible-works-diagram-05.svg +++ /dev/null @@ -1,336 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - How-Ansible-Works-Diagram - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/how-ansible-works-diagram-06.svg b/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/how-ansible-works-diagram-06.svg deleted file mode 100644 index 14bb4e2..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/how-ansible-works-diagram-06.svg +++ /dev/null @@ -1,343 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - How-Ansible-Works-Diagram-06 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/httpd_conf_template.png b/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/httpd_conf_template.png deleted file mode 100644 index d9424e8..0000000 Binary files a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/httpd_conf_template.png and /dev/null differ diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/index.php b/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/index.php deleted file mode 100644 index 82677dc..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/index.php +++ /dev/null @@ -1,3 +0,0 @@ - - - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/most_meetups.svg b/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/most_meetups.svg deleted file mode 100644 index 0b0a840..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/most_meetups.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/most_searched.svg b/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/most_searched.svg deleted file mode 100644 index 402d1a9..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/most_searched.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/passwordkey.png b/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/passwordkey.png deleted file mode 100644 index f7617b2..0000000 Binary files a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/passwordkey.png and /dev/null differ diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/public-private-cloud.png b/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/public-private-cloud.png deleted file mode 100644 index cc5d39d..0000000 Binary files a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/public-private-cloud.png and /dev/null differ diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/redhat-logo-rgb-default.svg b/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/redhat-logo-rgb-default.svg deleted file mode 100644 index 38c97d4..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/redhat-logo-rgb-default.svg +++ /dev/null @@ -1,64 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/simple-powerful-agentless-diagram.svg b/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/simple-powerful-agentless-diagram.svg deleted file mode 100644 index e84b966..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/simple-powerful-agentless-diagram.svg +++ /dev/null @@ -1 +0,0 @@ -Simple-Powerful-Agentless-Diagram \ No newline at end of file diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/tower/activity-stream.png b/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/tower/activity-stream.png deleted file mode 100644 index 1c86e7e..0000000 Binary files a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/tower/activity-stream.png and /dev/null differ diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/tower/external-logging.png b/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/tower/external-logging.png deleted file mode 100644 index c54a1f9..0000000 Binary files a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/tower/external-logging.png and /dev/null differ diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/tower/integrated-notifications.png b/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/tower/integrated-notifications.png deleted file mode 100644 index 1b48239..0000000 Binary files a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/tower/integrated-notifications.png and /dev/null differ diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/tower/job-status-update.png b/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/tower/job-status-update.png deleted file mode 100644 index 9a66481..0000000 Binary files a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/tower/job-status-update.png and /dev/null differ diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/tower/manage-track-inventory.png b/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/tower/manage-track-inventory.png deleted file mode 100644 index 6d7081c..0000000 Binary files a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/tower/manage-track-inventory.png and /dev/null differ diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/tower/multi-playbook-workflows.png b/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/tower/multi-playbook-workflows.png deleted file mode 100644 index f0e3c1c..0000000 Binary files a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/tower/multi-playbook-workflows.png and /dev/null differ diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/tower/remote-command-execution.png b/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/tower/remote-command-execution.png deleted file mode 100644 index 17e6d04..0000000 Binary files a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/tower/remote-command-execution.png and /dev/null differ diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/tower/schedule-jobs.png b/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/tower/schedule-jobs.png deleted file mode 100644 index 6e74dff..0000000 Binary files a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/tower/schedule-jobs.png and /dev/null differ diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/tower/self-service-it.png b/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/tower/self-service-it.png deleted file mode 100644 index 93daa1c..0000000 Binary files a/roles/lightbulb-ansiblered-deck/files/deck-ansible/images/tower/self-service-it.png and /dev/null differ diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/index.php b/roles/lightbulb-ansiblered-deck/files/deck-ansible/index.php deleted file mode 100644 index ab57767..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/index.php +++ /dev/null @@ -1,152 +0,0 @@ - -
    -RUNNING IN DRY RUN with LAB LIMIT SET TO 
    -
    - 0 = No Restrictions		/deck-ansible/
    - 1 = Only Labs			/deck-ansible/?labs/
    - 2 = No Labs, only deck		/deck-ansible/?nolabs/
    -
    -######################################################
    -	 $htmldir){
    -	$pretty_htmldir = preg_replace("/^.*\/html_slides/","",$htmldir);
    -	$pretty_htmldir = preg_replace("/^.*\//","",$pretty_htmldir);
    -	$pretty_htmldir = preg_replace("/^[0-9]+_+/","",$pretty_htmldir);
    -	$pretty_htmldir = preg_replace("/^[0-9]+_+/","",$pretty_htmldir);
    -	$pretty_htmldir = preg_replace("/_+/"," ",$pretty_htmldir);
    -
    -	$html_files = explode("\n",shell_exec("find $htmldir -maxdepth 1 -type f -iname \"*html\" | sort"));
    -	$html_files = array_filter($html_files);
    -
    -	if (($pretty_htmldir) and (count($html_files))){
    -		if ($dry_run) print "\n#$key \"$pretty_htmldir\" contains " . count($html_files) . " slides\n\n";
    -		$labid = "LABS-" . preg_replace("/[^0-9a-zA-Z]+/","", $pretty_htmldir);
    -
    -		foreach( $html_files as $key => $htmlinc){
    -			if (($dry_run) and ($lab_limit != 1)) print "INCLUDE $htmlinc\n";
    -			$localdir = str_replace($html_dir . '/',"",$htmlinc);
    -			$localfile = preg_replace("/^.*\//","",$htmlinc);
    -
    -			if ((! $dry_run) and ($lab_limit != 1 )) {
    -				if ( (file_exists($htmlinc)) and (!preg_match("/^_/",$localdir)) and (!preg_match("/^_/",$localfile)) ) include($htmlinc);
    -			}
    -
    -		}
    -
    -		if ($lab_limit != 2){
    -			$lab_files = explode("\n",shell_exec("find $htmldir/labs -maxdepth 1 -type f -iname \"*html\" | sort"));
    -			$lab_files = array_filter($lab_files);
    -
    -			if (count($lab_files)){
    -				if ($dry_run){
    -					print "\nSTART-LAB-INCLUDE for \"$pretty_htmldir\"\n\n";
    -				}else{
    -					?>
    -	
    -
    -

    LABS:

    -

    Click down arrow to continune into the labs

    - -
    - $labinc){ - if ($dry_run){ - print "INCLUDE-LABS $labinc\n"; - }else{ - $labdir = str_replace($html_dir . '/',"",$labinc); - $labfile = preg_replace("/^.*\//","",$labinc); - - if ( (file_exists($labinc)) and (!preg_match("/^_/",$labdir)) and (!preg_match("/^_/",$labfile)) ) include($labinc); - - // print " $labinc\n"; - } - } - - if ($dry_run){ - print "\nEND-LAB-INCLUDE for \"$pretty_htmldir\"\n"; - }else{ - ?> -
    -

    LABS:
    Complete!

    -

    Click right to continune

    -
    - -
    - \n"; -if (! $dry_run) require_once("page_final.html"); - -?> - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/intro-to-ansible-tower.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/intro-to-ansible-tower.html deleted file mode 100644 index 759aefc..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/intro-to-ansible-tower.html +++ /dev/null @@ -1,539 +0,0 @@ - - - - - - - Introduction to Ansible Tower - - - - - - - - - - - - - - - - -
    - - - - - - -
    -
    -
    -
    - -

    Introduction to Ansible Tower

    - -
    -
    -

    What You Will Learn

    -

    Red Hat® Ansible® 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.


    -
      -
    • What is Ansible Tower
    • -
    • How Ansible Tower Works
    • -
    • Installing Ansible Tower
    • -
    • Key Features
    • -
    - -
    -
    -

    What is Ansible Tower?

    -

    Ansible Tower is an enterprise framework for controlling, securing and managing your Ansible automation – with a UI and RESTful API


    -
      -
    • Role-based access control keeps environments secure, and teams efficient
    • -
    • Non-privileged users can safely deploy entire applications with push-button deployment access
    • -
    • All Ansible automations are centrally logged, ensuring complete auditability and compliance
    • -
    -
    -
    - - -
    -
    -

    Platform Overview

    - - -
    -
    -

    Installing Ansible Tower

    -
    
    -# 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
    -          
    - -
    -
    -

    Server Requirements

    -
      -
    • 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).
    • -
    • A currently supported version of Mozilla Firefox or Google Chrome.
    • -
    • 2 GB RAM minimum (4+ GB RAM highly recommended)
    • -
    • 20 GB of dedicated hard disk space
    • -
    - -
    -
    -
    -

    Demo Time:
    Installing Ansible Tower

    - -
    -
    -

    Workshop:
    Installing Ansible Tower

    - -
    -
    -
    -

    Key Features of Ansible Tower

    -
      -
    • Dashboard and User Interface
    • -
    • User Base -- Organizations, Teams & Users
    • -
    • Credentials
    • -
    • Inventories
    • -
    • Projects
    • -
    • Job Templates & Jobs
    • -
    • Role Based Access Control (RBAC)
    • -
    - -
    -
    -

    Dashboard and User Interface

    -
    - -
    -
    -

    User Base


    -

    A user is an account to access Ansible Tower and its services given the permissions granted to it.

    -

    An organization is a logical collection of users, teams, projects, inventories and more. All entities belong to an organization with the exception of users.

    -

    Teams provide a means to implement role-based access control schemes and delegate responsibilities across organizations.

    - -
    -
    -

    Credentials

    -

    Credentials are utilized by Ansible Tower for authentication with various external resources:

    -
      -
    • Connecting to remote machines to run jobs
    • -
    • Syncing with inventory sources
    • -
    • Importing project content from version control systems
    • -
    • Connecting to and managing networking devices -
    -

    Centralized management of various credentials allows end users to leverage a secret without ever exposing that secret to them.

    - -
    -
    -

    Inventory

    -

    Inventory is a collection of hosts (nodes) with associated data and groupings that Ansible Tower can connect to and manage.

    -
      -
    • Hosts (nodes)
    • -
    • Groups
    • -
    • Inventory-specific data (variables)
    • -
    • Static or dynamic sources
    • -
    - -
    -
    -

    Projects

    -

    A Project is a logical collection of Ansible Playbooks, represented in Ansible Tower.

    -

    You can manage Playbooks and Playbook directories by placing them in a source code management system supported by Ansible Tower, including Git, Subversion, and Mercurial. -

    -
    -
    -

    Job Templates

    -

    A job template is a definition and set of parameters for running an Ansible Playbook.

    Job templates are useful to execute the same job many times and encourage the reuse of Ansible Playbook content and collaboration between teams.

    - -
    -
    -

    Jobs

    -

    A job is an instance of Ansible Tower launching an Ansible Playbook against an inventory of hosts.

    -
      -
    • Job results can be easily viewed
    • -
    • View the standard out for a more in-depth look
    • -
    - -
    -
    -

    Role Based Access Control (RBAC)

    -

    Role-Based Access Controls (RBAC) are built into Ansible Tower and allow administrators to delegate access to server inventories, organizations, and more. These controls allow Ansible Tower to help you increase security and streamline management of your Ansible automation.

    - -
    -
    -

    Role Based Access Control (RBAC)


    - -
    -
    -
    -

    Demo Time:
    Ansible Tower Basic Setup
    & Job Run

    - -
    -
    -

    Workshop:
    Ansible Tower Basic Setup
    & Your First Job Run

    - -
    -
    -
    -
    -

    Dynamic Inventory in Ansible Tower

    -

    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.

    -
      -
    • Groups are generated based on host metadata
    • -
    • Single source of truth saves time, avoids duplication and reduces human error
    • -
    • Dynamic and static inventory sources can be used together
    • -
    - -
    -
    -

    Demo:
    Ansible Tower Dynamic Inventory

    - -
    -
    -
    -
    -

    More with Ansible Tower

    -
      -
    • Job Status Updates
    • -
    • Activity Stream
    • -
    • Integrated Notifications
    • -
    • Schedule Jobs
    • -
    • Manage and Track Your Inventory
    • -
    • Self Service IT (User Surveys)
    • -
    • Remote Command Execution
    • -
    • External Logging
    • -
    • Multi-Playbook Workflows
    • -
    - -
    - - -
    -

    Job Status Update

    -
    -
    -

    Heads-up NOC-style automation dashboard displays everything going on in your Ansible environment.

    -
    -
    - -
    -
    - -
    - - -
    -

    Activity Stream

    -
    -
    - -
    -
    -

    Securely stores every Job that runs, and enables you to view them later, or export details through Ansible Tower’s API.

    -
    -
    - -
    - - -
    -

    Integrated Notifications

    -
    -
    -

    Stay informed of your automation status via integrated notifications. Connect Slack, Hipchat, SMS, email and more.

    -
    -
    - -
    -
    - -
    - - -
    -

    Schedule Jobs

    -
    -
    - -
    -
    -

    Enables you to any Job now, later, or forever.

    -
    -
    - -
    - - -
    -

    Manage and Track Your Inventory

    -
    -
    -

    Ansible Tower’s inventory syncing and provisioning callbacks allow nodes to request configuration on demand, enabling auto-scaling.

    -
    -
    - -
    -
    - -
    - - -
    -

    Self Service IT

    -
    -
    - -
    -
    -

    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.

    -
    -
    - -
    - - -
    -

    Remote Command Execution

    -
    -
    -

    Run simple tasks on any hosts with Ansible Tower's remote command execution. Add users or groups, reset passwords, restart a malfunctioning service or patch a critical security issue, quickly.

    -
    -
    - -
    -
    - -
    - - -
    -

    External Logging

    -
    -
    - -
    -
    -

    Connect Ansible Tower to your external logging and analytics provider to perform analysis of automation and event correlation across your entire environment.

    -
    -
    - -
    - - -
    -

    Multi-Playbook Workflows

    -
    -
    -

    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.

    -
    -
    - -
    -
    - -
    - - -
    -
    -

    Next Steps

    -
      -
    • It’s easy to get started
      ansible.com/get-started
    • -
    • Try Ansible Tower for free:
      ansible.com/tower-trial
    • -
    • Would you like to learn a lot more?
      redhat.com/en/services/training/do409-automation-ansible-ii-ansible-tower
    • -
    -
    -
    -
    - - - - - - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/js/GoKEV.js b/roles/lightbulb-ansiblered-deck/files/deck-ansible/js/GoKEV.js deleted file mode 100644 index 00c87c5..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/js/GoKEV.js +++ /dev/null @@ -1,42 +0,0 @@ -/* Scrolling Terminal Window Function - -Originally discovered via google search and available here - -https://www.sitepoint.com/community/t/auto-scrolling-a-div-with-overflow-scroll-auto/2291/2 -*/ - -function scrollDiv_init(scrollingWindow,ScrollRate) { - DivElmnt = document.getElementById(scrollingWindow,ScrollRate); - ReachedMaxScroll = false; - - DivElmnt.scrollTop = 0; - PreviousScrollTop = 0; - - ScrollInterval = setInterval('scrollDiv()', ScrollRate); -} - -function scrollDiv() { - - if (!ReachedMaxScroll) { - DivElmnt.scrollTop = PreviousScrollTop; - PreviousScrollTop++; - - ReachedMaxScroll = DivElmnt.scrollTop >= (DivElmnt.scrollHeight - DivElmnt.offsetHeight); - } - else { - ReachedMaxScroll = (DivElmnt.scrollTop == 0)?false:true; - - DivElmnt.scrollTop = PreviousScrollTop; - PreviousScrollTop--; - } -} - -function pauseDiv() { - clearInterval(ScrollInterval); -} - -function resumeDiv() { - PreviousScrollTop = DivElmnt.scrollTop; - ScrollInterval = setInterval('scrollDiv()', ScrollRate); -} - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/js/head.min.js b/roles/lightbulb-ansiblered-deck/files/deck-ansible/js/head.min.js deleted file mode 100644 index d9f87ba..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/js/head.min.js +++ /dev/null @@ -1,9 +0,0 @@ -/*! head.core - v1.0.2 */ -(function(n,t){"use strict";function r(n){a[a.length]=n}function k(n){var t=new RegExp(" ?\\b"+n+"\\b");c.className=c.className.replace(t,"")}function p(n,t){for(var i=0,r=n.length;in?(i.screensCss.gt&&r("gt-"+n),i.screensCss.gte&&r("gte-"+n)):tt);u.feature("landscape",fe?(i.browserCss.gt&&r("gt-"+f+e),i.browserCss.gte&&r("gte-"+f+e)):h2&&this[u+1]!==t)u&&r(this.slice(u,u+1).join("-").toLowerCase()+i.section);else{var f=n||"index",e=f.indexOf(".");e>0&&(f=f.substring(0,e));c.id=f.toLowerCase()+i.page;u||r("root"+i.section)}});u.screen={height:n.screen.height,width:n.screen.width};tt();b=0;n.addEventListener?n.addEventListener("resize",it,!1):n.attachEvent("onresize",it)})(window); -/*! head.css3 - v1.0.0 */ -(function(n,t){"use strict";function a(n){for(var r in n)if(i[n[r]]!==t)return!0;return!1}function r(n){var t=n.charAt(0).toUpperCase()+n.substr(1),i=(n+" "+c.join(t+" ")+t).split(" ");return!!a(i)}var h=n.document,o=h.createElement("i"),i=o.style,s=" -o- -moz- -ms- -webkit- -khtml- ".split(" "),c="Webkit Moz O ms Khtml".split(" "),l=n.head_conf&&n.head_conf.head||"head",u=n[l],f={gradient:function(){var n="background-image:";return i.cssText=(n+s.join("gradient(linear,left top,right bottom,from(#9f9),to(#fff));"+n)+s.join("linear-gradient(left top,#eee,#fff);"+n)).slice(0,-n.length),!!i.backgroundImage},rgba:function(){return i.cssText="background-color:rgba(0,0,0,0.5)",!!i.backgroundColor},opacity:function(){return o.style.opacity===""},textshadow:function(){return i.textShadow===""},multiplebgs:function(){i.cssText="background:url(https://),url(https://),red url(https://)";var n=(i.background||"").match(/url/g);return Object.prototype.toString.call(n)==="[object Array]"&&n.length===3},boxshadow:function(){return r("boxShadow")},borderimage:function(){return r("borderImage")},borderradius:function(){return r("borderRadius")},cssreflections:function(){return r("boxReflect")},csstransforms:function(){return r("transform")},csstransitions:function(){return r("transition")},touch:function(){return"ontouchstart"in n},retina:function(){return n.devicePixelRatio>1},fontface:function(){var t=u.browser.name,n=u.browser.version;switch(t){case"ie":return n>=9;case"chrome":return n>=13;case"ff":return n>=6;case"ios":return n>=5;case"android":return!1;case"webkit":return n>=5.1;case"opera":return n>=10;default:return!1}}};for(var e in f)f[e]&&u.feature(e,f[e].call(),!0);u.feature()})(window); -/*! head.load - v1.0.3 */ -(function(n,t){"use strict";function w(){}function u(n,t){if(n){typeof n=="object"&&(n=[].slice.call(n));for(var i=0,r=n.length;i' ); - - var leadingWs = text.match( /^\n?(\s*)/ )[1].length, - leadingTabs = text.match( /^\n?(\t*)/ )[1].length; - - if( leadingTabs > 0 ) { - text = text.replace( new RegExp('\\n?\\t{' + leadingTabs + '}','g'), '\n' ); - } - else if( leadingWs > 1 ) { - text = text.replace( new RegExp('\\n? {' + leadingWs + '}', 'g'), '\n' ); - } - - return text; - - } - - /** - * Given a markdown slide section element, this will - * return all arguments that aren't related to markdown - * parsing. Used to forward any other user-defined arguments - * to the output markdown slide. - */ - function getForwardedAttributes( section ) { - - var attributes = section.attributes; - var result = []; - - for( var i = 0, len = attributes.length; i < len; i++ ) { - var name = attributes[i].name, - value = attributes[i].value; - - // disregard attributes that are used for markdown loading/parsing - if( /data\-(markdown|separator|vertical|notes)/gi.test( name ) ) continue; - - if( value ) { - result.push( name + '="' + value + '"' ); - } - else { - result.push( name ); - } - } - - return result.join( ' ' ); - - } - - /** - * Inspects the given options and fills out default - * values for what's not defined. - */ - function getSlidifyOptions( options ) { - - options = options || {}; - options.separator = options.separator || DEFAULT_SLIDE_SEPARATOR; - options.notesSeparator = options.notesSeparator || DEFAULT_NOTES_SEPARATOR; - options.attributes = options.attributes || ''; - - return options; - - } - - /** - * Helper function for constructing a markdown slide. - */ - function createMarkdownSlide( content, options ) { - - options = getSlidifyOptions( options ); - - var notesMatch = content.split( new RegExp( options.notesSeparator, 'mgi' ) ); - - if( notesMatch.length === 2 ) { - content = notesMatch[0] + ''; - } - - // prevent script end tags in the content from interfering - // with parsing - content = content.replace( /<\/script>/g, SCRIPT_END_PLACEHOLDER ); - - return ''; - - } - - /** - * Parses a data string into multiple slides based - * on the passed in separator arguments. - */ - function slidify( markdown, options ) { - - options = getSlidifyOptions( options ); - - var separatorRegex = new RegExp( options.separator + ( options.verticalSeparator ? '|' + options.verticalSeparator : '' ), 'mg' ), - horizontalSeparatorRegex = new RegExp( options.separator ); - - var matches, - lastIndex = 0, - isHorizontal, - wasHorizontal = true, - content, - sectionStack = []; - - // iterate until all blocks between separators are stacked up - while( matches = separatorRegex.exec( markdown ) ) { - notes = null; - - // determine direction (horizontal by default) - isHorizontal = horizontalSeparatorRegex.test( matches[0] ); - - if( !isHorizontal && wasHorizontal ) { - // create vertical stack - sectionStack.push( [] ); - } - - // pluck slide content from markdown input - content = markdown.substring( lastIndex, matches.index ); - - if( isHorizontal && wasHorizontal ) { - // add to horizontal stack - sectionStack.push( content ); - } - else { - // add to vertical stack - sectionStack[sectionStack.length-1].push( content ); - } - - lastIndex = separatorRegex.lastIndex; - wasHorizontal = isHorizontal; - } - - // add the remaining slide - ( wasHorizontal ? sectionStack : sectionStack[sectionStack.length-1] ).push( markdown.substring( lastIndex ) ); - - var markdownSections = ''; - - // flatten the hierarchical stack, and insert
    tags - for( var i = 0, len = sectionStack.length; i < len; i++ ) { - // vertical - if( sectionStack[i] instanceof Array ) { - markdownSections += '
    '; - - sectionStack[i].forEach( function( child ) { - markdownSections += '
    ' + createMarkdownSlide( child, options ) + '
    '; - } ); - - markdownSections += '
    '; - } - else { - markdownSections += '
    ' + createMarkdownSlide( sectionStack[i], options ) + '
    '; - } - } - - return markdownSections; - - } - - /** - * Parses any current data-markdown slides, splits - * multi-slide markdown into separate sections and - * handles loading of external markdown. - */ - function processSlides() { - - var sections = document.querySelectorAll( '[data-markdown]'), - section; - - for( var i = 0, len = sections.length; i < len; i++ ) { - - section = sections[i]; - - if( section.getAttribute( 'data-markdown' ).length ) { - - var xhr = new XMLHttpRequest(), - url = section.getAttribute( 'data-markdown' ); - - datacharset = section.getAttribute( 'data-charset' ); - - // see https://developer.mozilla.org/en-US/docs/Web/API/element.getAttribute#Notes - if( datacharset != null && datacharset != '' ) { - xhr.overrideMimeType( 'text/html; charset=' + datacharset ); - } - - xhr.onreadystatechange = function() { - if( xhr.readyState === 4 ) { - // file protocol yields status code 0 (useful for local debug, mobile applications etc.) - if ( ( xhr.status >= 200 && xhr.status < 300 ) || xhr.status === 0 ) { - - section.outerHTML = slidify( xhr.responseText, { - separator: section.getAttribute( 'data-separator' ), - verticalSeparator: section.getAttribute( 'data-separator-vertical' ), - notesSeparator: section.getAttribute( 'data-separator-notes' ), - attributes: getForwardedAttributes( section ) - }); - - } - else { - - section.outerHTML = '
    ' + - 'ERROR: The attempt to fetch ' + url + ' failed with HTTP status ' + xhr.status + '.' + - 'Check your browser\'s JavaScript console for more details.' + - '

    Remember that you need to serve the presentation HTML from a HTTP server.

    ' + - '
    '; - - } - } - }; - - xhr.open( 'GET', url, false ); - - try { - xhr.send(); - } - catch ( e ) { - alert( 'Failed to get the Markdown file ' + url + '. Make sure that the presentation and the file are served by a HTTP server and the file can be found there. ' + e ); - } - - } - else if( section.getAttribute( 'data-separator' ) || section.getAttribute( 'data-separator-vertical' ) || section.getAttribute( 'data-separator-notes' ) ) { - - section.outerHTML = slidify( getMarkdownFromSlide( section ), { - separator: section.getAttribute( 'data-separator' ), - verticalSeparator: section.getAttribute( 'data-separator-vertical' ), - notesSeparator: section.getAttribute( 'data-separator-notes' ), - attributes: getForwardedAttributes( section ) - }); - - } - else { - section.innerHTML = createMarkdownSlide( getMarkdownFromSlide( section ) ); - } - } - - } - - /** - * Check if a node value has the attributes pattern. - * If yes, extract it and add that value as one or several attributes - * the the terget element. - * - * You need Cache Killer on Chrome to see the effect on any FOM transformation - * directly on refresh (F5) - * http://stackoverflow.com/questions/5690269/disabling-chrome-cache-for-website-development/7000899#answer-11786277 - */ - function addAttributeInElement( node, elementTarget, separator ) { - - var mardownClassesInElementsRegex = new RegExp( separator, 'mg' ); - var mardownClassRegex = new RegExp( "([^\"= ]+?)=\"([^\"=]+?)\"", 'mg' ); - var nodeValue = node.nodeValue; - if( matches = mardownClassesInElementsRegex.exec( nodeValue ) ) { - - var classes = matches[1]; - nodeValue = nodeValue.substring( 0, matches.index ) + nodeValue.substring( mardownClassesInElementsRegex.lastIndex ); - node.nodeValue = nodeValue; - while( matchesClass = mardownClassRegex.exec( classes ) ) { - elementTarget.setAttribute( matchesClass[1], matchesClass[2] ); - } - return true; - } - return false; - } - - /** - * Add attributes to the parent element of a text node, - * or the element of an attribute node. - */ - function addAttributes( section, element, previousElement, separatorElementAttributes, separatorSectionAttributes ) { - - if ( element != null && element.childNodes != undefined && element.childNodes.length > 0 ) { - previousParentElement = element; - for( var i = 0; i < element.childNodes.length; i++ ) { - childElement = element.childNodes[i]; - if ( i > 0 ) { - j = i - 1; - while ( j >= 0 ) { - aPreviousChildElement = element.childNodes[j]; - if ( typeof aPreviousChildElement.setAttribute == 'function' && aPreviousChildElement.tagName != "BR" ) { - previousParentElement = aPreviousChildElement; - break; - } - j = j - 1; - } - } - parentSection = section; - if( childElement.nodeName == "section" ) { - parentSection = childElement ; - previousParentElement = childElement ; - } - if ( typeof childElement.setAttribute == 'function' || childElement.nodeType == Node.COMMENT_NODE ) { - addAttributes( parentSection, childElement, previousParentElement, separatorElementAttributes, separatorSectionAttributes ); - } - } - } - - if ( element.nodeType == Node.COMMENT_NODE ) { - if ( addAttributeInElement( element, previousElement, separatorElementAttributes ) == false ) { - addAttributeInElement( element, section, separatorSectionAttributes ); - } - } - } - - /** - * Converts any current data-markdown slides in the - * DOM to HTML. - */ - function convertSlides() { - - var sections = document.querySelectorAll( '[data-markdown]'); - - for( var i = 0, len = sections.length; i < len; i++ ) { - - var section = sections[i]; - - // Only parse the same slide once - if( !section.getAttribute( 'data-markdown-parsed' ) ) { - - section.setAttribute( 'data-markdown-parsed', true ) - - var notes = section.querySelector( 'aside.notes' ); - var markdown = getMarkdownFromSlide( section ); - - section.innerHTML = marked( markdown ); - addAttributes( section, section, null, section.getAttribute( 'data-element-attributes' ) || - section.parentNode.getAttribute( 'data-element-attributes' ) || - DEFAULT_ELEMENT_ATTRIBUTES_SEPARATOR, - section.getAttribute( 'data-attributes' ) || - section.parentNode.getAttribute( 'data-attributes' ) || - DEFAULT_SLIDE_ATTRIBUTES_SEPARATOR); - - // If there were notes, we need to re-add them after - // having overwritten the section's HTML - if( notes ) { - section.appendChild( notes ); - } - - } - - } - - } - - // API - return { - - initialize: function() { - if( typeof marked === 'undefined' ) { - throw 'The reveal.js Markdown plugin requires marked to be loaded'; - } - - if( typeof hljs !== 'undefined' ) { - marked.setOptions({ - highlight: function( code, lang ) { - return hljs.highlightAuto( code, [lang] ).value; - } - }); - } - - var options = Reveal.getConfig().markdown; - - if ( options ) { - marked.setOptions( options ); - } - - processSlides(); - convertSlides(); - }, - - // TODO: Do these belong in the API? - processSlides: processSlides, - convertSlides: convertSlides, - slidify: slidify - - }; - -})); diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/js/marked.js b/roles/lightbulb-ansiblered-deck/files/deck-ansible/js/marked.js deleted file mode 100644 index 555c1dc..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/js/marked.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * marked - a markdown parser - * Copyright (c) 2011-2014, Christopher Jeffrey. (MIT Licensed) - * https://github.com/chjj/marked - */ -(function(){var block={newline:/^\n+/,code:/^( {4}[^\n]+\n*)+/,fences:noop,hr:/^( *[-*_]){3,} *(?:\n+|$)/,heading:/^ *(#{1,6}) *([^\n]+?) *#* *(?:\n+|$)/,nptable:noop,lheading:/^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/,blockquote:/^( *>[^\n]+(\n(?!def)[^\n]+)*\n*)+/,list:/^( *)(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,html:/^ *(?:comment *(?:\n|\s*$)|closed *(?:\n{2,}|\s*$)|closing *(?:\n{2,}|\s*$))/,def:/^ *\[([^\]]+)\]: *]+)>?(?: +["(]([^\n]+)[")])? *(?:\n+|$)/,table:noop,paragraph:/^((?:[^\n]+\n?(?!hr|heading|lheading|blockquote|tag|def))+)\n*/,text:/^[^\n]+/};block.bullet=/(?:[*+-]|\d+\.)/;block.item=/^( *)(bull) [^\n]*(?:\n(?!\1bull )[^\n]*)*/;block.item=replace(block.item,"gm")(/bull/g,block.bullet)();block.list=replace(block.list)(/bull/g,block.bullet)("hr","\\n+(?=\\1?(?:[-*_] *){3,}(?:\\n+|$))")("def","\\n+(?="+block.def.source+")")();block.blockquote=replace(block.blockquote)("def",block.def)();block._tag="(?!(?:"+"a|em|strong|small|s|cite|q|dfn|abbr|data|time|code"+"|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo"+"|span|br|wbr|ins|del|img)\\b)\\w+(?!:/|[^\\w\\s@]*@)\\b";block.html=replace(block.html)("comment",//)("closed",/<(tag)[\s\S]+?<\/\1>/)("closing",/])*?>/)(/tag/g,block._tag)();block.paragraph=replace(block.paragraph)("hr",block.hr)("heading",block.heading)("lheading",block.lheading)("blockquote",block.blockquote)("tag","<"+block._tag)("def",block.def)();block.normal=merge({},block);block.gfm=merge({},block.normal,{fences:/^ *(`{3,}|~{3,})[ \.]*(\S+)? *\n([\s\S]*?)\s*\1 *(?:\n+|$)/,paragraph:/^/,heading:/^ *(#{1,6}) +([^\n]+?) *#* *(?:\n+|$)/});block.gfm.paragraph=replace(block.paragraph)("(?!","(?!"+block.gfm.fences.source.replace("\\1","\\2")+"|"+block.list.source.replace("\\1","\\3")+"|")();block.tables=merge({},block.gfm,{nptable:/^ *(\S.*\|.*)\n *([-:]+ *\|[-| :]*)\n((?:.*\|.*(?:\n|$))*)\n*/,table:/^ *\|(.+)\n *\|( *[-:]+[-| :]*)\n((?: *\|.*(?:\n|$))*)\n*/});function Lexer(options){this.tokens=[];this.tokens.links={};this.options=options||marked.defaults;this.rules=block.normal;if(this.options.gfm){if(this.options.tables){this.rules=block.tables}else{this.rules=block.gfm}}}Lexer.rules=block;Lexer.lex=function(src,options){var lexer=new Lexer(options);return lexer.lex(src)};Lexer.prototype.lex=function(src){src=src.replace(/\r\n|\r/g,"\n").replace(/\t/g," ").replace(/\u00a0/g," ").replace(/\u2424/g,"\n");return this.token(src,true)};Lexer.prototype.token=function(src,top,bq){var src=src.replace(/^ +$/gm,""),next,loose,cap,bull,b,item,space,i,l;while(src){if(cap=this.rules.newline.exec(src)){src=src.substring(cap[0].length);if(cap[0].length>1){this.tokens.push({type:"space"})}}if(cap=this.rules.code.exec(src)){src=src.substring(cap[0].length);cap=cap[0].replace(/^ {4}/gm,"");this.tokens.push({type:"code",text:!this.options.pedantic?cap.replace(/\n+$/,""):cap});continue}if(cap=this.rules.fences.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:"code",lang:cap[2],text:cap[3]||""});continue}if(cap=this.rules.heading.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:"heading",depth:cap[1].length,text:cap[2]});continue}if(top&&(cap=this.rules.nptable.exec(src))){src=src.substring(cap[0].length);item={type:"table",header:cap[1].replace(/^ *| *\| *$/g,"").split(/ *\| */),align:cap[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:cap[3].replace(/\n$/,"").split("\n")};for(i=0;i ?/gm,"");this.token(cap,top,true);this.tokens.push({type:"blockquote_end"});continue}if(cap=this.rules.list.exec(src)){src=src.substring(cap[0].length);bull=cap[2];this.tokens.push({type:"list_start",ordered:bull.length>1});cap=cap[0].match(this.rules.item);next=false;l=cap.length;i=0;for(;i1&&b.length>1)){src=cap.slice(i+1).join("\n")+src;i=l-1}}loose=next||/\n\n(?!\s*$)/.test(item);if(i!==l-1){next=item.charAt(item.length-1)==="\n";if(!loose)loose=next}this.tokens.push({type:loose?"loose_item_start":"list_item_start"});this.token(item,false,bq);this.tokens.push({type:"list_item_end"})}this.tokens.push({type:"list_end"});continue}if(cap=this.rules.html.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:this.options.sanitize?"paragraph":"html",pre:!this.options.sanitizer&&(cap[1]==="pre"||cap[1]==="script"||cap[1]==="style"),text:cap[0]});continue}if(!bq&&top&&(cap=this.rules.def.exec(src))){src=src.substring(cap[0].length);this.tokens.links[cap[1].toLowerCase()]={href:cap[2],title:cap[3]};continue}if(top&&(cap=this.rules.table.exec(src))){src=src.substring(cap[0].length);item={type:"table",header:cap[1].replace(/^ *| *\| *$/g,"").split(/ *\| */),align:cap[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:cap[3].replace(/(?: *\| *)?\n$/,"").split("\n")};for(i=0;i])/,autolink:/^<([^ >]+(@|:\/)[^ >]+)>/,url:noop,tag:/^|^<\/?\w+(?:"[^"]*"|'[^']*'|[^'">])*?>/,link:/^!?\[(inside)\]\(href\)/,reflink:/^!?\[(inside)\]\s*\[([^\]]*)\]/,nolink:/^!?\[((?:\[[^\]]*\]|[^\[\]])*)\]/,strong:/^__([\s\S]+?)__(?!_)|^\*\*([\s\S]+?)\*\*(?!\*)/,em:/^\b_((?:[^_]|__)+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,code:/^(`+)\s*([\s\S]*?[^`])\s*\1(?!`)/,br:/^ {2,}\n(?!\s*$)/,del:noop,text:/^[\s\S]+?(?=[\\?(?:\s+['"]([\s\S]*?)['"])?\s*/;inline.link=replace(inline.link)("inside",inline._inside)("href",inline._href)();inline.reflink=replace(inline.reflink)("inside",inline._inside)();inline.normal=merge({},inline);inline.pedantic=merge({},inline.normal,{strong:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,em:/^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/});inline.gfm=merge({},inline.normal,{escape:replace(inline.escape)("])","~|])")(),url:/^(https?:\/\/[^\s<]+[^<.,:;"')\]\s])/,del:/^~~(?=\S)([\s\S]*?\S)~~/,text:replace(inline.text)("]|","~]|")("|","|https?://|")()});inline.breaks=merge({},inline.gfm,{br:replace(inline.br)("{2,}","*")(),text:replace(inline.gfm.text)("{2,}","*")()});function InlineLexer(links,options){this.options=options||marked.defaults;this.links=links;this.rules=inline.normal;this.renderer=this.options.renderer||new Renderer;this.renderer.options=this.options;if(!this.links){throw new Error("Tokens array requires a `links` property.")}if(this.options.gfm){if(this.options.breaks){this.rules=inline.breaks}else{this.rules=inline.gfm}}else if(this.options.pedantic){this.rules=inline.pedantic}}InlineLexer.rules=inline;InlineLexer.output=function(src,links,options){var inline=new InlineLexer(links,options);return inline.output(src)};InlineLexer.prototype.output=function(src){var out="",link,text,href,cap;while(src){if(cap=this.rules.escape.exec(src)){src=src.substring(cap[0].length);out+=cap[1];continue}if(cap=this.rules.autolink.exec(src)){src=src.substring(cap[0].length);if(cap[2]==="@"){text=cap[1].charAt(6)===":"?this.mangle(cap[1].substring(7)):this.mangle(cap[1]);href=this.mangle("mailto:")+text}else{text=escape(cap[1]);href=text}out+=this.renderer.link(href,null,text);continue}if(!this.inLink&&(cap=this.rules.url.exec(src))){src=src.substring(cap[0].length);text=escape(cap[1]);href=text;out+=this.renderer.link(href,null,text);continue}if(cap=this.rules.tag.exec(src)){if(!this.inLink&&/^/i.test(cap[0])){this.inLink=false}src=src.substring(cap[0].length);out+=this.options.sanitize?this.options.sanitizer?this.options.sanitizer(cap[0]):escape(cap[0]):cap[0];continue}if(cap=this.rules.link.exec(src)){src=src.substring(cap[0].length);this.inLink=true;out+=this.outputLink(cap,{href:cap[2],title:cap[3]});this.inLink=false;continue}if((cap=this.rules.reflink.exec(src))||(cap=this.rules.nolink.exec(src))){src=src.substring(cap[0].length);link=(cap[2]||cap[1]).replace(/\s+/g," ");link=this.links[link.toLowerCase()];if(!link||!link.href){out+=cap[0].charAt(0);src=cap[0].substring(1)+src;continue}this.inLink=true;out+=this.outputLink(cap,link);this.inLink=false;continue}if(cap=this.rules.strong.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.strong(this.output(cap[2]||cap[1]));continue}if(cap=this.rules.em.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.em(this.output(cap[2]||cap[1]));continue}if(cap=this.rules.code.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.codespan(escape(cap[2],true));continue}if(cap=this.rules.br.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.br();continue}if(cap=this.rules.del.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.del(this.output(cap[1]));continue}if(cap=this.rules.text.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.text(escape(this.smartypants(cap[0])));continue}if(src){throw new Error("Infinite loop on byte: "+src.charCodeAt(0))}}return out};InlineLexer.prototype.outputLink=function(cap,link){var href=escape(link.href),title=link.title?escape(link.title):null;return cap[0].charAt(0)!=="!"?this.renderer.link(href,title,this.output(cap[1])):this.renderer.image(href,title,escape(cap[1]))};InlineLexer.prototype.smartypants=function(text){if(!this.options.smartypants)return text;return text.replace(/---/g,"—").replace(/--/g,"–").replace(/(^|[-\u2014/(\[{"\s])'/g,"$1‘").replace(/'/g,"’").replace(/(^|[-\u2014/(\[{\u2018\s])"/g,"$1“").replace(/"/g,"”").replace(/\.{3}/g,"…")};InlineLexer.prototype.mangle=function(text){if(!this.options.mangle)return text;var out="",l=text.length,i=0,ch;for(;i.5){ch="x"+ch.toString(16)}out+="&#"+ch+";"}return out};function Renderer(options){this.options=options||{}}Renderer.prototype.code=function(code,lang,escaped){if(this.options.highlight){var out=this.options.highlight(code,lang);if(out!=null&&out!==code){escaped=true;code=out}}if(!lang){return"
    "+(escaped?code:escape(code,true))+"\n
    "}return'
    '+(escaped?code:escape(code,true))+"\n
    \n"};Renderer.prototype.blockquote=function(quote){return"
    \n"+quote+"
    \n"};Renderer.prototype.html=function(html){return html};Renderer.prototype.heading=function(text,level,raw){return"'+text+"\n"};Renderer.prototype.hr=function(){return this.options.xhtml?"
    \n":"
    \n"};Renderer.prototype.list=function(body,ordered){var type=ordered?"ol":"ul";return"<"+type+">\n"+body+"\n"};Renderer.prototype.listitem=function(text){return"
  • "+text+"
  • \n"};Renderer.prototype.paragraph=function(text){return"

    "+text+"

    \n"};Renderer.prototype.table=function(header,body){return"\n"+"\n"+header+"\n"+"\n"+body+"\n"+"
    \n"};Renderer.prototype.tablerow=function(content){return"\n"+content+"\n"};Renderer.prototype.tablecell=function(content,flags){var type=flags.header?"th":"td";var tag=flags.align?"<"+type+' style="text-align:'+flags.align+'">':"<"+type+">";return tag+content+"\n"};Renderer.prototype.strong=function(text){return""+text+""};Renderer.prototype.em=function(text){return""+text+""};Renderer.prototype.codespan=function(text){return""+text+""};Renderer.prototype.br=function(){return this.options.xhtml?"
    ":"
    "};Renderer.prototype.del=function(text){return""+text+""};Renderer.prototype.link=function(href,title,text){if(this.options.sanitize){try{var prot=decodeURIComponent(unescape(href)).replace(/[^\w:]/g,"").toLowerCase()}catch(e){return""}if(prot.indexOf("javascript:")===0||prot.indexOf("vbscript:")===0){return""}}var out='
    ";return out};Renderer.prototype.image=function(href,title,text){var out=''+text+'":">";return out};Renderer.prototype.text=function(text){return text};function Parser(options){this.tokens=[];this.token=null;this.options=options||marked.defaults;this.options.renderer=this.options.renderer||new Renderer;this.renderer=this.options.renderer;this.renderer.options=this.options}Parser.parse=function(src,options,renderer){var parser=new Parser(options,renderer);return parser.parse(src)};Parser.prototype.parse=function(src){this.inline=new InlineLexer(src.links,this.options,this.renderer);this.tokens=src.reverse();var out="";while(this.next()){out+=this.tok()}return out};Parser.prototype.next=function(){return this.token=this.tokens.pop()};Parser.prototype.peek=function(){return this.tokens[this.tokens.length-1]||0};Parser.prototype.parseText=function(){var body=this.token.text;while(this.peek().type==="text"){body+="\n"+this.next().text}return this.inline.output(body)};Parser.prototype.tok=function(){switch(this.token.type){case"space":{return""}case"hr":{return this.renderer.hr()}case"heading":{return this.renderer.heading(this.inline.output(this.token.text),this.token.depth,this.token.text)}case"code":{return this.renderer.code(this.token.text,this.token.lang,this.token.escaped)}case"table":{var header="",body="",i,row,cell,flags,j;cell="";for(i=0;i/g,">").replace(/"/g,""").replace(/'/g,"'")}function unescape(html){return html.replace(/&([#\w]+);/g,function(_,n){n=n.toLowerCase();if(n==="colon")return":";if(n.charAt(0)==="#"){return n.charAt(1)==="x"?String.fromCharCode(parseInt(n.substring(2),16)):String.fromCharCode(+n.substring(1))}return""})}function replace(regex,opt){regex=regex.source;opt=opt||"";return function self(name,val){if(!name)return new RegExp(regex,opt);val=val.source||val;val=val.replace(/(^|[^\[])\^/g,"$1");regex=regex.replace(name,val);return self}}function noop(){}noop.exec=noop;function merge(obj){var i=1,target,key;for(;iAn error occured:

    "+escape(e.message+"",true)+"
    "}throw e}}marked.options=marked.setOptions=function(opt){merge(marked.defaults,opt);return marked};marked.defaults={gfm:true,tables:true,breaks:false,pedantic:false,sanitize:false,sanitizer:null,mangle:true,smartLists:false,silent:false,highlight:null,langPrefix:"lang-",smartypants:false,headerPrefix:"",renderer:new Renderer,xhtml:false};marked.Parser=Parser;marked.parser=Parser.parse;marked.Renderer=Renderer;marked.Lexer=Lexer;marked.lexer=Lexer.lex;marked.InlineLexer=InlineLexer;marked.inlineLexer=InlineLexer.output;marked.parse=marked;if(typeof module!=="undefined"&&typeof exports==="object"){module.exports=marked}else if(typeof define==="function"&&define.amd){define(function(){return marked})}else{this.marked=marked}}).call(function(){return this||(typeof window!=="undefined"?window:global)}()); \ No newline at end of file diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/js/notes.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/js/notes.html deleted file mode 100644 index 4fda869..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/js/notes.html +++ /dev/null @@ -1,609 +0,0 @@ - - - - - - reveal.js - Slide Notes - - - - - - -
    -
    Upcoming
    -
    -
    -

    Time Click to Reset

    -
    - 0:00 AM -
    -
    - 00:00:00 -
    -
    -
    - - -
    -
    - - -
    - - - - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/js/notes.js b/roles/lightbulb-ansiblered-deck/files/deck-ansible/js/notes.js deleted file mode 100644 index 46bf5de..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/js/notes.js +++ /dev/null @@ -1,145 +0,0 @@ -/** - * Handles opening of and synchronization with the reveal.js - * notes window. - * - * Handshake process: - * 1. This window posts 'connect' to notes window - * - Includes URL of presentation to show - * 2. Notes window responds with 'connected' when it is available - * 3. This window proceeds to send the current presentation state - * to the notes window - */ -var RevealNotes = (function() { - - function openNotes( notesFilePath ) { - - if( !notesFilePath ) { - var jsFileLocation = document.querySelector('script[src$="notes.js"]').src; // this js file path - jsFileLocation = jsFileLocation.replace(/notes\.js(\?.*)?$/, ''); // the js folder path - notesFilePath = jsFileLocation + 'notes.html'; - } - - var notesPopup = window.open( notesFilePath, 'reveal.js - Notes', 'width=1100,height=700' ); - - /** - * Connect to the notes window through a postmessage handshake. - * Using postmessage enables us to work in situations where the - * origins differ, such as a presentation being opened from the - * file system. - */ - function connect() { - // Keep trying to connect until we get a 'connected' message back - var connectInterval = setInterval( function() { - notesPopup.postMessage( JSON.stringify( { - namespace: 'reveal-notes', - type: 'connect', - url: window.location.protocol + '//' + window.location.host + window.location.pathname + window.location.search, - state: Reveal.getState() - } ), '*' ); - }, 500 ); - - window.addEventListener( 'message', function( event ) { - var data = JSON.parse( event.data ); - if( data && data.namespace === 'reveal-notes' && data.type === 'connected' ) { - clearInterval( connectInterval ); - onConnected(); - } - } ); - } - - /** - * Posts the current slide data to the notes window - */ - function post(event) { - - var slideElement = Reveal.getCurrentSlide(), - notesElement = slideElement.querySelector( 'aside.notes' ); - - var messageData = { - namespace: 'reveal-notes', - type: 'state', - notes: '', - markdown: false, - whitespace: 'normal', - state: Reveal.getState() - }; - - // Look for notes defined in a fragment, if it is a fragmentshown event - if (event && event.hasOwnProperty('fragment')) { - var innerNotes = event.fragment.querySelector( 'aside.notes' ); - - if ( innerNotes) { - notesElement = innerNotes; - } - } - - // Look for notes defined in a slide attribute - if( slideElement.hasAttribute( 'data-notes' ) ) { - messageData.notes = slideElement.getAttribute( 'data-notes' ); - messageData.whitespace = 'pre-wrap'; - } - - // Look for notes defined in an aside element - if( notesElement ) { - messageData.notes = notesElement.innerHTML; - messageData.markdown = typeof notesElement.getAttribute( 'data-markdown' ) === 'string'; - } - - notesPopup.postMessage( JSON.stringify( messageData ), '*' ); - - } - - /** - * Called once we have established a connection to the notes - * window. - */ - function onConnected() { - - // Monitor events that trigger a change in state - Reveal.addEventListener( 'slidechanged', post ); - Reveal.addEventListener( 'fragmentshown', post ); - Reveal.addEventListener( 'fragmenthidden', post ); - Reveal.addEventListener( 'overviewhidden', post ); - Reveal.addEventListener( 'overviewshown', post ); - Reveal.addEventListener( 'paused', post ); - Reveal.addEventListener( 'resumed', post ); - - // Post the initial state - post(); - - } - - connect(); - - } - - if( !/receiver/i.test( window.location.search ) ) { - - // If the there's a 'notes' query set, open directly - if( window.location.search.match( /(\?|\&)notes/gi ) !== null ) { - openNotes(); - } - - // Open the notes when the 's' key is hit - document.addEventListener( 'keydown', function( event ) { - // Disregard the event if the target is editable or a - // modifier is present - if ( document.querySelector( ':focus' ) !== null || event.shiftKey || event.altKey || event.ctrlKey || event.metaKey ) return; - - // Disregard the event if keyboard is disabled - if ( Reveal.getConfig().keyboard === false ) return; - - if( event.keyCode === 83 ) { - event.preventDefault(); - openNotes(); - } - }, false ); - - // Show our keyboard shortcut in the reveal.js help overlay - if( window.Reveal ) Reveal.registerKeyboardShortcut( 'S', 'Speaker notes view' ); - - } - - return { open: openNotes }; - -})(); diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/js/prism-yaml.min.js b/roles/lightbulb-ansiblered-deck/files/deck-ansible/js/prism-yaml.min.js deleted file mode 100644 index f5c9e72..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/js/prism-yaml.min.js +++ /dev/null @@ -1 +0,0 @@ -Prism.languages.yaml={scalar:{pattern:/([\-:]\s*(![^\s]+)?[ \t]*[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)[^\r\n]+(?:\3[^\r\n]+)*)/,lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:/(\s*(?:^|[:\-,[{\r\n?])[ \t]*(![^\s]+)?[ \t]*)[^\r\n{[\]},#\s]+?(?=\s*:\s)/,lookbehind:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:/([:\-,[{]\s*(![^\s]+)?[ \t]*)(\d{4}-\d\d?-\d\d?([tT]|[ \t]+)\d\d?:\d{2}:\d{2}(\.\d*)?[ \t]*(Z|[-+]\d\d?(:\d{2})?)?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(:\d{2}(\.\d*)?)?)(?=[ \t]*($|,|]|}))/m,lookbehind:!0,alias:"number"},"boolean":{pattern:/([:\-,[{]\s*(![^\s]+)?[ \t]*)(true|false)[ \t]*(?=$|,|]|})/im,lookbehind:!0,alias:"important"},"null":{pattern:/([:\-,[{]\s*(![^\s]+)?[ \t]*)(null|~)[ \t]*(?=$|,|]|})/im,lookbehind:!0,alias:"important"},string:{pattern:/([:\-,[{]\s*(![^\s]+)?[ \t]*)("(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*')(?=[ \t]*($|,|]|}))/m,lookbehind:!0},number:{pattern:/([:\-,[{]\s*(![^\s]+)?[ \t]*)[+\-]?(0x[\da-f]+|0o[0-7]+|(\d+\.?\d*|\.?\d+)(e[\+\-]?\d+)?|\.inf|\.nan)[ \t]*(?=$|,|]|})/im,lookbehind:!0},tag:/![^\s]+/,important:/[&*][\w]+/,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./}; \ No newline at end of file diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/js/prism.min.js b/roles/lightbulb-ansiblered-deck/files/deck-ansible/js/prism.min.js deleted file mode 100644 index 32cb868..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/js/prism.min.js +++ /dev/null @@ -1,2 +0,0 @@ -var _self="undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{},Prism=function(){var e=/\blang(?:uage)?-(\w+)\b/i,t=0,a=_self.Prism={util:{encode:function(e){return e instanceof n?new n(e.type,a.util.encode(e.content),e.alias):"Array"===a.util.type(e)?e.map(a.util.encode):e.replace(/&/g,"&").replace(/e.length)break e;if(!(v instanceof r)){g.lastIndex=0;var w=g.exec(v),k=1;if(!w&&d&&y!=i.length-1){if(g.lastIndex=b,w=g.exec(e),!w)break;for(var P=w.index+(p?w[1].length:0),x=w.index+w[0].length,A=y,j=b,_=i.length;A<_&&j=j&&(++y,b=j);if(i[y]instanceof r||i[A-1].greedy)continue;k=A-y,v=e.slice(b,j),w.index-=b}if(w){p&&(m=w[1].length);var P=w.index+m,w=w[0].slice(m),x=P+w.length,C=v.slice(0,P),E=v.slice(x),N=[y,k];C&&N.push(C);var S=new r(l,c?a.tokenize(w,c):w,h,w,d);N.push(S),E&&N.push(E),Array.prototype.splice.apply(i,N)}}}}}return i},hooks:{all:{},add:function(e,t){var n=a.hooks.all;n[e]=n[e]||[],n[e].push(t)},run:function(e,t){var n=a.hooks.all[e];if(n&&n.length)for(var r,i=0;r=n[i++];)r(t)}}},n=a.Token=function(e,t,a,n,r){this.type=e,this.content=t,this.alias=a,this.length=0|(n||"").length,this.greedy=!!r};if(n.stringify=function(e,t,r){if("string"==typeof e)return e;if("Array"===a.util.type(e))return e.map(function(a){return n.stringify(a,t,e)}).join("");var i={type:e.type,content:n.stringify(e.content,t,r),tag:"span",classes:["token",e.type],attributes:{},language:t,parent:r};if("comment"==i.type&&(i.attributes.spellcheck="true"),e.alias){var s="Array"===a.util.type(e.alias)?e.alias:[e.alias];Array.prototype.push.apply(i.classes,s)}a.hooks.run("wrap",i);var l=Object.keys(i.attributes).map(function(e){return e+'="'+(i.attributes[e]||"").replace(/"/g,""")+'"'}).join(" ");return"<"+i.tag+' class="'+i.classes.join(" ")+'"'+(l?" "+l:"")+">"+i.content+""},!_self.document)return _self.addEventListener?(_self.addEventListener("message",function(e){var t=JSON.parse(e.data),n=t.language,r=t.code,i=t.immediateClose;_self.postMessage(a.highlight(r,a.languages[n],n)),i&&_self.close()},!1),_self.Prism):_self.Prism;var r=document.currentScript||[].slice.call(document.getElementsByTagName("script")).pop();return r&&(a.filename=r.src,document.addEventListener&&!r.hasAttribute("data-manual")&&("loading"!==document.readyState?window.requestAnimationFrame?window.requestAnimationFrame(a.highlightAll):window.setTimeout(a.highlightAll,16):document.addEventListener("DOMContentLoaded",a.highlightAll))),_self.Prism}();"undefined"!=typeof module&&module.exports&&(module.exports=Prism),"undefined"!=typeof global&&(global.Prism=Prism),Prism.languages.markup={comment://,prolog:/<\?[\w\W]+?\?>/,doctype://i,cdata://i,tag:{pattern:/<\/?(?!\d)[^\s>\/=$<]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\\1|\\?(?!\1)[\w\W])*\1|[^\s'">=]+))?)*\s*\/?>/i,inside:{tag:{pattern:/^<\/?[^\s>\/]+/i,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"attr-value":{pattern:/=(?:('|")[\w\W]*?(\1)|[^\s>]+)/i,inside:{punctuation:/[=>"']/}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:/&#?[\da-z]{1,8};/i},Prism.hooks.add("wrap",function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))}),Prism.languages.xml=Prism.languages.markup,Prism.languages.html=Prism.languages.markup,Prism.languages.mathml=Prism.languages.markup,Prism.languages.svg=Prism.languages.markup,Prism.languages.css={comment:/\/\*[\w\W]*?\*\//,atrule:{pattern:/@[\w-]+?.*?(;|(?=\s*\{))/i,inside:{rule:/@[\w-]+/}},url:/url\((?:(["'])(\\(?:\r\n|[\w\W])|(?!\1)[^\\\r\n])*\1|.*?)\)/i,selector:/[^\{\}\s][^\{\};]*?(?=\s*\{)/,string:{pattern:/("|')(\\(?:\r\n|[\w\W])|(?!\1)[^\\\r\n])*\1/,greedy:!0},property:/(\b|\B)[\w-]+(?=\s*:)/i,important:/\B!important\b/i,function:/[-a-z0-9]+(?=\()/i,punctuation:/[(){};:]/},Prism.languages.css.atrule.inside.rest=Prism.util.clone(Prism.languages.css),Prism.languages.markup&&(Prism.languages.insertBefore("markup","tag",{style:{pattern:/()[\w\W]*?(?=<\/style>)/i,lookbehind:!0,inside:Prism.languages.css,alias:"language-css"}}),Prism.languages.insertBefore("inside","attr-value",{"style-attr":{pattern:/\s*style=("|').*?\1/i,inside:{"attr-name":{pattern:/^\s*style/i,inside:Prism.languages.markup.tag.inside},punctuation:/^\s*=\s*['"]|['"]\s*$/,"attr-value":{pattern:/.+/i,inside:Prism.languages.css}},alias:"language-css"}},Prism.languages.markup.tag)),Prism.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\w\W]*?\*\//,lookbehind:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0}],string:{pattern:/(["'])(\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/((?:\b(?:class|interface|extends|implements|trait|instanceof|new)\s+)|(?:catch\s+\())[a-z0-9_\.\\]+/i,lookbehind:!0,inside:{punctuation:/(\.|\\)/}},keyword:/\b(if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/,boolean:/\b(true|false)\b/,function:/[a-z0-9_]+(?=\()/i,number:/\b-?(?:0x[\da-f]+|\d*\.?\d+(?:e[+-]?\d+)?)\b/i,operator:/--?|\+\+?|!=?=?|<=?|>=?|==?=?|&&?|\|\|?|\?|\*|\/|~|\^|%/,punctuation:/[{}[\];(),.:]/},Prism.languages.javascript=Prism.languages.extend("clike",{keyword:/\b(as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|var|void|while|with|yield)\b/,number:/\b-?(0x[\dA-Fa-f]+|0b[01]+|0o[0-7]+|\d*\.?\d+([Ee][+-]?\d+)?|NaN|Infinity)\b/,function:/[_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*(?=\()/i,operator:/--?|\+\+?|!=?=?|<=?|>=?|==?=?|&&?|\|\|?|\?|\*\*?|\/|~|\^|%|\.{3}/}),Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:/(^|[^\/])\/(?!\/)(\[.+?]|\\.|[^\/\\\r\n])+\/[gimyu]{0,5}(?=\s*($|[\r\n,.;})]))/,lookbehind:!0,greedy:!0}}),Prism.languages.insertBefore("javascript","string",{"template-string":{pattern:/`(?:\\\\|\\?[^\\])*?`/,greedy:!0,inside:{interpolation:{pattern:/\$\{[^}]+\}/,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:Prism.languages.javascript}},string:/[\s\S]+/}}}),Prism.languages.markup&&Prism.languages.insertBefore("markup","tag",{script:{pattern:/()[\w\W]*?(?=<\/script>)/i,lookbehind:!0,inside:Prism.languages.javascript,alias:"language-javascript"}}),Prism.languages.js=Prism.languages.javascript,function(){"undefined"!=typeof self&&self.Prism&&self.document&&document.querySelector&&(self.Prism.fileHighlight=function(){var e={js:"javascript",py:"python",rb:"ruby",ps1:"powershell",psm1:"powershell",sh:"bash",bat:"batch",h:"c",tex:"latex"};Array.prototype.forEach&&Array.prototype.slice.call(document.querySelectorAll("pre[data-src]")).forEach(function(t){for(var a,n=t.getAttribute("data-src"),r=t,i=/\blang(?:uage)?-(?!\*)(\w+)\b/i;r&&!i.test(r.className);)r=r.parentNode;if(r&&(a=(t.className.match(i)||[,""])[1]),!a){var s=(n.match(/\.(\w+)$/)||[,""])[1];a=e[s]||s}var l=document.createElement("code");l.className="language-"+a,t.textContent="",l.textContent="Loading…",t.appendChild(l);var o=new XMLHttpRequest;o.open("GET",n,!0),o.onreadystatechange=function(){4==o.readyState&&(o.status<400&&o.responseText?(l.textContent=o.responseText,Prism.highlightElement(l)):o.status>=400?l.textContent="✖ Error "+o.status+" while fetching file: "+o.statusText:l.textContent="✖ Error: File does not exist or is empty")},o.send(null)})},document.addEventListener("DOMContentLoaded",self.Prism.fileHighlight))}(); -//# sourceMappingURL=prism.min.js.map \ No newline at end of file diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/js/reveal.js b/roles/lightbulb-ansiblered-deck/files/deck-ansible/js/reveal.js deleted file mode 100644 index 9251dc0..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/js/reveal.js +++ /dev/null @@ -1,4961 +0,0 @@ -/*! - * reveal.js - * http://lab.hakim.se/reveal-js - * MIT licensed - * - * Copyright (C) 2016 Hakim El Hattab, http://hakim.se - */ -(function( root, factory ) { - if( typeof define === 'function' && define.amd ) { - // AMD. Register as an anonymous module. - define( function() { - root.Reveal = factory(); - return root.Reveal; - } ); - } else if( typeof exports === 'object' ) { - // Node. Does not work with strict CommonJS. - module.exports = factory(); - } else { - // Browser globals. - root.Reveal = factory(); - } -}( this, function() { - - 'use strict'; - - var Reveal; - - // The reveal.js version - var VERSION = '3.4.1'; - - var SLIDES_SELECTOR = '.slides section', - HORIZONTAL_SLIDES_SELECTOR = '.slides>section', - VERTICAL_SLIDES_SELECTOR = '.slides>section.present>section', - HOME_SLIDE_SELECTOR = '.slides>section:first-of-type', - UA = navigator.userAgent, - - // Configuration defaults, can be overridden at initialization time - config = { - - // The "normal" size of the presentation, aspect ratio will be preserved - // when the presentation is scaled to fit different resolutions - width: 960, - height: 700, - - // Factor of the display size that should remain empty around the content - margin: 0.04, - - // Bounds for smallest/largest possible scale to apply to content - minScale: 0.2, - maxScale: 2.0, - - // Display controls in the bottom right corner - controls: true, - - // Display a presentation progress bar - progress: true, - - // Display the page number of the current slide - slideNumber: false, - - // Push each slide change to the browser history - history: false, - - // Enable keyboard shortcuts for navigation - keyboard: true, - - // Optional function that blocks keyboard events when retuning false - keyboardCondition: null, - - // Enable the slide overview mode - overview: true, - - // Vertical centering of slides - center: true, - - // Enables touch navigation on devices with touch input - touch: true, - - // Loop the presentation - loop: false, - - // Change the presentation direction to be RTL - rtl: false, - - // Randomizes the order of slides each time the presentation loads - shuffle: false, - - // Turns fragments on and off globally - fragments: true, - - // Flags if the presentation is running in an embedded mode, - // i.e. contained within a limited portion of the screen - embedded: false, - - // Flags if we should show a help overlay when the question-mark - // key is pressed - help: true, - - // Flags if it should be possible to pause the presentation (blackout) - pause: true, - - // Flags if speaker notes should be visible to all viewers - showNotes: false, - - // Number of milliseconds between automatically proceeding to the - // next slide, disabled when set to 0, this value can be overwritten - // by using a data-autoslide attribute on your slides - autoSlide: 0, - - // Stop auto-sliding after user input - autoSlideStoppable: true, - - // Use this method for navigation when auto-sliding (defaults to navigateNext) - autoSlideMethod: null, - - // Enable slide navigation via mouse wheel - mouseWheel: false, - - // Apply a 3D roll to links on hover - rollingLinks: false, - - // Hides the address bar on mobile devices - hideAddressBar: true, - - // Opens links in an iframe preview overlay - previewLinks: false, - - // Exposes the reveal.js API through window.postMessage - postMessage: true, - - // Dispatches all reveal.js events to the parent window through postMessage - postMessageEvents: false, - - // Focuses body when page changes visibility to ensure keyboard shortcuts work - focusBodyOnPageVisibilityChange: true, - - // Transition style - transition: 'slide', // none/fade/slide/convex/concave/zoom - - // Transition speed - transitionSpeed: 'default', // default/fast/slow - - // Transition style for full page slide backgrounds - backgroundTransition: 'fade', // none/fade/slide/convex/concave/zoom - - // Parallax background image - parallaxBackgroundImage: '', // CSS syntax, e.g. "a.jpg" - - // Parallax background size - parallaxBackgroundSize: '', // CSS syntax, e.g. "3000px 2000px" - - // Amount of pixels to move the parallax background per slide step - parallaxBackgroundHorizontal: null, - parallaxBackgroundVertical: null, - - // The maximum number of pages a single slide can expand onto when printing - // to PDF, unlimited by default - pdfMaxPagesPerSlide: Number.POSITIVE_INFINITY, - - // Number of slides away from the current that are visible - viewDistance: 3, - - // Script dependencies to load - dependencies: [] - - }, - - // Flags if Reveal.initialize() has been called - initialized = false, - - // Flags if reveal.js is loaded (has dispatched the 'ready' event) - loaded = false, - - // Flags if the overview mode is currently active - overview = false, - - // Holds the dimensions of our overview slides, including margins - overviewSlideWidth = null, - overviewSlideHeight = null, - - // The horizontal and vertical index of the currently active slide - indexh, - indexv, - - // The previous and current slide HTML elements - previousSlide, - currentSlide, - - previousBackground, - - // Slides may hold a data-state attribute which we pick up and apply - // as a class to the body. This list contains the combined state of - // all current slides. - state = [], - - // The current scale of the presentation (see width/height config) - scale = 1, - - // CSS transform that is currently applied to the slides container, - // split into two groups - slidesTransform = { layout: '', overview: '' }, - - // Cached references to DOM elements - dom = {}, - - // Features supported by the browser, see #checkCapabilities() - features = {}, - - // Client is a mobile device, see #checkCapabilities() - isMobileDevice, - - // Client is a desktop Chrome, see #checkCapabilities() - isChrome, - - // Throttles mouse wheel navigation - lastMouseWheelStep = 0, - - // Delays updates to the URL due to a Chrome thumbnailer bug - writeURLTimeout = 0, - - // Flags if the interaction event listeners are bound - eventsAreBound = false, - - // The current auto-slide duration - autoSlide = 0, - - // Auto slide properties - autoSlidePlayer, - autoSlideTimeout = 0, - autoSlideStartTime = -1, - autoSlidePaused = false, - - // Holds information about the currently ongoing touch input - touch = { - startX: 0, - startY: 0, - startSpan: 0, - startCount: 0, - captured: false, - threshold: 40 - }, - - // Holds information about the keyboard shortcuts - keyboardShortcuts = { - 'N , SPACE': 'Next slide', - 'P': 'Previous slide', - '← , H': 'Navigate left', - '→ , L': 'Navigate right', - '↑ , K': 'Navigate up', - '↓ , J': 'Navigate down', - 'Home': 'First slide', - 'End': 'Last slide', - 'B , .': 'Pause', - 'F': 'Fullscreen', - 'ESC, O': 'Slide overview' - }; - - /** - * Starts up the presentation if the client is capable. - */ - function initialize( options ) { - - // Make sure we only initialize once - if( initialized === true ) return; - - initialized = true; - - checkCapabilities(); - - if( !features.transforms2d && !features.transforms3d ) { - document.body.setAttribute( 'class', 'no-transforms' ); - - // Since JS won't be running any further, we load all lazy - // loading elements upfront - var images = toArray( document.getElementsByTagName( 'img' ) ), - iframes = toArray( document.getElementsByTagName( 'iframe' ) ); - - var lazyLoadable = images.concat( iframes ); - - for( var i = 0, len = lazyLoadable.length; i < len; i++ ) { - var element = lazyLoadable[i]; - if( element.getAttribute( 'data-src' ) ) { - element.setAttribute( 'src', element.getAttribute( 'data-src' ) ); - element.removeAttribute( 'data-src' ); - } - } - - // If the browser doesn't support core features we won't be - // using JavaScript to control the presentation - return; - } - - // Cache references to key DOM elements - dom.wrapper = document.querySelector( '.reveal' ); - dom.slides = document.querySelector( '.reveal .slides' ); - - // Force a layout when the whole page, incl fonts, has loaded - window.addEventListener( 'load', layout, false ); - - var query = Reveal.getQueryHash(); - - // Do not accept new dependencies via query config to avoid - // the potential of malicious script injection - if( typeof query['dependencies'] !== 'undefined' ) delete query['dependencies']; - - // Copy options over to our config object - extend( config, options ); - extend( config, query ); - - // Hide the address bar in mobile browsers - hideAddressBar(); - - // Loads the dependencies and continues to #start() once done - load(); - - } - - /** - * Inspect the client to see what it's capable of, this - * should only happens once per runtime. - */ - function checkCapabilities() { - - isMobileDevice = /(iphone|ipod|ipad|android)/gi.test( UA ); - isChrome = /chrome/i.test( UA ) && !/edge/i.test( UA ); - - var testElement = document.createElement( 'div' ); - - features.transforms3d = 'WebkitPerspective' in testElement.style || - 'MozPerspective' in testElement.style || - 'msPerspective' in testElement.style || - 'OPerspective' in testElement.style || - 'perspective' in testElement.style; - - features.transforms2d = 'WebkitTransform' in testElement.style || - 'MozTransform' in testElement.style || - 'msTransform' in testElement.style || - 'OTransform' in testElement.style || - 'transform' in testElement.style; - - features.requestAnimationFrameMethod = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame; - features.requestAnimationFrame = typeof features.requestAnimationFrameMethod === 'function'; - - features.canvas = !!document.createElement( 'canvas' ).getContext; - - // Transitions in the overview are disabled in desktop and - // Safari due to lag - features.overviewTransitions = !/Version\/[\d\.]+.*Safari/.test( UA ); - - // Flags if we should use zoom instead of transform to scale - // up slides. Zoom produces crisper results but has a lot of - // xbrowser quirks so we only use it in whitelsited browsers. - features.zoom = 'zoom' in testElement.style && !isMobileDevice && - ( isChrome || /Version\/[\d\.]+.*Safari/.test( UA ) ); - - } - - /** - * Loads the dependencies of reveal.js. Dependencies are - * defined via the configuration option 'dependencies' - * and will be loaded prior to starting/binding reveal.js. - * Some dependencies may have an 'async' flag, if so they - * will load after reveal.js has been started up. - */ - function load() { - - var scripts = [], - scriptsAsync = [], - scriptsToPreload = 0; - - // Called once synchronous scripts finish loading - function proceed() { - if( scriptsAsync.length ) { - // Load asynchronous scripts - head.js.apply( null, scriptsAsync ); - } - - start(); - } - - function loadScript( s ) { - head.ready( s.src.match( /([\w\d_\-]*)\.?js$|[^\\\/]*$/i )[0], function() { - // Extension may contain callback functions - if( typeof s.callback === 'function' ) { - s.callback.apply( this ); - } - - if( --scriptsToPreload === 0 ) { - proceed(); - } - }); - } - - for( var i = 0, len = config.dependencies.length; i < len; i++ ) { - var s = config.dependencies[i]; - - // Load if there's no condition or the condition is truthy - if( !s.condition || s.condition() ) { - if( s.async ) { - scriptsAsync.push( s.src ); - } - else { - scripts.push( s.src ); - } - - loadScript( s ); - } - } - - if( scripts.length ) { - scriptsToPreload = scripts.length; - - // Load synchronous scripts - head.js.apply( null, scripts ); - } - else { - proceed(); - } - - } - - /** - * Starts up reveal.js by binding input events and navigating - * to the current URL deeplink if there is one. - */ - function start() { - - // Make sure we've got all the DOM elements we need - setupDOM(); - - // Listen to messages posted to this window - setupPostMessage(); - - // Prevent the slides from being scrolled out of view - setupScrollPrevention(); - - // Resets all vertical slides so that only the first is visible - resetVerticalSlides(); - - // Updates the presentation to match the current configuration values - configure(); - - // Read the initial hash - readURL(); - - // Update all backgrounds - updateBackground( true ); - - // Notify listeners that the presentation is ready but use a 1ms - // timeout to ensure it's not fired synchronously after #initialize() - setTimeout( function() { - // Enable transitions now that we're loaded - dom.slides.classList.remove( 'no-transition' ); - - loaded = true; - - dom.wrapper.classList.add( 'ready' ); - - dispatchEvent( 'ready', { - 'indexh': indexh, - 'indexv': indexv, - 'currentSlide': currentSlide - } ); - }, 1 ); - - // Special setup and config is required when printing to PDF - if( isPrintingPDF() ) { - removeEventListeners(); - - // The document needs to have loaded for the PDF layout - // measurements to be accurate - if( document.readyState === 'complete' ) { - setupPDF(); - } - else { - window.addEventListener( 'load', setupPDF ); - } - } - - } - - /** - * Finds and stores references to DOM elements which are - * required by the presentation. If a required element is - * not found, it is created. - */ - function setupDOM() { - - // Prevent transitions while we're loading - dom.slides.classList.add( 'no-transition' ); - - // Background element - dom.background = createSingletonNode( dom.wrapper, 'div', 'backgrounds', null ); - - // Progress bar - dom.progress = createSingletonNode( dom.wrapper, 'div', 'progress', '' ); - dom.progressbar = dom.progress.querySelector( 'span' ); - - // Arrow controls - createSingletonNode( dom.wrapper, 'aside', 'controls', - '' + - '' + - '' + - '' ); - - // Slide number - dom.slideNumber = createSingletonNode( dom.wrapper, 'div', 'slide-number', '' ); - - // Element containing notes that are visible to the audience - dom.speakerNotes = createSingletonNode( dom.wrapper, 'div', 'speaker-notes', null ); - dom.speakerNotes.setAttribute( 'data-prevent-swipe', '' ); - dom.speakerNotes.setAttribute( 'tabindex', '0' ); - - // Overlay graphic which is displayed during the paused mode - createSingletonNode( dom.wrapper, 'div', 'pause-overlay', null ); - - // Cache references to elements - dom.controls = document.querySelector( '.reveal .controls' ); - - dom.wrapper.setAttribute( 'role', 'application' ); - - // There can be multiple instances of controls throughout the page - dom.controlsLeft = toArray( document.querySelectorAll( '.navigate-left' ) ); - dom.controlsRight = toArray( document.querySelectorAll( '.navigate-right' ) ); - dom.controlsUp = toArray( document.querySelectorAll( '.navigate-up' ) ); - dom.controlsDown = toArray( document.querySelectorAll( '.navigate-down' ) ); - dom.controlsPrev = toArray( document.querySelectorAll( '.navigate-prev' ) ); - dom.controlsNext = toArray( document.querySelectorAll( '.navigate-next' ) ); - - dom.statusDiv = createStatusDiv(); - } - - /** - * Creates a hidden div with role aria-live to announce the - * current slide content. Hide the div off-screen to make it - * available only to Assistive Technologies. - * - * @return {HTMLElement} - */ - function createStatusDiv() { - - var statusDiv = document.getElementById( 'aria-status-div' ); - if( !statusDiv ) { - statusDiv = document.createElement( 'div' ); - statusDiv.style.position = 'absolute'; - statusDiv.style.height = '1px'; - statusDiv.style.width = '1px'; - statusDiv.style.overflow = 'hidden'; - statusDiv.style.clip = 'rect( 1px, 1px, 1px, 1px )'; - statusDiv.setAttribute( 'id', 'aria-status-div' ); - statusDiv.setAttribute( 'aria-live', 'polite' ); - statusDiv.setAttribute( 'aria-atomic','true' ); - dom.wrapper.appendChild( statusDiv ); - } - return statusDiv; - - } - - /** - * Converts the given HTML element into a string of text - * that can be announced to a screen reader. Hidden - * elements are excluded. - */ - function getStatusText( node ) { - - var text = ''; - - // Text node - if( node.nodeType === 3 ) { - text += node.textContent; - } - // Element node - else if( node.nodeType === 1 ) { - - var isAriaHidden = node.getAttribute( 'aria-hidden' ); - var isDisplayHidden = window.getComputedStyle( node )['display'] === 'none'; - if( isAriaHidden !== 'true' && !isDisplayHidden ) { - - toArray( node.childNodes ).forEach( function( child ) { - text += getStatusText( child ); - } ); - - } - - } - - return text; - - } - - /** - * Configures the presentation for printing to a static - * PDF. - */ - function setupPDF() { - - var slideSize = getComputedSlideSize( window.innerWidth, window.innerHeight ); - - // Dimensions of the PDF pages - var pageWidth = Math.floor( slideSize.width * ( 1 + config.margin ) ), - pageHeight = Math.floor( slideSize.height * ( 1 + config.margin ) ); - - // Dimensions of slides within the pages - var slideWidth = slideSize.width, - slideHeight = slideSize.height; - - // Let the browser know what page size we want to print - injectStyleSheet( '@page{size:'+ pageWidth +'px '+ pageHeight +'px; margin: 0 0 -1px 0;}' ); - - // Limit the size of certain elements to the dimensions of the slide - injectStyleSheet( '.reveal section>img, .reveal section>video, .reveal section>iframe{max-width: '+ slideWidth +'px; max-height:'+ slideHeight +'px}' ); - - document.body.classList.add( 'print-pdf' ); - document.body.style.width = pageWidth + 'px'; - document.body.style.height = pageHeight + 'px'; - - // Add each slide's index as attributes on itself, we need these - // indices to generate slide numbers below - toArray( dom.wrapper.querySelectorAll( HORIZONTAL_SLIDES_SELECTOR ) ).forEach( function( hslide, h ) { - hslide.setAttribute( 'data-index-h', h ); - - if( hslide.classList.contains( 'stack' ) ) { - toArray( hslide.querySelectorAll( 'section' ) ).forEach( function( vslide, v ) { - vslide.setAttribute( 'data-index-h', h ); - vslide.setAttribute( 'data-index-v', v ); - } ); - } - } ); - - // Slide and slide background layout - toArray( dom.wrapper.querySelectorAll( SLIDES_SELECTOR ) ).forEach( function( slide ) { - - // Vertical stacks are not centred since their section - // children will be - if( slide.classList.contains( 'stack' ) === false ) { - // Center the slide inside of the page, giving the slide some margin - var left = ( pageWidth - slideWidth ) / 2, - top = ( pageHeight - slideHeight ) / 2; - - var contentHeight = slide.scrollHeight; - var numberOfPages = Math.max( Math.ceil( contentHeight / pageHeight ), 1 ); - - // Adhere to configured pages per slide limit - numberOfPages = Math.min( numberOfPages, config.pdfMaxPagesPerSlide ); - - // Center slides vertically - if( numberOfPages === 1 && config.center || slide.classList.contains( 'center' ) ) { - top = Math.max( ( pageHeight - contentHeight ) / 2, 0 ); - } - - // Wrap the slide in a page element and hide its overflow - // so that no page ever flows onto another - var page = document.createElement( 'div' ); - page.className = 'pdf-page'; - page.style.height = ( pageHeight * numberOfPages ) + 'px'; - slide.parentNode.insertBefore( page, slide ); - page.appendChild( slide ); - - // Position the slide inside of the page - slide.style.left = left + 'px'; - slide.style.top = top + 'px'; - slide.style.width = slideWidth + 'px'; - - if( slide.slideBackgroundElement ) { - page.insertBefore( slide.slideBackgroundElement, slide ); - } - - // Inject notes if `showNotes` is enabled - if( config.showNotes ) { - - // Are there notes for this slide? - var notes = getSlideNotes( slide ); - if( notes ) { - - var notesSpacing = 8; - var notesLayout = typeof config.showNotes === 'string' ? config.showNotes : 'inline'; - var notesElement = document.createElement( 'div' ); - notesElement.classList.add( 'speaker-notes' ); - notesElement.classList.add( 'speaker-notes-pdf' ); - notesElement.setAttribute( 'data-layout', notesLayout ); - notesElement.innerHTML = notes; - - if( notesLayout === 'separate-page' ) { - page.parentNode.insertBefore( notesElement, page.nextSibling ); - } - else { - notesElement.style.left = notesSpacing + 'px'; - notesElement.style.bottom = notesSpacing + 'px'; - notesElement.style.width = ( pageWidth - notesSpacing*2 ) + 'px'; - page.appendChild( notesElement ); - } - - } - - } - - // Inject slide numbers if `slideNumbers` are enabled - if( config.slideNumber ) { - var slideNumberH = parseInt( slide.getAttribute( 'data-index-h' ), 10 ) + 1, - slideNumberV = parseInt( slide.getAttribute( 'data-index-v' ), 10 ) + 1; - - var numberElement = document.createElement( 'div' ); - numberElement.classList.add( 'slide-number' ); - numberElement.classList.add( 'slide-number-pdf' ); - numberElement.innerHTML = formatSlideNumber( slideNumberH, '.', slideNumberV ); - page.appendChild( numberElement ); - } - } - - } ); - - // Show all fragments - toArray( dom.wrapper.querySelectorAll( SLIDES_SELECTOR + ' .fragment' ) ).forEach( function( fragment ) { - fragment.classList.add( 'visible' ); - } ); - - // Notify subscribers that the PDF layout is good to go - dispatchEvent( 'pdf-ready' ); - - } - - /** - * This is an unfortunate necessity. Some actions – such as - * an input field being focused in an iframe or using the - * keyboard to expand text selection beyond the bounds of - * a slide – can trigger our content to be pushed out of view. - * This scrolling can not be prevented by hiding overflow in - * CSS (we already do) so we have to resort to repeatedly - * checking if the slides have been offset :( - */ - function setupScrollPrevention() { - - setInterval( function() { - if( dom.wrapper.scrollTop !== 0 || dom.wrapper.scrollLeft !== 0 ) { - dom.wrapper.scrollTop = 0; - dom.wrapper.scrollLeft = 0; - } - }, 1000 ); - - } - - /** - * Creates an HTML element and returns a reference to it. - * If the element already exists the existing instance will - * be returned. - * - * @param {HTMLElement} container - * @param {string} tagname - * @param {string} classname - * @param {string} innerHTML - * - * @return {HTMLElement} - */ - function createSingletonNode( container, tagname, classname, innerHTML ) { - - // Find all nodes matching the description - var nodes = container.querySelectorAll( '.' + classname ); - - // Check all matches to find one which is a direct child of - // the specified container - for( var i = 0; i < nodes.length; i++ ) { - var testNode = nodes[i]; - if( testNode.parentNode === container ) { - return testNode; - } - } - - // If no node was found, create it now - var node = document.createElement( tagname ); - node.classList.add( classname ); - if( typeof innerHTML === 'string' ) { - node.innerHTML = innerHTML; - } - container.appendChild( node ); - - return node; - - } - - /** - * Creates the slide background elements and appends them - * to the background container. One element is created per - * slide no matter if the given slide has visible background. - */ - function createBackgrounds() { - - var printMode = isPrintingPDF(); - - // Clear prior backgrounds - dom.background.innerHTML = ''; - dom.background.classList.add( 'no-transition' ); - - // Iterate over all horizontal slides - toArray( dom.wrapper.querySelectorAll( HORIZONTAL_SLIDES_SELECTOR ) ).forEach( function( slideh ) { - - var backgroundStack = createBackground( slideh, dom.background ); - - // Iterate over all vertical slides - toArray( slideh.querySelectorAll( 'section' ) ).forEach( function( slidev ) { - - createBackground( slidev, backgroundStack ); - - backgroundStack.classList.add( 'stack' ); - - } ); - - } ); - - // Add parallax background if specified - if( config.parallaxBackgroundImage ) { - - dom.background.style.backgroundImage = 'url("' + config.parallaxBackgroundImage + '")'; - dom.background.style.backgroundSize = config.parallaxBackgroundSize; - - // Make sure the below properties are set on the element - these properties are - // needed for proper transitions to be set on the element via CSS. To remove - // annoying background slide-in effect when the presentation starts, apply - // these properties after short time delay - setTimeout( function() { - dom.wrapper.classList.add( 'has-parallax-background' ); - }, 1 ); - - } - else { - - dom.background.style.backgroundImage = ''; - dom.wrapper.classList.remove( 'has-parallax-background' ); - - } - - } - - /** - * Creates a background for the given slide. - * - * @param {HTMLElement} slide - * @param {HTMLElement} container The element that the background - * should be appended to - * @return {HTMLElement} New background div - */ - function createBackground( slide, container ) { - - var data = { - background: slide.getAttribute( 'data-background' ), - backgroundSize: slide.getAttribute( 'data-background-size' ), - backgroundImage: slide.getAttribute( 'data-background-image' ), - backgroundVideo: slide.getAttribute( 'data-background-video' ), - backgroundIframe: slide.getAttribute( 'data-background-iframe' ), - backgroundColor: slide.getAttribute( 'data-background-color' ), - backgroundRepeat: slide.getAttribute( 'data-background-repeat' ), - backgroundPosition: slide.getAttribute( 'data-background-position' ), - backgroundTransition: slide.getAttribute( 'data-background-transition' ) - }; - - var element = document.createElement( 'div' ); - - // Carry over custom classes from the slide to the background - element.className = 'slide-background ' + slide.className.replace( /present|past|future/, '' ); - - if( data.background ) { - // Auto-wrap image urls in url(...) - if( /^(http|file|\/\/)/gi.test( data.background ) || /\.(svg|png|jpg|jpeg|gif|bmp)$/gi.test( data.background ) ) { - slide.setAttribute( 'data-background-image', data.background ); - } - else { - element.style.background = data.background; - } - } - - // Create a hash for this combination of background settings. - // This is used to determine when two slide backgrounds are - // the same. - if( data.background || data.backgroundColor || data.backgroundImage || data.backgroundVideo || data.backgroundIframe ) { - element.setAttribute( 'data-background-hash', data.background + - data.backgroundSize + - data.backgroundImage + - data.backgroundVideo + - data.backgroundIframe + - data.backgroundColor + - data.backgroundRepeat + - data.backgroundPosition + - data.backgroundTransition ); - } - - // Additional and optional background properties - if( data.backgroundSize ) element.style.backgroundSize = data.backgroundSize; - if( data.backgroundColor ) element.style.backgroundColor = data.backgroundColor; - if( data.backgroundRepeat ) element.style.backgroundRepeat = data.backgroundRepeat; - if( data.backgroundPosition ) element.style.backgroundPosition = data.backgroundPosition; - if( data.backgroundTransition ) element.setAttribute( 'data-background-transition', data.backgroundTransition ); - - container.appendChild( element ); - - // If backgrounds are being recreated, clear old classes - slide.classList.remove( 'has-dark-background' ); - slide.classList.remove( 'has-light-background' ); - - slide.slideBackgroundElement = element; - - // If this slide has a background color, add a class that - // signals if it is light or dark. If the slide has no background - // color, no class will be set - var computedBackgroundStyle = window.getComputedStyle( element ); - if( computedBackgroundStyle && computedBackgroundStyle.backgroundColor ) { - var rgb = colorToRgb( computedBackgroundStyle.backgroundColor ); - - // Ignore fully transparent backgrounds. Some browsers return - // rgba(0,0,0,0) when reading the computed background color of - // an element with no background - if( rgb && rgb.a !== 0 ) { - if( colorBrightness( computedBackgroundStyle.backgroundColor ) < 128 ) { - slide.classList.add( 'has-dark-background' ); - } - else { - slide.classList.add( 'has-light-background' ); - } - } - } - - return element; - - } - - /** - * Registers a listener to postMessage events, this makes it - * possible to call all reveal.js API methods from another - * window. For example: - * - * revealWindow.postMessage( JSON.stringify({ - * method: 'slide', - * args: [ 2 ] - * }), '*' ); - */ - function setupPostMessage() { - - if( config.postMessage ) { - window.addEventListener( 'message', function ( event ) { - var data = event.data; - - // Make sure we're dealing with JSON - if( typeof data === 'string' && data.charAt( 0 ) === '{' && data.charAt( data.length - 1 ) === '}' ) { - data = JSON.parse( data ); - - // Check if the requested method can be found - if( data.method && typeof Reveal[data.method] === 'function' ) { - Reveal[data.method].apply( Reveal, data.args ); - } - } - }, false ); - } - - } - - /** - * Applies the configuration settings from the config - * object. May be called multiple times. - * - * @param {object} options - */ - function configure( options ) { - - var numberOfSlides = dom.wrapper.querySelectorAll( SLIDES_SELECTOR ).length; - - dom.wrapper.classList.remove( config.transition ); - - // New config options may be passed when this method - // is invoked through the API after initialization - if( typeof options === 'object' ) extend( config, options ); - - // Force linear transition based on browser capabilities - if( features.transforms3d === false ) config.transition = 'linear'; - - dom.wrapper.classList.add( config.transition ); - - dom.wrapper.setAttribute( 'data-transition-speed', config.transitionSpeed ); - dom.wrapper.setAttribute( 'data-background-transition', config.backgroundTransition ); - - dom.controls.style.display = config.controls ? 'block' : 'none'; - dom.progress.style.display = config.progress ? 'block' : 'none'; - dom.slideNumber.style.display = config.slideNumber && !isPrintingPDF() ? 'block' : 'none'; - - if( config.shuffle ) { - shuffle(); - } - - if( config.rtl ) { - dom.wrapper.classList.add( 'rtl' ); - } - else { - dom.wrapper.classList.remove( 'rtl' ); - } - - if( config.center ) { - dom.wrapper.classList.add( 'center' ); - } - else { - dom.wrapper.classList.remove( 'center' ); - } - - // Exit the paused mode if it was configured off - if( config.pause === false ) { - resume(); - } - - if( config.showNotes ) { - dom.speakerNotes.classList.add( 'visible' ); - dom.speakerNotes.setAttribute( 'data-layout', typeof config.showNotes === 'string' ? config.showNotes : 'inline' ); - } - else { - dom.speakerNotes.classList.remove( 'visible' ); - } - - if( config.mouseWheel ) { - document.addEventListener( 'DOMMouseScroll', onDocumentMouseScroll, false ); // FF - document.addEventListener( 'mousewheel', onDocumentMouseScroll, false ); - } - else { - document.removeEventListener( 'DOMMouseScroll', onDocumentMouseScroll, false ); // FF - document.removeEventListener( 'mousewheel', onDocumentMouseScroll, false ); - } - - // Rolling 3D links - if( config.rollingLinks ) { - enableRollingLinks(); - } - else { - disableRollingLinks(); - } - - // Iframe link previews - if( config.previewLinks ) { - enablePreviewLinks(); - } - else { - disablePreviewLinks(); - enablePreviewLinks( '[data-preview-link]' ); - } - - // Remove existing auto-slide controls - if( autoSlidePlayer ) { - autoSlidePlayer.destroy(); - autoSlidePlayer = null; - } - - // Generate auto-slide controls if needed - if( numberOfSlides > 1 && config.autoSlide && config.autoSlideStoppable && features.canvas && features.requestAnimationFrame ) { - autoSlidePlayer = new Playback( dom.wrapper, function() { - return Math.min( Math.max( ( Date.now() - autoSlideStartTime ) / autoSlide, 0 ), 1 ); - } ); - - autoSlidePlayer.on( 'click', onAutoSlidePlayerClick ); - autoSlidePaused = false; - } - - // When fragments are turned off they should be visible - if( config.fragments === false ) { - toArray( dom.slides.querySelectorAll( '.fragment' ) ).forEach( function( element ) { - element.classList.add( 'visible' ); - element.classList.remove( 'current-fragment' ); - } ); - } - - sync(); - - } - - /** - * Binds all event listeners. - */ - function addEventListeners() { - - eventsAreBound = true; - - window.addEventListener( 'hashchange', onWindowHashChange, false ); - window.addEventListener( 'resize', onWindowResize, false ); - - if( config.touch ) { - dom.wrapper.addEventListener( 'touchstart', onTouchStart, false ); - dom.wrapper.addEventListener( 'touchmove', onTouchMove, false ); - dom.wrapper.addEventListener( 'touchend', onTouchEnd, false ); - - // Support pointer-style touch interaction as well - if( window.navigator.pointerEnabled ) { - // IE 11 uses un-prefixed version of pointer events - dom.wrapper.addEventListener( 'pointerdown', onPointerDown, false ); - dom.wrapper.addEventListener( 'pointermove', onPointerMove, false ); - dom.wrapper.addEventListener( 'pointerup', onPointerUp, false ); - } - else if( window.navigator.msPointerEnabled ) { - // IE 10 uses prefixed version of pointer events - dom.wrapper.addEventListener( 'MSPointerDown', onPointerDown, false ); - dom.wrapper.addEventListener( 'MSPointerMove', onPointerMove, false ); - dom.wrapper.addEventListener( 'MSPointerUp', onPointerUp, false ); - } - } - - if( config.keyboard ) { - document.addEventListener( 'keydown', onDocumentKeyDown, false ); - document.addEventListener( 'keypress', onDocumentKeyPress, false ); - } - - if( config.progress && dom.progress ) { - dom.progress.addEventListener( 'click', onProgressClicked, false ); - } - - if( config.focusBodyOnPageVisibilityChange ) { - var visibilityChange; - - if( 'hidden' in document ) { - visibilityChange = 'visibilitychange'; - } - else if( 'msHidden' in document ) { - visibilityChange = 'msvisibilitychange'; - } - else if( 'webkitHidden' in document ) { - visibilityChange = 'webkitvisibilitychange'; - } - - if( visibilityChange ) { - document.addEventListener( visibilityChange, onPageVisibilityChange, false ); - } - } - - // Listen to both touch and click events, in case the device - // supports both - var pointerEvents = [ 'touchstart', 'click' ]; - - // Only support touch for Android, fixes double navigations in - // stock browser - if( UA.match( /android/gi ) ) { - pointerEvents = [ 'touchstart' ]; - } - - pointerEvents.forEach( function( eventName ) { - dom.controlsLeft.forEach( function( el ) { el.addEventListener( eventName, onNavigateLeftClicked, false ); } ); - dom.controlsRight.forEach( function( el ) { el.addEventListener( eventName, onNavigateRightClicked, false ); } ); - dom.controlsUp.forEach( function( el ) { el.addEventListener( eventName, onNavigateUpClicked, false ); } ); - dom.controlsDown.forEach( function( el ) { el.addEventListener( eventName, onNavigateDownClicked, false ); } ); - dom.controlsPrev.forEach( function( el ) { el.addEventListener( eventName, onNavigatePrevClicked, false ); } ); - dom.controlsNext.forEach( function( el ) { el.addEventListener( eventName, onNavigateNextClicked, false ); } ); - } ); - - } - - /** - * Unbinds all event listeners. - */ - function removeEventListeners() { - - eventsAreBound = false; - - document.removeEventListener( 'keydown', onDocumentKeyDown, false ); - document.removeEventListener( 'keypress', onDocumentKeyPress, false ); - window.removeEventListener( 'hashchange', onWindowHashChange, false ); - window.removeEventListener( 'resize', onWindowResize, false ); - - dom.wrapper.removeEventListener( 'touchstart', onTouchStart, false ); - dom.wrapper.removeEventListener( 'touchmove', onTouchMove, false ); - dom.wrapper.removeEventListener( 'touchend', onTouchEnd, false ); - - // IE11 - if( window.navigator.pointerEnabled ) { - dom.wrapper.removeEventListener( 'pointerdown', onPointerDown, false ); - dom.wrapper.removeEventListener( 'pointermove', onPointerMove, false ); - dom.wrapper.removeEventListener( 'pointerup', onPointerUp, false ); - } - // IE10 - else if( window.navigator.msPointerEnabled ) { - dom.wrapper.removeEventListener( 'MSPointerDown', onPointerDown, false ); - dom.wrapper.removeEventListener( 'MSPointerMove', onPointerMove, false ); - dom.wrapper.removeEventListener( 'MSPointerUp', onPointerUp, false ); - } - - if ( config.progress && dom.progress ) { - dom.progress.removeEventListener( 'click', onProgressClicked, false ); - } - - [ 'touchstart', 'click' ].forEach( function( eventName ) { - dom.controlsLeft.forEach( function( el ) { el.removeEventListener( eventName, onNavigateLeftClicked, false ); } ); - dom.controlsRight.forEach( function( el ) { el.removeEventListener( eventName, onNavigateRightClicked, false ); } ); - dom.controlsUp.forEach( function( el ) { el.removeEventListener( eventName, onNavigateUpClicked, false ); } ); - dom.controlsDown.forEach( function( el ) { el.removeEventListener( eventName, onNavigateDownClicked, false ); } ); - dom.controlsPrev.forEach( function( el ) { el.removeEventListener( eventName, onNavigatePrevClicked, false ); } ); - dom.controlsNext.forEach( function( el ) { el.removeEventListener( eventName, onNavigateNextClicked, false ); } ); - } ); - - } - - /** - * Extend object a with the properties of object b. - * If there's a conflict, object b takes precedence. - * - * @param {object} a - * @param {object} b - */ - function extend( a, b ) { - - for( var i in b ) { - a[ i ] = b[ i ]; - } - - } - - /** - * Converts the target object to an array. - * - * @param {object} o - * @return {object[]} - */ - function toArray( o ) { - - return Array.prototype.slice.call( o ); - - } - - /** - * Utility for deserializing a value. - * - * @param {*} value - * @return {*} - */ - function deserialize( value ) { - - if( typeof value === 'string' ) { - if( value === 'null' ) return null; - else if( value === 'true' ) return true; - else if( value === 'false' ) return false; - else if( value.match( /^\d+$/ ) ) return parseFloat( value ); - } - - return value; - - } - - /** - * Measures the distance in pixels between point a - * and point b. - * - * @param {object} a point with x/y properties - * @param {object} b point with x/y properties - * - * @return {number} - */ - function distanceBetween( a, b ) { - - var dx = a.x - b.x, - dy = a.y - b.y; - - return Math.sqrt( dx*dx + dy*dy ); - - } - - /** - * Applies a CSS transform to the target element. - * - * @param {HTMLElement} element - * @param {string} transform - */ - function transformElement( element, transform ) { - - element.style.WebkitTransform = transform; - element.style.MozTransform = transform; - element.style.msTransform = transform; - element.style.transform = transform; - - } - - /** - * Applies CSS transforms to the slides container. The container - * is transformed from two separate sources: layout and the overview - * mode. - * - * @param {object} transforms - */ - function transformSlides( transforms ) { - - // Pick up new transforms from arguments - if( typeof transforms.layout === 'string' ) slidesTransform.layout = transforms.layout; - if( typeof transforms.overview === 'string' ) slidesTransform.overview = transforms.overview; - - // Apply the transforms to the slides container - if( slidesTransform.layout ) { - transformElement( dom.slides, slidesTransform.layout + ' ' + slidesTransform.overview ); - } - else { - transformElement( dom.slides, slidesTransform.overview ); - } - - } - - /** - * Injects the given CSS styles into the DOM. - * - * @param {string} value - */ - function injectStyleSheet( value ) { - - var tag = document.createElement( 'style' ); - tag.type = 'text/css'; - if( tag.styleSheet ) { - tag.styleSheet.cssText = value; - } - else { - tag.appendChild( document.createTextNode( value ) ); - } - document.getElementsByTagName( 'head' )[0].appendChild( tag ); - - } - - /** - * Find the closest parent that matches the given - * selector. - * - * @param {HTMLElement} target The child element - * @param {String} selector The CSS selector to match - * the parents against - * - * @return {HTMLElement} The matched parent or null - * if no matching parent was found - */ - function closestParent( target, selector ) { - - var parent = target.parentNode; - - while( parent ) { - - // There's some overhead doing this each time, we don't - // want to rewrite the element prototype but should still - // be enough to feature detect once at startup... - var matchesMethod = parent.matches || parent.matchesSelector || parent.msMatchesSelector; - - // If we find a match, we're all set - if( matchesMethod && matchesMethod.call( parent, selector ) ) { - return parent; - } - - // Keep searching - parent = parent.parentNode; - - } - - return null; - - } - - /** - * Converts various color input formats to an {r:0,g:0,b:0} object. - * - * @param {string} color The string representation of a color - * @example - * colorToRgb('#000'); - * @example - * colorToRgb('#000000'); - * @example - * colorToRgb('rgb(0,0,0)'); - * @example - * colorToRgb('rgba(0,0,0)'); - * - * @return {{r: number, g: number, b: number, [a]: number}|null} - */ - function colorToRgb( color ) { - - var hex3 = color.match( /^#([0-9a-f]{3})$/i ); - if( hex3 && hex3[1] ) { - hex3 = hex3[1]; - return { - r: parseInt( hex3.charAt( 0 ), 16 ) * 0x11, - g: parseInt( hex3.charAt( 1 ), 16 ) * 0x11, - b: parseInt( hex3.charAt( 2 ), 16 ) * 0x11 - }; - } - - var hex6 = color.match( /^#([0-9a-f]{6})$/i ); - if( hex6 && hex6[1] ) { - hex6 = hex6[1]; - return { - r: parseInt( hex6.substr( 0, 2 ), 16 ), - g: parseInt( hex6.substr( 2, 2 ), 16 ), - b: parseInt( hex6.substr( 4, 2 ), 16 ) - }; - } - - var rgb = color.match( /^rgb\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)$/i ); - if( rgb ) { - return { - r: parseInt( rgb[1], 10 ), - g: parseInt( rgb[2], 10 ), - b: parseInt( rgb[3], 10 ) - }; - } - - var rgba = color.match( /^rgba\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\,\s*([\d]+|[\d]*.[\d]+)\s*\)$/i ); - if( rgba ) { - return { - r: parseInt( rgba[1], 10 ), - g: parseInt( rgba[2], 10 ), - b: parseInt( rgba[3], 10 ), - a: parseFloat( rgba[4] ) - }; - } - - return null; - - } - - /** - * Calculates brightness on a scale of 0-255. - * - * @param {string} color See colorToRgb for supported formats. - * @see {@link colorToRgb} - */ - function colorBrightness( color ) { - - if( typeof color === 'string' ) color = colorToRgb( color ); - - if( color ) { - return ( color.r * 299 + color.g * 587 + color.b * 114 ) / 1000; - } - - return null; - - } - - /** - * Returns the remaining height within the parent of the - * target element. - * - * remaining height = [ configured parent height ] - [ current parent height ] - * - * @param {HTMLElement} element - * @param {number} [height] - */ - function getRemainingHeight( element, height ) { - - height = height || 0; - - if( element ) { - var newHeight, oldHeight = element.style.height; - - // Change the .stretch element height to 0 in order find the height of all - // the other elements - element.style.height = '0px'; - newHeight = height - element.parentNode.offsetHeight; - - // Restore the old height, just in case - element.style.height = oldHeight + 'px'; - - return newHeight; - } - - return height; - - } - - /** - * Checks if this instance is being used to print a PDF. - */ - function isPrintingPDF() { - - return ( /print-pdf/gi ).test( window.location.search ); - - } - - /** - * Hides the address bar if we're on a mobile device. - */ - function hideAddressBar() { - - if( config.hideAddressBar && isMobileDevice ) { - // Events that should trigger the address bar to hide - window.addEventListener( 'load', removeAddressBar, false ); - window.addEventListener( 'orientationchange', removeAddressBar, false ); - } - - } - - /** - * Causes the address bar to hide on mobile devices, - * more vertical space ftw. - */ - function removeAddressBar() { - - setTimeout( function() { - window.scrollTo( 0, 1 ); - }, 10 ); - - } - - /** - * Dispatches an event of the specified type from the - * reveal DOM element. - */ - function dispatchEvent( type, args ) { - - var event = document.createEvent( 'HTMLEvents', 1, 2 ); - event.initEvent( type, true, true ); - extend( event, args ); - dom.wrapper.dispatchEvent( event ); - - // If we're in an iframe, post each reveal.js event to the - // parent window. Used by the notes plugin - if( config.postMessageEvents && window.parent !== window.self ) { - window.parent.postMessage( JSON.stringify({ namespace: 'reveal', eventName: type, state: getState() }), '*' ); - } - - } - - /** - * Wrap all links in 3D goodness. - */ - function enableRollingLinks() { - - if( features.transforms3d && !( 'msPerspective' in document.body.style ) ) { - var anchors = dom.wrapper.querySelectorAll( SLIDES_SELECTOR + ' a' ); - - for( var i = 0, len = anchors.length; i < len; i++ ) { - var anchor = anchors[i]; - - if( anchor.textContent && !anchor.querySelector( '*' ) && ( !anchor.className || !anchor.classList.contains( anchor, 'roll' ) ) ) { - var span = document.createElement('span'); - span.setAttribute('data-title', anchor.text); - span.innerHTML = anchor.innerHTML; - - anchor.classList.add( 'roll' ); - anchor.innerHTML = ''; - anchor.appendChild(span); - } - } - } - - } - - /** - * Unwrap all 3D links. - */ - function disableRollingLinks() { - - var anchors = dom.wrapper.querySelectorAll( SLIDES_SELECTOR + ' a.roll' ); - - for( var i = 0, len = anchors.length; i < len; i++ ) { - var anchor = anchors[i]; - var span = anchor.querySelector( 'span' ); - - if( span ) { - anchor.classList.remove( 'roll' ); - anchor.innerHTML = span.innerHTML; - } - } - - } - - /** - * Bind preview frame links. - * - * @param {string} [selector=a] - selector for anchors - */ - function enablePreviewLinks( selector ) { - - var anchors = toArray( document.querySelectorAll( selector ? selector : 'a' ) ); - - anchors.forEach( function( element ) { - if( /^(http|www)/gi.test( element.getAttribute( 'href' ) ) ) { - element.addEventListener( 'click', onPreviewLinkClicked, false ); - } - } ); - - } - - /** - * Unbind preview frame links. - */ - function disablePreviewLinks() { - - var anchors = toArray( document.querySelectorAll( 'a' ) ); - - anchors.forEach( function( element ) { - if( /^(http|www)/gi.test( element.getAttribute( 'href' ) ) ) { - element.removeEventListener( 'click', onPreviewLinkClicked, false ); - } - } ); - - } - - /** - * Opens a preview window for the target URL. - * - * @param {string} url - url for preview iframe src - */ - function showPreview( url ) { - - closeOverlay(); - - dom.overlay = document.createElement( 'div' ); - dom.overlay.classList.add( 'overlay' ); - dom.overlay.classList.add( 'overlay-preview' ); - dom.wrapper.appendChild( dom.overlay ); - - dom.overlay.innerHTML = [ - '
    ', - '', - '', - '
    ', - '
    ', - '
    ', - '', - '', - 'Unable to load iframe. This is likely due to the site\'s policy (x-frame-options).', - '', - '
    ' - ].join(''); - - dom.overlay.querySelector( 'iframe' ).addEventListener( 'load', function( event ) { - dom.overlay.classList.add( 'loaded' ); - }, false ); - - dom.overlay.querySelector( '.close' ).addEventListener( 'click', function( event ) { - closeOverlay(); - event.preventDefault(); - }, false ); - - dom.overlay.querySelector( '.external' ).addEventListener( 'click', function( event ) { - closeOverlay(); - }, false ); - - setTimeout( function() { - dom.overlay.classList.add( 'visible' ); - }, 1 ); - - } - - /** - * Opens an overlay window with help material. - */ - function showHelp() { - - if( config.help ) { - - closeOverlay(); - - dom.overlay = document.createElement( 'div' ); - dom.overlay.classList.add( 'overlay' ); - dom.overlay.classList.add( 'overlay-help' ); - dom.wrapper.appendChild( dom.overlay ); - - var html = '

    Keyboard Shortcuts


    '; - - html += ''; - for( var key in keyboardShortcuts ) { - html += ''; - } - - html += '
    KEYACTION
    ' + key + '' + keyboardShortcuts[ key ] + '
    '; - - dom.overlay.innerHTML = [ - '
    ', - '', - '
    ', - '
    ', - '
    '+ html +'
    ', - '
    ' - ].join(''); - - dom.overlay.querySelector( '.close' ).addEventListener( 'click', function( event ) { - closeOverlay(); - event.preventDefault(); - }, false ); - - setTimeout( function() { - dom.overlay.classList.add( 'visible' ); - }, 1 ); - - } - - } - - /** - * Closes any currently open overlay. - */ - function closeOverlay() { - - if( dom.overlay ) { - dom.overlay.parentNode.removeChild( dom.overlay ); - dom.overlay = null; - } - - } - - /** - * Applies JavaScript-controlled layout rules to the - * presentation. - */ - function layout() { - - if( dom.wrapper && !isPrintingPDF() ) { - - var size = getComputedSlideSize(); - - // Layout the contents of the slides - layoutSlideContents( config.width, config.height ); - - dom.slides.style.width = size.width + 'px'; - dom.slides.style.height = size.height + 'px'; - - // Determine scale of content to fit within available space - scale = Math.min( size.presentationWidth / size.width, size.presentationHeight / size.height ); - - // Respect max/min scale settings - scale = Math.max( scale, config.minScale ); - scale = Math.min( scale, config.maxScale ); - - // Don't apply any scaling styles if scale is 1 - if( scale === 1 ) { - dom.slides.style.zoom = ''; - dom.slides.style.left = ''; - dom.slides.style.top = ''; - dom.slides.style.bottom = ''; - dom.slides.style.right = ''; - transformSlides( { layout: '' } ); - } - else { - // Prefer zoom for scaling up so that content remains crisp. - // Don't use zoom to scale down since that can lead to shifts - // in text layout/line breaks. - if( scale > 1 && features.zoom ) { - dom.slides.style.zoom = scale; - dom.slides.style.left = ''; - dom.slides.style.top = ''; - dom.slides.style.bottom = ''; - dom.slides.style.right = ''; - transformSlides( { layout: '' } ); - } - // Apply scale transform as a fallback - else { - dom.slides.style.zoom = ''; - dom.slides.style.left = '50%'; - dom.slides.style.top = '50%'; - dom.slides.style.bottom = 'auto'; - dom.slides.style.right = 'auto'; - transformSlides( { layout: 'translate(-50%, -50%) scale('+ scale +')' } ); - } - } - - // Select all slides, vertical and horizontal - var slides = toArray( dom.wrapper.querySelectorAll( SLIDES_SELECTOR ) ); - - for( var i = 0, len = slides.length; i < len; i++ ) { - var slide = slides[ i ]; - - // Don't bother updating invisible slides - if( slide.style.display === 'none' ) { - continue; - } - - if( config.center || slide.classList.contains( 'center' ) ) { - // Vertical stacks are not centred since their section - // children will be - if( slide.classList.contains( 'stack' ) ) { - slide.style.top = 0; - } - else { - slide.style.top = Math.max( ( size.height - slide.scrollHeight ) / 2, 0 ) + 'px'; - } - } - else { - slide.style.top = ''; - } - - } - - updateProgress(); - updateParallax(); - - } - - } - - /** - * Applies layout logic to the contents of all slides in - * the presentation. - * - * @param {string|number} width - * @param {string|number} height - */ - function layoutSlideContents( width, height ) { - - // Handle sizing of elements with the 'stretch' class - toArray( dom.slides.querySelectorAll( 'section > .stretch' ) ).forEach( function( element ) { - - // Determine how much vertical space we can use - var remainingHeight = getRemainingHeight( element, height ); - - // Consider the aspect ratio of media elements - if( /(img|video)/gi.test( element.nodeName ) ) { - var nw = element.naturalWidth || element.videoWidth, - nh = element.naturalHeight || element.videoHeight; - - var es = Math.min( width / nw, remainingHeight / nh ); - - element.style.width = ( nw * es ) + 'px'; - element.style.height = ( nh * es ) + 'px'; - - } - else { - element.style.width = width + 'px'; - element.style.height = remainingHeight + 'px'; - } - - } ); - - } - - /** - * Calculates the computed pixel size of our slides. These - * values are based on the width and height configuration - * options. - * - * @param {number} [presentationWidth=dom.wrapper.offsetWidth] - * @param {number} [presentationHeight=dom.wrapper.offsetHeight] - */ - function getComputedSlideSize( presentationWidth, presentationHeight ) { - - var size = { - // Slide size - width: config.width, - height: config.height, - - // Presentation size - presentationWidth: presentationWidth || dom.wrapper.offsetWidth, - presentationHeight: presentationHeight || dom.wrapper.offsetHeight - }; - - // Reduce available space by margin - size.presentationWidth -= ( size.presentationWidth * config.margin ); - size.presentationHeight -= ( size.presentationHeight * config.margin ); - - // Slide width may be a percentage of available width - if( typeof size.width === 'string' && /%$/.test( size.width ) ) { - size.width = parseInt( size.width, 10 ) / 100 * size.presentationWidth; - } - - // Slide height may be a percentage of available height - if( typeof size.height === 'string' && /%$/.test( size.height ) ) { - size.height = parseInt( size.height, 10 ) / 100 * size.presentationHeight; - } - - return size; - - } - - /** - * Stores the vertical index of a stack so that the same - * vertical slide can be selected when navigating to and - * from the stack. - * - * @param {HTMLElement} stack The vertical stack element - * @param {string|number} [v=0] Index to memorize - */ - function setPreviousVerticalIndex( stack, v ) { - - if( typeof stack === 'object' && typeof stack.setAttribute === 'function' ) { - stack.setAttribute( 'data-previous-indexv', v || 0 ); - } - - } - - /** - * Retrieves the vertical index which was stored using - * #setPreviousVerticalIndex() or 0 if no previous index - * exists. - * - * @param {HTMLElement} stack The vertical stack element - */ - function getPreviousVerticalIndex( stack ) { - - if( typeof stack === 'object' && typeof stack.setAttribute === 'function' && stack.classList.contains( 'stack' ) ) { - // Prefer manually defined start-indexv - var attributeName = stack.hasAttribute( 'data-start-indexv' ) ? 'data-start-indexv' : 'data-previous-indexv'; - - return parseInt( stack.getAttribute( attributeName ) || 0, 10 ); - } - - return 0; - - } - - /** - * Displays the overview of slides (quick nav) by scaling - * down and arranging all slide elements. - */ - function activateOverview() { - - // Only proceed if enabled in config - if( config.overview && !isOverview() ) { - - overview = true; - - dom.wrapper.classList.add( 'overview' ); - dom.wrapper.classList.remove( 'overview-deactivating' ); - - if( features.overviewTransitions ) { - setTimeout( function() { - dom.wrapper.classList.add( 'overview-animated' ); - }, 1 ); - } - - // Don't auto-slide while in overview mode - cancelAutoSlide(); - - // Move the backgrounds element into the slide container to - // that the same scaling is applied - dom.slides.appendChild( dom.background ); - - // Clicking on an overview slide navigates to it - toArray( dom.wrapper.querySelectorAll( SLIDES_SELECTOR ) ).forEach( function( slide ) { - if( !slide.classList.contains( 'stack' ) ) { - slide.addEventListener( 'click', onOverviewSlideClicked, true ); - } - } ); - - // Calculate slide sizes - var margin = 70; - var slideSize = getComputedSlideSize(); - overviewSlideWidth = slideSize.width + margin; - overviewSlideHeight = slideSize.height + margin; - - // Reverse in RTL mode - if( config.rtl ) { - overviewSlideWidth = -overviewSlideWidth; - } - - updateSlidesVisibility(); - layoutOverview(); - updateOverview(); - - layout(); - - // Notify observers of the overview showing - dispatchEvent( 'overviewshown', { - 'indexh': indexh, - 'indexv': indexv, - 'currentSlide': currentSlide - } ); - - } - - } - - /** - * Uses CSS transforms to position all slides in a grid for - * display inside of the overview mode. - */ - function layoutOverview() { - - // Layout slides - toArray( dom.wrapper.querySelectorAll( HORIZONTAL_SLIDES_SELECTOR ) ).forEach( function( hslide, h ) { - hslide.setAttribute( 'data-index-h', h ); - transformElement( hslide, 'translate3d(' + ( h * overviewSlideWidth ) + 'px, 0, 0)' ); - - if( hslide.classList.contains( 'stack' ) ) { - - toArray( hslide.querySelectorAll( 'section' ) ).forEach( function( vslide, v ) { - vslide.setAttribute( 'data-index-h', h ); - vslide.setAttribute( 'data-index-v', v ); - - transformElement( vslide, 'translate3d(0, ' + ( v * overviewSlideHeight ) + 'px, 0)' ); - } ); - - } - } ); - - // Layout slide backgrounds - toArray( dom.background.childNodes ).forEach( function( hbackground, h ) { - transformElement( hbackground, 'translate3d(' + ( h * overviewSlideWidth ) + 'px, 0, 0)' ); - - toArray( hbackground.querySelectorAll( '.slide-background' ) ).forEach( function( vbackground, v ) { - transformElement( vbackground, 'translate3d(0, ' + ( v * overviewSlideHeight ) + 'px, 0)' ); - } ); - } ); - - } - - /** - * Moves the overview viewport to the current slides. - * Called each time the current slide changes. - */ - function updateOverview() { - - transformSlides( { - overview: [ - 'translateX('+ ( -indexh * overviewSlideWidth ) +'px)', - 'translateY('+ ( -indexv * overviewSlideHeight ) +'px)', - 'translateZ('+ ( window.innerWidth < 400 ? -1000 : -2500 ) +'px)' - ].join( ' ' ) - } ); - - } - - /** - * Exits the slide overview and enters the currently - * active slide. - */ - function deactivateOverview() { - - // Only proceed if enabled in config - if( config.overview ) { - - overview = false; - - dom.wrapper.classList.remove( 'overview' ); - dom.wrapper.classList.remove( 'overview-animated' ); - - // Temporarily add a class so that transitions can do different things - // depending on whether they are exiting/entering overview, or just - // moving from slide to slide - dom.wrapper.classList.add( 'overview-deactivating' ); - - setTimeout( function () { - dom.wrapper.classList.remove( 'overview-deactivating' ); - }, 1 ); - - // Move the background element back out - dom.wrapper.appendChild( dom.background ); - - // Clean up changes made to slides - toArray( dom.wrapper.querySelectorAll( SLIDES_SELECTOR ) ).forEach( function( slide ) { - transformElement( slide, '' ); - - slide.removeEventListener( 'click', onOverviewSlideClicked, true ); - } ); - - // Clean up changes made to backgrounds - toArray( dom.background.querySelectorAll( '.slide-background' ) ).forEach( function( background ) { - transformElement( background, '' ); - } ); - - transformSlides( { overview: '' } ); - - slide( indexh, indexv ); - - layout(); - - cueAutoSlide(); - - // Notify observers of the overview hiding - dispatchEvent( 'overviewhidden', { - 'indexh': indexh, - 'indexv': indexv, - 'currentSlide': currentSlide - } ); - - } - } - - /** - * Toggles the slide overview mode on and off. - * - * @param {Boolean} [override] Flag which overrides the - * toggle logic and forcibly sets the desired state. True means - * overview is open, false means it's closed. - */ - function toggleOverview( override ) { - - if( typeof override === 'boolean' ) { - override ? activateOverview() : deactivateOverview(); - } - else { - isOverview() ? deactivateOverview() : activateOverview(); - } - - } - - /** - * Checks if the overview is currently active. - * - * @return {Boolean} true if the overview is active, - * false otherwise - */ - function isOverview() { - - return overview; - - } - - /** - * Checks if the current or specified slide is vertical - * (nested within another slide). - * - * @param {HTMLElement} [slide=currentSlide] The slide to check - * orientation of - * @return {Boolean} - */ - function isVerticalSlide( slide ) { - - // Prefer slide argument, otherwise use current slide - slide = slide ? slide : currentSlide; - - return slide && slide.parentNode && !!slide.parentNode.nodeName.match( /section/i ); - - } - - /** - * Handling the fullscreen functionality via the fullscreen API - * - * @see http://fullscreen.spec.whatwg.org/ - * @see https://developer.mozilla.org/en-US/docs/DOM/Using_fullscreen_mode - */ - function enterFullscreen() { - - var element = document.documentElement; - - // Check which implementation is available - var requestMethod = element.requestFullscreen || - element.webkitRequestFullscreen || - element.webkitRequestFullScreen || - element.mozRequestFullScreen || - element.msRequestFullscreen; - - if( requestMethod ) { - requestMethod.apply( element ); - } - - } - - /** - * Enters the paused mode which fades everything on screen to - * black. - */ - function pause() { - - if( config.pause ) { - var wasPaused = dom.wrapper.classList.contains( 'paused' ); - - cancelAutoSlide(); - dom.wrapper.classList.add( 'paused' ); - - if( wasPaused === false ) { - dispatchEvent( 'paused' ); - } - } - - } - - /** - * Exits from the paused mode. - */ - function resume() { - - var wasPaused = dom.wrapper.classList.contains( 'paused' ); - dom.wrapper.classList.remove( 'paused' ); - - cueAutoSlide(); - - if( wasPaused ) { - dispatchEvent( 'resumed' ); - } - - } - - /** - * Toggles the paused mode on and off. - */ - function togglePause( override ) { - - if( typeof override === 'boolean' ) { - override ? pause() : resume(); - } - else { - isPaused() ? resume() : pause(); - } - - } - - /** - * Checks if we are currently in the paused mode. - * - * @return {Boolean} - */ - function isPaused() { - - return dom.wrapper.classList.contains( 'paused' ); - - } - - /** - * Toggles the auto slide mode on and off. - * - * @param {Boolean} [override] Flag which sets the desired state. - * True means autoplay starts, false means it stops. - */ - - function toggleAutoSlide( override ) { - - if( typeof override === 'boolean' ) { - override ? resumeAutoSlide() : pauseAutoSlide(); - } - - else { - autoSlidePaused ? resumeAutoSlide() : pauseAutoSlide(); - } - - } - - /** - * Checks if the auto slide mode is currently on. - * - * @return {Boolean} - */ - function isAutoSliding() { - - return !!( autoSlide && !autoSlidePaused ); - - } - - /** - * Steps from the current point in the presentation to the - * slide which matches the specified horizontal and vertical - * indices. - * - * @param {number} [h=indexh] Horizontal index of the target slide - * @param {number} [v=indexv] Vertical index of the target slide - * @param {number} [f] Index of a fragment within the - * target slide to activate - * @param {number} [o] Origin for use in multimaster environments - */ - function slide( h, v, f, o ) { - - // Remember where we were at before - previousSlide = currentSlide; - - // Query all horizontal slides in the deck - var horizontalSlides = dom.wrapper.querySelectorAll( HORIZONTAL_SLIDES_SELECTOR ); - - // Abort if there are no slides - if( horizontalSlides.length === 0 ) return; - - // If no vertical index is specified and the upcoming slide is a - // stack, resume at its previous vertical index - if( v === undefined && !isOverview() ) { - v = getPreviousVerticalIndex( horizontalSlides[ h ] ); - } - - // If we were on a vertical stack, remember what vertical index - // it was on so we can resume at the same position when returning - if( previousSlide && previousSlide.parentNode && previousSlide.parentNode.classList.contains( 'stack' ) ) { - setPreviousVerticalIndex( previousSlide.parentNode, indexv ); - } - - // Remember the state before this slide - var stateBefore = state.concat(); - - // Reset the state array - state.length = 0; - - var indexhBefore = indexh || 0, - indexvBefore = indexv || 0; - - // Activate and transition to the new slide - indexh = updateSlides( HORIZONTAL_SLIDES_SELECTOR, h === undefined ? indexh : h ); - indexv = updateSlides( VERTICAL_SLIDES_SELECTOR, v === undefined ? indexv : v ); - - // Update the visibility of slides now that the indices have changed - updateSlidesVisibility(); - - layout(); - - // Apply the new state - stateLoop: for( var i = 0, len = state.length; i < len; i++ ) { - // Check if this state existed on the previous slide. If it - // did, we will avoid adding it repeatedly - for( var j = 0; j < stateBefore.length; j++ ) { - if( stateBefore[j] === state[i] ) { - stateBefore.splice( j, 1 ); - continue stateLoop; - } - } - - document.documentElement.classList.add( state[i] ); - - // Dispatch custom event matching the state's name - dispatchEvent( state[i] ); - } - - // Clean up the remains of the previous state - while( stateBefore.length ) { - document.documentElement.classList.remove( stateBefore.pop() ); - } - - // Update the overview if it's currently active - if( isOverview() ) { - updateOverview(); - } - - // Find the current horizontal slide and any possible vertical slides - // within it - var currentHorizontalSlide = horizontalSlides[ indexh ], - currentVerticalSlides = currentHorizontalSlide.querySelectorAll( 'section' ); - - // Store references to the previous and current slides - currentSlide = currentVerticalSlides[ indexv ] || currentHorizontalSlide; - - // Show fragment, if specified - if( typeof f !== 'undefined' ) { - navigateFragment( f ); - } - - // Dispatch an event if the slide changed - var slideChanged = ( indexh !== indexhBefore || indexv !== indexvBefore ); - if( slideChanged ) { - dispatchEvent( 'slidechanged', { - 'indexh': indexh, - 'indexv': indexv, - 'previousSlide': previousSlide, - 'currentSlide': currentSlide, - 'origin': o - } ); - } - else { - // Ensure that the previous slide is never the same as the current - previousSlide = null; - } - - // Solves an edge case where the previous slide maintains the - // 'present' class when navigating between adjacent vertical - // stacks - if( previousSlide ) { - previousSlide.classList.remove( 'present' ); - previousSlide.setAttribute( 'aria-hidden', 'true' ); - - // Reset all slides upon navigate to home - // Issue: #285 - if ( dom.wrapper.querySelector( HOME_SLIDE_SELECTOR ).classList.contains( 'present' ) ) { - // Launch async task - setTimeout( function () { - var slides = toArray( dom.wrapper.querySelectorAll( HORIZONTAL_SLIDES_SELECTOR + '.stack') ), i; - for( i in slides ) { - if( slides[i] ) { - // Reset stack - setPreviousVerticalIndex( slides[i], 0 ); - } - } - }, 0 ); - } - } - - // Handle embedded content - if( slideChanged || !previousSlide ) { - stopEmbeddedContent( previousSlide ); - startEmbeddedContent( currentSlide ); - } - - // Announce the current slide contents, for screen readers - dom.statusDiv.textContent = getStatusText( currentSlide ); - - updateControls(); - updateProgress(); - updateBackground(); - updateParallax(); - updateSlideNumber(); - updateNotes(); - - // Update the URL hash - writeURL(); - - cueAutoSlide(); - - } - - /** - * Syncs the presentation with the current DOM. Useful - * when new slides or control elements are added or when - * the configuration has changed. - */ - function sync() { - - // Subscribe to input - removeEventListeners(); - addEventListeners(); - - // Force a layout to make sure the current config is accounted for - layout(); - - // Reflect the current autoSlide value - autoSlide = config.autoSlide; - - // Start auto-sliding if it's enabled - cueAutoSlide(); - - // Re-create the slide backgrounds - createBackgrounds(); - - // Write the current hash to the URL - writeURL(); - - sortAllFragments(); - - updateControls(); - updateProgress(); - updateBackground( true ); - updateSlideNumber(); - updateSlidesVisibility(); - updateNotes(); - - formatEmbeddedContent(); - startEmbeddedContent( currentSlide ); - - if( isOverview() ) { - layoutOverview(); - } - - } - - /** - * Resets all vertical slides so that only the first - * is visible. - */ - function resetVerticalSlides() { - - var horizontalSlides = toArray( dom.wrapper.querySelectorAll( HORIZONTAL_SLIDES_SELECTOR ) ); - horizontalSlides.forEach( function( horizontalSlide ) { - - var verticalSlides = toArray( horizontalSlide.querySelectorAll( 'section' ) ); - verticalSlides.forEach( function( verticalSlide, y ) { - - if( y > 0 ) { - verticalSlide.classList.remove( 'present' ); - verticalSlide.classList.remove( 'past' ); - verticalSlide.classList.add( 'future' ); - verticalSlide.setAttribute( 'aria-hidden', 'true' ); - } - - } ); - - } ); - - } - - /** - * Sorts and formats all of fragments in the - * presentation. - */ - function sortAllFragments() { - - var horizontalSlides = toArray( dom.wrapper.querySelectorAll( HORIZONTAL_SLIDES_SELECTOR ) ); - horizontalSlides.forEach( function( horizontalSlide ) { - - var verticalSlides = toArray( horizontalSlide.querySelectorAll( 'section' ) ); - verticalSlides.forEach( function( verticalSlide, y ) { - - sortFragments( verticalSlide.querySelectorAll( '.fragment' ) ); - - } ); - - if( verticalSlides.length === 0 ) sortFragments( horizontalSlide.querySelectorAll( '.fragment' ) ); - - } ); - - } - - /** - * Randomly shuffles all slides in the deck. - */ - function shuffle() { - - var slides = toArray( dom.wrapper.querySelectorAll( HORIZONTAL_SLIDES_SELECTOR ) ); - - slides.forEach( function( slide ) { - - // Insert this slide next to another random slide. This may - // cause the slide to insert before itself but that's fine. - dom.slides.insertBefore( slide, slides[ Math.floor( Math.random() * slides.length ) ] ); - - } ); - - } - - /** - * Updates one dimension of slides by showing the slide - * with the specified index. - * - * @param {string} selector A CSS selector that will fetch - * the group of slides we are working with - * @param {number} index The index of the slide that should be - * shown - * - * @return {number} The index of the slide that is now shown, - * might differ from the passed in index if it was out of - * bounds. - */ - function updateSlides( selector, index ) { - - // Select all slides and convert the NodeList result to - // an array - var slides = toArray( dom.wrapper.querySelectorAll( selector ) ), - slidesLength = slides.length; - - var printMode = isPrintingPDF(); - - if( slidesLength ) { - - // Should the index loop? - if( config.loop ) { - index %= slidesLength; - - if( index < 0 ) { - index = slidesLength + index; - } - } - - // Enforce max and minimum index bounds - index = Math.max( Math.min( index, slidesLength - 1 ), 0 ); - - for( var i = 0; i < slidesLength; i++ ) { - var element = slides[i]; - - var reverse = config.rtl && !isVerticalSlide( element ); - - element.classList.remove( 'past' ); - element.classList.remove( 'present' ); - element.classList.remove( 'future' ); - - // http://www.w3.org/html/wg/drafts/html/master/editing.html#the-hidden-attribute - element.setAttribute( 'hidden', '' ); - element.setAttribute( 'aria-hidden', 'true' ); - - // If this element contains vertical slides - if( element.querySelector( 'section' ) ) { - element.classList.add( 'stack' ); - } - - // If we're printing static slides, all slides are "present" - if( printMode ) { - element.classList.add( 'present' ); - continue; - } - - if( i < index ) { - // Any element previous to index is given the 'past' class - element.classList.add( reverse ? 'future' : 'past' ); - - if( config.fragments ) { - var pastFragments = toArray( element.querySelectorAll( '.fragment' ) ); - - // Show all fragments on prior slides - while( pastFragments.length ) { - var pastFragment = pastFragments.pop(); - pastFragment.classList.add( 'visible' ); - pastFragment.classList.remove( 'current-fragment' ); - } - } - } - else if( i > index ) { - // Any element subsequent to index is given the 'future' class - element.classList.add( reverse ? 'past' : 'future' ); - - if( config.fragments ) { - var futureFragments = toArray( element.querySelectorAll( '.fragment.visible' ) ); - - // No fragments in future slides should be visible ahead of time - while( futureFragments.length ) { - var futureFragment = futureFragments.pop(); - futureFragment.classList.remove( 'visible' ); - futureFragment.classList.remove( 'current-fragment' ); - } - } - } - } - - // Mark the current slide as present - slides[index].classList.add( 'present' ); - slides[index].removeAttribute( 'hidden' ); - slides[index].removeAttribute( 'aria-hidden' ); - - // If this slide has a state associated with it, add it - // onto the current state of the deck - var slideState = slides[index].getAttribute( 'data-state' ); - if( slideState ) { - state = state.concat( slideState.split( ' ' ) ); - } - - } - else { - // Since there are no slides we can't be anywhere beyond the - // zeroth index - index = 0; - } - - return index; - - } - - /** - * Optimization method; hide all slides that are far away - * from the present slide. - */ - function updateSlidesVisibility() { - - // Select all slides and convert the NodeList result to - // an array - var horizontalSlides = toArray( dom.wrapper.querySelectorAll( HORIZONTAL_SLIDES_SELECTOR ) ), - horizontalSlidesLength = horizontalSlides.length, - distanceX, - distanceY; - - if( horizontalSlidesLength && typeof indexh !== 'undefined' ) { - - // The number of steps away from the present slide that will - // be visible - var viewDistance = isOverview() ? 10 : config.viewDistance; - - // Limit view distance on weaker devices - if( isMobileDevice ) { - viewDistance = isOverview() ? 6 : 2; - } - - // All slides need to be visible when exporting to PDF - if( isPrintingPDF() ) { - viewDistance = Number.MAX_VALUE; - } - - for( var x = 0; x < horizontalSlidesLength; x++ ) { - var horizontalSlide = horizontalSlides[x]; - - var verticalSlides = toArray( horizontalSlide.querySelectorAll( 'section' ) ), - verticalSlidesLength = verticalSlides.length; - - // Determine how far away this slide is from the present - distanceX = Math.abs( ( indexh || 0 ) - x ) || 0; - - // If the presentation is looped, distance should measure - // 1 between the first and last slides - if( config.loop ) { - distanceX = Math.abs( ( ( indexh || 0 ) - x ) % ( horizontalSlidesLength - viewDistance ) ) || 0; - } - - // Show the horizontal slide if it's within the view distance - if( distanceX < viewDistance ) { - showSlide( horizontalSlide ); - } - else { - hideSlide( horizontalSlide ); - } - - if( verticalSlidesLength ) { - - var oy = getPreviousVerticalIndex( horizontalSlide ); - - for( var y = 0; y < verticalSlidesLength; y++ ) { - var verticalSlide = verticalSlides[y]; - - distanceY = x === ( indexh || 0 ) ? Math.abs( ( indexv || 0 ) - y ) : Math.abs( y - oy ); - - if( distanceX + distanceY < viewDistance ) { - showSlide( verticalSlide ); - } - else { - hideSlide( verticalSlide ); - } - } - - } - } - - } - - } - - /** - * Pick up notes from the current slide and display them - * to the viewer. - * - * @see {@link config.showNotes} - */ - function updateNotes() { - - if( config.showNotes && dom.speakerNotes && currentSlide && !isPrintingPDF() ) { - - dom.speakerNotes.innerHTML = getSlideNotes() || ''; - - } - - } - - /** - * Updates the progress bar to reflect the current slide. - */ - function updateProgress() { - - // Update progress if enabled - if( config.progress && dom.progressbar ) { - - dom.progressbar.style.width = getProgress() * dom.wrapper.offsetWidth + 'px'; - - } - - } - - /** - * Updates the slide number div to reflect the current slide. - * - * The following slide number formats are available: - * "h.v": horizontal . vertical slide number (default) - * "h/v": horizontal / vertical slide number - * "c": flattened slide number - * "c/t": flattened slide number / total slides - */ - function updateSlideNumber() { - - // Update slide number if enabled - if( config.slideNumber && dom.slideNumber ) { - - var value = []; - var format = 'h.v'; - - // Check if a custom number format is available - if( typeof config.slideNumber === 'string' ) { - format = config.slideNumber; - } - - switch( format ) { - case 'c': - value.push( getSlidePastCount() + 1 ); - break; - case 'c/t': - value.push( getSlidePastCount() + 1, '/', getTotalSlides() ); - break; - case 'h/v': - value.push( indexh + 1 ); - if( isVerticalSlide() ) value.push( '/', indexv + 1 ); - break; - default: - value.push( indexh + 1 ); - if( isVerticalSlide() ) value.push( '.', indexv + 1 ); - } - - dom.slideNumber.innerHTML = formatSlideNumber( value[0], value[1], value[2] ); - } - - } - - /** - * Applies HTML formatting to a slide number before it's - * written to the DOM. - * - * @param {number} a Current slide - * @param {string} delimiter Character to separate slide numbers - * @param {(number|*)} b Total slides - * @return {string} HTML string fragment - */ - function formatSlideNumber( a, delimiter, b ) { - - if( typeof b === 'number' && !isNaN( b ) ) { - return ''+ a +'' + - ''+ delimiter +'' + - ''+ b +''; - } - else { - return ''+ a +''; - } - - } - - /** - * Updates the state of all control/navigation arrows. - */ - function updateControls() { - - var routes = availableRoutes(); - var fragments = availableFragments(); - - // Remove the 'enabled' class from all directions - dom.controlsLeft.concat( dom.controlsRight ) - .concat( dom.controlsUp ) - .concat( dom.controlsDown ) - .concat( dom.controlsPrev ) - .concat( dom.controlsNext ).forEach( function( node ) { - node.classList.remove( 'enabled' ); - node.classList.remove( 'fragmented' ); - - // Set 'disabled' attribute on all directions - node.setAttribute( 'disabled', 'disabled' ); - } ); - - // Add the 'enabled' class to the available routes; remove 'disabled' attribute to enable buttons - if( routes.left ) dom.controlsLeft.forEach( function( el ) { el.classList.add( 'enabled' ); el.removeAttribute( 'disabled' ); } ); - if( routes.right ) dom.controlsRight.forEach( function( el ) { el.classList.add( 'enabled' ); el.removeAttribute( 'disabled' ); } ); - if( routes.up ) dom.controlsUp.forEach( function( el ) { el.classList.add( 'enabled' ); el.removeAttribute( 'disabled' ); } ); - if( routes.down ) dom.controlsDown.forEach( function( el ) { el.classList.add( 'enabled' ); el.removeAttribute( 'disabled' ); } ); - - // Prev/next buttons - if( routes.left || routes.up ) dom.controlsPrev.forEach( function( el ) { el.classList.add( 'enabled' ); el.removeAttribute( 'disabled' ); } ); - if( routes.right || routes.down ) dom.controlsNext.forEach( function( el ) { el.classList.add( 'enabled' ); el.removeAttribute( 'disabled' ); } ); - - // Highlight fragment directions - if( currentSlide ) { - - // Always apply fragment decorator to prev/next buttons - if( fragments.prev ) dom.controlsPrev.forEach( function( el ) { el.classList.add( 'fragmented', 'enabled' ); el.removeAttribute( 'disabled' ); } ); - if( fragments.next ) dom.controlsNext.forEach( function( el ) { el.classList.add( 'fragmented', 'enabled' ); el.removeAttribute( 'disabled' ); } ); - - // Apply fragment decorators to directional buttons based on - // what slide axis they are in - if( isVerticalSlide( currentSlide ) ) { - if( fragments.prev ) dom.controlsUp.forEach( function( el ) { el.classList.add( 'fragmented', 'enabled' ); el.removeAttribute( 'disabled' ); } ); - if( fragments.next ) dom.controlsDown.forEach( function( el ) { el.classList.add( 'fragmented', 'enabled' ); el.removeAttribute( 'disabled' ); } ); - } - else { - if( fragments.prev ) dom.controlsLeft.forEach( function( el ) { el.classList.add( 'fragmented', 'enabled' ); el.removeAttribute( 'disabled' ); } ); - if( fragments.next ) dom.controlsRight.forEach( function( el ) { el.classList.add( 'fragmented', 'enabled' ); el.removeAttribute( 'disabled' ); } ); - } - - } - - } - - /** - * Updates the background elements to reflect the current - * slide. - * - * @param {boolean} includeAll If true, the backgrounds of - * all vertical slides (not just the present) will be updated. - */ - function updateBackground( includeAll ) { - - var currentBackground = null; - - // Reverse past/future classes when in RTL mode - var horizontalPast = config.rtl ? 'future' : 'past', - horizontalFuture = config.rtl ? 'past' : 'future'; - - // Update the classes of all backgrounds to match the - // states of their slides (past/present/future) - toArray( dom.background.childNodes ).forEach( function( backgroundh, h ) { - - backgroundh.classList.remove( 'past' ); - backgroundh.classList.remove( 'present' ); - backgroundh.classList.remove( 'future' ); - - if( h < indexh ) { - backgroundh.classList.add( horizontalPast ); - } - else if ( h > indexh ) { - backgroundh.classList.add( horizontalFuture ); - } - else { - backgroundh.classList.add( 'present' ); - - // Store a reference to the current background element - currentBackground = backgroundh; - } - - if( includeAll || h === indexh ) { - toArray( backgroundh.querySelectorAll( '.slide-background' ) ).forEach( function( backgroundv, v ) { - - backgroundv.classList.remove( 'past' ); - backgroundv.classList.remove( 'present' ); - backgroundv.classList.remove( 'future' ); - - if( v < indexv ) { - backgroundv.classList.add( 'past' ); - } - else if ( v > indexv ) { - backgroundv.classList.add( 'future' ); - } - else { - backgroundv.classList.add( 'present' ); - - // Only if this is the present horizontal and vertical slide - if( h === indexh ) currentBackground = backgroundv; - } - - } ); - } - - } ); - - // Stop any currently playing video background - if( previousBackground ) { - - var previousVideo = previousBackground.querySelector( 'video' ); - if( previousVideo ) previousVideo.pause(); - - } - - if( currentBackground ) { - - // Start video playback - var currentVideo = currentBackground.querySelector( 'video' ); - if( currentVideo ) { - - var startVideo = function() { - currentVideo.currentTime = 0; - currentVideo.play(); - currentVideo.removeEventListener( 'loadeddata', startVideo ); - }; - - if( currentVideo.readyState > 1 ) { - startVideo(); - } - else { - currentVideo.addEventListener( 'loadeddata', startVideo ); - } - - } - - var backgroundImageURL = currentBackground.style.backgroundImage || ''; - - // Restart GIFs (doesn't work in Firefox) - if( /\.gif/i.test( backgroundImageURL ) ) { - currentBackground.style.backgroundImage = ''; - window.getComputedStyle( currentBackground ).opacity; - currentBackground.style.backgroundImage = backgroundImageURL; - } - - // Don't transition between identical backgrounds. This - // prevents unwanted flicker. - var previousBackgroundHash = previousBackground ? previousBackground.getAttribute( 'data-background-hash' ) : null; - var currentBackgroundHash = currentBackground.getAttribute( 'data-background-hash' ); - if( currentBackgroundHash && currentBackgroundHash === previousBackgroundHash && currentBackground !== previousBackground ) { - dom.background.classList.add( 'no-transition' ); - } - - previousBackground = currentBackground; - - } - - // If there's a background brightness flag for this slide, - // bubble it to the .reveal container - if( currentSlide ) { - [ 'has-light-background', 'has-dark-background' ].forEach( function( classToBubble ) { - if( currentSlide.classList.contains( classToBubble ) ) { - dom.wrapper.classList.add( classToBubble ); - } - else { - dom.wrapper.classList.remove( classToBubble ); - } - } ); - } - - // Allow the first background to apply without transition - setTimeout( function() { - dom.background.classList.remove( 'no-transition' ); - }, 1 ); - - } - - /** - * Updates the position of the parallax background based - * on the current slide index. - */ - function updateParallax() { - - if( config.parallaxBackgroundImage ) { - - var horizontalSlides = dom.wrapper.querySelectorAll( HORIZONTAL_SLIDES_SELECTOR ), - verticalSlides = dom.wrapper.querySelectorAll( VERTICAL_SLIDES_SELECTOR ); - - var backgroundSize = dom.background.style.backgroundSize.split( ' ' ), - backgroundWidth, backgroundHeight; - - if( backgroundSize.length === 1 ) { - backgroundWidth = backgroundHeight = parseInt( backgroundSize[0], 10 ); - } - else { - backgroundWidth = parseInt( backgroundSize[0], 10 ); - backgroundHeight = parseInt( backgroundSize[1], 10 ); - } - - var slideWidth = dom.background.offsetWidth, - horizontalSlideCount = horizontalSlides.length, - horizontalOffsetMultiplier, - horizontalOffset; - - if( typeof config.parallaxBackgroundHorizontal === 'number' ) { - horizontalOffsetMultiplier = config.parallaxBackgroundHorizontal; - } - else { - horizontalOffsetMultiplier = horizontalSlideCount > 1 ? ( backgroundWidth - slideWidth ) / ( horizontalSlideCount-1 ) : 0; - } - - horizontalOffset = horizontalOffsetMultiplier * indexh * -1; - - var slideHeight = dom.background.offsetHeight, - verticalSlideCount = verticalSlides.length, - verticalOffsetMultiplier, - verticalOffset; - - if( typeof config.parallaxBackgroundVertical === 'number' ) { - verticalOffsetMultiplier = config.parallaxBackgroundVertical; - } - else { - verticalOffsetMultiplier = ( backgroundHeight - slideHeight ) / ( verticalSlideCount-1 ); - } - - verticalOffset = verticalSlideCount > 0 ? verticalOffsetMultiplier * indexv : 0; - - dom.background.style.backgroundPosition = horizontalOffset + 'px ' + -verticalOffset + 'px'; - - } - - } - - /** - * Called when the given slide is within the configured view - * distance. Shows the slide element and loads any content - * that is set to load lazily (data-src). - * - * @param {HTMLElement} slide Slide to show - */ - function showSlide( slide ) { - - // Show the slide element - slide.style.display = 'block'; - - // Media elements with data-src attributes - toArray( slide.querySelectorAll( 'img[data-src], video[data-src], audio[data-src]' ) ).forEach( function( element ) { - element.setAttribute( 'src', element.getAttribute( 'data-src' ) ); - element.removeAttribute( 'data-src' ); - } ); - - // Media elements with children - toArray( slide.querySelectorAll( 'video, audio' ) ).forEach( function( media ) { - var sources = 0; - - toArray( media.querySelectorAll( 'source[data-src]' ) ).forEach( function( source ) { - source.setAttribute( 'src', source.getAttribute( 'data-src' ) ); - source.removeAttribute( 'data-src' ); - sources += 1; - } ); - - // If we rewrote sources for this video/audio element, we need - // to manually tell it to load from its new origin - if( sources > 0 ) { - media.load(); - } - } ); - - - // Show the corresponding background element - var indices = getIndices( slide ); - var background = getSlideBackground( indices.h, indices.v ); - if( background ) { - background.style.display = 'block'; - - // If the background contains media, load it - if( background.hasAttribute( 'data-loaded' ) === false ) { - background.setAttribute( 'data-loaded', 'true' ); - - var backgroundImage = slide.getAttribute( 'data-background-image' ), - backgroundVideo = slide.getAttribute( 'data-background-video' ), - backgroundVideoLoop = slide.hasAttribute( 'data-background-video-loop' ), - backgroundVideoMuted = slide.hasAttribute( 'data-background-video-muted' ), - backgroundIframe = slide.getAttribute( 'data-background-iframe' ); - - // Images - if( backgroundImage ) { - background.style.backgroundImage = 'url('+ backgroundImage +')'; - } - // Videos - else if ( backgroundVideo && !isSpeakerNotes() ) { - var video = document.createElement( 'video' ); - - if( backgroundVideoLoop ) { - video.setAttribute( 'loop', '' ); - } - - if( backgroundVideoMuted ) { - video.muted = true; - } - - // Support comma separated lists of video sources - backgroundVideo.split( ',' ).forEach( function( source ) { - video.innerHTML += ''; - } ); - - background.appendChild( video ); - } - // Iframes - else if( backgroundIframe ) { - var iframe = document.createElement( 'iframe' ); - iframe.setAttribute( 'src', backgroundIframe ); - iframe.style.width = '100%'; - iframe.style.height = '100%'; - iframe.style.maxHeight = '100%'; - iframe.style.maxWidth = '100%'; - - background.appendChild( iframe ); - } - } - } - - } - - /** - * Called when the given slide is moved outside of the - * configured view distance. - * - * @param {HTMLElement} slide - */ - function hideSlide( slide ) { - - // Hide the slide element - slide.style.display = 'none'; - - // Hide the corresponding background element - var indices = getIndices( slide ); - var background = getSlideBackground( indices.h, indices.v ); - if( background ) { - background.style.display = 'none'; - } - - } - - /** - * Determine what available routes there are for navigation. - * - * @return {{left: boolean, right: boolean, up: boolean, down: boolean}} - */ - function availableRoutes() { - - var horizontalSlides = dom.wrapper.querySelectorAll( HORIZONTAL_SLIDES_SELECTOR ), - verticalSlides = dom.wrapper.querySelectorAll( VERTICAL_SLIDES_SELECTOR ); - - var routes = { - left: indexh > 0 || config.loop, - right: indexh < horizontalSlides.length - 1 || config.loop, - up: indexv > 0, - down: indexv < verticalSlides.length - 1 - }; - - // reverse horizontal controls for rtl - if( config.rtl ) { - var left = routes.left; - routes.left = routes.right; - routes.right = left; - } - - return routes; - - } - - /** - * Returns an object describing the available fragment - * directions. - * - * @return {{prev: boolean, next: boolean}} - */ - function availableFragments() { - - if( currentSlide && config.fragments ) { - var fragments = currentSlide.querySelectorAll( '.fragment' ); - var hiddenFragments = currentSlide.querySelectorAll( '.fragment:not(.visible)' ); - - return { - prev: fragments.length - hiddenFragments.length > 0, - next: !!hiddenFragments.length - }; - } - else { - return { prev: false, next: false }; - } - - } - - /** - * Enforces origin-specific format rules for embedded media. - */ - function formatEmbeddedContent() { - - var _appendParamToIframeSource = function( sourceAttribute, sourceURL, param ) { - toArray( dom.slides.querySelectorAll( 'iframe['+ sourceAttribute +'*="'+ sourceURL +'"]' ) ).forEach( function( el ) { - var src = el.getAttribute( sourceAttribute ); - if( src && src.indexOf( param ) === -1 ) { - el.setAttribute( sourceAttribute, src + ( !/\?/.test( src ) ? '?' : '&' ) + param ); - } - }); - }; - - // YouTube frames must include "?enablejsapi=1" - _appendParamToIframeSource( 'src', 'youtube.com/embed/', 'enablejsapi=1' ); - _appendParamToIframeSource( 'data-src', 'youtube.com/embed/', 'enablejsapi=1' ); - - // Vimeo frames must include "?api=1" - _appendParamToIframeSource( 'src', 'player.vimeo.com/', 'api=1' ); - _appendParamToIframeSource( 'data-src', 'player.vimeo.com/', 'api=1' ); - - } - - /** - * Start playback of any embedded content inside of - * the given element. - * - * @param {HTMLElement} slide - */ - function startEmbeddedContent( element ) { - - if( element && !isSpeakerNotes() ) { - // Restart GIFs - toArray( element.querySelectorAll( 'img[src$=".gif"]' ) ).forEach( function( el ) { - // Setting the same unchanged source like this was confirmed - // to work in Chrome, FF & Safari - el.setAttribute( 'src', el.getAttribute( 'src' ) ); - } ); - - // HTML5 media elements - toArray( element.querySelectorAll( 'video, audio' ) ).forEach( function( el ) { - if( closestParent( el, '.fragment' ) && !closestParent( el, '.fragment.visible' ) ) { - return; - } - - if( el.hasAttribute( 'data-autoplay' ) && typeof el.play === 'function' ) { - el.play(); - } - } ); - - // Normal iframes - toArray( element.querySelectorAll( 'iframe[src]' ) ).forEach( function( el ) { - if( closestParent( el, '.fragment' ) && !closestParent( el, '.fragment.visible' ) ) { - return; - } - - startEmbeddedIframe( { target: el } ); - } ); - - // Lazy loading iframes - toArray( element.querySelectorAll( 'iframe[data-src]' ) ).forEach( function( el ) { - if( closestParent( el, '.fragment' ) && !closestParent( el, '.fragment.visible' ) ) { - return; - } - - if( el.getAttribute( 'src' ) !== el.getAttribute( 'data-src' ) ) { - el.removeEventListener( 'load', startEmbeddedIframe ); // remove first to avoid dupes - el.addEventListener( 'load', startEmbeddedIframe ); - el.setAttribute( 'src', el.getAttribute( 'data-src' ) ); - } - } ); - } - - } - - /** - * "Starts" the content of an embedded iframe using the - * postMessage API. - * - * @param {object} event - postMessage API event - */ - function startEmbeddedIframe( event ) { - - var iframe = event.target; - - if( iframe && iframe.contentWindow ) { - - // YouTube postMessage API - if( /youtube\.com\/embed\//.test( iframe.getAttribute( 'src' ) ) && iframe.hasAttribute( 'data-autoplay' ) ) { - iframe.contentWindow.postMessage( '{"event":"command","func":"playVideo","args":""}', '*' ); - } - // Vimeo postMessage API - else if( /player\.vimeo\.com\//.test( iframe.getAttribute( 'src' ) ) && iframe.hasAttribute( 'data-autoplay' ) ) { - iframe.contentWindow.postMessage( '{"method":"play"}', '*' ); - } - // Generic postMessage API - else { - iframe.contentWindow.postMessage( 'slide:start', '*' ); - } - - } - - } - - /** - * Stop playback of any embedded content inside of - * the targeted slide. - * - * @param {HTMLElement} slide - */ - function stopEmbeddedContent( slide ) { - - if( slide && slide.parentNode ) { - // HTML5 media elements - toArray( slide.querySelectorAll( 'video, audio' ) ).forEach( function( el ) { - if( !el.hasAttribute( 'data-ignore' ) && typeof el.pause === 'function' ) { - el.pause(); - } - } ); - - // Generic postMessage API for non-lazy loaded iframes - toArray( slide.querySelectorAll( 'iframe' ) ).forEach( function( el ) { - el.contentWindow.postMessage( 'slide:stop', '*' ); - el.removeEventListener( 'load', startEmbeddedIframe ); - }); - - // YouTube postMessage API - toArray( slide.querySelectorAll( 'iframe[src*="youtube.com/embed/"]' ) ).forEach( function( el ) { - if( !el.hasAttribute( 'data-ignore' ) && typeof el.contentWindow.postMessage === 'function' ) { - el.contentWindow.postMessage( '{"event":"command","func":"pauseVideo","args":""}', '*' ); - } - }); - - // Vimeo postMessage API - toArray( slide.querySelectorAll( 'iframe[src*="player.vimeo.com/"]' ) ).forEach( function( el ) { - if( !el.hasAttribute( 'data-ignore' ) && typeof el.contentWindow.postMessage === 'function' ) { - el.contentWindow.postMessage( '{"method":"pause"}', '*' ); - } - }); - - // Lazy loading iframes - toArray( slide.querySelectorAll( 'iframe[data-src]' ) ).forEach( function( el ) { - // Only removing the src doesn't actually unload the frame - // in all browsers (Firefox) so we set it to blank first - el.setAttribute( 'src', 'about:blank' ); - el.removeAttribute( 'src' ); - } ); - } - - } - - /** - * Returns the number of past slides. This can be used as a global - * flattened index for slides. - * - * @return {number} Past slide count - */ - function getSlidePastCount() { - - var horizontalSlides = toArray( dom.wrapper.querySelectorAll( HORIZONTAL_SLIDES_SELECTOR ) ); - - // The number of past slides - var pastCount = 0; - - // Step through all slides and count the past ones - mainLoop: for( var i = 0; i < horizontalSlides.length; i++ ) { - - var horizontalSlide = horizontalSlides[i]; - var verticalSlides = toArray( horizontalSlide.querySelectorAll( 'section' ) ); - - for( var j = 0; j < verticalSlides.length; j++ ) { - - // Stop as soon as we arrive at the present - if( verticalSlides[j].classList.contains( 'present' ) ) { - break mainLoop; - } - - pastCount++; - - } - - // Stop as soon as we arrive at the present - if( horizontalSlide.classList.contains( 'present' ) ) { - break; - } - - // Don't count the wrapping section for vertical slides - if( horizontalSlide.classList.contains( 'stack' ) === false ) { - pastCount++; - } - - } - - return pastCount; - - } - - /** - * Returns a value ranging from 0-1 that represents - * how far into the presentation we have navigated. - * - * @return {number} - */ - function getProgress() { - - // The number of past and total slides - var totalCount = getTotalSlides(); - var pastCount = getSlidePastCount(); - - if( currentSlide ) { - - var allFragments = currentSlide.querySelectorAll( '.fragment' ); - - // If there are fragments in the current slide those should be - // accounted for in the progress. - if( allFragments.length > 0 ) { - var visibleFragments = currentSlide.querySelectorAll( '.fragment.visible' ); - - // This value represents how big a portion of the slide progress - // that is made up by its fragments (0-1) - var fragmentWeight = 0.9; - - // Add fragment progress to the past slide count - pastCount += ( visibleFragments.length / allFragments.length ) * fragmentWeight; - } - - } - - return pastCount / ( totalCount - 1 ); - - } - - /** - * Checks if this presentation is running inside of the - * speaker notes window. - * - * @return {boolean} - */ - function isSpeakerNotes() { - - return !!window.location.search.match( /receiver/gi ); - - } - - /** - * Reads the current URL (hash) and navigates accordingly. - */ - function readURL() { - - var hash = window.location.hash; - - // Attempt to parse the hash as either an index or name - var bits = hash.slice( 2 ).split( '/' ), - name = hash.replace( /#|\//gi, '' ); - - // If the first bit is invalid and there is a name we can - // assume that this is a named link - if( isNaN( parseInt( bits[0], 10 ) ) && name.length ) { - var element; - - // Ensure the named link is a valid HTML ID attribute - if( /^[a-zA-Z][\w:.-]*$/.test( name ) ) { - // Find the slide with the specified ID - element = document.getElementById( name ); - } - - if( element ) { - // Find the position of the named slide and navigate to it - var indices = Reveal.getIndices( element ); - slide( indices.h, indices.v ); - } - // If the slide doesn't exist, navigate to the current slide - else { - slide( indexh || 0, indexv || 0 ); - } - } - else { - // Read the index components of the hash - var h = parseInt( bits[0], 10 ) || 0, - v = parseInt( bits[1], 10 ) || 0; - - if( h !== indexh || v !== indexv ) { - slide( h, v ); - } - } - - } - - /** - * Updates the page URL (hash) to reflect the current - * state. - * - * @param {number} delay The time in ms to wait before - * writing the hash - */ - function writeURL( delay ) { - - if( config.history ) { - - // Make sure there's never more than one timeout running - clearTimeout( writeURLTimeout ); - - // If a delay is specified, timeout this call - if( typeof delay === 'number' ) { - writeURLTimeout = setTimeout( writeURL, delay ); - } - else if( currentSlide ) { - var url = '/'; - - // Attempt to create a named link based on the slide's ID - var id = currentSlide.getAttribute( 'id' ); - if( id ) { - id = id.replace( /[^a-zA-Z0-9\-\_\:\.]/g, '' ); - } - - // If the current slide has an ID, use that as a named link - if( typeof id === 'string' && id.length ) { - url = '/' + id; - } - // Otherwise use the /h/v index - else { - if( indexh > 0 || indexv > 0 ) url += indexh; - if( indexv > 0 ) url += '/' + indexv; - } - - window.location.hash = url; - } - } - - } - /** - * Retrieves the h/v location and fragment of the current, - * or specified, slide. - * - * @param {HTMLElement} [slide] If specified, the returned - * index will be for this slide rather than the currently - * active one - * - * @return {{h: number, v: number, f: number}} - */ - function getIndices( slide ) { - - // By default, return the current indices - var h = indexh, - v = indexv, - f; - - // If a slide is specified, return the indices of that slide - if( slide ) { - var isVertical = isVerticalSlide( slide ); - var slideh = isVertical ? slide.parentNode : slide; - - // Select all horizontal slides - var horizontalSlides = toArray( dom.wrapper.querySelectorAll( HORIZONTAL_SLIDES_SELECTOR ) ); - - // Now that we know which the horizontal slide is, get its index - h = Math.max( horizontalSlides.indexOf( slideh ), 0 ); - - // Assume we're not vertical - v = undefined; - - // If this is a vertical slide, grab the vertical index - if( isVertical ) { - v = Math.max( toArray( slide.parentNode.querySelectorAll( 'section' ) ).indexOf( slide ), 0 ); - } - } - - if( !slide && currentSlide ) { - var hasFragments = currentSlide.querySelectorAll( '.fragment' ).length > 0; - if( hasFragments ) { - var currentFragment = currentSlide.querySelector( '.current-fragment' ); - if( currentFragment && currentFragment.hasAttribute( 'data-fragment-index' ) ) { - f = parseInt( currentFragment.getAttribute( 'data-fragment-index' ), 10 ); - } - else { - f = currentSlide.querySelectorAll( '.fragment.visible' ).length - 1; - } - } - } - - return { h: h, v: v, f: f }; - - } - - /** - * Retrieves the total number of slides in this presentation. - * - * @return {number} - */ - function getTotalSlides() { - - return dom.wrapper.querySelectorAll( SLIDES_SELECTOR + ':not(.stack)' ).length; - - } - - /** - * Returns the slide element matching the specified index. - * - * @return {HTMLElement} - */ - function getSlide( x, y ) { - - var horizontalSlide = dom.wrapper.querySelectorAll( HORIZONTAL_SLIDES_SELECTOR )[ x ]; - var verticalSlides = horizontalSlide && horizontalSlide.querySelectorAll( 'section' ); - - if( verticalSlides && verticalSlides.length && typeof y === 'number' ) { - return verticalSlides ? verticalSlides[ y ] : undefined; - } - - return horizontalSlide; - - } - - /** - * Returns the background element for the given slide. - * All slides, even the ones with no background properties - * defined, have a background element so as long as the - * index is valid an element will be returned. - * - * @param {number} x Horizontal background index - * @param {number} y Vertical background index - * @return {(HTMLElement[]|*)} - */ - function getSlideBackground( x, y ) { - - // When printing to PDF the slide backgrounds are nested - // inside of the slides - if( isPrintingPDF() ) { - var slide = getSlide( x, y ); - if( slide ) { - return slide.slideBackgroundElement; - } - - return undefined; - } - - var horizontalBackground = dom.wrapper.querySelectorAll( '.backgrounds>.slide-background' )[ x ]; - var verticalBackgrounds = horizontalBackground && horizontalBackground.querySelectorAll( '.slide-background' ); - - if( verticalBackgrounds && verticalBackgrounds.length && typeof y === 'number' ) { - return verticalBackgrounds ? verticalBackgrounds[ y ] : undefined; - } - - return horizontalBackground; - - } - - /** - * Retrieves the speaker notes from a slide. Notes can be - * defined in two ways: - * 1. As a data-notes attribute on the slide
    - * 2. As an
    - - - - - - - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/page_first.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/page_first.html deleted file mode 100644 index eb54703..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/page_first.html +++ /dev/null @@ -1,55 +0,0 @@ - - - - - - - Ansible Essentials Workshop - - - - - - - - - - - - - - - - - - - -
    - - - - - - -
    -
    -
    -
    - -

    -

    -

    -

    -
    diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/plugin/index.php b/roles/lightbulb-ansiblered-deck/files/deck-ansible/plugin/index.php deleted file mode 100644 index 82677dc..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/plugin/index.php +++ /dev/null @@ -1,3 +0,0 @@ - - - - - - reveal.js - Slide Notes - - - - - - -
    -
    Upcoming
    -
    -
    -

    Time Click to Reset

    -
    - 0:00 AM -
    -
    - 00:00:00 -
    -
    -
    - - -
    -
    - - -
    - - - - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/plugin/notes/notes.js b/roles/lightbulb-ansiblered-deck/files/deck-ansible/plugin/notes/notes.js deleted file mode 100644 index 46bf5de..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/plugin/notes/notes.js +++ /dev/null @@ -1,145 +0,0 @@ -/** - * Handles opening of and synchronization with the reveal.js - * notes window. - * - * Handshake process: - * 1. This window posts 'connect' to notes window - * - Includes URL of presentation to show - * 2. Notes window responds with 'connected' when it is available - * 3. This window proceeds to send the current presentation state - * to the notes window - */ -var RevealNotes = (function() { - - function openNotes( notesFilePath ) { - - if( !notesFilePath ) { - var jsFileLocation = document.querySelector('script[src$="notes.js"]').src; // this js file path - jsFileLocation = jsFileLocation.replace(/notes\.js(\?.*)?$/, ''); // the js folder path - notesFilePath = jsFileLocation + 'notes.html'; - } - - var notesPopup = window.open( notesFilePath, 'reveal.js - Notes', 'width=1100,height=700' ); - - /** - * Connect to the notes window through a postmessage handshake. - * Using postmessage enables us to work in situations where the - * origins differ, such as a presentation being opened from the - * file system. - */ - function connect() { - // Keep trying to connect until we get a 'connected' message back - var connectInterval = setInterval( function() { - notesPopup.postMessage( JSON.stringify( { - namespace: 'reveal-notes', - type: 'connect', - url: window.location.protocol + '//' + window.location.host + window.location.pathname + window.location.search, - state: Reveal.getState() - } ), '*' ); - }, 500 ); - - window.addEventListener( 'message', function( event ) { - var data = JSON.parse( event.data ); - if( data && data.namespace === 'reveal-notes' && data.type === 'connected' ) { - clearInterval( connectInterval ); - onConnected(); - } - } ); - } - - /** - * Posts the current slide data to the notes window - */ - function post(event) { - - var slideElement = Reveal.getCurrentSlide(), - notesElement = slideElement.querySelector( 'aside.notes' ); - - var messageData = { - namespace: 'reveal-notes', - type: 'state', - notes: '', - markdown: false, - whitespace: 'normal', - state: Reveal.getState() - }; - - // Look for notes defined in a fragment, if it is a fragmentshown event - if (event && event.hasOwnProperty('fragment')) { - var innerNotes = event.fragment.querySelector( 'aside.notes' ); - - if ( innerNotes) { - notesElement = innerNotes; - } - } - - // Look for notes defined in a slide attribute - if( slideElement.hasAttribute( 'data-notes' ) ) { - messageData.notes = slideElement.getAttribute( 'data-notes' ); - messageData.whitespace = 'pre-wrap'; - } - - // Look for notes defined in an aside element - if( notesElement ) { - messageData.notes = notesElement.innerHTML; - messageData.markdown = typeof notesElement.getAttribute( 'data-markdown' ) === 'string'; - } - - notesPopup.postMessage( JSON.stringify( messageData ), '*' ); - - } - - /** - * Called once we have established a connection to the notes - * window. - */ - function onConnected() { - - // Monitor events that trigger a change in state - Reveal.addEventListener( 'slidechanged', post ); - Reveal.addEventListener( 'fragmentshown', post ); - Reveal.addEventListener( 'fragmenthidden', post ); - Reveal.addEventListener( 'overviewhidden', post ); - Reveal.addEventListener( 'overviewshown', post ); - Reveal.addEventListener( 'paused', post ); - Reveal.addEventListener( 'resumed', post ); - - // Post the initial state - post(); - - } - - connect(); - - } - - if( !/receiver/i.test( window.location.search ) ) { - - // If the there's a 'notes' query set, open directly - if( window.location.search.match( /(\?|\&)notes/gi ) !== null ) { - openNotes(); - } - - // Open the notes when the 's' key is hit - document.addEventListener( 'keydown', function( event ) { - // Disregard the event if the target is editable or a - // modifier is present - if ( document.querySelector( ':focus' ) !== null || event.shiftKey || event.altKey || event.ctrlKey || event.metaKey ) return; - - // Disregard the event if keyboard is disabled - if ( Reveal.getConfig().keyboard === false ) return; - - if( event.keyCode === 83 ) { - event.preventDefault(); - openNotes(); - } - }, false ); - - // Show our keyboard shortcut in the reveal.js help overlay - if( window.Reveal ) Reveal.registerKeyboardShortcut( 'S', 'Speaker notes view' ); - - } - - return { open: openNotes }; - -})(); diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/prefs/default.prefs.php b/roles/lightbulb-ansiblered-deck/files/deck-ansible/prefs/default.prefs.php deleted file mode 100644 index b9ecd8b..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/prefs/default.prefs.php +++ /dev/null @@ -1,11 +0,0 @@ - - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/prefs/index.php b/roles/lightbulb-ansiblered-deck/files/deck-ansible/prefs/index.php deleted file mode 100644 index 82677dc..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/prefs/index.php +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/prefs/lee.prefs.php b/roles/lightbulb-ansiblered-deck/files/deck-ansible/prefs/lee.prefs.php deleted file mode 100644 index 9224844..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/prefs/lee.prefs.php +++ /dev/null @@ -1,10 +0,0 @@ - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/prefs/med.prefs.php b/roles/lightbulb-ansiblered-deck/files/deck-ansible/prefs/med.prefs.php deleted file mode 100644 index 7ced860..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/prefs/med.prefs.php +++ /dev/null @@ -1,10 +0,0 @@ - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/prefs/msavage.prefs.php b/roles/lightbulb-ansiblered-deck/files/deck-ansible/prefs/msavage.prefs.php deleted file mode 100644 index a2a7969..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/prefs/msavage.prefs.php +++ /dev/null @@ -1,12 +0,0 @@ - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/prefs/mstonge.prefs.php b/roles/lightbulb-ansiblered-deck/files/deck-ansible/prefs/mstonge.prefs.php deleted file mode 100644 index 30a1fa5..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/prefs/mstonge.prefs.php +++ /dev/null @@ -1,12 +0,0 @@ - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/prefs/phil.prefs.php b/roles/lightbulb-ansiblered-deck/files/deck-ansible/prefs/phil.prefs.php deleted file mode 100644 index 6b672bc..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/prefs/phil.prefs.php +++ /dev/null @@ -1,10 +0,0 @@ - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/prefs/shadd.prefs.php b/roles/lightbulb-ansiblered-deck/files/deck-ansible/prefs/shadd.prefs.php deleted file mode 100644 index eef9c11..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/prefs/shadd.prefs.php +++ /dev/null @@ -1,10 +0,0 @@ - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/sponsor.html b/roles/lightbulb-ansiblered-deck/files/deck-ansible/sponsor.html deleted file mode 100644 index 00052a1..0000000 --- a/roles/lightbulb-ansiblered-deck/files/deck-ansible/sponsor.html +++ /dev/null @@ -1,10 +0,0 @@ -
    - -

    Why I Love Kevin Holmes

    -

    Without Kev, my life would be boring.

    -

    I would like to take just a few minutes to talk about Kevin and how wonderful of a friend he is.

    -

    GoKEV.com           YouTube/GoKEV

    -
    - diff --git a/roles/lightbulb-ansiblered-deck/files/deck-ansible/video/yuminstallansible.mp4 b/roles/lightbulb-ansiblered-deck/files/deck-ansible/video/yuminstallansible.mp4 deleted file mode 100644 index c297944..0000000 Binary files a/roles/lightbulb-ansiblered-deck/files/deck-ansible/video/yuminstallansible.mp4 and /dev/null differ diff --git a/roles/lightbulb-ansiblered-deck/handlers/main.yml b/roles/lightbulb-ansiblered-deck/handlers/main.yml deleted file mode 100644 index 2334665..0000000 --- a/roles/lightbulb-ansiblered-deck/handlers/main.yml +++ /dev/null @@ -1,2 +0,0 @@ ---- -# handlers file for ansiblered-deck-ansible \ No newline at end of file diff --git a/roles/lightbulb-ansiblered-deck/meta/.galaxy_install_info b/roles/lightbulb-ansiblered-deck/meta/.galaxy_install_info deleted file mode 100644 index 7a615dc..0000000 --- a/roles/lightbulb-ansiblered-deck/meta/.galaxy_install_info +++ /dev/null @@ -1,2 +0,0 @@ -install_date: Wed Jun 24 18:44:30 2020 -version: '' diff --git a/roles/lightbulb-ansiblered-deck/meta/main.yml b/roles/lightbulb-ansiblered-deck/meta/main.yml deleted file mode 100644 index 7223799..0000000 --- a/roles/lightbulb-ansiblered-deck/meta/main.yml +++ /dev/null @@ -1,57 +0,0 @@ -galaxy_info: - author: your name - description: your description - company: your company (optional) - - # If the issue tracker for your role is not on github, uncomment the - # next line and provide a value - # issue_tracker_url: http://example.com/issue/tracker - - # Some suggested licenses: - # - BSD (default) - # - MIT - # - GPLv2 - # - GPLv3 - # - Apache - # - CC-BY - license: license (GPLv2, CC-BY, etc) - - min_ansible_version: 1.2 - - # If this a Container Enabled role, provide the minimum Ansible Container version. - # min_ansible_container_version: - - # Optionally specify the branch Galaxy will use when accessing the GitHub - # repo for this role. During role install, if no tags are available, - # Galaxy will use this branch. During import Galaxy will access files on - # this branch. If Travis integration is configured, only notifications for this - # branch will be accepted. Otherwise, in all cases, the repo's default branch - # (usually master) will be used. - #github_branch: - - # - # platforms is a list of platforms, and each platform has a name and a list of versions. - # - # platforms: - # - name: Fedora - # versions: - # - all - # - 25 - # - name: SomePlatform - # versions: - # - all - # - 1.0 - # - 7 - # - 99.99 - - galaxy_tags: [] - # List tags for your role here, one per line. A tag is a keyword that describes - # and categorizes the role. Users find roles by searching for tags. Be sure to - # remove the '[]' above, if you add tags to this list. - # - # NOTE: A tag is limited to a single word comprised of alphanumeric characters. - # Maximum 20 tags per role. - -dependencies: [] - # List your role dependencies here, one per line. Be sure to remove the '[]' above, - # if you add dependencies to this list. \ No newline at end of file diff --git a/roles/lightbulb-ansiblered-deck/tasks/main.yml b/roles/lightbulb-ansiblered-deck/tasks/main.yml deleted file mode 100644 index 065c473..0000000 --- a/roles/lightbulb-ansiblered-deck/tasks/main.yml +++ /dev/null @@ -1,80 +0,0 @@ ---- -# tasks file for ansiblered-deck-ansible--- -- name: Assure PHP is installed for deck and dynamic content - yum: - name: php - state: latest - -- name: Assure our preferences files directory exists - file: - path: "{{ workshop_web_path }}/deck-ansible/prefs/" - state: directory - -- name: deploy the PHP default preferences file template for the slide deck - template: - src: templates/deck-ansible_prefs_default.prefs.php - dest: "{{ workshop_web_path }}/deck-ansible/prefs/default.prefs.php" - mode: 0644 - backup: yes - -- name: synchronize html basics deck - synchronize: - src: files/deck-ansible/ - dest: "{{ workshop_web_path }}/deck-ansible/" - delete: yes - recursive: yes - rsync_opts: - - "--no-motd" - - "--exclude=prefs/default.prefs.php" - -### Ansible SELinux module does not appear to work recursively so we use ugly raw -- name: "Set selinux context recursively httpd_sys_rw_content_t {{ workshop_web_path }}" - shell: "chcon -R -t httpd_sys_rw_content_t {{ workshop_web_path }}" - changed_when: no - failed_when: no - - -### The optional PHP redirect will go in the {{ workshop_web_path }} path and redirect to the PHP deck dir with tag: phpredirect -- name: Copy index.php to root dir - template: - src: templates/index_redirect.php - dest: "{{ workshop_web_path }}/index.php" - owner: root - group: wheel - mode: 0644 - tags: [ 'never', 'phpredirect' ] - -### The optional PHP daemon to run this without apache will only install explicityly with tag: phpdaemon -- name: Copy PHP systemd service file - template: - src: templates/ansible-php-deck.service - dest: /usr/lib/systemd/system/ansible-php-deck.service - owner: root - group: wheel - mode: 0644 - tags: [ 'never', 'phpdaemon' ] - -- name: Copy PHP script file to launch daemon - template: - src: templates/ansible-php-deck.sh - dest: /root/ansible-php-deck.sh - owner: root - group: wheel - mode: 0755 - tags: [ 'never', 'phpdaemon' ] - -- name: Start service ansible-php-deck, if not started - service: - name: ansible-php-deck - state: started - tags: [ 'never', 'phpdaemon' ] - -- name: Enable service ansible-php-deck, if not enabled - service: - name: ansible-php-deck - enabled: yes - tags: [ 'never', 'phpdaemon' ] - - - - diff --git a/roles/lightbulb-ansiblered-deck/templates/ansible-php-deck.service b/roles/lightbulb-ansiblered-deck/templates/ansible-php-deck.service deleted file mode 100644 index 5d87c8b..0000000 --- a/roles/lightbulb-ansiblered-deck/templates/ansible-php-deck.service +++ /dev/null @@ -1,9 +0,0 @@ -[Unit] -Description=PHP daemon to serve the Ansible deck - -[Service] -ExecStart=/root/ansible-php-deck.sh - -[Install] -WantedBy=multi-user.target - diff --git a/roles/lightbulb-ansiblered-deck/templates/ansible-php-deck.sh b/roles/lightbulb-ansiblered-deck/templates/ansible-php-deck.sh deleted file mode 100644 index a38e3b7..0000000 --- a/roles/lightbulb-ansiblered-deck/templates/ansible-php-deck.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh -sudo /bin/php -S 0.0.0.0:{{ php_port }} -t {{ workshop_web_path }}/deck-ansible/ > /var/log/php_deck.log 2>&1 - diff --git a/roles/lightbulb-ansiblered-deck/templates/deck-ansible_prefs_default.prefs.php b/roles/lightbulb-ansiblered-deck/templates/deck-ansible_prefs_default.prefs.php deleted file mode 100644 index 2b20dfb..0000000 --- a/roles/lightbulb-ansiblered-deck/templates/deck-ansible_prefs_default.prefs.php +++ /dev/null @@ -1,26 +0,0 @@ - - diff --git a/roles/lightbulb-ansiblered-deck/templates/index_redirect.php b/roles/lightbulb-ansiblered-deck/templates/index_redirect.php deleted file mode 100644 index 5f86d52..0000000 --- a/roles/lightbulb-ansiblered-deck/templates/index_redirect.php +++ /dev/null @@ -1,5 +0,0 @@ - diff --git a/roles/lightbulb-ansiblered-deck/tests/inventory b/roles/lightbulb-ansiblered-deck/tests/inventory deleted file mode 100644 index 878877b..0000000 --- a/roles/lightbulb-ansiblered-deck/tests/inventory +++ /dev/null @@ -1,2 +0,0 @@ -localhost - diff --git a/roles/lightbulb-ansiblered-deck/tests/test.yml b/roles/lightbulb-ansiblered-deck/tests/test.yml deleted file mode 100644 index 87233ce..0000000 --- a/roles/lightbulb-ansiblered-deck/tests/test.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -- hosts: localhost - remote_user: root - roles: - - ansiblered-deck-ansible \ No newline at end of file diff --git a/roles/lightbulb-ansiblered-deck/vars/main.yml b/roles/lightbulb-ansiblered-deck/vars/main.yml deleted file mode 100644 index a227267..0000000 --- a/roles/lightbulb-ansiblered-deck/vars/main.yml +++ /dev/null @@ -1,2 +0,0 @@ ---- -# vars file for ansiblered-deck-ansible \ No newline at end of file