Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Sep 26th, devel to master release merge #460

Merged
merged 104 commits into from
Sep 26, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
104 commits
Select commit Hold shift + click to select a range
8b7e7dd
Add new RHEL deck
liquidat Sep 10, 2019
1c5aa1f
Fix curly brackets display
liquidat Sep 10, 2019
d466939
Fix missing dir
liquidat Sep 10, 2019
5408eb3
Merge pull request #416 from liquidat/template-fix
IPvSean Sep 10, 2019
5f308c3
Merge pull request #415 from liquidat/new_rhel_deck
IPvSean Sep 10, 2019
8b8c9db
Merge pull request #418 from liquidat/roles-files-fix
IPvSean Sep 10, 2019
a4bd572
Add gw mng auto merger
liquidat Sep 11, 2019
5c9a473
Reorder tasks in security addhost
liquidat Sep 11, 2019
1a06a36
Update README.md
IPvSean Sep 11, 2019
a46e43c
set selinux permissive because current policy breaks snort
maxamillion Sep 11, 2019
e60f3df
Merge pull request #419 from liquidat/security/cp_auto_merge_mgmt_ngfw
IPvSean Sep 11, 2019
b65e945
Merge pull request #421 from maxamillion/security/set_snort_selinux_p…
Sep 11, 2019
8204768
Update hosts
termlen0 Sep 11, 2019
061d355
Update ansible.cfg.j2
termlen0 Sep 11, 2019
2362858
Add istools to snort
liquidat Sep 12, 2019
c3f959b
Add state check
liquidat Sep 13, 2019
32513fc
Fix memory problems with windows workstation running smartconsole
liquidat Sep 13, 2019
6035eb5
Merge pull request #420 from liquidat/security/reorder_addhost_tasks
IPvSean Sep 13, 2019
fc94017
Merge pull request #422 from termlen0/patch-3
IPvSean Sep 13, 2019
1c1d798
Merge pull request #424 from liquidat/snort/add-idstools
IPvSean Sep 13, 2019
ed507c9
Merge pull request #425 from liquidat/security/fix_auto_merge_public_ip
IPvSean Sep 13, 2019
e65a27e
Merge pull request #426 from liquidat/security/fix_win_ram
IPvSean Sep 13, 2019
51f3635
Merge pull request #423 from termlen0/patch-4
IPvSean Sep 13, 2019
f23057e
Update hosts
termlen0 Sep 13, 2019
dd2cccb
Add fixes from Craig
liquidat Sep 13, 2019
0c98461
Merge pull request #427 from termlen0/patch-5
IPvSean Sep 13, 2019
7052a27
Merge pull request #428 from liquidat/exercise/section1_fixes_from_craig
IPvSean Sep 13, 2019
620ae62
narrow ec2 instance filter to avoid globbing
liquidat Sep 13, 2019
e27217b
Merge pull request #429 from liquidat/security/narrow_ec2_filters
IPvSean Sep 13, 2019
8ab119b
syncing servicenow demo rewrite
IPvSean Sep 15, 2019
8d6b734
Update README.md
IPvSean Sep 15, 2019
35f9213
Update README.md
IPvSean Sep 11, 2019
bdc289d
syncing servicenow demo rewrite
IPvSean Sep 15, 2019
06aa50e
Update README.md
IPvSean Sep 15, 2019
672141c
Merge branch 'gh-pages' of https://github.com/IPvSean/workshops into …
IPvSean Sep 15, 2019
1aa89a1
Merge pull request #431 from IPvSean/gh-pages
IPvSean Sep 16, 2019
3f24ea6
Fix 503 error during CP deployment
liquidat Sep 16, 2019
a5caa5e
Increase wait time
liquidat Sep 16, 2019
433dab7
Reorder tasks to speed up deployment
liquidat Sep 16, 2019
a4a762b
missing closing quotes - line 66
payalsin Sep 16, 2019
aaf205b
Make instructor inventories actually usable
liquidat Sep 16, 2019
86cd480
Pin Windows image date
liquidat Sep 17, 2019
4b8e1ae
Fixing multiple typos, grammar, etc.
Valien Sep 17, 2019
09a7178
Merge pull request #436 from liquidat/security/pin_windows_image_date
Sep 17, 2019
d3f9408
Merge pull request #434 from liquidat/security/add_windows_pwd_to_inv…
Sep 17, 2019
19f7cd4
Merge pull request #432 from liquidat/security/fix_503_cp_deploy
Sep 17, 2019
b40c9cf
Merge pull request #437 from Valien/devel
IPvSean Sep 18, 2019
11a067c
Added Tower module
ericzji Aug 1, 2019
3d4b14e
.
ericzji Aug 1, 2019
8329f3e
added Tower
ericzji Aug 5, 2019
1504778
added image
ericzji Aug 5, 2019
33f011d
new modules
ericzji Aug 16, 2019
abb169b
add
ericzji Aug 16, 2019
031147d
.
ericzji Aug 17, 2019
8db2fea
- show nventory entry for the web servers
ericzji Aug 28, 2019
f1c0c21
.
ericzji Aug 28, 2019
ba46a0a
.
ericzji Aug 28, 2019
14a8807
added virtual server workflow
ericzji Sep 4, 2019
8182235
readme
ericzji Sep 4, 2019
999f15e
update workflow 4.2
ericzji Sep 4, 2019
e63a802
added workflow for node maintenance
ericzji Sep 5, 2019
87f4472
typo
ericzji Sep 5, 2019
3b5f100
review
ericzji Sep 6, 2019
2a2dba0
1st full draft
ericzji Sep 6, 2019
784e107
4.0 updated
ericzji Sep 11, 2019
4ede94d
integrate review comments
ericzji Sep 11, 2019
da40516
table
ericzji Sep 11, 2019
ea12514
BIG-IP login
ericzji Sep 12, 2019
0e54650
password
ericzji Sep 12, 2019
78a8095
updated images
ericzji Sep 13, 2019
3225c13
update
ericzji Sep 13, 2019
dda4747
playbook link move
ericzji Sep 13, 2019
4d99d4d
directory
ericzji Sep 13, 2019
605859e
minor
ericzji Sep 13, 2019
ed1c17d
revert config to make it reafy for lab4.3
ericzji Sep 13, 2019
24f8d6e
Remove hardcoded windows_password
danielmellado Sep 17, 2019
abb5eb9
Merge pull request #440 from danielmellado/fix_hardcoded
Sep 18, 2019
338c0e6
Add notes about warning dialogs, thanks to dmellado
liquidat Sep 18, 2019
26b4bff
Merge pull request #433 from payalsin/patch-5
Sep 18, 2019
f3fe0b8
adding attack machine/subnet/simulation, fix QRadar
maxamillion Sep 10, 2019
15473ca
Finalize CP and routing deployment
liquidat Sep 18, 2019
77fa045
add fact settings per SIEM
maxamillion Sep 19, 2019
cdec080
Merge pull request #430 from maxamillion/security/attack_simulation
IPvSean Sep 20, 2019
2fb702c
Merge pull request #443 from liquidat/exercise/explain_windows_error_…
IPvSean Sep 20, 2019
02eb112
Bump to version 3.5.3
Spredzy Sep 20, 2019
406a9d9
Open UDP port 514
liquidat Sep 21, 2019
b2b2e46
Set snort device to eth1
liquidat Sep 21, 2019
a0fff15
We need daemonize package on attacker
liquidat Sep 22, 2019
398b80d
Replace windows password with variable - again
liquidat Sep 22, 2019
14a3f4c
Remove tasks which are always skipped
liquidat Sep 23, 2019
4ffd7ab
Move smartconsole download link to s3
liquidat Sep 23, 2019
738f1bc
Merge pull request #439 from ericzji/master
IPvSean Sep 23, 2019
708587d
Add use cases 1,2 and 3
liquidat Sep 10, 2019
3407b34
Merge pull request #450 from liquidat/security/snort_qradar_fix
IPvSean Sep 23, 2019
d700c68
Merge pull request #452 from liquidat/exercise/usecase1
IPvSean Sep 23, 2019
8189038
Polishing messaging
liquidat Sep 23, 2019
cae2aab
Merge pull request #453 from liquidat/exercise/polishing
Sep 24, 2019
fbcc45a
Fix typo in snort rule
liquidat Sep 24, 2019
9b94a93
Merge pull request #455 from liquidat/exercise/fix_snort_rule
Sep 24, 2019
0ac380d
Better error management in security exercises
danielmellado Sep 24, 2019
b53465d
Merge pull request #456 from liquidat/exercise/daniel_fixes
Sep 24, 2019
f8de114
Add deck and main readme entry
liquidat Sep 24, 2019
2321bb8
Fix link to README.md
liquidat Sep 24, 2019
98d107d
Merge pull request #457 from liquidat/exercise/add_deck_and_main_entry
IPvSean Sep 26, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,10 @@ The Red Hat Ansible Automation Workshops project is intended for effectively dem

| Workshop | Presentation Deck | Exercises | Workshop Type Var |
|---|---|---|---|
| **Ansible Red Hat Enterprise Linux Workshop** <br> focused on automating Linux platforms like Red Hat Enterprise Linux | [Deck](https://ansible.github.io/workshops/decks/ansible_technical.pdf)<br>[Ansible Tower](https://ansible.github.io/workshops/decks/tower_intro.pdf) | [Exercises](./exercises/ansible_rhel) | `workshop_type: rhel` |
| **Ansible Network Automation Workshop** <br> focused on router and switch platforms like Arista, Cisco, Juniper | [Deck](https://ansible.github.io/workshops/decks/ansible_network.pdf) | [Exercises](./exercises/ansible_network) | `workshop_type: networking` |
| **Ansible F5 Workshop** <br> focused on automation of F5 BIG-IP | [Deck](https://ansible.github.io/workshops/decks/ansible_f5.pdf) | [Exercises](./exercises/ansible_f5) | `workshop_type: f5` |
| **Ansible Red Hat Enterprise Linux Workshop** <br> focused on automating Linux platforms like Red Hat Enterprise Linux | [Deck](./decks/ansible_technical.pdf) | [Exercises](./exercises/ansible_rhel) | `workshop_type: rhel` |
| **Ansible Network Automation Workshop** <br> focused on router and switch platforms like Arista, Cisco, Juniper | [Deck](./decks/ansible_network.pdf) | [Exercises](./exercises/ansible_network) | `workshop_type: networking` |
| **Ansible F5 Workshop** <br> focused on automation of F5 BIG-IP | [Deck](./decks/ansible_f5.pdf) | [Exercises](./exercises/ansible_f5) | `workshop_type: f5` |
| **Ansible Security Automation** <br> focused on automation of security tools like Check Point Firewall, IBM QRadar and the IDS Snort | [Deck](./decks/ansible_security.pdf) | [Exercises](./exercises/ansible_security) | `workshop_type: security` |

## LAB PROVISIONER
- [AWS Lab Provisioner](provisioner) - playbook that spins up instances on AWS for students to perform the exercises provided above.
Expand Down
2 changes: 1 addition & 1 deletion decks/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ All slides are currently managed internally at Red Hat Ansible with Google Slide

- [Ansible Network Automation](https://docs.google.com/presentation/d/1pMnLskQjDywwglZRKXS16rPFJip94obyzND_iKzaidQ/edit?usp=sharing)
- [Ansible F5 Automation](https://docs.google.com/presentation/d/1eSZHx_tVZ59U-nAYysehEXsSAJgLBr9SrgpjOfLUg84)
- [Red Hat Ansible Automation Technical Deck](https://docs.google.com/presentation/d/1sa_O12EIRG-fdChArYJf9HZe6wKDfqjnIAiH3udL39s)
- [Ansible RHEL Automation](https://docs.google.com/presentation/d/13V_-MfJMslBJWGohllS9NErapClMAKY8iOP4_BI12xI)
- [Ansible Best Practices](https://docs.google.com/presentation/d/1khWEuTXGQbJ-hQ4cneigDgAJ__tPccch7Q5Xqj1rkio)

**Why use Google Slides?**
Expand Down
Binary file not shown.
Binary file added decks/ansible_security.pdf
Binary file not shown.
39 changes: 39 additions & 0 deletions demos/servicenow/2-closed_loop_incident_mgmt/EXTRA.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# Notes from Ajay

This is how you grab the correct Javascript from ServiceNow and edit it:

- Click on the *Auto-generate variable* link
![](../images/rest_setup6.png)

- Click the *Preview Script Usage* link at the bottom and copy the contents.
![](../images/rest_setup7.png)

```javascript
try {
var r = new sn_ws.RESTMessageV2('Ansible Tower Demo', 'Launch compliance fix');
r.setStringParameterNoEscape('INC', '');

//override authentication profile
//authentication type ='basic'/ 'oauth2'
//r.setAuthentication(authentication type, profile name);

//set a MID server name if one wants to run the message on MID
//r.setMIDServer('MY_MID_SERVER');

//if the message is configured to communicate through ECC queue, either
//by setting a MID server or calling executeAsync, one needs to set skip_sensor
//to true. Otherwise, one may get an intermittent error that the response body is null
//r.setEccParameter('skip_sensor', true);

var response = r.execute();
var responseBody = response.getBody();
var httpStatus = response.getStatusCode();
}
catch(ex) {
var message = ex.message;
}

```


- Click submit
217 changes: 125 additions & 92 deletions demos/servicenow/2-closed_loop_incident_mgmt/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,10 @@ Thus a BSS (Business Services System) is able to maintain a statement of record
- [Step 1 - Connect to workbench](#step-1---connect-to-workbench)
- [Step 2 - Provide ServiceNow credentials](#step-2---provide-servicenow-credentials)
- [Step 3 - Run demo setup playbook](#step-3---run-demo-setup-playbook)

- [Explanation](#explanation)
- [Step 4 - The named URL](#step-4---the-named-url)
- [Step 5 - Setup ServiceNow REST Message](#step-5---setup-servicenow-rest-message)
- [Step 6 - Setup ServiceNow Business Rule](#step-6---setup-servicenow-business-rule)
- [Running the Demo](#running-the-demo)

## Step 1 - Connect to workbench

Expand Down Expand Up @@ -56,121 +58,151 @@ Run the `demo_setup.yml` playbook as follows. This will create the necessary job
```

After this step, log into your tower instance and verify that the 2 "SNOW" job templates are present:
- **SNOW-Demo-Compliance-Check** - this Job Template will check for the banner being in compliance. It will not modify the banner.
- **SNOW-Demo-Compliance-Fix** - this Job Template will change the banner to the desired banner

screenshot of Job Templates in Red Hat Ansible Tower:
![relevant job template picture](../images/job_templates.png)

## Step 5
## Step 4 - The named URL

> *Extremely important: Make sure you use FQDNs that have valid SSL certs for the demo to work*

Navigate to the API URI (api/v2/job_templates/) of your tower instance. For example: https://student1.snow-demo.redhatgov.io/api/v2/job_templates/ and identify the API endpoint for the **SNOW-Demo-Compliance-Fix** job template.
The Ansible Tower API has the concept of a named URL (`named_url`). The named URL feature allows you to access Tower resources via resource-specific human-readable identifiers. More info can be found in the documentation at: https://docs.ansible.com/ansible-tower/latest/html/towerapi/access_resources.html

The URL for the **SNOW-Demo-Compliance-Fix** will be:

```
$TOWER_URL/api/v2/job_templates/SNOW-Demo-Compliance-Fix/launch
```

For example, it is https://student1.snow-demo.redhatgov.io/api/v2/job_templates/8 in my instance.
for example:

Adding a "launch" URI will make this template executable remotely. Record this URL endpoint as we will need it in a further step. For example: https://student1.snow-demo.redhatgov.io/api/v2/job_templates/8/launch
```
https://student1.sean_workshop.rhdemo.io/api/v2/job_templates/SNOW-Demo-Compliance-Fix/launch
```

## Step 5 - Setup ServiceNow REST Message

- In the ServiceNow instance, navigate to **System Web Services >> Outbound >> REST Message**

## Step 5
Now, in your servicenow instance, navigate to **System Web Services >> Outbound >> REST Message**
> You can also use the search bar at the top left and search for "rest message"

> You can also use the search bar at the top left and search for "rest message"
![](../images/restmsg.png)

![](../images/restmsg.png)

- Click on **New** at the top of the page:

- Click on *New* at the top of the page:
![](../images/newrest.png)

- Give it a name and set the endpoint to the URL we captured in the previous step.
- Under the *Authentication* tab, chose "Basic" Authentication type.
- For the Basic auth profile, click on the search bar. This will open yet another window. Click on new and add your Tower instance' login information
![](../images/rest_setup1.png)
- Click Submit
- Click again on the REST message you just created and add a new HTTP method
![](../images/rest_setup3.png)
- Give it a name, select **POST** and add the same end-point
![](../images/rest_setup4.png)
- Click on the *HTTP Request* Tab. Under the "HTTP Headers" add a new HTTP header with the name "Content-Type" and value "application/json"
- At the bottom, in the "Content" area, add the following"
- Fill out the following:

| Parameter | Value |
|---|---|
| Name | Ansible Tower Demo |
| Endpoint | `$TOWER_URL/api/v2/job_templates/SNOW-Demo-Compliance-Fix/launch` <br><br>make sure to use correct $TOWER_URL, example in previous step. |

- Under the **Authentication** tab, choose the **Basic** Authentication type.
- For the Basic Auth Configuration, click on the search icon. This will open window. Click on new and add your Ansible Tower login information:

![](../images/rest_setup1.png)
- Click Submit, the user interface should look similar to the following:

![](../images/rest_setup2.png)
- Click on the REST message you just created click on new to add a HTTP method

![](../images/rest_setup3.png)

- Fill out the following values:

| Parameter | Value |
|---|---|
| Name | Launch Compliance Fix |
| HTTP method | `POST` |
| Endpoint | Leave this blank |

- Click on the **HTTP Request** tab. Under the "HTTP Headers" add a new HTTP header with the following name and value:
| Name | Value |
|---|---|
| `Content-Type` | `application/json` |

- At the bottom, in the **Content** text area, add the following:

```json
{"extra_vars": {
"incident_num": "${INC}" } }
```
![](../images/rest_setup5.png)
> The extra_vars is how the Service Now API is going to pass the incident number information to the Tower instance
- Click on the *Auto-generate variable* link
![](../images/rest_setup6.png)

- Click the *Preview Script Usage* link at the bottom and copy the contents.
![](../images/rest_setup7.png)

```javascript
try {
var r = new sn_ws.RESTMessageV2('Tower Job to fix compliance issues', 'Launch compliance fix');
r.setStringParameterNoEscape('INC', '');

//override authentication profile
//authentication type ='basic'/ 'oauth2'
//r.setAuthentication(authentication type, profile name);

//set a MID server name if one wants to run the message on MID
//r.setMIDServer('MY_MID_SERVER');

//if the message is configured to communicate through ECC queue, either
//by setting a MID server or calling executeAsync, one needs to set skip_sensor
//to true. Otherwise, one may get an intermittent error that the response body is null
//r.setEccParameter('skip_sensor', true);

var response = r.execute();
var responseBody = response.getBody();
var httpStatus = response.getStatusCode();
}
catch(ex) {
var message = ex.message;
}
{"extra_vars": {
"incident_num": "${INC}" } }
```

```
![screenshot of servicenow](../images/rest_setup5.png)

The `extra_vars` is how the ServiceNow API is going to pass the incident number information to the Ansible Tower instance

- Click submit
- Click Submit


## Step 6
## Step 6 - Setup ServiceNow Business Rule

- Navigate to **System Definition >> Business Rules**

![](../images/business_rule.png)


- Click on **New** to add a new business rule. Fill out the following parameters:

| Parameter | Value |
|---|---|
| Name | Ansible Tower Demo |
| Table | `Incident [incident]` |
| Active | ✓ |
| Advanced | ✓ |


- Under the **When to run** tab:

| Parameter | Value |
|---|---|
| When | after |
| Insert | ✓ |

- Click on the **Add Filter Condition** button and fill out the filter:

| Field | Operation | Value |
|---|---|---|
| Short description | contains | BANNER |

It should look similar to this screenshot:

- Navigate to **System Definition >> Business Rules** and click on *New* to add a new business rule
![](../images/business_rule1.png)
> For this demo, the bespoke incident type that should be automatically fixed is router login banner compliance. So the rule is looking for a new *incident* ticket whose description contains banner.
- Click on the *Advanced* checkbox to enable the *Advanced* Tab
![](../images/business_rule2.png)
> NOTE: Ensure that the Business rule is run **after** the ticket is inserted into the incidents table (see screencap above for all dropdowns and checkboxes)

- Click on the **Advanced** tab

** If you have used the exact naming conventions in this README, you can copy and paste the following into the *Advanced* tab.**
If you have used the exact naming conventions in this README, you can copy and paste the following:

```javascript
(function executeRule(current, previous /*null when async*/) {
(function executeRule(current, previous /*null when async*/ ) {

try {
var r = new sn_ws.RESTMessageV2('Tower Job to fix compliance issues', 'Launch compliance fix');
r.setStringParameterNoEscape('INC', current.number);

var response = r.execute();
var responseBody = response.getBody();
var httpStatus = response.getStatusCode();
current.comments = "Contacting Ansible Tower to fix bespoke incident";
current.state = '2';
current.update();
}
catch(ex) {
var message = ex.message;
}
var r = new sn_ws.RESTMessageV2('Ansible Tower Demo', 'Launch compliance fix');
r.setStringParameterNoEscape('INC', current.number);

var response = r.execute();
var responseBody = response.getBody();
var httpStatus = response.getStatusCode();
current.comments = "Contacting Ansible Tower to fix bespoke incident";
current.state = '2';
current.update();
} catch (ex) {
var message = ex.message;
}

})(current, previous);
```

It should look similar to this screenshot:

![](../images/business_rule4.png)

- Click "Submit"
- Click **Submit**


# Running the Demo
Expand All @@ -196,7 +228,7 @@ rtr1#


## Step 2
Log into the Tower instance and launch the "SNOW-Demo-Compliance-Check" Template
Log into the Tower instance and launch the **SNOW-Demo-Compliance-Check** Job Template

>Observe the following 2 tasks as that template runs

Expand All @@ -221,13 +253,11 @@ Switch over to the ServiceNow instance and see that the ticket number as see in

## Step 4

Switch back to the Ansible Tower Jobs and click on the "SNOW-Demo-Compliance-Fix" Job
Switch back to the Ansible Tower Jobs and click on the **SNOW-Demo-Compliance-Fix** Job

>Observe that after sleeping for 180s, the job will fix the issue on the router, resolve and close out the ticket
>Observe that the job will fix the issue on the router, resolve and close out the ticket

```
TASK [sleep for 180 seconds and continue with play] ****************************
ok: [rtr1 -> localhost]
TASK [CONFIGURE THE LOGIN BANNER] **********************************************
changed: [rtr1]
TASK [MARK THE TICKET AS RESOLVED] *********************************************
Expand All @@ -238,13 +268,11 @@ changed: [rtr1]
```

## Step 5
Log back into the router and see that you are greeted with the new banner:



- Log back into the router and see that you are greeted with the new banner:

```
[student1@ansible servicenow]$ ssh rtr1
[student1@ansible]$ ssh rtr1

DEMO BANNER FOR DEVICE rtr1

Expand All @@ -254,5 +282,10 @@ rtr1#
```

## Step 6
Finally log back into servicenow to notice the history of the ticket
![](../images/incident_2.png)

- Finally log back into ServiceNow and observe the history of the ticket:

![](../images/incident_2.png)

---
![Red Hat Ansible Automation](../../../images/rh-ansible-automation.png)
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
- name: ROUTER DEPLOY BANNER
hosts: routers
hosts: cisco
connection: network_cli
gather_facts: no

Expand Down
4 changes: 2 additions & 2 deletions demos/servicenow/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ These demos are intended for effectively demonstrating Ansible + ServiceNow capa

| Demo Name | Brief Description | Workshop Type | Uses Ansible Tower |
|---|---|---|---|
| [Config Drift](1-config-drift) | Demonstrate automatic ticket creation for configuration drift. When the configuration for a Cisco CSR router doesn't match desired config, a ServiceNow ticket with relevant information will be created. | `workshop_type: networking` | ✗ |
| [Closed Loop Incident Mgmt](2-closed-loop-incident-mgmt) | Ansible Tower will find the router that is out of compliance and open an incident in ServiceNow. ServiceNow will use a business rule to identify the newly opened incident, then kick off an Ansible Tower job to fix the issue. | `workshop_type: networking` | <font color="green">✓</font> |
| [Config Drift](1-config-drift) | Demonstrate automatic ticket creation for configuration drift. When the configuration for a Cisco CSR router doesn't match desired config, a ServiceNow ticket with relevant information will be created. | `workshop_type: networking` | ✗ |
| [Closed Loop Incident Mgmt](2-closed_loop_incident_mgmt) | Ansible Tower will find the router that is out of compliance and open an incident in ServiceNow. ServiceNow will use a business rule to identify the newly opened incident, then kick off an Ansible Tower job to fix the issue. | `workshop_type: networking` | <font color="green">✓</font> |

## Common Setup

Expand Down
Binary file added demos/servicenow/images/business_rule.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified demos/servicenow/images/business_rule1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed demos/servicenow/images/business_rule2.png
Binary file not shown.
Binary file modified demos/servicenow/images/business_rule4.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified demos/servicenow/images/incident_1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified demos/servicenow/images/newrest.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified demos/servicenow/images/rest_setup1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified demos/servicenow/images/rest_setup2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified demos/servicenow/images/rest_setup3.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed demos/servicenow/images/rest_setup4.png
Binary file not shown.
Binary file modified demos/servicenow/images/rest_setup5.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified demos/servicenow/images/restmsg.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
Expand Up @@ -63,5 +63,5 @@
name: "{{member_name.user_input.split(':')[0]}}"
pool: "{{pool_name}}"
port: "{{member_name.user_input.split(':')[1]}}"
host: "{{hostvars[member_name.user_input.split(':')[0]].ansible_host}}
host: "{{hostvars[member_name.user_input.split(':')[0]].ansible_host}}"
when: '"all" not in member_name.user_input'
Loading