Update build vm. Remove old role
This commit is contained in:
71
buildvm.yml
71
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 }}"
|
||||
|
||||
@@ -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/
|
||||
|
||||
@@ -1,88 +0,0 @@
|
||||
[](http://GoKEV.com/)
|
||||
|
||||
<div style="position: absolute; top: 40px; left: 200px;">
|
||||
|
||||
# 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:
|
||||
<pre>
|
||||
## 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"
|
||||
</pre>
|
||||
|
||||
Here's an example of how you could launch this role and and not start the PHP daemon (only synch the content).
|
||||
<pre>
|
||||
ansible-playbook -i ec2.hosts GoKEV-lab-provision.yml
|
||||
</pre>
|
||||
|
||||
|
||||
## Here's an example of the playbook
|
||||
|
||||
<pre>
|
||||
---
|
||||
- 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
|
||||
|
||||
</pre>
|
||||
|
||||
|
||||
## 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.
|
||||
* `<section id="<?=$pretty_html_dir?>">` 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 `<?=$varible_name?>` 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`
|
||||
|
||||
@@ -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
|
||||
@@ -1 +0,0 @@
|
||||
- prefs/default.prefs.php
|
||||
File diff suppressed because it is too large
Load Diff
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
*/
|
||||
@@ -1,3 +0,0 @@
|
||||
<?php
|
||||
|
||||
header("location:/");
|
||||
@@ -1,203 +0,0 @@
|
||||
/* Default Print Stylesheet Template
|
||||
by Rob Glazebrook of CSSnewbie.com
|
||||
Last Updated: June 4, 2008
|
||||
|
||||
Feel free (nay, compelled) to edit, append, and
|
||||
manipulate this file as you see fit. */
|
||||
|
||||
|
||||
@media print {
|
||||
|
||||
/* SECTION 1: Set default width, margin, float, and
|
||||
background. This prevents elements from extending
|
||||
beyond the edge of the printed page, and prevents
|
||||
unnecessary background images from printing */
|
||||
html {
|
||||
background: #fff;
|
||||
width: auto;
|
||||
height: auto;
|
||||
overflow: visible;
|
||||
}
|
||||
body {
|
||||
background: #fff;
|
||||
font-size: 20pt;
|
||||
width: auto;
|
||||
height: auto;
|
||||
border: 0;
|
||||
margin: 0 5%;
|
||||
padding: 0;
|
||||
overflow: visible;
|
||||
float: none !important;
|
||||
}
|
||||
|
||||
/* SECTION 2: Remove any elements not needed in print.
|
||||
This would include navigation, ads, sidebars, etc. */
|
||||
.nestedarrow,
|
||||
.controls,
|
||||
.fork-reveal,
|
||||
.share-reveal,
|
||||
.state-background,
|
||||
.reveal .progress,
|
||||
.reveal .backgrounds,
|
||||
.reveal .slide-number {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
/* SECTION 3: Set body font face, size, and color.
|
||||
Consider using a serif font for readability. */
|
||||
body, p, td, li, div {
|
||||
font-size: 20pt!important;
|
||||
font-family: Georgia, "Times New Roman", Times, serif !important;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
/* SECTION 4: Set heading font face, sizes, and color.
|
||||
Differentiate your headings from your body text.
|
||||
Perhaps use a large sans-serif for distinction. */
|
||||
h1,h2,h3,h4,h5,h6 {
|
||||
color: #000!important;
|
||||
height: auto;
|
||||
line-height: normal;
|
||||
font-family: Georgia, "Times New Roman", Times, serif !important;
|
||||
text-shadow: 0 0 0 #000 !important;
|
||||
text-align: left;
|
||||
letter-spacing: normal;
|
||||
}
|
||||
/* Need to reduce the size of the fonts for printing */
|
||||
h1 { font-size: 28pt !important; }
|
||||
h2 { font-size: 24pt !important; }
|
||||
h3 { font-size: 22pt !important; }
|
||||
h4 { font-size: 22pt !important; font-variant: small-caps; }
|
||||
h5 { font-size: 21pt !important; }
|
||||
h6 { font-size: 20pt !important; font-style: italic; }
|
||||
|
||||
/* SECTION 5: Make hyperlinks more usable.
|
||||
Ensure links are underlined, and consider appending
|
||||
the URL to the end of the link for usability. */
|
||||
a:link,
|
||||
a:visited {
|
||||
color: #000 !important;
|
||||
font-weight: bold;
|
||||
text-decoration: underline;
|
||||
}
|
||||
/*
|
||||
.reveal a:link:after,
|
||||
.reveal a:visited:after {
|
||||
content: " (" attr(href) ") ";
|
||||
color: #222 !important;
|
||||
font-size: 90%;
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
/* SECTION 6: more reveal.js specific additions by @skypanther */
|
||||
ul, ol, div, p {
|
||||
visibility: visible;
|
||||
position: static;
|
||||
width: auto;
|
||||
height: auto;
|
||||
display: block;
|
||||
overflow: visible;
|
||||
margin: 0;
|
||||
text-align: left !important;
|
||||
}
|
||||
.reveal pre,
|
||||
.reveal table {
|
||||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
}
|
||||
.reveal pre code {
|
||||
padding: 20px;
|
||||
border: 1px solid #ddd;
|
||||
}
|
||||
.reveal blockquote {
|
||||
margin: 20px 0;
|
||||
}
|
||||
.reveal .slides {
|
||||
position: static !important;
|
||||
width: auto !important;
|
||||
height: auto !important;
|
||||
|
||||
left: 0 !important;
|
||||
top: 0 !important;
|
||||
margin-left: 0 !important;
|
||||
margin-top: 0 !important;
|
||||
padding: 0 !important;
|
||||
zoom: 1 !important;
|
||||
|
||||
overflow: visible !important;
|
||||
display: block !important;
|
||||
|
||||
text-align: left !important;
|
||||
-webkit-perspective: none;
|
||||
-moz-perspective: none;
|
||||
-ms-perspective: none;
|
||||
perspective: none;
|
||||
|
||||
-webkit-perspective-origin: 50% 50%;
|
||||
-moz-perspective-origin: 50% 50%;
|
||||
-ms-perspective-origin: 50% 50%;
|
||||
perspective-origin: 50% 50%;
|
||||
}
|
||||
.reveal .slides section {
|
||||
visibility: visible !important;
|
||||
position: static !important;
|
||||
width: auto !important;
|
||||
height: auto !important;
|
||||
display: block !important;
|
||||
overflow: visible !important;
|
||||
|
||||
left: 0 !important;
|
||||
top: 0 !important;
|
||||
margin-left: 0 !important;
|
||||
margin-top: 0 !important;
|
||||
padding: 60px 20px !important;
|
||||
z-index: auto !important;
|
||||
|
||||
opacity: 1 !important;
|
||||
|
||||
page-break-after: always !important;
|
||||
|
||||
-webkit-transform-style: flat !important;
|
||||
-moz-transform-style: flat !important;
|
||||
-ms-transform-style: flat !important;
|
||||
transform-style: flat !important;
|
||||
|
||||
-webkit-transform: none !important;
|
||||
-moz-transform: none !important;
|
||||
-ms-transform: none !important;
|
||||
transform: none !important;
|
||||
|
||||
-webkit-transition: none !important;
|
||||
-moz-transition: none !important;
|
||||
-ms-transition: none !important;
|
||||
transition: none !important;
|
||||
}
|
||||
.reveal .slides section.stack {
|
||||
padding: 0 !important;
|
||||
}
|
||||
.reveal section:last-of-type {
|
||||
page-break-after: avoid !important;
|
||||
}
|
||||
.reveal section .fragment {
|
||||
opacity: 1 !important;
|
||||
visibility: visible !important;
|
||||
|
||||
-webkit-transform: none !important;
|
||||
-moz-transform: none !important;
|
||||
-ms-transform: none !important;
|
||||
transform: none !important;
|
||||
}
|
||||
.reveal section img {
|
||||
display: block;
|
||||
margin: 15px 0px;
|
||||
background: rgba(255,255,255,1);
|
||||
border: 1px solid #666;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.reveal section small {
|
||||
font-size: 0.8em;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,171 +0,0 @@
|
||||
/**
|
||||
* This stylesheet is used to print reveal.js
|
||||
* presentations to PDF.
|
||||
*
|
||||
* https://github.com/hakimel/reveal.js#pdf-export
|
||||
*/
|
||||
|
||||
* {
|
||||
-webkit-print-color-adjust: exact;
|
||||
}
|
||||
|
||||
body {
|
||||
margin: 0 auto !important;
|
||||
border: 0;
|
||||
padding: 0;
|
||||
float: none !important;
|
||||
overflow: visible;
|
||||
}
|
||||
|
||||
html {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
overflow: visible;
|
||||
}
|
||||
|
||||
/* Remove any elements not needed in print. */
|
||||
.nestedarrow,
|
||||
.reveal .controls,
|
||||
.reveal .progress,
|
||||
.reveal .playback,
|
||||
.reveal.overview,
|
||||
.fork-reveal,
|
||||
.share-reveal,
|
||||
.state-background {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
text-shadow: 0 0 0 #000 !important;
|
||||
}
|
||||
|
||||
.reveal pre code {
|
||||
overflow: hidden !important;
|
||||
font-family: Courier, 'Courier New', monospace !important;
|
||||
}
|
||||
|
||||
ul, ol, div, p {
|
||||
visibility: visible;
|
||||
position: static;
|
||||
width: auto;
|
||||
height: auto;
|
||||
display: block;
|
||||
overflow: visible;
|
||||
margin: auto;
|
||||
}
|
||||
.reveal {
|
||||
width: auto !important;
|
||||
height: auto !important;
|
||||
overflow: hidden !important;
|
||||
}
|
||||
.reveal .slides {
|
||||
position: static;
|
||||
width: 100% !important;
|
||||
height: auto !important;
|
||||
zoom: 1 !important;
|
||||
|
||||
left: auto;
|
||||
top: auto;
|
||||
margin: 0 !important;
|
||||
padding: 0 !important;
|
||||
|
||||
overflow: visible;
|
||||
display: block;
|
||||
|
||||
-webkit-perspective: none;
|
||||
-moz-perspective: none;
|
||||
-ms-perspective: none;
|
||||
perspective: none;
|
||||
|
||||
-webkit-perspective-origin: 50% 50%; /* there isn't a none/auto value but 50-50 is the default */
|
||||
-moz-perspective-origin: 50% 50%;
|
||||
-ms-perspective-origin: 50% 50%;
|
||||
perspective-origin: 50% 50%;
|
||||
}
|
||||
|
||||
.reveal .slides .pdf-page {
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.reveal .slides section {
|
||||
page-break-after: always !important;
|
||||
|
||||
visibility: visible !important;
|
||||
display: block !important;
|
||||
position: relative !important;
|
||||
|
||||
margin: 0 !important;
|
||||
padding: 0 !important;
|
||||
box-sizing: border-box !important;
|
||||
min-height: 1px;
|
||||
|
||||
opacity: 1 !important;
|
||||
|
||||
-webkit-transform-style: flat !important;
|
||||
-moz-transform-style: flat !important;
|
||||
-ms-transform-style: flat !important;
|
||||
transform-style: flat !important;
|
||||
|
||||
-webkit-transform: none !important;
|
||||
-moz-transform: none !important;
|
||||
-ms-transform: none !important;
|
||||
transform: none !important;
|
||||
}
|
||||
|
||||
.reveal section.stack {
|
||||
margin: 0 !important;
|
||||
padding: 0 !important;
|
||||
page-break-after: avoid !important;
|
||||
height: auto !important;
|
||||
min-height: auto !important;
|
||||
}
|
||||
|
||||
.reveal img {
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.reveal .roll {
|
||||
overflow: visible;
|
||||
line-height: 1em;
|
||||
}
|
||||
|
||||
/* Slide backgrounds are placed inside of their slide when exporting to PDF */
|
||||
.reveal .slide-background {
|
||||
display: block !important;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
z-index: auto !important;
|
||||
}
|
||||
|
||||
/* Display slide speaker notes when 'showNotes' is enabled */
|
||||
.reveal .speaker-notes-pdf {
|
||||
display: block;
|
||||
width: 100%;
|
||||
max-height: none;
|
||||
top: auto;
|
||||
right: auto;
|
||||
bottom: auto;
|
||||
left: auto;
|
||||
z-index: 100;
|
||||
}
|
||||
|
||||
/* Layout option which makes notes appear on a separate page */
|
||||
.reveal .speaker-notes-pdf[data-layout="separate-page"] {
|
||||
position: relative;
|
||||
color: inherit;
|
||||
background-color: transparent;
|
||||
padding: 20px;
|
||||
page-break-after: always;
|
||||
}
|
||||
|
||||
/* Display slide numbers when 'slideNumber' is enabled */
|
||||
.reveal .slide-number-pdf {
|
||||
display: block;
|
||||
position: absolute;
|
||||
font-size: 14px;
|
||||
}
|
||||
@@ -1 +0,0 @@
|
||||
code[class*=language-],pre[class*=language-]{color:#000;background:0 0;text-shadow:0 1px #fff;font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}code[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection{text-shadow:none;background:#b3d4fc}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow:none;background:#b3d4fc}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>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 */
|
||||
@@ -1,80 +0,0 @@
|
||||
/*
|
||||
|
||||
Zenburn style from voldmar.ru (c) Vladimir Epifanov <voldmar@voldmar.ru>
|
||||
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;
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
<?php
|
||||
|
||||
header("location:/");
|
||||
File diff suppressed because it is too large
Load Diff
@@ -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
|
||||
@@ -1,89 +0,0 @@
|
||||
<?php
|
||||
$this_script = $_SERVER['SCRIPT_NAME'];
|
||||
|
||||
|
||||
$outvars .= "\t<tr>\n\t\t<td colspan=\"100%\"><h1>\$_ENV</h1></td>\n\t</tr>\n";
|
||||
foreach( $_ENV as $key => $value){
|
||||
$count++;
|
||||
$linefront = "\t<tr>\n\t\t<td>$count</td>\n\t\t<td>";
|
||||
$lineend = "</td>\n\t\t<td>$value</td>\n\t</tr>\n";
|
||||
$outvars .= "$linefront\$_ENV['$key']$lineend";
|
||||
}
|
||||
|
||||
|
||||
$outvars .= "\t<tr>\n\t\t<td colspan=\"100%\"><h1>\$_SERVER</h1></td>\n\t</tr>\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<tr>\n\t\t<td>$count</td>\n\t\t<td>";
|
||||
$lineend = "</td>\n\t\t<td>$value</td>\n\t</tr>\n";
|
||||
$outvars .= "$linefront\$_SERVER['$key']$lineend";
|
||||
}
|
||||
|
||||
|
||||
$outvars .= "\t<tr>\n\t\t<td colspan=\"100%\"><h1>\$_POST</h1></td>\n\t</tr>\n";
|
||||
foreach( $_POST as $key => $value){
|
||||
$count++;
|
||||
$linefront = "\t<tr>\n\t\t<td>$count</td>\n\t\t<td>";
|
||||
$lineend = "</td>\n\t\t<td>$value</td>\n\t</tr>\n";
|
||||
$outvars .= "$linefront\$_POST['$key']$lineend";
|
||||
}
|
||||
|
||||
|
||||
$outvars .= "\t<tr>\n\t\t<td colspan=\"100%\"><h1>\$_GET</h1></td>\n\t</tr>\n";
|
||||
foreach( $_GET as $key => $value){
|
||||
$count++;
|
||||
$linefront = "\t<tr>\n\t\t<td>$count</td>\n\t\t<td>";
|
||||
$lineend = "</td>\n\t\t<td>$value</td>\n\t</tr>\n";
|
||||
$outvars .= "$linefront\$_GET['$key']$lineend";
|
||||
}
|
||||
|
||||
|
||||
?>
|
||||
<style type="text/css">
|
||||
FONT,BODY {
|
||||
font-family: Verdana,sans,arial,Helvetica;
|
||||
font-size: 36px;
|
||||
}
|
||||
table.vars {
|
||||
border-width: 0px 0px 0px 0px;
|
||||
border-spacing: 2px;
|
||||
border-style: double double double double;
|
||||
border-color: gray gray gray gray;
|
||||
border-collapse: separate;
|
||||
background-color: white;
|
||||
}
|
||||
table.vars th {
|
||||
border-width: 1px 1px 1px 1px;
|
||||
padding: 3px 3px 3px 3px;
|
||||
border-style: groove groove groove groove;
|
||||
border-color: gray gray gray gray;
|
||||
background-color: white;
|
||||
-moz-border-radius: 9px 9px 9px 9px;
|
||||
}
|
||||
table.vars td {
|
||||
border-width: 1px 1px 1px 1px;
|
||||
padding: 5px 5px 5px 5px;
|
||||
border-style: groove groove groove groove;
|
||||
border-color: gray gray gray gray;
|
||||
background-color: white;
|
||||
-moz-border-radius: 9px 9px 9px 9px;
|
||||
}
|
||||
table.vars tr {
|
||||
height: 25px;
|
||||
}
|
||||
|
||||
</style>
|
||||
<form method="POST" action="<?=$this_script?>">
|
||||
|
||||
<table class="vars">
|
||||
<a href="<?=$this_script?>"><?=$this_script?> (this script)</a><br>
|
||||
<input type="submit" value="SUBMIT POST"><br>
|
||||
<input type="text" name="text"><br>
|
||||
<br>
|
||||
<?=$outvars?>
|
||||
</table>
|
||||
|
||||
</form>
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 393 B |
@@ -1,17 +0,0 @@
|
||||
<section id="Intro-WhatYouWillLearn">
|
||||
<h2>What You Will Learn</h2>
|
||||
<p>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.<br><br></p>
|
||||
<ul>
|
||||
<li>What is Ansible? / "The Ansible Way"</li>
|
||||
<li>How Ansible Works and its Key Components</li>
|
||||
<li>Automating with Ad-Hoc Commands</li>
|
||||
<li>Writing Playbooks / Playbook Basics</li>
|
||||
<li>Reuse and Redistribution of Ansible Content with Roles</li>
|
||||
</ul>
|
||||
<aside class="notes">
|
||||
<p>This deck is designed to provide students with direct introductory instruction and guidance to beginning to automate with Ansible. It is the starting point for students intent on becoming more proficient with Ansible through other Lightbulb modules and their own usage.</p>
|
||||
<p>This deck supports lecture and hands-on forms of presenting this material. </p>
|
||||
<p>Allow 2 hours to deliver the lecture-based form and 4 hours for stopping to do the workshop assignments. To access the additional slides for delivering the workshops, navigate down when available. </p>
|
||||
<p>See the <a href="../facilitator/README.md">Ansible Lightbulb facilitator’s guide</a> for more details on using this deck and it’s associated material.</p>
|
||||
</aside>
|
||||
</section>
|
||||
@@ -1,13 +0,0 @@
|
||||
<section id="Intro-WhatIsAnsible">
|
||||
<h2>What is Ansible?</h2>
|
||||
<p>It's a <b>simple automation language</b> that can perfectly describe an IT application infrastructure in Ansible Playbooks.</p>
|
||||
<p>It's an <b>automation engine</b> that runs Ansible Playbooks.</p><br>
|
||||
<p>Ansible is an automation platform:
|
||||
<ul>
|
||||
<li>Playbooks make up the automation language</li>
|
||||
<li>The code base is the automation engine.</li>
|
||||
<li>Ansible Tower manages existing automation</li>
|
||||
</ul>
|
||||
</p>
|
||||
</aside>
|
||||
</section>
|
||||
@@ -1,14 +0,0 @@
|
||||
<section id="Intro-WhatIsTower">
|
||||
<h2>What is Ansible Tower?</h2>
|
||||
<p>Ansible Tower is an <b>enterprise framework</b> for controlling, securing and managing your Ansible automation with a <b>UI and RESTful API</b>.</p>
|
||||
<img src="images/ansible-tower3-monitor-1x.png">
|
||||
<aside class="notes speaker">
|
||||
<p>Ansible is an automation platform:
|
||||
<ul>
|
||||
<li>Playbooks make up the automation language</li>
|
||||
<li>The code base is the automation engine.</li>
|
||||
<li>Ansible Tower manages existing automation</li>
|
||||
</ul>
|
||||
</p>
|
||||
</aside>
|
||||
</section>
|
||||
@@ -1,38 +0,0 @@
|
||||
<section id="WhyAnsible">
|
||||
<h3>Why Ansible? What Sets Ansible Apart? </h3>
|
||||
<img src="images/SPA-All.png" />
|
||||
<aside class="notes">
|
||||
<p>Ansible has a number of qualities that make it the most rapidly growing automation platform in the world. </p>
|
||||
<p>What is it about Ansible that makes it worth talking about?</p>
|
||||
</aisde>
|
||||
</section>
|
||||
|
||||
<section id="WhyAnsible-Simple">
|
||||
<h3><font color="white">Why Ansible? What Sets Ansible Apart?</font></h3>
|
||||
<img src="images/SPA-Simple.png" />
|
||||
<aside class="notes">
|
||||
<p><strong>Ansible is simple.</strong> Playbooks are human and machine readable, no special coding skills required – and even people in your IT organization that don’t know Ansible can read an Ansible playbook and understand what’s happening.</p>
|
||||
<p>This simplicity also means that it’s easy to install and get started to do real work with it quickly – usually in just minutes. </p>
|
||||
<p>Ansible also works like you think – tasks are always executed in order. All together, the simplicity ensures that you can get started quickly.</p>
|
||||
</aisde>
|
||||
</section>
|
||||
|
||||
<section id="WhyAnsible-Powerful">
|
||||
<h3><font color="white">Why Ansible? What Sets Ansible Apart?</font></h3>
|
||||
<img src="images/SPA-Powerful.png" />
|
||||
<aside class="notes">
|
||||
<p><strong>Ansible is powerful.</strong> Simplicity is great, but to be really useful, you also need the powerful features that ensure you can model even the most complex of IT workflows.</p>
|
||||
<p>Ansible is complete automation, able to deploy apps, manage orchestration, and configure the infrastructure, networks, operating systems, and services that you’re already using today. </p>
|
||||
<p>Together, Ansible’s capabilities allow you to orchestrate the entire application and environment lifecycle, regardless of where It's deployed.</p>
|
||||
</aisde>
|
||||
</section>
|
||||
|
||||
<section id="WhyAnsible-Agentless">
|
||||
<h3><font color="white">Why Ansible? What Sets Ansible Apart?</font></h3>
|
||||
<img src="images/SPA-Agentless.png" />
|
||||
<aside class="notes">
|
||||
<p><strong>Ansible is Agentless.</strong> Ansible relies on industry-standard and trusted SSH and WinRM protocols to automate. There are no agents or other software to install, and no additional firewall ports to open. With no need to separately stand up a management infrastructure, Ansible further reduces the activation energy required from your team to start automating today.</p>
|
||||
<p>In a world where IT complexity stymies even the most basic of IT tasks, Ansible provides a much needed respite – and path forward enabling teams to crush productivity-stealing complexity and overhead.</p>
|
||||
</aisde>
|
||||
</section>
|
||||
|
||||
@@ -1,58 +0,0 @@
|
||||
<section id="UseCases">
|
||||
|
||||
<div style="position:relative" style="border: 30px solid #000000">
|
||||
|
||||
<p class="fragment current-visible" style="position:absolute; margin-top: 80px; margin-left: 50;" data-fragment-index="0">
|
||||
<img src="images/AnsibleUseCases01_ConfigMgmt.png"></p>
|
||||
<p class="fragment current-visible" style="position:absolute; margin-top: 80px; margin-left: 50;" data-fragment-index="1">
|
||||
<img src="images/AnsibleUseCases02_AppDeployment.png"></p>
|
||||
<p class="fragment current-visible" style="position:absolute; margin-top: 80px; margin-left: 50;" data-fragment-index="2">
|
||||
<img src="images/AnsibleUseCases03_Provisioning.png"></p>
|
||||
<p class="fragment current-visible" style="position:absolute; margin-top: 80px; margin-left: 50;" data-fragment-index="3">
|
||||
<img src="images/AnsibleUseCases04_CICD.png"></p>
|
||||
<p class="fragment current-visible" style="position:absolute; margin-top: 80px; margin-left: 50;" data-fragment-index="4">
|
||||
<img src="images/AnsibleUseCases05_SecurityCompliance.png"></p>
|
||||
<p class="fragment current-visible" style="position:absolute; margin-top: 80px; margin-left: 50;" data-fragment-index="5">
|
||||
<img src="images/AnsibleUseCases06_Orchestration.png"></p>
|
||||
|
||||
</div>
|
||||
|
||||
<table height="50%" width="100%" style="border: 0px solid #ffffff">
|
||||
<tr style="border: 0px solid #ffffff">
|
||||
<td colspan="100%" style="border: 0px solid #ffffff">
|
||||
<h2>Ansible Provides End To End Goodness</h2>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td width="500"> </td>
|
||||
<td align="right">
|
||||
<img src="images/AnsibleUseCases01_ConfigMgmt.png" width="200">
|
||||
</td>
|
||||
<td align="center">
|
||||
<img src="images/AnsibleUseCases02_AppDeployment.png" width="200">
|
||||
</td>
|
||||
<td align="left">
|
||||
<img src="images/AnsibleUseCases03_Provisioning.png" width="200">
|
||||
</td>
|
||||
</tr>
|
||||
<tr style="border: 0px solid #ffffff">
|
||||
<td width="500"> </td>
|
||||
<td align="right" style="border: 0px solid #ffffff">
|
||||
<img src="images/AnsibleUseCases04_CICD.png" width="200">
|
||||
</td>
|
||||
<td align="center">
|
||||
<img src="images/AnsibleUseCases05_SecurityCompliance.png" width="200">
|
||||
</td>
|
||||
<td align="left">
|
||||
<img src="images/AnsibleUseCases06_Orchestration.png" width="200">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
<aside class="notes">
|
||||
<p>What can you do with Ansible? Nearly anything. Ansible is the Swiss Army knife of DevOps, capable of handling many powerful automation tasks with the flexibility to adapt to many environments and workflows.</p>
|
||||
<p>Many folks like to categorize Ansible as a configuration manager, and although yes, Ansible can do that, it"s just the tip of the iceberg. When you couple configuration management with orchestration, you can start to model complicated multi-tier deployments with ease.</p>
|
||||
<p>With Ansible, once someone on your team automates something, everyone on the team now knows how to do it.</p>
|
||||
</aside>
|
||||
</section>
|
||||
@@ -1,146 +0,0 @@
|
||||
<section id="TheAnsibleWay">
|
||||
<h2>The Ansible Way</h2>
|
||||
<div style="font-size: 0.75em;"><br>
|
||||
|
||||
<p><strong>CROSS PLATFORM</strong> – Linux, Windows, UNIX</br>
|
||||
Agentless support for all major OS variants, physical, virtual, cloud and network</p>
|
||||
<p><strong>HUMAN READABLE</strong> – YAML</br>
|
||||
Perfectly describe and document every aspect of your application environment</p>
|
||||
<p><strong>PERFECT DESCRIPTION OF APPLICATION</strong></br>
|
||||
Every change can be made by playbooks, ensuring everyone is on the same page</p>
|
||||
<p><strong>VERSION CONTROLLED</strong></br>
|
||||
Playbooks are plain-text. Treat them like code in your existing version control.</p>
|
||||
<p><strong>DYNAMIC INVENTORIES</strong></br>
|
||||
Capture all the servers 100% of the time, regardless of infrastructure, location, etc.</p>
|
||||
<p><strong>ORCHESTRATION THAT PLAYS WELL WITH OTHERS</strong> – HP SA, Puppet, Jenkins, RHNSS, etc. Homogenize existing environments by leveraging current toolsets and update mechanisms.</p>
|
||||
</div>
|
||||
|
||||
<aside class="notes">
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
<section id="TheAnsibleWay-CrossPlatform">
|
||||
<h2>The Ansible Way - Venture Across The Platform</h2>
|
||||
<div style="font-size: 0.75em;"><br>
|
||||
|
||||
<p style="padding:10px; background-color:gray; color:white"><strong>CROSS PLATFORM</strong> – Linux, Windows, UNIX</br>
|
||||
Agentless support for all major OS variants, physical, virtual, cloud and network</p>
|
||||
<p><strong>HUMAN READABLE</strong> – YAML</br>
|
||||
Perfectly describe and document every aspect of your application environment</p>
|
||||
<p><strong>PERFECT DESCRIPTION OF APPLICATION</strong></br>
|
||||
Every change can be made by playbooks, ensuring everyone is on the same page</p>
|
||||
<p><strong>VERSION CONTROLLED</strong></br>
|
||||
Playbooks are plain-text. Treat them like code in your existing version control.</p>
|
||||
<p><strong>DYNAMIC INVENTORIES</strong></br>
|
||||
Capture all the servers 100% of the time, regardless of infrastructure, location, etc.</p>
|
||||
<p><strong>ORCHESTRATION THAT PLAYS WELL WITH OTHERS</strong> – HP SA, Puppet, Jenkins, RHNSS, etc. Homogenize existing environments by leveraging current toolsets and update mechanisms.</p>
|
||||
</div>
|
||||
|
||||
<aside class="notes">
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
<section id="TheAnsibleWay-CommunicateClearly">
|
||||
<h2>The Ansible Way - Communicate Clearly</h2>
|
||||
<div style="font-size: 0.75em;"><br>
|
||||
|
||||
<p><strong>CROSS PLATFORM</strong> – Linux, Windows, UNIX</br>
|
||||
Agentless support for all major OS variants, physical, virtual, cloud and network</p>
|
||||
<p style="padding:10px; background-color:gray; color:white"><strong>HUMAN READABLE</strong> – YAML</br>
|
||||
Perfectly describe and document every aspect of your application environment</p>
|
||||
<p><strong>PERFECT DESCRIPTION OF APPLICATION</strong></br>
|
||||
Every change can be made by playbooks, ensuring everyone is on the same page</p>
|
||||
<p><strong>VERSION CONTROLLED</strong></br>
|
||||
Playbooks are plain-text. Treat them like code in your existing version control.</p>
|
||||
<p><strong>DYNAMIC INVENTORIES</strong></br>
|
||||
Capture all the servers 100% of the time, regardless of infrastructure, location, etc.</p>
|
||||
<p><strong>ORCHESTRATION THAT PLAYS WELL WITH OTHERS</strong> – HP SA, Puppet, Jenkins, RHNSS, etc. Homogenize existing environments by leveraging current toolsets and update mechanisms.</p>
|
||||
</div>
|
||||
|
||||
<aside class="notes">
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
<section id="TheAnsibleWay-PreciousRing">
|
||||
<h2>The Ansible Way - One Source To Rule Them All</h2>
|
||||
<div style="font-size: 0.75em;"><br>
|
||||
|
||||
<p><strong>CROSS PLATFORM</strong> – Linux, Windows, UNIX</br>
|
||||
Agentless support for all major OS variants, physical, virtual, cloud and network</p>
|
||||
<p><strong>HUMAN READABLE</strong> – YAML</br>
|
||||
Perfectly describe and document every aspect of your application environment</p>
|
||||
<p style="padding:10px; background-color:gray; color:white"><strong>PERFECT DESCRIPTION OF APPLICATION</strong></br>
|
||||
Every change can be made by playbooks, ensuring everyone is on the same page</p>
|
||||
<p><strong>VERSION CONTROLLED</strong></br>
|
||||
Playbooks are plain-text. Treat them like code in your existing version control.</p>
|
||||
<p><strong>DYNAMIC INVENTORIES</strong></br>
|
||||
Capture all the servers 100% of the time, regardless of infrastructure, location, etc.</p>
|
||||
<p><strong>ORCHESTRATION THAT PLAYS WELL WITH OTHERS</strong> – HP SA, Puppet, Jenkins, RHNSS, etc. Homogenize existing environments by leveraging current toolsets and update mechanisms.</p>
|
||||
</div>
|
||||
|
||||
<aside class="notes">
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
<section id="TheAnsibleWay-VersionControlled">
|
||||
<h2>The Ansible Way - Version Controlled Goodness</h2>
|
||||
<div style="font-size: 0.75em;"><br>
|
||||
<p><strong>CROSS PLATFORM</strong> – Linux, Windows, UNIX</br>
|
||||
Agentless support for all major OS variants, physical, virtual, cloud and network</p>
|
||||
<p><strong>HUMAN READABLE</strong> – YAML</br>
|
||||
Perfectly describe and document every aspect of your application environment</p>
|
||||
<p><strong>PERFECT DESCRIPTION OF APPLICATION</strong></br>
|
||||
Every change can be made by playbooks, ensuring everyone is on the same page</p>
|
||||
<p style="padding:10px; background-color:gray; color:white"><strong>VERSION CONTROLLED</strong></br>
|
||||
Playbooks are plain-text. Treat them like code in your existing version control.</p>
|
||||
<p><strong>DYNAMIC INVENTORIES</strong></br>
|
||||
Capture all the servers 100% of the time, regardless of infrastructure, location, etc.</p>
|
||||
<p><strong>ORCHESTRATION THAT PLAYS WELL WITH OTHERS</strong> – HP SA, Puppet, Jenkins, RHNSS, etc. Homogenize existing environments by leveraging current toolsets and update mechanisms.</p>
|
||||
</div>
|
||||
|
||||
<aside class="notes">
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
<section id="TheAnsibleWay-DynInv">
|
||||
<h2>The Ansible Way - Dynamically Utilize Inventories</h2>
|
||||
<div style="font-size: 0.75em;"><br>
|
||||
|
||||
<p><strong>CROSS PLATFORM</strong> – Linux, Windows, UNIX</br>
|
||||
Agentless support for all major OS variants, physical, virtual, cloud and network</p>
|
||||
<p><strong>HUMAN READABLE</strong> – YAML</br>
|
||||
Perfectly describe and document every aspect of your application environment</p>
|
||||
<p><strong>PERFECT DESCRIPTION OF APPLICATION</strong></br>
|
||||
Every change can be made by playbooks, ensuring everyone is on the same page</p>
|
||||
<p><strong>VERSION CONTROLLED</strong></br>
|
||||
Playbooks are plain-text. Treat them like code in your existing version control.</p>
|
||||
<p style="padding:10px; background-color:gray; color:white"><strong>DYNAMIC INVENTORIES</strong></br>
|
||||
Capture all the servers 100% of the time, regardless of infrastructure, location, etc.</p>
|
||||
<p><strong>ORCHESTRATION THAT PLAYS WELL WITH OTHERS</strong> – HP SA, Puppet, Jenkins, RHNSS, etc. Homogenize existing environments by leveraging current toolsets and update mechanisms.</p>
|
||||
</div>
|
||||
|
||||
<aside class="notes">
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
|
||||
<section id="TheAnsibleWay-PlayNicely">
|
||||
<h2>The Ansible Way - Play Nicely With Others</h2>
|
||||
<div style="font-size: 0.75em;"><br>
|
||||
|
||||
<p><strong>CROSS PLATFORM</strong> – Linux, Windows, UNIX</br>
|
||||
Agentless support for all major OS variants, physical, virtual, cloud and network</p>
|
||||
<p><strong>HUMAN READABLE</strong> – YAML</br>
|
||||
Perfectly describe and document every aspect of your application environment</p>
|
||||
<p><strong>PERFECT DESCRIPTION OF APPLICATION</strong></br>
|
||||
Every change can be made by playbooks, ensuring everyone is on the same page</p>
|
||||
<p><strong>VERSION CONTROLLED</strong></br>
|
||||
Playbooks are plain-text. Treat them like code in your existing version control.</p>
|
||||
<p><strong>DYNAMIC INVENTORIES</strong></br>
|
||||
Capture all the servers 100% of the time, regardless of infrastructure, location, etc.</p>
|
||||
<p style="padding:10px; background-color:gray; color:white"><strong>ORCHESTRATION THAT PLAYS WELL WITH OTHERS</strong> – HP SA, Puppet, Jenkins, RHNSS, etc. Homogenize existing environments by leveraging current toolsets and update mechanisms.</p>
|
||||
</div>
|
||||
|
||||
<aside class="notes">
|
||||
</aside>
|
||||
</section>
|
||||
@@ -1,63 +0,0 @@
|
||||
<section id="BatteriesIncluded">
|
||||
<h2>Batteries Included</h2>
|
||||
<p>Ansible comes bundled with hundreds of modules for a wide variety of automation tasks</p>
|
||||
|
||||
<div style="position:absolute; right: -125px; top: 100px;">
|
||||
<p class="fragment current-visible" data-fragment-index="0">
|
||||
<img src="images/fiero.jpg" width="600">
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<!-- Kev keeps removing this second fiero,
|
||||
but it's required for the second click or the
|
||||
little car disappears when the "batteries not
|
||||
included" message pops up-->
|
||||
|
||||
|
||||
|
||||
<div style="position:absolute; right: -125px; top: 100px;">
|
||||
<p class="fragment current-visible" data-fragment-index="1">
|
||||
<img src="images/fiero.jpg" width="600">
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
||||
<div style="position:absolute; right: 25px; top: 25px;">
|
||||
<p class="fragment current-visible" data-fragment-index="1">
|
||||
<img src="images/BatteriesNotIncluded.png" width="200">
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="columns">
|
||||
<div class="col">
|
||||
<ul>
|
||||
<li>cloud</li>
|
||||
<li>containers</li>
|
||||
<li>database</li>
|
||||
<li>files</li>
|
||||
<li>messaging</li>
|
||||
<li>monitoring</li>
|
||||
<li>network</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col">
|
||||
<ul>
|
||||
<li>notifications</li>
|
||||
<li>packaging</li>
|
||||
<li>source control</li>
|
||||
<li>system</li>
|
||||
<li>testing</li>
|
||||
<li>utilities</li>
|
||||
<li>web infrastructure</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col">
|
||||
</div>
|
||||
</div>
|
||||
<aside notes="notes">
|
||||
<p>Ansible Modules control the things that you’re automating. They can do everything from acting on system files, installing packages, or making API calls to a service framework. Ansible ships with around <?=$module_count?> today -- and this number is always expanding with every release.</p>
|
||||
</aside>
|
||||
</section>
|
||||
@@ -1,14 +0,0 @@
|
||||
<section id="LanguageOfDevops">
|
||||
<h2>Ansible: The Language of DevOps</h2>
|
||||
<div style="font-size: 0.75em; text-align:center;">
|
||||
<img src="images/devops-language-diagram.svg" width="60%" height="60%" style="padding-top: 20px;"/>
|
||||
<p class="fullwidth"><strong>COMMUNICATION IS THE KEY TO DEVOPS.</strong></p>
|
||||
<p class="fullwidth">Ansible is the first <strong>automation language</strong><br/>that can be read and written across IT.</p>
|
||||
<p class="fullwidth">Ansible is the only <strong>automation engine</strong><br/>that can automate the entire <strong>application lifecycle</strong><br/>and <strong>continuous delivery pipeline</strong>.</p>
|
||||
</div>
|
||||
<aside class="notes">
|
||||
<p>DevOps is a verb. Rather than think of "DevOps" as an object, think of it as the effort that holds pieces together from the first moment a server is racked to the end user's session.</p>
|
||||
<p>With DevOps being the effort in the middle of it all, consider how Ansible can act as the catalyst to empower every department... every step of the way.</p>
|
||||
<p>Ansible can be a powerful <strong>COLLABORATION TOOL</strong></p>
|
||||
</aside>
|
||||
</section>
|
||||
@@ -1,19 +0,0 @@
|
||||
<section id="EndlessUseCases">
|
||||
<h1>Ansible: Endless Use Cases</h1>
|
||||
<p>Ansible fills virtually countless use cases with its versatility.</p>
|
||||
<li type="circle" class="fragment fade-left">✾ <b>Ansible is NOT just a Config Management Tool.</b></li>
|
||||
<li type="circle" class="fragment fade-left">☇ <b>Ansible is NOT just an Application Deployment Tool.</b></li>
|
||||
<li type="circle" class="fragment fade-left">☁ <b>Ansible is NOT just a Provisioning Tool.</b></li>
|
||||
<li type="circle" class="fragment fade-left">☡ <b>Ansible is NOT just a CI/CD Tool.</b></li>
|
||||
<li type="circle" class="fragment fade-left">✎ <b>Ansible is NOT just an Audit and Compliance Tool.</b></li>
|
||||
<li type="circle" class="fragment fade-left">➰ <b>Ansible is NOT just an Orchestration Tool.</b></li>
|
||||
<h2 class="fragment fade-up">Ansible is a powerful automation engine...</b></h2>
|
||||
<h2 class="fragment fade-up">with strong use cases for all of the above tasks.</b></h2>
|
||||
</p>
|
||||
|
||||
<aside class="notes">
|
||||
<p>Stuff Goes Here</p>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
<section id="TowerAndDevOps" data-background-image="images/AnsibleTowerFlow.png">
|
||||
|
||||
<div style="width: 800px; left: 50%; transform: translate(-50%,0); position: absolute; z-index: 1;" data-fragment-index="1" class="fragment fade-left" >
|
||||
<div class="transbox">
|
||||
<h1>Practical Workflows</h1>
|
||||
<p>Deployment and CICD Pipelines </p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<aside class="notes">
|
||||
<p>Ansiblefest!!!!</p>
|
||||
</aside>
|
||||
</section>
|
||||
@@ -1,11 +0,0 @@
|
||||
<section>
|
||||
<section data-state="title alt" id="RedIntro-PeopleLoveAnsible">
|
||||
<h1>PEOPLE LOVE ANSIBLE.</h1>
|
||||
<img src="<?=$workshop_image?>" style="background-color: transparent; border: none;" height="250">
|
||||
<p>Ansible is taking the world by storm with unbelievable popularity.</p>
|
||||
<aside class="notes">
|
||||
</aside>
|
||||
</section>
|
||||
</section>
|
||||
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
<section id="MeetupsRock" data-background-image="images/most_meetups.svg">
|
||||
<aside class="notes">
|
||||
<p>Ansible is open source. Created with contributions from an active open source community and built for the people who use it every day. At its heart, Ansible was made to help more people experience the power of automation so they could work better and faster together.</p>
|
||||
</aside>
|
||||
</section>
|
||||
@@ -1,34 +0,0 @@
|
||||
<section id="AnsibleFest" data-background-image="images/Ansible-Fest-Row-Background_GoKEV.png">
|
||||
|
||||
|
||||
<div style="width: 420px; height: 450px; position:absolute; left: -25px; top: 175px;" data-fragment-index="0" class="fragment fade-left" >
|
||||
<div class="transbox">
|
||||
<h1><?=$gihub_stars?></h1>
|
||||
<p>Stars on GitHub</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div style="width: 420px; max-height: 450px; position:absolute; right: 30px; top: 175px;" data-fragment-index="1" class="fragment fade-left" >
|
||||
<div class="transbox">
|
||||
<h1><?=$module_count?></h1>
|
||||
<p>Ansible Modules</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div style="width: 420px; max-height: 450px; left: 50%; transform: translate(-50%,0); position: absolute; top: 240px;" data-fragment-index="2" class="fragment fade-left" >
|
||||
<div class="transbox">
|
||||
<h1><?=$download_permonth?></h1>
|
||||
<p>Downloads Per Month</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<aside class="notes">
|
||||
<p>Ansiblefest!!!!</p>
|
||||
</aside>
|
||||
</section>
|
||||
@@ -1,5 +0,0 @@
|
||||
<section id="GitHubActivity" data-background-image="images/most_contrib.svg">
|
||||
<aside class="notes">
|
||||
<p>Ansible is open source. Created with contributions from an active open source community and built for the people who use it every day. At its heart, Ansible was made to help more people experience the power of automation so they could work better and faster together.</p>
|
||||
</aside>
|
||||
</section>
|
||||
@@ -1,5 +0,0 @@
|
||||
<section id="MostSearched" data-background-image="images/most_searched.svg">
|
||||
<aside class="notes">
|
||||
<p>Ansible is open source. Created with contributions from an active open source community and built for the people who use it every day. At its heart, Ansible was made to help more people experience the power of automation so they could work better and faster together.</p>
|
||||
</aside>
|
||||
</section>
|
||||
@@ -1,19 +0,0 @@
|
||||
<section id="Ansible-Is-Not-Just">
|
||||
<h1>Ansible: Endless Use Cases</h1>
|
||||
<p>Ansible fills virtually countless use cases with its versatility.</p>
|
||||
<li type="circle" class="fragment fade-left" data-fragment-index="1">✾ <b>Ansible is NOT just a Config Management Tool.</b></li>
|
||||
<li type="circle" class="fragment fade-left" data-fragment-index="2">☇ <b>Ansible is NOT just an Application Deployment Tool.</b></li>
|
||||
<li type="circle" class="fragment fade-left" data-fragment-index="3">☁ <b>Ansible is NOT just a Provisioning Tool.</b></li>
|
||||
<li type="circle" class="fragment fade-left" data-fragment-index="4">☡ <b>Ansible is NOT just a CI/CD Tool.</b></li>
|
||||
<li type="circle" class="fragment fade-left" data-fragment-index="5">✎ <b>Ansible is NOT just an Audit and Compliance Tool.</b></li>
|
||||
<li type="circle" class="fragment fade-left" data-fragment-index="6">➰ <b>Ansible is NOT just an Orchestration Tool.</b></li>
|
||||
<h2 class="fragment fade-up" data-fragment-index="7">Ansible is a powerful automation engine...</b></h2>
|
||||
<h2 class="fragment fade-up" data-fragment-index="8">with strong use cases for all of the above tasks.</b></h2>
|
||||
</p>
|
||||
|
||||
<aside class="notes">
|
||||
<p>Stuff Goes Here</p>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
<section data-state="title alt" id="RedIntro-InstallingAnsible">
|
||||
|
||||
<h1>INSTALLING ANSIBLE</h1>
|
||||
<img src="<?=$workshop_image?>" style="background-color: transparent; border: none;" height="250">
|
||||
<p>It Could Not Be Simpler.</p>
|
||||
<aside class="notes">
|
||||
<p>Ansible</p>
|
||||
</aside>
|
||||
|
||||
</section>
|
||||
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
<section id="InstallingAnsibleTerminal">
|
||||
<div class="terminal space shadow">
|
||||
<div class="top">
|
||||
<div class="title">Ansible Terminal</div>
|
||||
</div>
|
||||
<pre class="bodyl">
|
||||
<font color="silver"># RHEL "extras" repo or CentOS EPEL:</font>
|
||||
$ sudo yum install ansible
|
||||
|
||||
<font color="silver"># you will need the PPA repo configured on
|
||||
# Debian or Ubuntu</font>
|
||||
$ sudo apt-get install ansible
|
||||
|
||||
<font color="silver"># from your MacBook:</font>
|
||||
$ brew install ansible
|
||||
|
||||
<font color="silver"># For bleeding edge python versions,</font>
|
||||
$ sudo pip install ansible
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
</section>
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
<section id="InstallingAnsibleVideo">
|
||||
<h3>Simple: Installing Ansible</a></h3>
|
||||
|
||||
|
||||
|
||||
<script>
|
||||
document.getElementById('YumInstallAnsible').play();
|
||||
</script>
|
||||
|
||||
|
||||
<video autoplay muted id="YumInstallAnsible" controls>
|
||||
<source src="video/yuminstallansible.mp4" type="video/mp4">
|
||||
Your browser does not support HTML5 video.
|
||||
</video>
|
||||
|
||||
<aside class="notes">
|
||||
<p>The diagram on this slide shows the relationship between all the key components of Ansible starting with the user who writes an Ansible playbook.</p>
|
||||
</aside>
|
||||
|
||||
</section>
|
||||
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
<section data-state="title alt" id="RedIntro-HowAnsibleWorks">
|
||||
|
||||
<h1>HOW ANSIBLE WORKS</h1>
|
||||
<img src="<?=$workshop_image?>" style="background-color: transparent; border: none;" height="250">
|
||||
<p>Let's Take A Look At The Technology</p>
|
||||
<aside class="notes">
|
||||
<p>Ansible</p>
|
||||
</aside>
|
||||
|
||||
</section>
|
||||
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
<section id="HowAnsibleWorks">
|
||||
|
||||
<h2>How Ansible Works</h2>
|
||||
<img src="images/how-ansible-works-diagram-01.svg" />
|
||||
<aside class="notes">
|
||||
<p>The diagram on this slide shows the relationship between all the key components of Ansible starting with the user who writes an Ansible playbook.</p>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
<section id="HowAnsibleWorks-YAML">
|
||||
|
||||
<h2>Plays & Playbooks</h2>
|
||||
<img src="images/how-ansible-works-diagram-02.svg" />
|
||||
<aside class="notes">
|
||||
<p>Playbooks are written in YAML and are used to invoke Ansible modules to perform tasks that are executed sequentially i.e top to bottom. They can describe a policy you want your remote systems to enforce, or a set of steps in a general IT workflow. Playbooks are like an instruction manual and describe the state of environment.</p>
|
||||
<p>For more details see <a href="http://docs.ansible.com/ansible/playbooks.html">the Playbook page</a> in the Ansible documentation.</p>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
<section id="HowAnsibleWorks-Modules">
|
||||
|
||||
<h2>Modules & Tasks</h2>
|
||||
<img src="images/how-ansible-works-diagram-03.svg" />
|
||||
<aside class="notes">
|
||||
<p>If playbooks are the instruction manual for setting up and managing your infrastructure, Ansible modules are the tools in your toolkit.</p>
|
||||
<p>Modules are executable bits of code that operate on hosts; however, we don’t need to understand the underlying implementation to get them to work. Modules do the heavy-lifting in Ansible and abstract users from the complexity of the underlying details.</p>
|
||||
<p>For more details see the <a href="http://docs.ansible.com/ansible/modules_intro.html">Introduction to Modules</a> and <a href="http://docs.ansible.com/ansible/modules_by_category.html">Module Index</a> page in the Ansible documentation.</p>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
|
||||
@@ -1,19 +0,0 @@
|
||||
<section id="HowAnsibleWorks-Plugins">
|
||||
|
||||
<h2>Plugins</h2>
|
||||
<img src="images/how-ansible-works-diagram-04.svg" />
|
||||
<aside class="notes">
|
||||
<p>Continuing our metaphor, plugins are the gears in the engine.</p>
|
||||
<p>Plugins are pieces of code that extend Ansible’s core functionality. Ansible ships with a number of handy plugins, and you can easily write your own.</p>
|
||||
<p>These are some of the more common plugin types:</p>
|
||||
<ul>
|
||||
<li>Action plugins manage the execution on the controller and deployment of modules to hosts.</li>
|
||||
<li>Callback plugins enable you to hook into Ansible events for display or logging purposes.</li>
|
||||
<li>Connection plugins define how to communicate with inventory hosts.</li>
|
||||
<li>Filters plugins allow you to manipulate data inside Ansible plays and/or templates. This is a Jinja2 feature; Ansible ships extra filter plugins.</li>
|
||||
</ul>
|
||||
<p>For more details see the <a href="http://docs.ansible.com/ansible/dev_guide/developing_plugins.html">Developing Plugins</a> page in the Ansible documentation.</p>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
<section id="HowAnsibleWorks-Inventory">
|
||||
|
||||
<h2>Inventory</h2>
|
||||
<img src="images/how-ansible-works-diagram-05.svg" />
|
||||
<aside class="notes">
|
||||
<p>Your inventory of hosts are your raw material. They are a list of nodes and associated meta data that Ansible can automate.</p>
|
||||
<p>Inventory lists can be built and stored several different ways, including static files, or can be dynamically-generated from an external source.</p>
|
||||
<p>You can also specify variables as part of an inventory list. For instance, set a particular host key that’s needed to log into that system remotely. Inventories are ultimately lists of things you want to automate across.</p>
|
||||
<p>Here in this slide was see an example of a simple static inventory list of three hosts (webserver1, webserver2 and dbserver1) in two groups (web and db).</p>
|
||||
<p>For more details see the <a href="http://docs.ansible.com/ansible/intro_inventory.html">Inventory</a> page in the Ansible documentation.</p>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
<section id="HowAnsibleWorks-DynamicInventory">
|
||||
|
||||
<h2>Inventory</h2>
|
||||
<img src="images/how-ansible-works-diagram-06.svg" />
|
||||
<aside class="notes">
|
||||
<p>In large-scale environment subject to constant change, synchronizing and maintaining inventory statically is tedious and error prone endeavor. That is why Ansible includes support of external sources such as public and private cloud providers and configuration management database (CMDB) systems.</p>
|
||||
<p>For more details see the <a href="http://docs.ansible.com/ansible/intro_dynamic_inventory.html">Dynamic Inventory</a> page in the Ansible documentation.</p>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
<section data-state="title alt" id="RedIntro-Modules">
|
||||
|
||||
<h1>MODULES</h1>
|
||||
<img src="<?=$workshop_image?>" style="background-color: transparent; border: none;" height="250">
|
||||
<p>We leverage modules within our playbooks to do the heavy lifting.</p>
|
||||
<aside class="notes">
|
||||
<p>Ansible</p>
|
||||
</aside>
|
||||
|
||||
</section>
|
||||
|
||||
|
||||
@@ -1,39 +0,0 @@
|
||||
<section id="ModuleList">
|
||||
|
||||
<h2>Modules</h2>
|
||||
<p>Modules are bits of code transferred to the target system and executed to satisfy the task declaration.</p>
|
||||
<div class="columns">
|
||||
<div class="col">
|
||||
<ul>
|
||||
<li>apt/yum</li>
|
||||
<li>copy</li>
|
||||
<li>file</li>
|
||||
<li>get_url</li>
|
||||
<li>git</li>
|
||||
<li>ping</li>
|
||||
<li>debug</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col">
|
||||
<ul>
|
||||
<li>service</li>
|
||||
<li>synchronize</li>
|
||||
<li>template</li>
|
||||
<li>uri</li>
|
||||
<li>user</li>
|
||||
<li>wait_for</li>
|
||||
<li>assert</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col">
|
||||
</div>
|
||||
</div>
|
||||
<aside class="notes">
|
||||
<p>If playbooks are the instruction manual for setting up and managing your infrastructure, Ansible modules are the tools in your toolkit.</p>
|
||||
<p>We've already discussed, Ansible modules. They are the “batteries” and the “tools in a users toolkit.”</p>
|
||||
<p>While there are hundreds of modules at your disposal out-of-the-box these are the most common ones.</p>
|
||||
<p>Playbook tasks and how they relate to modules will be covered ahead. Tasks are the application of a module to perform a specific unit of work.</p>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,208 +0,0 @@
|
||||
<section id="ModuleDoc-CLI-InfoScroll">
|
||||
<h2>Modules Documentation</h2>
|
||||
<p>Returns a thorough description of the parameters in the module.</p>
|
||||
|
||||
<div class="terminal space shadow" onclick="scrollDiv_init('AnsibleDocsInfo','1'); this.onclick = null;" style="cursor: pointer;">
|
||||
<div class="top">
|
||||
<div class="title">
|
||||
<a href="javascript:pauseDiv()" style="none; cursor: pointer;">Ansible Terminal</a>
|
||||
</div>
|
||||
</div>
|
||||
<pre class="bodymw">
|
||||
<font color="gray"><?=$terminal_prompt?></font> ansible-doc copy
|
||||
<div id="AnsibleDocsInfo" style="overflow:auto;width:auto;height:700px">
|
||||
> 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
|
||||
|
||||
|
||||
</div>
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<aside class="notes">
|
||||
<p><b>TO Make This List SCROLL</b>, click anywhere on the terminal window</p>
|
||||
<p><b>TO Make This List STOP</b>, click the "Ansible Terminal" text on top of the console</p>
|
||||
</aside>
|
||||
</section>
|
||||
@@ -1,140 +0,0 @@
|
||||
<section id="ModuleDoc-CLI-ExampleScroll">
|
||||
<h2>Modules Documentation</h2>
|
||||
<p>Also displays usable copy / paste examples of working functional tasks with this module.</p>
|
||||
|
||||
<div class="terminal space shadow" onclick="scrollDiv_init('AnsibleDocsExamples','40'); this.onclick = null;" style="cursor: pointer;">
|
||||
<div class="top">
|
||||
<div class="title">
|
||||
<a href="javascript:pauseDiv()" style="none; cursor: pointer;">Ansible Terminal</a>
|
||||
</div>
|
||||
</div>
|
||||
<pre class="bodymw">
|
||||
<font color="gray"><?=$terminal_prompt?></font> ansible-doc copy
|
||||
<div id="AnsibleDocsExamples" style="overflow:auto;width:auto;height:700px">
|
||||
|
||||
<font color="#FF00FF">EXAMPLES:</font>
|
||||
|
||||
<mark>- name: example copying file with owner and permissions </mark>
|
||||
copy:
|
||||
src: /srv/myfiles/foo.conf
|
||||
dest: /etc/foo.conf
|
||||
owner: foo
|
||||
group: foo
|
||||
mode: 0644
|
||||
|
||||
<mark>- name: The same example as above, but using a symbolic mode equivalent to 0644 </mark>
|
||||
copy:
|
||||
src: /srv/myfiles/foo.conf
|
||||
dest: /etc/foo.conf
|
||||
owner: foo
|
||||
group: foo
|
||||
mode: u=rw,g=r,o=r
|
||||
|
||||
<mark>- name: Another symbolic mode example, adding some permissions and removing others </mark>
|
||||
copy:
|
||||
src: /srv/myfiles/foo.conf
|
||||
dest: /etc/foo.conf
|
||||
owner: foo
|
||||
group: foo
|
||||
mode: u+rw,g-wx,o-rwx
|
||||
|
||||
<mark>- name: Copy a new "ntp.conf file into place, backing up the original if it differs from the... </mark>
|
||||
copy:
|
||||
src: /mine/ntp.conf
|
||||
dest: /etc/ntp.conf
|
||||
owner: root
|
||||
group: root
|
||||
mode: 0644
|
||||
backup: yes
|
||||
|
||||
<mark>- name: Copy a new "sudoers" file into place, after passing validation with visudo </mark>
|
||||
copy:
|
||||
src: /mine/sudoers
|
||||
dest: /etc/sudoers
|
||||
validate: /usr/sbin/visudo -cf %s
|
||||
|
||||
<mark>- name: Copy a "sudoers" file on the remote machine for editing </mark>
|
||||
copy:
|
||||
src: /etc/sudoers
|
||||
dest: /etc/sudoers.edit
|
||||
remote_src: yes
|
||||
validate: /usr/sbin/visudo -cf %s
|
||||
|
||||
<mark>- name: Copy using the 'content' for inline data </mark>
|
||||
copy:
|
||||
content: '# This file was moved to /etc/other.conf'
|
||||
dest: /etc/mine.conf'
|
||||
|
||||
<font color="#FF00FF">RETURN VALUES:</font>
|
||||
|
||||
|
||||
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
|
||||
</div>
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
|
||||
<aside class="notes">
|
||||
<p><b>TO Make This List SCROLL</b>, click anywhere on the terminal window</p>
|
||||
<p><b>TO Make This List STOP</b>, click the "Ansible Terminal" text on top of the console</p>
|
||||
</aside>
|
||||
</section>
|
||||
@@ -1,76 +0,0 @@
|
||||
<section id="ModuleDoc-CLI-DashSScroll">
|
||||
<h2>Modules Documentation</h2>
|
||||
<p>Starting with the snippet view, you can create your task from pre-formatted scratch.</p>
|
||||
|
||||
<div class="terminal space shadow" onclick="scrollDiv_init('AnsibleDocsDashS','20'); this.onclick = null;" style="cursor: pointer;">
|
||||
<div class="top">
|
||||
<div class="title">
|
||||
<a href="javascript:pauseDiv()" style="none; cursor: pointer;">Ansible Terminal</a>
|
||||
</div>
|
||||
</div>
|
||||
<pre class="bodysw">
|
||||
<font color="gray"><?=$terminal_prompt?></font> ansible-doc copy -s
|
||||
<div id="AnsibleDocsDashS" style="overflow:auto;width:auto;height:700px">
|
||||
|
||||
- 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.
|
||||
|
||||
</div>
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
|
||||
<aside class="notes">
|
||||
<p><b>TO Make This List SCROLL</b>, click anywhere on the terminal window</p>
|
||||
<p><b>TO Make This List STOP</b>, click the "Ansible Terminal" text on top of the console</p>
|
||||
</aside>
|
||||
</section>
|
||||
@@ -1,9 +0,0 @@
|
||||
<section id="ModuleDocWebsite" data-background-image="images/modules-doc-screenshots.png">
|
||||
|
||||
|
||||
<div style="position:absolute; right: 50px; top: -330px;">
|
||||
<h1>Modules Documentation</h1>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
<section id="CommandOptions">
|
||||
|
||||
<h2>Modules: Run Commands</h2>
|
||||
<p>If Ansible doesn't have a module that suits your needs there are the “run command” modules:</p><br>
|
||||
<ul>
|
||||
<li><b>command</b>: Takes the command and executes it on the host. The most secure and predictable.</li>
|
||||
<li><b>shell</b>: Executes through a shell like <code>/bin/sh</code> so you can use pipes etc. Be careful.</li>
|
||||
<li><b>raw</b>: Executes a command without going through the Ansible module subsystem.</li><br>
|
||||
</ul>
|
||||
<p><br><b>NOTE:</b> Unlike standard modules, run commands have no concept of desired state and should only be used as a last resort.</p>
|
||||
<aside class="notes">
|
||||
<p>"Run commands" are what we collectively call these modules that enable users to do command-line operations in different ways. They’re a great catch all mechanism for getting things done, but they should be used sparingly and as a last resort. The reasons are many and varied.</p>
|
||||
<p>The overuse of run commands is common amongst those just becoming familiar with Ansible for automating their work. They use <code>shell</code> to fire off a bash command they already know without stopping to look at the Ansible docs. That works well enough initially, but it undermines the value of automating with Ansible and sets things up for problems down the road. <b>As a best practice, always check the hundreds of Ansible shipping modules for what you need and use those first and run commands as a last resort.</b></p>
|
||||
<p><b>NOTE:</b> <code>shell</code> allows for IO redirection such as pipes. This is why It's best practice to use <code>command</code> unless they need to pipe something. It also best practice to <strong>never</strong> pass user input or variables thru a run command.</p>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
<section id="ModuleDoc-CLI-List">
|
||||
<h2>Modules Documentation</h2>
|
||||
<p>Returns a list of literally every module available on the system</p>
|
||||
|
||||
<div class="terminal space shadow">
|
||||
<div class="top">
|
||||
<div class="title">Ansible Terminal</div>
|
||||
</div>
|
||||
<pre class="bodymw">
|
||||
<font color="silver"># List out all modules installed -- returns MANY lines</font>
|
||||
<font color="gray"><?=$terminal_prompt?></font> 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 ...
|
||||
|
||||
<font color="#FF00FF">Many, many lines have been truncated. This is a very small sample
|
||||
of the incredibly long list of modules.</font>
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
</section>
|
||||
@@ -1,12 +0,0 @@
|
||||
<section data-state="title alt" id="RedIntro-Inventory">
|
||||
|
||||
<h1>INVENTORY</h1>
|
||||
<img src="<?=$workshop_image?>" style="background-color: transparent; border: none;" height="250">
|
||||
<p>Define hosts on which the playbook will run.</p>
|
||||
<aside class="notes">
|
||||
<p>Ansible</p>
|
||||
</aside>
|
||||
|
||||
</section>
|
||||
|
||||
|
||||
@@ -1,19 +0,0 @@
|
||||
<section id="WhatIsInventory">
|
||||
|
||||
<h2>Inventory</h2>
|
||||
<p>Inventory is a collection of hosts (nodes) with associated data and groupings that Ansible can connect and manage.</p>
|
||||
<ul>
|
||||
<li>Hosts (nodes)</li>
|
||||
<li>Groups</li>
|
||||
<li>Inventory-specific data (variables)</li>
|
||||
<li>Static or dynamic sources</li>
|
||||
</ul>
|
||||
<aside class="notes">
|
||||
<p>We've already discussed inventory in our review of Ansible's key components.</p>
|
||||
<p>Inventory consists of hosts, groups, inventory specific data. Inventory can either be static or dynamic.</p>
|
||||
<p>Inventory is a collection of the hosts (nodes) with associated metadata and groupings that Ansible can connect and manage. An inventory source can be static files or dynamically retrieved from an external system.</p>
|
||||
<p>You can specify a different inventory file using the <code>-i <path></code> option on the command-line or your Ansible configuration file.</p>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
|
||||
@@ -1,28 +0,0 @@
|
||||
<section id="StaticInventoryExampleBasic">
|
||||
<h2>Static Inventory Example</h2>
|
||||
|
||||
<div class="terminal space shadow">
|
||||
<div class="top">
|
||||
<div class="title">Ansible Terminal</div>
|
||||
</div>
|
||||
<pre class="bodylw">
|
||||
<font color="silver"># Static inventory example:</font>
|
||||
[myservers]
|
||||
10.42.0.2
|
||||
10.42.0.6
|
||||
10.42.0.7
|
||||
10.42.0.8
|
||||
10.42.0.100
|
||||
host.example.com
|
||||
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
|
||||
<aside class="notes">
|
||||
<p>Static inventory is the easiest source to get started with. This example shows a static inventory source in It’s simplest form – a single file with a list of IP addresses or hostnames.</p>
|
||||
<p><strong>NOTE:</strong> Ansible infers a localhost is present even if it is not explicitly listed. This is why you can actually run Ansible without a inventory source. Ansible will only be able to operate on the localhost where it is being run.</p>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
|
||||
@@ -1,179 +0,0 @@
|
||||
<section id="StaticInventoryExampleAdvanced">
|
||||
|
||||
<center><h2>A MORE ADVANCED STATIC INVENTORY EXAMPLE</h2></center>
|
||||
|
||||
<div class="terminal space shadow">
|
||||
<div class="top">
|
||||
<div class="title">Ansible Terminal</div>
|
||||
</div>
|
||||
<pre class="bodylw">
|
||||
<font color="silver"># A more advanced static inventory example:</font>
|
||||
<font color="#FF00FF">[control]</font>
|
||||
mainserver ansible_host=10.42.0.2
|
||||
|
||||
<font color="#FF00FF">[web]</font>
|
||||
node-[1:30] ansible_host=10.42.0.[31:60]
|
||||
|
||||
<font color="#FF00FF">[haproxy]</font>
|
||||
haproxy ansible_host=10.42.0.100
|
||||
|
||||
<font color="yellow">[all:vars]</font>
|
||||
ansible_user=kev
|
||||
ansible_ssh_private_key_file=/home/kev/.ssh/id_rsa
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<aside class="notes">
|
||||
<p>The example shown here is a more practical and common example of a static inventory file.</p>
|
||||
<p>Static inventory files are expressed in INI format. The headings in brackets are group names, which are used in classifying systems and deciding what systems you are controlling at what times and for what purpose. Hosts can belong to multiple groups and groups can be members of other groups. (The latter is not shown here.)</p>
|
||||
<p>NOTE: This example contains variables, a topic we haven't touched on just yet. We'll go into them on the next slide.</p>
|
||||
<p>Other noteworthy attributes in our example:</p>
|
||||
<ul>
|
||||
<li><code>ansible_host</code> is an example of a host variable.</li>
|
||||
<li>Hosts can be assigned arbitrary human-meaningful names or aliases such as "control" and "haproxy". Ansible will instead use the value of <code>ansible_host</code> (one of several <a href="http://docs.ansible.com/ansible/playbooks_variables.html#magic-variables-and-how-to-access-information-about-other-hosts">"magic" inventory variables</a>) as the network address to connect.</li>
|
||||
<li>Static inventory files can support character ranges such as "node-[1:3]"</li>
|
||||
<li>Like localhost, Ansible infers an "all" group is present. As its name implies, all inventory hosts are members of this group.</li>
|
||||
<li>The heading "all:vars" is an example of group variable assignment using two more "magic" variables, <code>ansible_ssh_private_key_file</code> and <code>ansible_user</code>.</li>
|
||||
</ul>
|
||||
<p>This example just covers the basics. There's a lot more to inventory that is not covered here. See the <a href="http://docs.ansible.com/ansible/intro_inventory.html">Ansible inventory documentation</a> for more details.</p>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<section id="StaticInventory-Mark-AH-Static">
|
||||
|
||||
<center><h2>A MORE ADVANCED STATIC INVENTORY EXAMPLE</h2></center>
|
||||
|
||||
<div class="terminal space shadow">
|
||||
<div class="top">
|
||||
<div class="title">Ansible Terminal</div>
|
||||
</div>
|
||||
<pre class="bodylw">
|
||||
<font color="silver"># A more advanced static inventory example:</font>
|
||||
<font color="#FF00FF">[control]</font>
|
||||
mainserver <mark>ansible_host=10.42.0.2</mark>
|
||||
|
||||
<font color="#FF00FF">[web]</font>
|
||||
node-[1:30] ansible_host=10.42.0.[31:60]
|
||||
|
||||
<font color="#FF00FF">[haproxy]</font>
|
||||
haproxy <mark>ansible_host=10.42.0.100</mark>
|
||||
|
||||
<font color="yellow">[all:vars]</font>
|
||||
ansible_user=kev
|
||||
ansible_ssh_private_key_file=/home/kev/.ssh/id_rsa
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<aside class="notes">
|
||||
<p>The example shown here is a more practical and common example of a static inventory file.</p>
|
||||
<p>Static inventory files are expressed in INI format. The headings in brackets are group names, which are used in classifying systems and deciding what systems you are controlling at what times and for what purpose. Hosts can belong to multiple groups and groups can be members of other groups. (The latter is not shown here.)</p>
|
||||
<p>NOTE: This example contains variables, a topic we haven't touched on just yet. We'll go into them on the next slide.</p>
|
||||
<p>Other noteworthy attributes in our example:</p>
|
||||
<ul>
|
||||
<li><code>ansible_host</code> is an example of a host variable.</li>
|
||||
<li>Hosts can be assigned arbitrary human-meaningful names or aliases such as "control" and "haproxy". Ansible will instead use the value of <code>ansible_host</code> (one of several <a href="http://docs.ansible.com/ansible/playbooks_variables.html#magic-variables-and-how-to-access-information-about-other-hosts">"magic" inventory variables</a>) as the network address to connect.</li>
|
||||
<li>Static inventory files can support character ranges such as "node-[1:3]"</li>
|
||||
<li>Like localhost, Ansible infers an "all" group is present. As its name implies, all inventory hosts are members of this group.</li>
|
||||
<li>The heading "all:vars" is an example of group variable assignment using two more "magic" variables, <code>ansible_ssh_private_key_file</code> and <code>ansible_user</code>.</li>
|
||||
</ul>
|
||||
<p>This example just covers the basics. There's a lot more to inventory that is not covered here. See the <a href="http://docs.ansible.com/ansible/intro_inventory.html">Ansible inventory documentation</a> for more details.</p>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
<section id="StaticInventory-Mark-AH-Range">
|
||||
|
||||
<center><h2>A MORE ADVANCED STATIC INVENTORY EXAMPLE</h2></center>
|
||||
|
||||
<div class="terminal space shadow">
|
||||
<div class="top">
|
||||
<div class="title">Ansible Terminal</div>
|
||||
</div>
|
||||
<pre class="bodylw">
|
||||
<font color="silver"># A more advanced static inventory example:</font>
|
||||
<font color="#FF00FF">[control]</font>
|
||||
mainserver ansible_host=10.42.0.2
|
||||
|
||||
<font color="#FF00FF">[web]</font>
|
||||
node-<mark>[1:30]</mark> ansible_host=10.42.0.<mark>[31:60]</mark>
|
||||
|
||||
<font color="#FF00FF">[haproxy]</font>
|
||||
haproxy ansible_host=10.42.0.100
|
||||
|
||||
<font color="yellow">[all:vars]</font>
|
||||
ansible_user=kev
|
||||
ansible_ssh_private_key_file=/home/kev/.ssh/id_rsa
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<aside class="notes">
|
||||
<p>The example shown here is a more practical and common example of a static inventory file.</p>
|
||||
<p>Static inventory files are expressed in INI format. The headings in brackets are group names, which are used in classifying systems and deciding what systems you are controlling at what times and for what purpose. Hosts can belong to multiple groups and groups can be members of other groups. (The latter is not shown here.)</p>
|
||||
<p>NOTE: This example contains variables, a topic we haven't touched on just yet. We'll go into them on the next slide.</p>
|
||||
<p>Other noteworthy attributes in our example:</p>
|
||||
<ul>
|
||||
<li><code>ansible_host</code> is an example of a host variable.</li>
|
||||
<li>Hosts can be assigned arbitrary human-meaningful names or aliases such as "control" and "haproxy". Ansible will instead use the value of <code>ansible_host</code> (one of several <a href="http://docs.ansible.com/ansible/playbooks_variables.html#magic-variables-and-how-to-access-information-about-other-hosts">"magic" inventory variables</a>) as the network address to connect.</li>
|
||||
<li>Static inventory files can support character ranges such as "node-[1:3]"</li>
|
||||
<li>Like localhost, Ansible infers an "all" group is present. As its name implies, all inventory hosts are members of this group.</li>
|
||||
<li>The heading "all:vars" is an example of group variable assignment using two more "magic" variables, <code>ansible_ssh_private_key_file</code> and <code>ansible_user</code>.</li>
|
||||
</ul>
|
||||
<p>This example just covers the basics. There's a lot more to inventory that is not covered here. See the <a href="http://docs.ansible.com/ansible/intro_inventory.html">Ansible inventory documentation</a> for more details.</p>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<section id="StaticInventory-Mark-AH-Vars">
|
||||
|
||||
<center><h2>A MORE ADVANCED STATIC INVENTORY EXAMPLE</h2></center>
|
||||
|
||||
<div class="terminal space shadow">
|
||||
<div class="top">
|
||||
<div class="title">Ansible Terminal</div>
|
||||
</div>
|
||||
<pre class="bodylw">
|
||||
<font color="silver"># A more advanced static inventory example:</font>
|
||||
<font color="#FF00FF">[control]</font>
|
||||
mainserver ansible_host=10.42.0.2
|
||||
|
||||
<font color="#FF00FF">[web]</font>
|
||||
node-[1:30] ansible_host=10.42.0.[31:60]
|
||||
|
||||
<font color="#FF00FF">[haproxy]</font>
|
||||
haproxy ansible_host=10.42.0.100
|
||||
|
||||
<font color="#FF00FF">[all:vars]</font>
|
||||
<mark>ansible_user=kev
|
||||
ansible_ssh_private_key_file=/home/kev/.ssh/id_rsa</mark>
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<aside class="notes">
|
||||
<p>The example shown here is a more practical and common example of a static inventory file.</p>
|
||||
<p>Static inventory files are expressed in INI format. The headings in brackets are group names, which are used in classifying systems and deciding what systems you are controlling at what times and for what purpose. Hosts can belong to multiple groups and groups can be members of other groups. (The latter is not shown here.)</p>
|
||||
<p>NOTE: This example contains variables, a topic we haven't touched on just yet. We'll go into them on the next slide.</p>
|
||||
<p>Other noteworthy attributes in our example:</p>
|
||||
<ul>
|
||||
<li><code>ansible_host</code> is an example of a host variable.</li>
|
||||
<li>Hosts can be assigned arbitrary human-meaningful names or aliases such as "control" and "haproxy". Ansible will instead use the value of <code>ansible_host</code> (one of several <a href="http://docs.ansible.com/ansible/playbooks_variables.html#magic-variables-and-how-to-access-information-about-other-hosts">"magic" inventory variables</a>) as the network address to connect.</li>
|
||||
<li>Static inventory files can support character ranges such as "node-[1:3]"</li>
|
||||
<li>Like localhost, Ansible infers an "all" group is present. As its name implies, all inventory hosts are members of this group.</li>
|
||||
<li>The heading "all:vars" is an example of group variable assignment using two more "magic" variables, <code>ansible_ssh_private_key_file</code> and <code>ansible_user</code>.</li>
|
||||
</ul>
|
||||
<p>This example just covers the basics. There's a lot more to inventory that is not covered here. See the <a href="http://docs.ansible.com/ansible/intro_inventory.html">Ansible inventory documentation</a> for more details.</p>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
|
||||
@@ -1,60 +0,0 @@
|
||||
<section id="StaticInventoryExampleWin">
|
||||
|
||||
<center><h2>A WINDOWS STATIC INVENTORY EXAMPLE</h2></center>
|
||||
|
||||
<div class="terminal space shadow">
|
||||
<div class="top">
|
||||
<div class="title">Ansible Terminal</div>
|
||||
</div>
|
||||
<pre class="bodylw">
|
||||
<font color="silver"># Windows vars inventory example:</font>
|
||||
<font color="#FF00FF">[winservers]</font>
|
||||
blueiris ansible_host=10.10.2.20
|
||||
winfileprd[1:3] ansible_host=10.13.128.[7:9]
|
||||
winwebsrv01 ansible_host=10.14.27.16
|
||||
|
||||
<font color="#FF00FF">[winservers:vars]</font>
|
||||
ansible_connection: winrm
|
||||
ansible_winrm_transport: credssp
|
||||
ansible_port: 5986
|
||||
ansible_winrm_server_cert_validation: ignore
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<aside class="notes">
|
||||
<p>Notes go here.
|
||||
</p>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
|
||||
<section id="StaticInventoryExampleWinMarked">
|
||||
|
||||
<center><h2>A WINDOWS STATIC INVENTORY EXAMPLE</h2></center>
|
||||
|
||||
<div class="terminal space shadow">
|
||||
<div class="top">
|
||||
<div class="title">Ansible Terminal</div>
|
||||
</div>
|
||||
<pre class="bodylw">
|
||||
<font color="silver"># Windows vars inventory example:</font>
|
||||
<font color="#FF00FF">[winservers]</font>
|
||||
blueiris ansible_host=10.10.2.20
|
||||
winfileprd[1:3] ansible_host=10.13.128.[7:9]
|
||||
winwebsrv01 ansible_host=10.14.27.16
|
||||
|
||||
<font color="#FF00FF">[winservers:vars]</font>
|
||||
<mark>ansible_connection: winrm
|
||||
ansible_winrm_transport: credssp
|
||||
ansible_port: 5986
|
||||
ansible_winrm_server_cert_validation: ignore</mark>
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<aside class="notes">
|
||||
<p>Notes go here.
|
||||
</p>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
<section data-state="lab alt" id="<?=$labid?>-01">
|
||||
<h1><?=$pretty_htmldir?></h1>
|
||||
<img src="<?=$workshop_image?>" style="background-color: transparent; border: none;" height="250">
|
||||
<p>Take a moment to get familiar with your lab inventory. Look at the file:<br>/some/path/to/something</p>
|
||||
</section>
|
||||
<section data-state="lab alt" id="<?=$labid?>-02">
|
||||
<h1><?=$pretty_htmldir?></h1>
|
||||
<img src="<?=$workshop_image?>" style="background-color: transparent; border: none;" height="250">
|
||||
<p>Notice the items in the inventory. This vague statement will be updated soon to be more clear about what this lab involes.</p>
|
||||
</section>
|
||||
@@ -1,14 +0,0 @@
|
||||
<section data-state="title alt" id="RedIntro-AdHocExplained">
|
||||
|
||||
<h1>AD-HOC COMMANDS</h1>
|
||||
<img src="<?=$workshop_image?>" style="background-color: transparent; border: none;" height="250">
|
||||
<p>An ad-hoc command is a single Ansible task to perform quickly, but don’t want to save for later.</p>
|
||||
|
||||
<aside class="notes">
|
||||
<p>Ansible ad-hoc commands is a good place to start to understand the basics of what Ansible can do before learning how to use playbooks – ad-hoc commands can also be used to do quick things that you might not necessarily want to write a full playbook for.</p>
|
||||
<p>Generally speaking, the true power of Ansible lies in playbooks. So why would you use ad-hoc tasks versus playbooks?</p>
|
||||
<p>For instance, if you wanted to restart a service on all of your lab nodes, you could execute a quick one-liner in Ansible without writing a playbook.</p>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
<section id="AdHocOptions">
|
||||
<h2>Ad-Hoc Commands: Common Options</h2>
|
||||
<ul style="font-size: 0.75em;">
|
||||
<li><b>-m MODULE_NAME, --module-name=MODULE_NAME</b><br/>Module name to execute the ad-hoc command</li>
|
||||
<li><b>-a MODULE_ARGS, --args=MODULE_ARGS</b><br/>Module arguments for the ad-hoc command</li>
|
||||
<li><b>-b, --become</b><br/>Run ad-hoc command with elevated rights such as sudo, the default method</li>
|
||||
<li><b>-e EXTRA_VARS, --extra-vars=EXTRA_VARS</b><br/>Set additional variables as key=value or YAML/JSON</li>
|
||||
<li><b>--version</b><br/>Display the version of Ansible</li>
|
||||
<li><b>--help</b><br/>Display the MAN page for the Ansible tool</li>
|
||||
</ul>
|
||||
<aside class="notes">
|
||||
<p>This slide shows essential command-line options for running ad-hoc commands that will be useful in our upcoming workshop assignment.</p>
|
||||
</aside>
|
||||
</section>
|
||||
</section>
|
||||
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
<section id="AdHocCommands-Terminal">
|
||||
|
||||
<center><h2>AD HOC COMMANDS</h2></center>
|
||||
|
||||
<div class="terminal space shadow">
|
||||
<div class="top">
|
||||
<div class="title">Ansible Terminal</div>
|
||||
</div>
|
||||
<pre class="bodyl">
|
||||
<font color="silver"># Check connections (submarine ping, not ICMP)</font>
|
||||
<font color="gray"><?=$terminal_prompt?></font> ansible all -m ping
|
||||
|
||||
<font color="silver"># Run a command on all the hosts in the web group</font>
|
||||
<font color="gray"><?=$terminal_prompt?></font> ansible web -m command -a "uptime"
|
||||
|
||||
<font color="silver"># Collect and display known facts</font>
|
||||
<font color="gray"><?=$terminal_prompt?></font> ansible localhost -m setup
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<aside class="notes">
|
||||
<p>Ad-hoc commands are quick checks on your servers that you don’t want to preserve in an Ansible playbook.</p>
|
||||
<p>An ad-hoc command can be used to do some tasks that you might not necessarily want to write a full playbook and save for later.</p>
|
||||
<p>This is a good place to start to understand the basics of what Ansible can do prior to learning about playbooks where the true power of Ansible automation lies.</p>
|
||||
<p>For more information see <a href="http://docs.ansible.com/ansible/intro_adhoc.html">Introduction To Ad-Hoc Commands</a>.</p>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
|
||||
@@ -1,584 +0,0 @@
|
||||
<section id="SetupM-FULL-Scrolling">
|
||||
<h2>Full Fact List</h2>
|
||||
<p>Returns a list of literally every fact available on the system</p>
|
||||
|
||||
|
||||
|
||||
<div class="terminal space shadow" onclick="scrollDiv_init('AnsibleSetupM','1'); this.onclick = null;" style="cursor: pointer;">
|
||||
<div class="top">
|
||||
<div class="title">
|
||||
<a href="javascript:pauseDiv()" style="none; cursor: pointer;">Ansible Terminal</a>
|
||||
</div>
|
||||
</div>
|
||||
<pre class="bodymw">
|
||||
<font color="gray"><?=$terminal_prompt?></font> ansible myserver.mine -m setup
|
||||
<mark>Provides a long list of all facts known of this system</mark>
|
||||
|
||||
<div id="AnsibleSetupM" style="overflow:auto;width:auto;height:700px;">
|
||||
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
|
||||
}
|
||||
|
||||
|
||||
</div>
|
||||
</pre>
|
||||
</div>
|
||||
<aside class="notes">
|
||||
<p><b>TO Make This List SCROLL</b>, click anywhere on the terminal window</p>
|
||||
<p><b>TO Make This List STOP</b>, click the "Ansible Terminal" text on top of the console</p>
|
||||
</aside>
|
||||
</section>
|
||||
@@ -1,37 +0,0 @@
|
||||
<section id="DiscoveredFacts">
|
||||
|
||||
<center><h2>DISCOVERED FACTS</h2>
|
||||
</center>
|
||||
|
||||
<div class="terminal space shadow">
|
||||
<div class="top">
|
||||
<div class="title">Ansible Terminal</div>
|
||||
</div>
|
||||
<pre class="bodym">
|
||||
<font color="silver"># Small filtered subset of discovered facts</font>
|
||||
<font color="gray"><?=$terminal_prompt?></font> ansible myserver.mine -m setup -a "filter=ansible_default_ipv4"
|
||||
|
||||
<font color="yellow">myserver.mine | success >> </font>{
|
||||
<font color="cyan">"ansible_facts"</font>: {
|
||||
<font color="cyan">"ansible_default_ipv4"</font>: {
|
||||
<font color="cyan">"address"</font>:<font color="yellow"> "10.41.17.37"</font>,
|
||||
<font color="cyan">"alias"</font>:<font color="yellow"> "eth0"</font>,
|
||||
<font color="cyan">"gateway"</font>:<font color="yellow"> "10.41.17.1"</font>,
|
||||
<font color="cyan">"interface"</font>:<font color="yellow"> "eth0"</font>,
|
||||
<font color="cyan">"macaddress"</font>:<font color="yellow"> "00:69:08:3b:a9:16"</font>,
|
||||
<font color="cyan">"mtu"</font>:<font color="yellow"> 1500</font>,
|
||||
<font color="cyan">"netmask"</font>:<font color="yellow"> "255.255.255.0"</font>,
|
||||
<font color="cyan">"network"</font>:<font color="yellow"> "10.41.17.0"</font>,
|
||||
<font color="cyan">"type"</font>:<font color="yellow"> "ether"</font>
|
||||
},
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<aside class="notes">
|
||||
<p>The second ad-hoc command example from the prior slide provides the following JSON output of a localhost facts run.</p>
|
||||
<p>Facts are bits of information derived from examining a host systems that are stored as variables for later use. An example of this might be the IP address of the host, or what operating system it is running. The facts Ansible will discover about a host is extensive. What's shown here is just a small sample. Run <code>ansible localhost -m setup</code> for a more complete representation.</p>
|
||||
<p>Ansible collects facts using the <code>setup</code> module. By default, Ansible will run the <code>setup</code> module before any other tasks are executed in a playbook. These facts can be referenced by subsequent automation tasks on a per host-basis during the playbook run.</p>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
<section id="AdHocExplained">
|
||||
<h2>Ad-Hoc Commands</h2>
|
||||
<p>An ad-hoc command is a single Ansible task to perform quickly, but don’t want to save for later.</p>
|
||||
<aside class="notes">
|
||||
<p>Ansible ad-hoc commands is a good place to start to understand the basics of what Ansible can do before learning how to use playbooks – ad-hoc commands can also be used to do quick things that you might not necessarily want to write a full playbook for.</p>
|
||||
<p>Generally speaking, the true power of Ansible lies in playbooks. So why would you use ad-hoc tasks versus playbooks?</p>
|
||||
<p>For instance, if you wanted to restart a service on all of your lab nodes, you could execute a quick one-liner in Ansible without writing a playbook.</p>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
<section data-state="lab alt" id="<?=$labid?>-01">
|
||||
<h1><?=$pretty_htmldir?> </h1>
|
||||
<img src="<?=$workshop_image?>" style="background-color: transparent; border: none;" height="250">
|
||||
<p>Ad-hoc command exercise number one</p>
|
||||
</section>
|
||||
|
||||
<section data-state="lab alt" id="<?=$labid?>-02">
|
||||
<h1><?=$pretty_htmldir?> </h1>
|
||||
<img src="<?=$workshop_image?>" style="background-color: transparent; border: none;" height="250">
|
||||
<p>Ad-hoc command exercise number two</p>
|
||||
</section>
|
||||
|
||||
<section data-state="lab alt" id="<?=$labid?>-03">
|
||||
<h1><?=$pretty_htmldir?> </h1>
|
||||
<img src="<?=$workshop_image?>" style="background-color: transparent; border: none;" height="250">
|
||||
<p>Ad-hoc command exercise number three</p>
|
||||
</section>
|
||||
@@ -1,29 +0,0 @@
|
||||
<section data-state="lab alt" id="<?=$labid?>-AdHocCommands-Terminal">
|
||||
|
||||
<center><h2>AD HOC COMMANDS</h2></center>
|
||||
|
||||
<div class="terminal space shadow">
|
||||
<div class="top">
|
||||
<div class="title">Ansible Terminal</div>
|
||||
</div>
|
||||
<pre class="bodyl">
|
||||
<font color="silver"># Check connections (submarine ping, not ICMP)</font>
|
||||
<font color="gray"><?=$terminal_prompt?></font> ansible all -m ping
|
||||
|
||||
<font color="silver"># Run a command on all the hosts in the web group</font>
|
||||
<font color="gray"><?=$terminal_prompt?></font> ansible web -m command -a "uptime"
|
||||
|
||||
<font color="silver"># Collect and display known facts</font>
|
||||
<font color="gray"><?=$terminal_prompt?></font> ansible localhost -m setup
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<aside class="notes">
|
||||
<p>Ad-hoc commands are quick checks on your servers that you don’t want to preserve in an Ansible playbook.</p>
|
||||
<p>An ad-hoc command can be used to do some tasks that you might not necessarily want to write a full playbook and save for later.</p>
|
||||
<p>This is a good place to start to understand the basics of what Ansible can do prior to learning about playbooks where the true power of Ansible automation lies.</p>
|
||||
<p>For more information see <a href="http://docs.ansible.com/ansible/intro_adhoc.html">Introduction To Ad-Hoc Commands</a>.</p>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
<section data-state="lab alt" id="<?=$labid?>-04">
|
||||
<h1><?=$pretty_htmldir?> </h1>
|
||||
<img src="<?=$workshop_image?>" style="background-color: transparent; border: none;" height="250">
|
||||
<p>Ad-hoc command exercise number four</p>
|
||||
</section>
|
||||
|
||||
<section data-state="lab alt" id="<?=$labid?>-05">
|
||||
<h1><?=$pretty_htmldir?> </h1>
|
||||
<img src="<?=$workshop_image?>" style="background-color: transparent; border: none;" height="250">
|
||||
<p>Ad-hoc command exercise number five</p>
|
||||
</section>
|
||||
|
||||
<section data-state="lab alt" id="<?=$labid?>-06">
|
||||
<h1><?=$pretty_htmldir?> </h1>
|
||||
<img src="<?=$workshop_image?>" style="background-color: transparent; border: none;" height="250">
|
||||
<p>Ad-hoc command exercise number six</p>
|
||||
</section>
|
||||
@@ -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
|
||||
}
|
||||
@@ -1,12 +0,0 @@
|
||||
<section data-state="title alt" id="Red-Lets-Talk-Variables">
|
||||
<h1>VARIABLES:</h1>
|
||||
<font color="white"> <li>What are they?</li>
|
||||
<li>How do they work for me?</li>
|
||||
<li>What can I do with them?</li>
|
||||
<li>How do I override or redefine them in flight?</li>
|
||||
</font>
|
||||
<img src="<?=$workshop_image?>" style="background-color: transparent; border: none;" height="250">
|
||||
<aside class="notes">
|
||||
<p>Let's talk about what they are, how they work, and some of the ways we can use them.</p>
|
||||
</aside>
|
||||
</section>
|
||||
@@ -1,19 +0,0 @@
|
||||
<section id="Variables-WhenAndWhere">
|
||||
|
||||
<h2>Variables</h2>
|
||||
<p>Ansible can work with metadata from various sources and manage their context in the form of variables.</p>
|
||||
<ul>
|
||||
<li>Command line parameters</li>
|
||||
<li>Plays and tasks</li>
|
||||
<li>Files</li>
|
||||
<li>Inventory</li>
|
||||
<li>Discovered facts</li>
|
||||
<li>Roles</li>
|
||||
</ul>
|
||||
</section>
|
||||
<aside class="notes">
|
||||
<p>While automation exists to make it easier to make things repeatable, all of your systems are not exactly alike.</p>
|
||||
<p>Variables are used to store metadata for each host drawing from numerous sources. For example variable may be for things like facts or file paths or package versions.</p>
|
||||
</aside>
|
||||
|
||||
|
||||
@@ -1,39 +0,0 @@
|
||||
<section id="Variable-Precedence">
|
||||
|
||||
<h2>Variable Precedence</h2>
|
||||
<p>The order in which the same variable from different sources will override each other.</p>
|
||||
<div class="columns">
|
||||
<div class="col">
|
||||
<ol>
|
||||
<li>extra vars</li>
|
||||
<li>task vars (only for the task)</li>
|
||||
<li>block vars (only for tasks in block)</li>
|
||||
<li>role and include vars</li>
|
||||
<li>play vars_files</li>
|
||||
<li>play vars_prompt</li>
|
||||
<li>play vars</li>
|
||||
<li>set_facts</li>
|
||||
</ol>
|
||||
</div>
|
||||
<div class="col">
|
||||
<ol start="9" class="col">
|
||||
<li>registered vars</li>
|
||||
<li>host facts</li>
|
||||
<li>playbook host_vars</li>
|
||||
<li>playbook group_vars</li>
|
||||
<li><strong>inventory host_vars</strong></li>
|
||||
<li><strong>inventory group_vars</strong></li>
|
||||
<li>inventory vars</li>
|
||||
<li>role defaults</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
<aside class="notes">
|
||||
<p>If variables of the same name are defined in multiple sources, they get overwritten in a certain and specific order. This is why this variable precedence is important to understand.</p>
|
||||
<p>There are 16 levels of variable precedence as of Ansible 2.x. The <code>extra_vars</code> (passed thru the command-line) always take precedence vs. role defaults which will always get overridden by any other source. The previous inventory example defines vars at 13 and 14 (highlighted in the list) in the variable precedence chain.</p>
|
||||
<p>It's a good idea to limit the different sources where a specific variable is being set. While Ansible's variable precedence handling is comprehensive and well-defined, it can laborious to keep the resolution of multiple sources straight.</p>
|
||||
<p>NOTE: The inventory variables sources showed in the static inventory example a couple of slides back are in bold type.</p>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
<section>
|
||||
<section data-state="title alt" id="RedIntro-TasksInAPlay">
|
||||
<h1>Tasks in a Play</h1>
|
||||
<img src="<?=$workshop_image?>" style="background-color: transparent; border: none;" height="250">
|
||||
<p>Tasks are the powerful pieces within a playbook that state paremeters and instruct the Ansible engine </p>
|
||||
<aside class="notes">
|
||||
</aside>
|
||||
</section>
|
||||
</section>
|
||||
|
||||
|
||||
@@ -1,19 +0,0 @@
|
||||
<section id="TaskModules">
|
||||
|
||||
<h2>Tasks</h2>
|
||||
<p>Tasks are the application of a module to perform a specific unit of work.</p>
|
||||
<ul>
|
||||
<li><b>file</b>: A directory should exist</li>
|
||||
<li><b>yum</b>: A package should be installed</li>
|
||||
<li><b>service</b>: A service should be running</li>
|
||||
<li><b>template</b>: Render a configuration file from a template</li>
|
||||
<li><b>get_url</b>: Fetch an archive file from a URL</li>
|
||||
<li><b>git</b>: Clone a source code repository</li>
|
||||
</ul>
|
||||
<aside class="notes">
|
||||
<p>We've already reviewed modules, the batteries and tools Ansible provides. Tasks are the specific application of a module to perform a unit of automation.</p>
|
||||
<p>Here we see a list of examples of common modules being applied to do something.</p>
|
||||
<aside>
|
||||
</section>
|
||||
|
||||
|
||||
@@ -1,43 +0,0 @@
|
||||
<section id="TasksInAPlay">
|
||||
|
||||
<center><h2>EXAMPLE TASKS IN A PLAY</h2></center>
|
||||
|
||||
<div class="terminal space shadow">
|
||||
<div class="top">
|
||||
<div class="title">Ansible Terminal</div>
|
||||
</div>
|
||||
<pre class="bodylw">
|
||||
<font color="pink">---</font>
|
||||
tasks<font color="red">:</font>
|
||||
<font color="red">-</font> name<font color="red">:</font> Ensure httpd package is present
|
||||
yum<font color="red">:</font>
|
||||
name<font color="red">:</font> httpd
|
||||
state<font color="red">:</font> latest
|
||||
|
||||
<font color="red">-</font> name<font color="red">:</font> Ensure latest index.html file is present
|
||||
copy<font color="red">:</font>
|
||||
src<font color="red">:</font> files/index.html
|
||||
dest<font color="red">:</font> /var/www/html/
|
||||
|
||||
<font color="red">-</font> name<font color="red">:</font> Restart httpd
|
||||
service<font color="red">:</font>
|
||||
name<font color="red">:</font> httpd
|
||||
state<font color="red">:</font> restarted
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<aside class="notes">
|
||||
<p>This example shows the task list of an Ansible playbook.</p>
|
||||
<p>
|
||||
<ol>
|
||||
<li>The first task assures the latest nginx package is installed using yum.</li>
|
||||
<li>The next uses the copy module to assure the latest version of a static home page file has been published.</li>
|
||||
<li>The last task restarts the nginx service with the service module</li>
|
||||
</ol>
|
||||
</p>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
<section id="HandlerTasks">
|
||||
<h2>Handler Tasks</h2>
|
||||
<p>Handlers are special tasks that run at the end of a play if notified by another task when a change occurs.</p>
|
||||
<blockquote>If a package gets installed or updated, notify a service restart task that it needs to run.</blockquote>
|
||||
<aside class="notes">
|
||||
<p>Normal tasks run sequentially; handler tasks run on notification of a change and will only run once at the end of a play.</p>
|
||||
<p>For more information see <a href="http://docs.ansible.com/ansible/playbooks_intro.html#handlers-running-operations-on-change">Handler Tasks</a>.</p>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
|
||||
@@ -1,176 +0,0 @@
|
||||
<section data-transition="slide" id="Handler-Terminal">
|
||||
<h2>Example Handler Task in a Play</h2>
|
||||
<div class="terminal space shadow">
|
||||
<div class="top">
|
||||
<div class="title">Ansible Terminal</div>
|
||||
</div>
|
||||
<pre class="bodymw">
|
||||
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
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<aside class="notes">
|
||||
<p>STUFF</p>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
<section data-transition="none" id="Handler-Mark-Notify">
|
||||
<h2>Example Handler Task in a Play</h2>
|
||||
<div class="terminal space shadow">
|
||||
<div class="top">
|
||||
<div class="title">Ansible Terminal</div>
|
||||
</div>
|
||||
<pre class="bodymw">
|
||||
tasks:
|
||||
|
||||
- name: Ensure httpd package is present
|
||||
yum:
|
||||
name: httpd
|
||||
state: latest
|
||||
<mark> notify: httpd_running </mark>
|
||||
|
||||
- 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
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<aside class="notes">
|
||||
<p>STUFF</p>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
<section data-transition="none" id="Handler-Mark-Handler">
|
||||
<h2>Example Handler Task in a Play</h2>
|
||||
<div class="terminal space shadow">
|
||||
<div class="top">
|
||||
<div class="title">Ansible Terminal</div>
|
||||
</div>
|
||||
<pre class="bodymw">
|
||||
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
|
||||
|
||||
<mark> handlers: </mark>
|
||||
|
||||
- name: httpd_running
|
||||
service:
|
||||
name: httpd
|
||||
state: restarted
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<aside class="notes">
|
||||
<p>STUFF</p>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
|
||||
<section data-transition="none" id="Handler-Mark-HandlerName">
|
||||
<h2>Example Handler Task in a Play</h2>
|
||||
<div class="terminal space shadow">
|
||||
<div class="top">
|
||||
<div class="title">Ansible Terminal</div>
|
||||
</div>
|
||||
<pre class="bodymw">
|
||||
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:
|
||||
|
||||
<mark> - name: httpd_running </mark>
|
||||
service:
|
||||
name: httpd
|
||||
state: restarted
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<aside class="notes">
|
||||
<p>STUFF</p>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
|
||||
<section data-transition="none" id="Handler-Mark-HandlerAndNotify">
|
||||
<h2>Example Handler Task in a Play</h2>
|
||||
<div class="terminal space shadow">
|
||||
<div class="top">
|
||||
<div class="title">Ansible Terminal</div>
|
||||
</div>
|
||||
<pre class="bodymw">
|
||||
tasks:
|
||||
|
||||
- name: Ensure httpd package is present
|
||||
yum:
|
||||
name: httpd
|
||||
state: latest
|
||||
<mark> notify: httpd_running </mark>
|
||||
|
||||
- name: Verify correct config file is present
|
||||
copy:
|
||||
src: files/index.html
|
||||
dest: /var/www/html/index.html
|
||||
|
||||
<mark> handlers:
|
||||
|
||||
- name: httpd_running </mark>
|
||||
service:
|
||||
name: httpd
|
||||
state: restarted
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<aside class="notes">
|
||||
<p>STUFF</p>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
@@ -1,145 +0,0 @@
|
||||
<section data-transition="slide" id="Handlers-Terminal">
|
||||
<h2>Multiple Tasks Calling a Handler in a Play</h2>
|
||||
<div class="terminal space shadow">
|
||||
<div class="top">
|
||||
<div class="title">Ansible Terminal</div>
|
||||
</div>
|
||||
<pre class="bodymw">
|
||||
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
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<aside class="notes">
|
||||
<p>STUFF</p>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
<section data-transition="none" id="Handlers-Mark-Notify">
|
||||
<h2>Multiple Tasks Calling a Handler in a Play</h2>
|
||||
<div class="terminal space shadow">
|
||||
<div class="top">
|
||||
<div class="title">Ansible Terminal</div>
|
||||
</div>
|
||||
<pre class="bodymw">
|
||||
tasks:
|
||||
|
||||
- name: Ensure httpd package is present
|
||||
yum:
|
||||
name: httpd
|
||||
state: latest
|
||||
<mark> notify: httpd_running </mark>
|
||||
|
||||
- name: Verify correct config file is present
|
||||
template:
|
||||
src: files/httpd.conf.j2
|
||||
dest: /etc/httpd/conf/httpd.conf
|
||||
<mark> notify: httpd_running </mark>
|
||||
|
||||
handlers:
|
||||
|
||||
- name: httpd_running
|
||||
service:
|
||||
name: httpd
|
||||
state: restarted
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<aside class="notes">
|
||||
<p>STUFF</p>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
<section data-transition="none" id="Handlers-Mark-Handler">
|
||||
<h2>Multiple Tasks Calling a Handler in a Play</h2>
|
||||
<div class="terminal space shadow">
|
||||
<div class="top">
|
||||
<div class="title">Ansible Terminal</div>
|
||||
</div>
|
||||
<pre class="bodymw">
|
||||
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
|
||||
|
||||
<mark> handlers:
|
||||
|
||||
- name: httpd_running </mark>
|
||||
service:
|
||||
name: httpd
|
||||
state: restarted
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<aside class="notes">
|
||||
<p>STUFF</p>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
|
||||
<section data-transition="none" id="Handlers-Mark-HandlerAndNotify">
|
||||
<h2>Multiple Tasks Calling a Handler in a Play</h2>
|
||||
<div class="terminal space shadow">
|
||||
<div class="top">
|
||||
<div class="title">Ansible Terminal</div>
|
||||
</div>
|
||||
<pre class="bodymw">
|
||||
tasks:
|
||||
|
||||
- name: Ensure httpd package is present
|
||||
yum:
|
||||
name: httpd
|
||||
state: latest
|
||||
<mark> notify: httpd_running </mark>
|
||||
|
||||
- name: Verify correct config file is present
|
||||
template:
|
||||
src: files/httpd.conf.j2
|
||||
dest: /etc/httpd/conf/httpd.conf
|
||||
<mark> notify: httpd_running </mark>
|
||||
|
||||
<mark> handlers:
|
||||
|
||||
- name: httpd_running </mark>
|
||||
service:
|
||||
name: httpd
|
||||
state: restarted
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<aside class="notes">
|
||||
<p>STUFF</p>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
<section data-state="lab alt" id="<?=$labid?>-01">
|
||||
<h1><?=$pretty_htmldir?> LAB STUFF 01</h1>
|
||||
<img src="<?=$workshop_image?>" style="background-color: transparent; border: none;" height="250">
|
||||
<p>Let's do some stuff with tasks.</p>
|
||||
</section>
|
||||
<section data-state="lab alt" id="<?=$labid?>-02">
|
||||
<h1><?=$pretty_htmldir?> LAB STUFF 02</h1>
|
||||
<img src="<?=$workshop_image?>" style="background-color: transparent; border: none;" height="250">
|
||||
<p>Let's do some more stuff with tasks.</p>
|
||||
</section>
|
||||
@@ -1,11 +0,0 @@
|
||||
<section>
|
||||
<section data-state="title alt" id="RedIntro-MoreAdvancedPlaybookPieces">
|
||||
<h1>ANATOMY OF A PLAYBOOK</h1>
|
||||
<img src="<?=$workshop_image?>" style="background-color: transparent; border: none;" height="250">
|
||||
<p>Let's dissect the basics of a playbook and make sure we understand the core components.</p>
|
||||
<aside class="notes">
|
||||
</aside>
|
||||
</section>
|
||||
</section>
|
||||
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
<section id="Plays-And-Playbooks">
|
||||
|
||||
<h2>Plays & Playbooks</h2>
|
||||
<p>Plays are ordered sets of tasks to execute against host selections from your inventory. A playbook is a file containing one or more plays.</p>
|
||||
<aside class="notes">
|
||||
<p>Playbooks are text files that contain one or more plays that are expressed in YAML. A play defines target hosts and a task list that are executed sequentially (i.e top to bottom) to achieve a certain state on those hosts.</p>
|
||||
<p>For more details see <a href="http://docs.ansible.com/ansible/playbooks.html">the Playbook page</a> in the Ansible documentation.</p>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
|
||||
@@ -1,40 +0,0 @@
|
||||
<section id="PlaybookExample">
|
||||
|
||||
<center><h2>PLAYBOOK EXAMPLE</h2></center>
|
||||
|
||||
<div class="terminal space shadow">
|
||||
<div class="top">
|
||||
<div class="title">Ansible Terminal</div>
|
||||
</div>
|
||||
<pre class="bodymw">
|
||||
- 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
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<aside class="notes">
|
||||
<p>Here we can see an example of a simple but complete Ansible play. The slides that follow will explore each of these parts and what they do.</p>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
@@ -1,39 +0,0 @@
|
||||
<section id="HumanMeaningfulNaming">
|
||||
|
||||
<center><h2>HUMAN MEANINGFUL NAMING</h2></center>
|
||||
|
||||
<div class="terminal space shadow">
|
||||
<div class="top">
|
||||
<div class="title">Ansible Terminal</div>
|
||||
</div>
|
||||
<pre class="bodymw">
|
||||
- <mark>name: Ensure apache is installed and started</mark>
|
||||
hosts: web
|
||||
become: yes
|
||||
|
||||
tasks:
|
||||
- <mark>name: Ensure httpd package is present</mark>
|
||||
yum:
|
||||
name: httpd
|
||||
state: latest
|
||||
|
||||
- <mark>name: Ensure latest index.html file is present</mark>
|
||||
copy:
|
||||
src: files/index.html
|
||||
dest: /var/www/html/
|
||||
|
||||
- <mark>name: Ensure httpd is started</mark>
|
||||
service:
|
||||
name: httpd
|
||||
state: started
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<aside class="notes">
|
||||
<p>Every play and each task in it can be assigned a name that describes its objective in the automation workflow and is output during execution.</p>
|
||||
<p>It's best practice to always name your plays and tasks. Adding name with a human-meaningful description better communicates the intent to users when running a play.</p>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
@@ -1,38 +0,0 @@
|
||||
<section id="HostSelector">
|
||||
|
||||
<center><h2>HOST SELECTOR</h2></center>
|
||||
|
||||
<div class="terminal space shadow">
|
||||
<div class="top">
|
||||
<div class="title">Ansible Terminal</div>
|
||||
</div>
|
||||
<pre class="bodymw">
|
||||
- name: Ensure apache is installed and started
|
||||
<mark>hosts: web</mark>
|
||||
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
|
||||
</pre>
|
||||
</div>
|
||||
<aside class="notes">
|
||||
<p>The Ansible play host selector defines which nodes in the inventory the automation is targeting.</p>
|
||||
<p>In this example, a single group of "web" is being targeted. Ansible supports targeting intersections, unions and filters of multiple groups or hosts though.</p>
|
||||
<p>For more details see <a href="http://docs.ansible.com/ansible/intro_patterns.html">the host selector Patterns page</a> in the Ansible documentation.</p>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
|
||||
@@ -1,37 +0,0 @@
|
||||
<section id="PrivilegeEscalation">
|
||||
|
||||
<center><h2>PRIVILEGE ESCALATION</h2></center>
|
||||
|
||||
<div class="terminal space shadow">
|
||||
<div class="top">
|
||||
<div class="title">Ansible Terminal</div>
|
||||
</div>
|
||||
<pre class="bodymw">
|
||||
- name: Ensure apache is installed and started
|
||||
hosts: web
|
||||
<mark>become: yes</mark>
|
||||
|
||||
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
|
||||
</pre>
|
||||
</div>
|
||||
<aside class="notes">
|
||||
<p>Ansible allows you to "become" another user or with elevated rights to execute a task or an entire play (shown above). This is done using existing privilege escalation tools, which you probably already use or have configured, like sudo (the default), su, pfexec, doas, pbrun, dzdo, ksu and others.</p>
|
||||
<p>For more details see <a href="http://docs.ansible.com/ansible/become.html">the Privilege Escalation page</a> in the Ansible documentation.</p>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
|
||||
@@ -1,46 +0,0 @@
|
||||
<section id="PlayVariables">
|
||||
<center><h2>PLAY VARIABLES</h2></center>
|
||||
|
||||
<div class="terminal space shadow">
|
||||
<div class="top">
|
||||
<div class="title">Ansible Terminal</div>
|
||||
</div>
|
||||
<pre class="bodymw">
|
||||
- name: Ensure apache is installed and started
|
||||
hosts: web
|
||||
become: yes
|
||||
<mark> vars: </mark>
|
||||
<mark> http_port: 80 </mark>
|
||||
<mark> http_docroot: /var/www/gokev.com </mark>
|
||||
|
||||
tasks:
|
||||
- name: Ensure httpd package is present
|
||||
yum:
|
||||
name: httpd
|
||||
state: latest
|
||||
|
||||
- name: Verify correct config file is present
|
||||
template:
|
||||
src: <mark>templates/httpd.conf.j2</mark>
|
||||
dest: /etc/httpd/conf/httpd.conf
|
||||
|
||||
- name: Ensure httpd is started
|
||||
service:
|
||||
name: httpd
|
||||
state: started
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<div style="position:absolute; right: -350px; top: 275px;">
|
||||
<p class="fragment current-visible" data-fragment-index="1">
|
||||
<img src="images/httpd_conf_template.png" width="1200">
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<aside class="notes">
|
||||
<p>Variables are used to store metadata for each host drawing from numerous sources. Here we see another one of those sources, a variable "http_port" that has been embedded in a play.</p>
|
||||
<p>Recalling the previous variable precedence slide, play variables are number 7 in Ansible's the precedence chain.</p>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
|
||||
@@ -1,40 +0,0 @@
|
||||
<section id="PlaybookTasks">
|
||||
<center><h2>PLAYBOOK TASKS</h2></center>
|
||||
|
||||
<div class="terminal space shadow">
|
||||
<div class="top">
|
||||
<div class="title">Ansible Terminal</div>
|
||||
</div>
|
||||
<pre class="bodymw">
|
||||
- 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
|
||||
<mark>yum:</mark>
|
||||
<mark>name: httpd</mark>
|
||||
<mark>state: latest</mark>
|
||||
|
||||
- name: Verify correct config file is present
|
||||
<mark>template:</mark>
|
||||
<mark>src: templates/httpd.conf.j2</mark>
|
||||
<mark>dest: /etc/httpd/conf/httpd.conf</mark>
|
||||
|
||||
- name: Ensure httpd is started
|
||||
<mark>service:</mark>
|
||||
<mark>name: httpd</mark>
|
||||
<mark>state: started</mark>
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
|
||||
<aside class="notes">
|
||||
<p>Here we see modules, such as yum, being applied to a to perform a unit of automation such as to assure the latest httpd package is present on a host.</p>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
<section data-state="lab alt" id="<?=$labid?>-01">
|
||||
<h1><?=$pretty_htmldir?> LAB STUFF 01</h1>
|
||||
<img src="<?=$workshop_image?>" style="background-color: transparent; border: none;" height="250">
|
||||
<p>Let's do some stuff with advanced pieces.</p>
|
||||
</section>
|
||||
<section data-state="lab alt" id="<?=$labid?>-02">
|
||||
<h1><?=$pretty_htmldir?> LAB STUFF 02</h1>
|
||||
<img src="<?=$workshop_image?>" style="background-color: transparent; border: none;" height="250">
|
||||
<p>Let's do some more stuff with advanced pieces!</p>
|
||||
</section>
|
||||
@@ -1,11 +0,0 @@
|
||||
<section>
|
||||
<section data-state="title alt" id="RedIntro-DoingMoreWithPlaybooks">
|
||||
<h1>DO MORE.</h1>
|
||||
<img src="<?=$workshop_image?>" style="background-color: transparent; border: none;" height="250">
|
||||
<p>Let's get a bit more advanced with some rich functionality that Ansible provides.</p>
|
||||
<aside class="notes">
|
||||
</aside>
|
||||
</section>
|
||||
</section>
|
||||
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
<section id="Doing-More-With-Playbooks">
|
||||
<h2>Doing More with Playbooks</h2>
|
||||
<p>Here are some more essential playbook features that you can apply:</p>
|
||||
<ul>
|
||||
<li>Templates</li>
|
||||
<li>Loops</li>
|
||||
<li>Conditionals</li>
|
||||
<li>Tags</li>
|
||||
<li>Blocks</li>
|
||||
</ul>
|
||||
<aside class="notes">
|
||||
<p>We only have covered the most essential capabilities of what can be done with a playbook so far.</p>
|
||||
<p>Here we list a few more though this is still far from all there is. There's many other powerful playbook features for handling less common though vital automation workflows. No need to learn everything at once. You can start small and pick up more features over time as you need them.</p>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
|
||||
@@ -1,21 +0,0 @@
|
||||
<section id="Templates-Explained">
|
||||
<h2>Templates</h2>
|
||||
<p>Ansible embeds the <a href="http://jinja.pocoo.org/docs/">Jinja2 templating engine</a> that can be used to dynamically:</p>
|
||||
<ul>
|
||||
<li>Set and modify play variables</li>
|
||||
<li>Conditional logic</li>
|
||||
<li>Generate files such as configurations from variables</li>
|
||||
</ul>
|
||||
<aside class="notes">
|
||||
<p>Templates are a vital feature provided by the Jinja2 template engine, a powerful piece of software independent of Ansible. Ansible makes this usage as seamless and transparent as possible. Most will not realize they are doing templating when they develop plays with Ansible.</p>
|
||||
<p>We don't show any specific template examples at the moment because we'll have plenty of opportunity to see templates in action as we cover other topics.</p>
|
||||
<p>In all actuality, what is covered here only touches upon a few of its most basic features. To go deeper see these docs:</p>
|
||||
<ul>
|
||||
<li><a href="http://jinja.pocoo.org/docs/dev/templates/">Jinja2 Template Designer Documentation</a></li>
|
||||
<li><a href="http://docs.ansible.com/ansible/playbooks_filters.html">Ansible Jinja2 Filters</a></li>
|
||||
<li><a href="http://docs.ansible.com/ansible/playbooks_tests.html">Ansible Jinja2 Tests</a></li>
|
||||
</ul>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
|
||||
@@ -1,33 +0,0 @@
|
||||
<section id="PlaybookLoops">
|
||||
<center><h2>WORKING WITH LOOPS</h2>
|
||||
<p>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.</p>
|
||||
</center>
|
||||
|
||||
<div class="terminal space shadow">
|
||||
<div class="top">
|
||||
<div class="title">Ansible Terminal</div>
|
||||
</div>
|
||||
<pre class="bodylw">
|
||||
- yum:
|
||||
name: <mark>"{{ item }}"</mark>
|
||||
state: latest
|
||||
<mark>with_items:</mark>
|
||||
<mark>- httpd</mark>
|
||||
<mark>- mysql-server</mark>
|
||||
<mark>- php56-mysqlnd</mark>
|
||||
<mark>- php56-common</mark>
|
||||
<mark>- php56-gd</mark>
|
||||
<mark>- php56-soap</mark>
|
||||
<mark>- php56-xml</mark>
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<aside class="notes">
|
||||
<p>This example demonstrates a basic loop with <code>with_items</code>. The loop sets a variable called "item", a template variable courtesy of the embedded Jinja2 template engine, with the list value that is in context.</p>
|
||||
<p>There are many different and specialized types of task loops to work with. See the <a href="http://docs.ansible.com/ansible/playbooks_loops.html">Loops documentation</a> to go deeper.</p>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
<section id="PlaybookConditionals">
|
||||
<center><h2>WORKING WITH CONDITIONALS</h2>
|
||||
<p>Ansible supports the conditional execution of a task based on the run-time evaluation of variable, fact, or previous task result.</p>
|
||||
</center>
|
||||
|
||||
<div class="terminal space shadow">
|
||||
<div class="top">
|
||||
<div class="title">Ansible Terminal</div>
|
||||
</div>
|
||||
<pre class="bodylw">
|
||||
- yum:
|
||||
name: httpd
|
||||
state: latest
|
||||
<mark>when: ansible_os_family == "RedHat"</mark>
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
|
||||
<aside class="notes">
|
||||
<p>Conditionals are another instance of Jinja2 in action within Ansible plays themselves. In the provided example "ansible_os_family" is a fact variable Ansible will set.</p>
|
||||
<p>There are other forms of conditional clauses, but <code>when</code> is usually all that is needed.</p>
|
||||
<p>NOTE: Conditional clauses are considered to be raw Jinja2 expression without double curly braces.</p>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
|
||||
@@ -1,40 +0,0 @@
|
||||
<section id="PlaybookTags">
|
||||
<center><h2>WORKING WITH TAGS</h2>
|
||||
<p>Tags are useful to be able to run a subset of a playbook on-demand.</p>
|
||||
</center>
|
||||
|
||||
<div class="terminal space shadow">
|
||||
<div class="top">
|
||||
<div class="title">Ansible Terminal</div>
|
||||
</div>
|
||||
<pre class="bodylw">
|
||||
- yum:
|
||||
name: "{{ item }}"
|
||||
state: latest
|
||||
with_items:
|
||||
- httpd
|
||||
- php56
|
||||
<mark>tags:</mark>
|
||||
<mark>- packages</mark>
|
||||
|
||||
- template:
|
||||
src: templates/httpd.conf.j2
|
||||
dest: /etc/httpd/conf/httpd.conf
|
||||
<mark>tags:</mark>
|
||||
<mark>- configuration</mark>
|
||||
</pre>
|
||||
</div>
|
||||
<div style="position:absolute; right: -350px; top: 275px;">
|
||||
<p class="fragment current-visible" data-fragment-index="1">
|
||||
<img src="images/ansible_tagging.png" width="1200">
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
||||
<aside class="notes">
|
||||
<p>In the provided example, if the playbook were run with <code>--tags "packages"</code> the yum task would execute and the template task would be skipped. If the playbook were run with <code>--tags "configuration"</code> the opposite would happen. Without a <code>--tags</code> both tasks would execute like normal.</p>
|
||||
<p>Tags can be seen as a simple though specialized form of conditional statement designed to enable the execution of a subset tasks. Tags are a bit more than simple boolean flags though. To dig deeper see the <a href="http://docs.ansible.com/ansible/playbooks_tags.html">playbook Tags documentation</a>.</p>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
<section id="PlaybookBlocks">
|
||||
<center><h2>WORKING WITH BLOCKS</h2>
|
||||
<p>Blocks cut down on repetitive task directives, allow for logical grouping of tasks and even in play error handling.</p>
|
||||
</center>
|
||||
|
||||
<div class="terminal space shadow">
|
||||
<div class="top">
|
||||
<div class="title">Ansible Terminal</div>
|
||||
</div>
|
||||
<pre class="bodylw">
|
||||
<mark>block:</mark>
|
||||
- yum:
|
||||
name: "{{ item }}"
|
||||
state: latest
|
||||
with_items:
|
||||
- httpd
|
||||
- php56
|
||||
|
||||
- template:
|
||||
src: templates/httpd.conf.j2
|
||||
dest: /etc/httpd/conf/httpd.conf
|
||||
<mark>when: ansible_os_family == "RedHat"</mark>
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
|
||||
<aside class="notes">
|
||||
<p>In the provided example we use a block to group two tasks that are to be conditional executed if a host is running a Red Hat family linux using one conditional clause. In practice, we could have copied the <code>when</code> clause onto each task and gotten same result. Using a block, there is less clutter thereby less to maintain and nothing to keep in sync. The utility of using a block increases the more tasks and clauses are in use.</p>
|
||||
<p>Blocks have a play in error handling and automating roll backs that we won't get into here given the scope of that topic.</p>
|
||||
<p>See the <a href="http://docs.ansible.com/ansible/playbooks_blocks.html">documentation on blocks</a> to dig deeper.</p>
|
||||
</section>
|
||||
</section>
|
||||
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
<section data-state="lab alt" id="<?=$labid?>-01">
|
||||
<h1><?=$pretty_htmldir?> LAB STUFF 01</h1>
|
||||
<img src="<?=$workshop_image?>" style="background-color: transparent; border: none;" height="250">
|
||||
<p>Let's do some stuff with advanced pieces.</p>
|
||||
</section>
|
||||
<section data-state="lab alt" id="<?=$labid?>-02">
|
||||
<h1><?=$pretty_htmldir?> LAB STUFF 02</h1>
|
||||
<img src="<?=$workshop_image?>" style="background-color: transparent; border: none;" height="250">
|
||||
<p>Let's do some more stuff with advanced pieces!</p>
|
||||
</section>
|
||||
@@ -1,16 +0,0 @@
|
||||
<section>
|
||||
|
||||
<section data-state="title alt" id="RedIntro-AnsibleVault">
|
||||
<h1>ANSIBLE VAULT: <br/>ENCRYPTION</h1>
|
||||
<p>Using ansible-vault to keep your secrets a secret.</p><br>
|
||||
|
||||
<img src="<?=$workshop_image?>" style="background-color: transparent; border: none;" height="250">
|
||||
<aside class="notes">
|
||||
<p>Ansible includes a very powerful encryption method for times when you need to include sensitive information in a playbook in an encrypted format.</p>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
|
||||
</section>
|
||||
|
||||
|
||||
@@ -1,52 +0,0 @@
|
||||
<section id="VaultTwoTypes">
|
||||
<center>
|
||||
<h1>ANSIBLE VAULT</h1>
|
||||
<p>Encrypt an entire file or just a string inside a non-encrypted file.</p>
|
||||
</center>
|
||||
<div class="terminal space shadow">
|
||||
<div class="top">
|
||||
<div class="title">Ansible Terminal : Encrypted File</div>
|
||||
</div>
|
||||
<pre class="bodymw">
|
||||
<font color="gray"><?=$terminal_prompt?></font> cat ronin_secret.yml
|
||||
|
||||
$ANSIBLE_VAULT;1.1;AES256
|
||||
61336361663664353737663637366334383030393736353532345
|
||||
66532383233393438653965633333326632363935663132326163
|
||||
306637626335643365630a653066396533313738316266653
|
||||
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="terminal space shadow">
|
||||
<div class="top">
|
||||
<div class="title">Ansible Terminal : Encrypted Variable</div>
|
||||
</div>
|
||||
<pre class="bodymw">
|
||||
<font color="gray"><?=$terminal_prompt?></font> cat fonzie_secret.yml
|
||||
|
||||
fonzie_show: Happy Days
|
||||
fonzie_secret: !vault |
|
||||
$ANSIBLE_VAULT;1.1;AES256
|
||||
6632363237353065633237633937353164646564633
|
||||
6376461326235386539663733343539666234332664
|
||||
6664616266316339383838373734653364346163633
|
||||
6663864366534633063303062363238393139
|
||||
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</p>
|
||||
|
||||
<aside class="notes">
|
||||
<p>We can encrypt an entire file or just a string inside an encrypted file.</p>
|
||||
<p>We'll call the FULL FILE ENCRYPTION in this example, "Ronin".</p>
|
||||
<p>We'll call the ENCRYPTED STRING in a plain-text file, "Fonzie"</p>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
<section>
|
||||
|
||||
<section data-state="title alt" id="RedIntro-AnsibleVault-Ronin">
|
||||
<h1>ANSIBLE VAULT: <br/>ENCRYPTED FILE EXAMPLE</h1>
|
||||
<p>(Variables In An Encrypted File)</p><br>
|
||||
|
||||
<img src="<?=$workshop_image?>" style="background-color: transparent; border: none;" height="250">
|
||||
<p>Encrypting Sensitive Variables Inside Your Playbooks With An Entire Encrypted YAML File</p>
|
||||
<aside class="notes">
|
||||
<p>Ansible includes a very powerful encryption method for times when you need to include sensitive information in a playbook in an encrypted format.</p>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
|
||||
</section>
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user