Skip to content

Commit d8be6f2

Browse files
author
Nick
committed
Add vmware end to end workflows
vmware end to end workflow. assetgroup-slo-subscribe
1 parent 113c698 commit d8be6f2

13 files changed

+658
-0
lines changed
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
#### Executing the snippets in ansible
2+
3+
This is an end to end workflow. Assuming an inventory files holds vcenter info and a task file holds the specifics for the policy templates
4+
5+
inventory:
6+
-- Holds inventory info
7+
8+
9+
tasks:
10+
-name: name of tasks
11+
include_task: tasklocation/taskname
12+
13+
Tasks are calling tasks to create a workflow for tags and folder support design.
14+
15+
16+
Vars for ansible are defined in a inventory file for use in plays
17+
vars created during plays are used in future ones like login.yml.
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
---
2+
all:
3+
hosts:
4+
5+
vars:
6+
baseurl: https://{{master}}:1556/netbackup/
7+
username: user
8+
password: pass
9+
contenttype: application/vnd.netbackup+json;version=4.0
10+
ldapcon: domain.com
11+
12+
site01:
13+
hosts:
14+
site01nbumst01.svc.domain.com:
15+
vars:
16+
master: site01nbumst01.svc.domain.com
17+
vcenters:
18+
- site01vircen01.domain.com
19+
sitecode: site01
20+
sitetag: site01
21+
datacenter: dc1
22+
vm_backup_storageunit: site01nbumed01_dpm_su
23+
24+
25+
site02:
26+
hosts:
27+
site02nbucormst01.svc.domain.com:
28+
vars:
29+
master: site02nbucormst01.svc.domain.com
30+
vcenters:
31+
- site02cvircenprod01.domain.com
32+
sitecode: site02
33+
sitetag: site02
34+
datacenter: site02
35+
username: user
36+
password: password
37+
vm_backup_storageunit: site02acw00016_dpm_su
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
---
2+
### Requirements
3+
# inputs from inventory- {{contenttype}}, {{baseurl}}, {{username}}, {{password}}
4+
# Notes -- Base script that calls everything else.
5+
- hosts: all
6+
gather_facts: false
7+
connection: local
8+
9+
tasks:
10+
11+
- name: Login - Include task
12+
include_tasks: tasks/login.include.yml
13+
14+
- name: Include vmware workflow for Folder Setups
15+
include_tasks: tasks/vmware.default.workflow.standards.yml
16+
with_items: "{{vcenters}}"
17+
loop_control:
18+
loop_var: item_vcenter
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
---
2+
### Requirements
3+
# inputs from inventory- {{contenttype}}, {{baseurl}}
4+
# inputs from parent - none
5+
# outputs Login_token
6+
- name: login
7+
uri:
8+
url: "{{baseurl}}login"
9+
method: POST
10+
body_format: json
11+
status_code: 201
12+
timeout: 300
13+
headers:
14+
content-type: "{{contenttype}}"
15+
body:
16+
userName: "{{username}}"
17+
password: "{{password}}"
18+
validate_certs: no
19+
return_content: yes
20+
register: login
21+
22+
- name: set facts
23+
set_fact:
24+
login_token: "{{login.json.token}}"
25+
- name: debug token
26+
debug:
27+
msg: "{{login_token}}"
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
---
2+
## For dedicated enviornments such as MagneticNorth
3+
- name: AssetGroup Post Folder Defaults - Include task
4+
include_tasks: tasks/vmworkflow_assetgroup_create_include.yml
5+
6+
- name: debug asset group id var from include task
7+
debug:
8+
msg: "{{assetgroup_id}}"
9+
when: assetgroup_id is defined
10+
11+
- name: SLO Post Folder Default Protection Plan
12+
include_tasks: tasks/vmworkflow_slo_create.include.yml
13+
when: assetgroup_id is defined
14+
15+
- name: AssetGroup Subscribe to SLO Post
16+
include_tasks: tasks/vmworkflow_subscribe.include.yml
17+
when: assetgroup_id is defined
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
---
2+
# This is looped for each policy set of variables for the current vcenter outter loop
3+
4+
- name: AssetGroup Post Folder Defaults - Include task
5+
include_tasks: tasks/vmworkflow_assetgroup_create_include.yml
6+
7+
- name: debug asset group id var from include task
8+
debug:
9+
msg: "{{assetgroup_id}}"
10+
when: assetgroup_id is defined
11+
12+
13+
- name: SLO Post Folder Default Protection Plan
14+
include_tasks: tasks/vmworkflow_slo_create.include.yml
15+
when: assetgroup_id is defined
16+
17+
- name: debug SLO id var from include task
18+
debug:
19+
var: slo_id
20+
when: assetgroup_id is defined
21+
22+
- name: AssetGroup Subscribe to SLO Post
23+
include_tasks: tasks/vmworkflow_subscribe.include.yml
24+
when: assetgroup_id is defined
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
---
2+
3+
- name: AssetGroup Post tag Defaults - Include task
4+
include_tasks: tasks/vmworkflow_assetgroup_create_tags_include.yml
5+
6+
- name: debug asset group id var from include task
7+
debug:
8+
msg: "{{assetgroup_id}}"
9+
when: assetgroup_id is defined
10+
11+
- name: SLO Post Folder Default Protection Plan
12+
include_tasks: tasks/vmworkflow_slo_create.include.yml
13+
when: assetgroup_id is defined
14+
15+
- name: debug SLO id var from include task
16+
debug:
17+
msg: "{{slo_id}}"
18+
when: assetgroup_id is defined
19+
20+
- name: AssetGroup Subscribe to SLO Post
21+
include_tasks: tasks/vmworkflow_subscribe.include.yml
22+
when: assetgroup_id is defined
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
---
2+
#No inputs
3+
#Sets policies template vars, and is looped for each vcenter from previous.
4+
#segname = segment name, segabv = segment abriviation, vmfolder = folder search string, pi = policy type such as image or image for DBs
5+
#driveselect = parm for drive selection, ret = retention for policy, time = start time, prod = is it prod or not
6+
7+
- name: Include vmware workflow for Folder Setups
8+
include_tasks: tasks/vmware.default.include.yml
9+
with_items:
10+
- {segname: 'BU1', segabv: '1', vmfolder: 'Bu1', btype: '\Image Backup', ptype: 'wi', driveselect: '0', ret: '30', time: '1800', prod: 'eq' }
11+
- {segname: 'BU2', segabv: '2', vmfolder: 'Bu2', btype: '\Image Backup', ptype: 'wi', driveselect: '0', ret: '30', time: '1800', prod: 'eq' }
12+
- {segname: 'BU1', segabv: '1', vmfolder: 'Bu1', btype: 'Image with DB Backup', ptype: 'wd', driveselect: '2', ret: '30', time: '1800', prod: 'eq' }
13+
- {segname: 'BU2', segabv: '2', vmfolder: 'Bu2', btype: 'Image with DB Backup', ptype: 'wd', driveselect: '2', ret: '30', time: '1800', prod: 'eq' }
14+
15+
16+
17+
- name: Include vmware workflow for Tag Setups
18+
include_tasks: tasks/vmware.default.tags.include.yml
19+
with_items:
20+
- {segname: 'BU1', segabv: '1', btype: 'Image Backup', ptype: 'pi', driveselect: '0', ret: '30', tagtype: 'Image Only', tagbg: 'BU1', tagtime: '1800', prod: 'eq' }
21+
- {segname: 'BU1', segabv: '1', btype: 'Image Backup', ptype: 'pi', driveselect: '0', ret: '30', tagtype: 'Image Only', tagbg: 'BU1', tagtime: '2200', prod: 'eq' }
22+
- {segname: 'BU1', segabv: '1', btype: 'Image Backup', ptype: 'pi', driveselect: '0', ret: '30', tagtype: 'Image Only', tagbg: 'BU1', tagtime: '0200', prod: 'eq' }
23+
- {segname: 'BU1', segabv: '1', btype: 'Image Backup', ptype: 'pi', driveselect: '0', ret: '30', tagtype: 'Image Only', tagbg: 'BU1', tagtime: '0400', prod: 'eq' }
24+
- {segname: 'BU2', segabv: '2', btype: 'Image Backup', ptype: 'pi', driveselect: '0', ret: '30', tagtype: 'Image Only', tagbg: 'BU2', tagtime: '1800', prod: 'eq' }
25+
- {segname: 'BU2', segabv: '2', btype: 'Image Backup', ptype: 'pi', driveselect: '0', ret: '30', tagtype: 'Image Only', tagbg: 'BU2', tagtime: '2200', prod: 'eq' }
26+
- {segname: 'BU2', segabv: '2', btype: 'Image Backup', ptype: 'pi', driveselect: '0', ret: '30', tagtype: 'Image Only', tagbg: 'BU2', tagtime: '0200', prod: 'eq' }
27+
- {segname: 'BU2', segabv: '2', btype: 'Image Backup', ptype: 'pi', driveselect: '0', ret: '30', tagtype: 'Image Only', tagbg: 'BU2', tagtime: '0400', prod: 'eq' }
28+
- {segname: 'BU1', segabv: '1', btype: 'Image with DB Backup', ptype: 'pd', driveselect: '2', ret: '30', tagtype: 'DB Backup', tagbg: 'BU1', tagtime: '1800', prod: 'eq' }
29+
- {segname: 'BU1', segabv: '1', btype: 'Image with DB Backup', ptype: 'pd', driveselect: '2', ret: '30', tagtype: 'DB Backup', tagbg: 'BU1', tagtime: '2200', prod: 'eq' }
30+
- {segname: 'BU1', segabv: '1', btype: 'Image with DB Backup', ptype: 'pd', driveselect: '2', ret: '30', tagtype: 'DB Backup', tagbg: 'BU1', tagtime: '0200', prod: 'eq' }
31+
- {segname: 'BU1', segabv: '1', btype: 'Image with DB Backup', ptype: 'pd', driveselect: '2', ret: '30', tagtype: 'DB Backup', tagbg: 'BU1', tagtime: '0400', prod: 'eq' }
32+
- {segname: 'BU2', segabv: '2', btype: 'Image with DB Backup', ptype: 'pd', driveselect: '2', ret: '30', tagtype: 'DB Backup', tagbg: 'BU2', tagtime: '1800', prod: 'eq' }
33+
- {segname: 'BU2', segabv: '2', btype: 'Image with DB Backup', ptype: 'pd', driveselect: '2', ret: '30', tagtype: 'DB Backup', tagbg: 'BU2', tagtime: '2200', prod: 'eq' }
34+
- {segname: 'BU2', segabv: '2', btype: 'Image with DB Backup', ptype: 'pd', driveselect: '2', ret: '30', tagtype: 'DB Backup', tagbg: 'BU2', tagtime: '0200', prod: 'eq' }
35+
- {segname: 'BU2', segabv: '2', btype: 'Image with DB Backup', ptype: 'pd', driveselect: '2', ret: '30', tagtype: 'DB Backup', tagbg: 'BU2', tagtime: '0400', prod: 'eq' }
36+
- {segname: 'BU1', segabv: '1', btype: 'Image Backup', ptype: 'ni', driveselect: '0', ret: '30', tagtype: 'Image Only', tagbg: 'BU1', tagtime: '1800', prod: 'ne' }
37+
- {segname: 'BU1', segabv: '1', btype: 'Image Backup', ptype: 'ni', driveselect: '0', ret: '30', tagtype: 'Image Only', tagbg: 'BU1', tagtime: '2200', prod: 'ne' }
38+
- {segname: 'BU1', segabv: '1', btype: 'Image Backup', ptype: 'ni', driveselect: '0', ret: '30', tagtype: 'Image Only', tagbg: 'BU1', tagtime: '0200', prod: 'ne' }
39+
- {segname: 'BU1', segabv: '1', btype: 'Image Backup', ptype: 'ni', driveselect: '0', ret: '30', tagtype: 'Image Only', tagbg: 'BU1', tagtime: '0400', prod: 'ne' }
40+
- {segname: 'BU2', segabv: '2', btype: 'Image Backup', ptype: 'ni', driveselect: '0', ret: '30', tagtype: 'Image Only', tagbg: 'BU2', tagtime: '1800', prod: 'ne' }
41+
- {segname: 'BU2', segabv: '2', btype: 'Image Backup', ptype: 'ni', driveselect: '0', ret: '30', tagtype: 'Image Only', tagbg: 'BU2', tagtime: '2200', prod: 'ne' }
42+
- {segname: 'BU2', segabv: '2', btype: 'Image Backup', ptype: 'ni', driveselect: '0', ret: '30', tagtype: 'Image Only', tagbg: 'BU2', tagtime: '0200', prod: 'ne' }
43+
- {segname: 'BU2', segabv: '2', btype: 'Image Backup', ptype: 'ni', driveselect: '0', ret: '30', tagtype: 'Image Only', tagbg: 'BU2', tagtime: '0400', prod: 'ne' }
44+
- {segname: 'BU1', segabv: '1', btype: 'Image with DB Backup', ptype: 'nd', driveselect: '2', ret: '30', tagtype: 'DB Backup', tagbg: 'BU1', tagtime: '1800', prod: 'ne' }
45+
- {segname: 'BU1', segabv: '1', btype: 'Image with DB Backup', ptype: 'nd', driveselect: '2', ret: '30', tagtype: 'DB Backup', tagbg: 'BU1', tagtime: '2200', prod: 'ne' }
46+
- {segname: 'BU1', segabv: '1', btype: 'Image with DB Backup', ptype: 'nd', driveselect: '2', ret: '30', tagtype: 'DB Backup', tagbg: 'BU1', tagtime: '0200', prod: 'ne' }
47+
- {segname: 'BU1', segabv: '1', btype: 'Image with DB Backup', ptype: 'nd', driveselect: '2', ret: '30', tagtype: 'DB Backup', tagbg: 'BU1', tagtime: '0400', prod: 'ne' }
48+
- {segname: 'BU2', segabv: '2', btype: 'Image with DB Backup', ptype: 'nd', driveselect: '2', ret: '30', tagtype: 'DB Backup', tagbg: 'BU2', tagtime: '1800', prod: 'ne' }
49+
- {segname: 'BU2', segabv: '2', btype: 'Image with DB Backup', ptype: 'nd', driveselect: '2', ret: '30', tagtype: 'DB Backup', tagbg: 'BU2', tagtime: '2200', prod: 'ne' }
50+
- {segname: 'BU2', segabv: '2', btype: 'Image with DB Backup', ptype: 'nd', driveselect: '2', ret: '30', tagtype: 'DB Backup', tagbg: 'BU2', tagtime: '0200', prod: 'ne' }
51+
- {segname: 'BU2', segabv: '2', btype: 'Image with DB Backup', ptype: 'nd', driveselect: '2', ret: '30', tagtype: 'DB Backup', tagbg: 'BU2', tagtime: '0400', prod: 'ne' }
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
---
2+
### Requirements
3+
# Requires a set of esxi hosts in a group var
4+
# inputs from parent - {{login_token}},
5+
# inputs from inventory - {{master}}, {{vcenter}}, {{baseurl}}, {{contenttype}}, {{sitecode}}
6+
# outputs {{protectionplan}}, {{assetgroup_id}}
7+
8+
- name: set fact for assetgroupname
9+
set_fact:
10+
AssetGroupName: "{{sitecode}}-{{item.segname}}-{{item.btype}}-{{item_vcenter}}-folders"
11+
12+
- name: set fact for urlencode
13+
set_fact:
14+
url_parms: "{{ AssetGroupName | urlencode }}"
15+
16+
- name: adds asset-group for item.segname
17+
uri:
18+
url: "{{baseurl}}asset-service/queries"
19+
method: POST
20+
body_format: json
21+
headers:
22+
authorization: "{{login_token}}"
23+
content-type: "{{contenttype}}"
24+
body:
25+
data:
26+
type: query
27+
attributes:
28+
queryName: create-or-update-assets
29+
workloads:
30+
- vmware
31+
parameters:
32+
objectList:
33+
- correlationId: '1'
34+
type: vmwareGroupAsset
35+
assetGroup:
36+
commonAssetAttributes:
37+
detection:
38+
detectionMethod: MANUAL
39+
displayName: "{{AssetGroupName}}"
40+
protectionCapabilities:
41+
isProtectable: 'YES'
42+
isRecoverable: 'NO'
43+
assetType: vmGroup
44+
description: "selects all {{item.vmfolder}} folders for {{item_vcenter}} created by ansible do NOT update."
45+
filterConstraint: "{{item_vcenter}}"
46+
oDataQueryFilter: contains(vmFolder, '{{item.vmfolder}}') and endswith(vmFolder, '{{item.btype}}') and contains(datacenter, '{{datacenter}}')
47+
status_code:
48+
- 201
49+
- 409
50+
validate_certs: no
51+
return_content: yes
52+
register: assetgroup
53+
54+
- name: AssetGroup Post Folder Defaults - Include task
55+
include_tasks: tasks/vmworkflow_assetgroup_jobstatus.yml
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
---
2+
### Requirements
3+
# inputs from parent - {{login_token}},
4+
# inputs from inventory - {{master}}, {{vcenter}}, {{baseurl}}, {{contenttype}}, {{sitecode}}
5+
# outputs {{protectionplan}}, {{assetgroup_id}}
6+
7+
- name: set fullprod var based on prod value to Equal
8+
set_fact:
9+
prodfull: Equal
10+
prodname: Prod
11+
when: item.prod == "eq"
12+
- name: set fullprod var based on prod value to NotEqual
13+
set_fact:
14+
prodfull: NotEqual
15+
prodname: NonProd
16+
when: item.prod == "ne"
17+
18+
- name: set fact for assetgroupname
19+
set_fact:
20+
AssetGroupName: "{{sitecode}}-{{item.segname}}-{{item.btype}}-{{item.tagtime}}-{{prodname}}-{{item_vcenter}}-tags"
21+
22+
- name: set fact for urlencode
23+
set_fact:
24+
url_parms: "{{ AssetGroupName | urlencode }}"
25+
26+
27+
- name: adds asset-group for item.segname
28+
uri:
29+
url: "{{baseurl}}asset-service/queries"
30+
method: POST
31+
body_format: json
32+
headers:
33+
authorization: "{{login_token}}"
34+
content-type: "{{contenttype}}"
35+
body:
36+
data:
37+
type: query
38+
attributes:
39+
queryName: create-or-update-assets
40+
workloads:
41+
- vmware
42+
parameters:
43+
objectList:
44+
- correlationId: '1'
45+
type: vmwareGroupAsset
46+
assetGroup:
47+
commonAssetAttributes:
48+
detection:
49+
detectionMethod: MANUAL
50+
displayName: "{{AssetGroupName}}"
51+
protectionCapabilities:
52+
isProtectable: 'YES'
53+
isRecoverable: 'NO'
54+
assetType: vmGroup
55+
description: "selects all {{item.segname}} for {{item_vcenter}} with tags {{item.tagtime}}, {{item.tagtype}}, {{item.tagbg}}, {{prodname}} created by ansible, do NOT update."
56+
filterConstraint: "{{item_vcenter}}"
57+
oDataQueryFilter: tolower(tag/tagName) eq tolower('{{sitetag}}') and tolower(tag/tagName) eq tolower('{{item.tagtime}}') and tolower(tag/tagName) eq tolower('{{item.tagtype}}') and tolower(tag/tagName) eq tolower('{{item.tagbg}}') and tolower(tag/tagName) {{item.prod}} tolower('Production')
58+
status_code:
59+
- 201
60+
- 409
61+
validate_certs: no
62+
return_content: yes
63+
register: assetgroup
64+
65+
- name: AssetGroup Post Folder Defaults - Include task
66+
include_tasks: tasks/vmworkflow_assetgroup_jobstatus.yml

0 commit comments

Comments
 (0)