forked from SA-RDevOps2/Training_Documents
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathAnsible_Practise.txt
306 lines (217 loc) · 7.5 KB
/
Ansible_Practise.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
###update vi etc/ansible/host
[testnodes]
samplenode1 ansible_ssh_host=172.31.4.235 ansible_ssh_user=ansibleadmin
samplenode2 ansible_ssh_host=172.31.1.218 ansible_ssh_user=ansibleadmin
#**************************************************************************************************************************
#hosts file is the default Inventory file for ansible
#**************************************************************************************************************************
#Access thru Ansible Controller :
#**************************************************************************************************************************
ansible <hosts_name> -m <module_name> -i <inventory_file>
ansible testnodes -m ping
ansible samplenode1 -m ping -i inventory1
#host machines can be identified using :
#all | group_name | individual_host_name
###update vi /etc/ansible/host
[testnodes]
samplenode1 ansible_ssh_host=172.31.41.32 ansible_ssh_user=ansibleadmin
samplenode2 ansible_ssh_host=172.31.39.17 ansible_ssh_user=ansibleadmin
/etc/ansible/dev_inventory
[devnodes]
sampledevnode1 ansible_ssh_host=172.31.41.32 ansible_ssh_user=ansibleadmin
sampledevnode2 ansible_ssh_host=172.31.39.17 ansible_ssh_user=ansibleadmin
ansible devnodes -m ping -i /etc/ansible/dev_inventory
##################################################################################
#**************************************************************************************************************************
#Access thru Ansible Controller :
#**************************************************************************************************************************
Ansible Modules: Eg.:
ansible testnodes -m ping
ansible all -m ping ### will ping all hosts from /etc/ansible/hosts file
ansible samplenode1 -m ping
ansible samplenode2 -m ping
#or using user defined Inventory file
#ansible ansible-node1 -m ping -i myinventoryfile.txt
ansible samplenode1 -m ping -i myinventoryfile.txt
#**************************************************************************************************************************
ansible samplenode2 -m ping
ANSIBLE_KEEP_REMOTE_FILES=1 ansible samplenode1 -m shell -a "sleep 5 ; echo 'hi'"
ANSIBLE_KEEP_REMOTE_FILES=1 ansible samplenode1 -m shell -a "uptime"
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Ansible Facts!
ansible samplenode1 -m setup
ansible samplenode1 -m setup -a "filter=ansible_mounts"
##Transfer a file from Ansible Controller to Nodes using copy Module
ansible samplenode1 -m copy -a "src=/etc/ansible/file1.txt dest=/home/ansibleadmin"
ansible samplenode1 -m copy -a "src=/etc/ansible/s1.txt dest=/home/ansibleadmin backup=yes"
##Transfer a file from Ansible Nodes to Ansible Controller using fetch Module
ansible samplenode1 -m fetch -a "src=/home/ansibleadmin/filefromAN1.txt dest=/home/devopsadmin"
UseCase 1 :
- Deploy an artifact *.war from Jenkins Slave Machine to QA-Server.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
### List all modules:
ansible-doc -l
### No. of modules:
ansible-doc -l | wc -l
### Search for specific modules:
ansible-doc -l | grep shel
### To know about any specific modules:
ansible-doc shell
#**************************************************************************************************************************
#Ansible Variables !
#shell : echo $var1
#debugmod.yaml
---
- hosts: testnodes
tasks:
- debug:
msg:
- "The os distribution is: {{ansible_distribution}}"
- "THe os name is: {{ansible_system}}"
- "The os family is: {{ansible_os_family}}"
- "THe mount points are :{{ansible_mounts}}"
# How to jus verify playbook syntax:
ansible-playbook testfile.yaml --syntax-check
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#~~~~~~~~~~~~~~~~~~~~~~~~~ test_var-datatype.yaml
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#test_var-datatype.yaml
---
- hosts: samplenode1
vars:
x: 23
my_num: 45.67
my_name: Loksai
my_b: YES
tasks:
- debug:
msg:
- "The value of x is: {{x}} and type: {{x|type_debug}}"
- "THe value of my_num: {{my_num}} and type : {{my_num|type_debug}}"
- "The value of my_name : {{my_name}} and type: {{my_name|type_debug}}"
- "THe value of my_b is: {{my_b}} and type : {{my_b|type_debug}}"
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#/etc/ansible/variables/myvarfile1.yaml
x: 23
my_num: 45.67
my_name: Loksai_ETA
my_b: YES
#test_var-datatype1.yaml
---
- hosts: samplenode1
vars_files:
- /etc/ansible/variables/myvarfile1.yaml
tasks:
- debug:
msg:
- "The value of x is: {{x}} and type: {{x|type_debug}}"
- "THe value of my_num: {{my_num}} and type : {{my_num|type_debug}}"
- "The value of my_name : {{my_name}} and type: {{my_name|type_debug}}"
- "THe value of my_b is: {{my_b}} and type : {{my_b|type_debug}}"
ansible-playbook test_var-datatype1.yaml
---
- hosts: samplenode1
gather_facts: false
become: yes
tasks:
- name: Manage git tool
apt:
name: git
state: absent
state : present / absent / latest
yum/apt ::
state : present / absent / latest
yum install git
yum remove git
yum update git
#manage_pkg.yaml
---
- hosts: "{{ host_name }}"
become: yes
tasks:
- name: Manage "{{ tool_name }}" service
apt:
name: "{{ tool_name }}"
state: "{{ tool_state }}"
ansible-playbook pkgmgrdemo4.yaml -e "host_name=samplenode1 tool_name=git tool_state=present"
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#~~~~~~~~~~~~~~~~~~~~~~~~~ register and set-facts
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#test_var-datatype.yaml
---
- hosts: samplenode1
gather_facts: false
tasks:
- shell: "bash --version"
#test_var-datatype.yaml
---
- hosts: samplenode1
tasks:
- shell: "bash --version"
register: bash_ver
- debug: var=bash_ver
#register_set_facts.yaml
---
- hosts: samplenode1
tasks:
- shell: "bash --version"
register: bash_ver
- set_fact:
bash_version: "{{bash_ver.stdout.split('\n')[0].split()[3]}}"
my_value: "bash version"
- debug: var=bash_version
Handlers :::
---
- hosts: samplenode1
#gather_facts: false
become: yes
tasks:
- name: Install nginx
apt:
name: nginx
state: present
notify:
- start nginx
handlers:
- name: start nginx
service:
name: nginx
state: started
Service Module :: started / stopped / restart
Handlers --> are used to controll the flow of playbook execution, based on the previous modules
This can be done thru notify key.
Handlers are same as tasks.
Loops :
---
- hosts: samplenode1
become: yes
tasks:
- apt:
name: git
state: present
- apt:
name: nginx
state: present
- apt:
name: tree
state: present
Loops :::
---
- hosts: samplenode1
gather_facts: false
become: yes
tasks:
- apt:
name: "{{item}}"
state: absent
loop:
- git
- tree
- nginx
#~~~~~~~~~~~~~~~~~~~~~~~~~
Ansible Roles :::
Ansible Roles are used to organize the Ansible Components
To reuse & Share.
Ansible Repository ::
Understand the structure of Ansible Components ::::
playbooks, handlers, loop, variable, defaults, tasks,