WEBVTT

1
00:00.000 --> 00:04.380
So now what I want to turn your attention to is some issues that we may have

2
00:04.380 --> 00:05.040
connecting

3
00:05.040 --> 00:09.920
to our devices utilizing Ansible. Now with respect to Ansible there can be many

4
00:09.920 --> 00:10.720
different ways in

5
00:10.720 --> 00:14.870
which a connection might fail perhaps the device is simply unreachable maybe it

6
00:14.870 --> 00:15.840
's crashed, maybe the

7
00:15.840 --> 00:20.270
network is down, whatever it may be what I would like to do is to help you

8
00:20.270 --> 00:21.360
identify what the

9
00:21.360 --> 00:25.530
potential root cause may actually be. So let me just write a new playbook

10
00:25.530 --> 00:26.800
called Play4, we give

11
00:26.800 --> 00:29.800
the player we can name, we'll see we're testing connections, we'll target the

12
00:29.800 --> 00:30.480
host of let's just
WEBVTT
X-TIMESTAMP-MAP=LOCAL:00:00:00.000,MPEGTS:900000

12
00:29.800 --> 00:30.480
host of let's just

13
00:30.480 --> 00:35.120
go with the blue box in this time, gather facts it's set to false and the tasks

14
00:35.120 --> 00:35.760
and let's give

15
00:35.760 --> 00:39.610
this task a simple name of sending a test command just to ensure that we can

16
00:39.610 --> 00:40.800
actually connect to

17
00:40.800 --> 00:44.270
our devices so I'll use the Ansible built-in command module and the command I'm

18
00:44.270 --> 00:45.280
going to send

19
00:45.280 --> 00:50.010
is simply going to be ls -l and I'll register the output as the variable

20
00:50.010 --> 00:51.040
outputs and then we'll

21
00:51.040 --> 00:55.710
have a second task to print the variable. So we'll use Ansible built-in debug

22
00:55.710 --> 00:56.880
module once again

23
00:56.880 --> 01:00.510
and all I will do is print out that output variable so let's try this. So if I
WEBVTT
X-TIMESTAMP-MAP=LOCAL:00:00:00.000,MPEGTS:900000

23
00:56.880 --> 01:00.510
and all I will do is print out that output variable so let's try this. So if I

24
01:00.510 --> 01:01.040
say Ansible

25
01:01.040 --> 01:06.240
playbook play4.yml and to enter uh oh we have a problem and once again one of

26
01:06.240 --> 01:07.040
the best things we

27
01:07.040 --> 01:11.210
can do is actually spend time to really read the actual error message we can

28
01:11.210 --> 01:12.560
see here it specifies

29
01:12.560 --> 01:16.840
that the device is apparently unreachable and it specifies in the actual

30
01:16.840 --> 01:17.680
message here

31
01:17.680 --> 01:22.960
fail to connect to the host via SSH and what it actually says specifically is

32
01:22.960 --> 01:23.680
that the permission

33
01:23.680 --> 01:28.360
is denied and we see some information here relating to the authentication now

34
01:28.360 --> 01:29.520
in the case of this

35
01:29.520 --> 01:33.250
particular playbook it should have failed because I have deliberately in the
WEBVTT
X-TIMESTAMP-MAP=LOCAL:00:00:00.000,MPEGTS:900000

35
01:29.520 --> 01:33.250
particular playbook it should have failed because I have deliberately in the

36
01:33.250 --> 01:34.480
interim between videos

37
01:34.480 --> 01:38.290
made a critical change. Now one thing to note is that when we happen to get a

38
01:38.290 --> 01:39.360
permission denied

39
01:39.360 --> 01:43.280
this actually tells us is that we're actually been able to connect to the

40
01:43.280 --> 01:44.560
device i.e we can

41
01:44.560 --> 01:48.760
reach the device it's not what the device is unavailable or the network is down

42
01:48.760 --> 01:49.760
the problem is is that

43
01:49.760 --> 01:54.520
when we as the Ansible user attempt that connection in this case here to the

44
01:54.520 --> 01:56.000
blue box we are been able

45
01:56.000 --> 02:00.730
to reach the device here over the network it's just that this device is denying
WEBVTT
X-TIMESTAMP-MAP=LOCAL:00:00:00.000,MPEGTS:900000

45
01:56.000 --> 02:00.730
to reach the device here over the network it's just that this device is denying

46
02:00.730 --> 02:02.080
the login. Now that

47
02:02.080 --> 02:06.640
is strange to me because I know that I have created a dedicated Ansible user on

48
02:06.640 --> 02:07.680
the device and that

49
02:07.680 --> 02:11.640
user should be able to log in so one thing I can do is I can attempt to use the

50
02:11.640 --> 02:12.480
Ansible ad hoc

51
02:12.480 --> 02:16.630
modulo here so if I just say Ansible and I target the blue box and I specify

52
02:16.630 --> 02:17.440
that the argument I

53
02:17.440 --> 02:21.450
want to send is going to be an LS-L and what I can do is I can say -u to

54
02:21.450 --> 02:23.200
specify the user manually

55
02:23.200 --> 02:28.120
which is Ansible and then also -k to prompt me to enter my password so if I

56
02:28.120 --> 02:29.280
type in the SSH

57
02:29.280 --> 02:32.910
password for Ansible which is just simply the word Ansible and I hit enter look
WEBVTT
X-TIMESTAMP-MAP=LOCAL:00:00:00.000,MPEGTS:900000

57
02:29.280 --> 02:32.910
password for Ansible which is just simply the word Ansible and I hit enter look

58
02:32.910 --> 02:33.440
at this right

59
02:33.440 --> 02:37.730
here we actually get the connection so logically we know we can actually reach

60
02:37.730 --> 02:38.800
the device and we

61
02:38.800 --> 02:42.980
can actually send commands using Ansible well at least when we explicitly

62
02:42.980 --> 02:44.480
specify the user

63
02:44.480 --> 02:48.230
as well as that user's password so maybe there happens to be an issue with the

64
02:48.230 --> 02:49.440
actual key itself

65
02:49.440 --> 02:53.500
because after all I can log in when I specify the password so let's try a

66
02:53.500 --> 02:54.880
passwordless login

67
02:54.880 --> 03:00.190
just to the device I'll say SSH Ansible at blue box and to enter and look at
WEBVTT
X-TIMESTAMP-MAP=LOCAL:00:00:00.000,MPEGTS:900000

67
02:54.880 --> 03:00.190
just to the device I'll say SSH Ansible at blue box and to enter and look at

68
03:00.190 --> 03:01.600
this right here I was

69
03:01.600 --> 03:06.280
able to log in no problem at all and effectively issue my command LS-L so what

70
03:06.280 --> 03:07.440
exactly is the problem

71
03:07.440 --> 03:11.440
here well in this case here what we want to ensure is that we have correctly

72
03:11.440 --> 03:12.960
configured a remote user

73
03:12.960 --> 03:17.750
settings so that the Ansible system by default is attempting to use the correct

74
03:17.750 --> 03:18.800
username so what I

75
03:18.800 --> 03:22.650
had done is I had actually modified my Ansible configuration file and look at

76
03:22.650 --> 03:23.520
this right here

77
03:23.520 --> 03:28.400
the remote user happens to be John now on my devices I do not actually have a

78
03:28.400 --> 03:29.840
user account called John

79
03:29.840 --> 03:34.930
so this username is never going to be accepted on my blue box or my yellow box
WEBVTT
X-TIMESTAMP-MAP=LOCAL:00:00:00.000,MPEGTS:900000

79
03:29.840 --> 03:34.930
so this username is never going to be accepted on my blue box or my yellow box

80
03:34.930 --> 03:36.320
as a valid username

81
03:36.320 --> 03:39.760
so in my case here I can change the user name to Ansible and now if I just try

82
03:39.760 --> 03:40.640
to run my Ansible

83
03:40.640 --> 03:44.540
playbook of play4.yml and to enter look at this right here we're actually

84
03:44.540 --> 03:46.000
getting the authentication

85
03:46.000 --> 03:50.210
so if I happen to modify the playbook and let's maybe try to target the yellow

86
03:50.210 --> 03:51.040
box this time

87
03:51.040 --> 03:55.760
if I run the playbook once again and to enter once again shouts it out that the

88
03:55.760 --> 03:56.480
connection was

89
03:56.480 --> 04:00.430
unreachable it was not established now why is that I thought we just fixed that
WEBVTT
X-TIMESTAMP-MAP=LOCAL:00:00:00.000,MPEGTS:900000

89
03:56.480 --> 04:00.430
unreachable it was not established now why is that I thought we just fixed that

90
04:00.430 --> 04:01.360
problem now this is

91
04:01.360 --> 04:05.500
why it's important to really read the error message in this case it says failed

92
04:05.500 --> 04:06.480
to connect to the host

93
04:06.480 --> 04:12.960
via SSH okay that sounds familiar but it says here there is no root to the host

94
04:12.960 --> 04:14.320
it is unreachable

95
04:14.320 --> 04:17.160
so as opposed to going through all of your Ansible configuration files and

96
04:17.160 --> 04:18.080
thinking maybe there is

97
04:18.080 --> 04:22.120
a problem with your Ansible configs the first thing that I would check in this

98
04:22.120 --> 04:22.880
case when it

99
04:22.880 --> 04:26.690
specifies that we have no root to the host is to check that we can actually

100
04:26.690 --> 04:27.600
even talk to that

101
04:27.600 --> 04:31.210
particular device so that could just be simply pinging the host so let's ping
WEBVTT
X-TIMESTAMP-MAP=LOCAL:00:00:00.000,MPEGTS:900000

101
04:27.600 --> 04:31.210
particular device so that could just be simply pinging the host so let's ping

102
04:31.210 --> 04:32.240
it yellow box

103
04:32.240 --> 04:36.460
as we can see here we do not have a connection to this particular device now as

104
04:36.460 --> 04:37.440
it happens in my

105
04:37.440 --> 04:41.330
case right here the yellow box happens to be turned off so rather than try to

106
04:41.330 --> 04:42.320
waste time making

107
04:42.320 --> 04:45.940
configurations on the Ansible control node thinking that Ansible itself is a

108
04:45.940 --> 04:47.040
problem in this case

109
04:47.040 --> 04:50.560
here the device just happens to be down who knows in the case here I've always

110
04:50.560 --> 04:51.600
had just switched it

111
04:51.600 --> 04:55.680
off so let's put it back on again okay so now the yellow box is back let's try

112
04:55.680 --> 04:56.720
to run the playbook

113
04:56.720 --> 05:02.190
once again so I'll say Ansible playbook play 4.yml and hit enter now again it
WEBVTT
X-TIMESTAMP-MAP=LOCAL:00:00:00.000,MPEGTS:900000

113
04:56.720 --> 05:02.190
once again so I'll say Ansible playbook play 4.yml and hit enter now again it

114
05:02.190 --> 05:03.520
gives us the message

115
05:03.520 --> 05:07.750
that the device is unreachable and it says no root to host so again we can test

116
05:07.750 --> 05:08.640
to ping yellow

117
05:08.640 --> 05:12.550
box and it still seems like the device is not reachable so this is a little bit

118
05:12.550 --> 05:13.440
confusing now

119
05:13.440 --> 05:16.730
one thing to notice here is that when I happen to ping the yellow box it is

120
05:16.730 --> 05:18.720
resolving to the IP address

121
05:18.720 --> 05:24.830
192.168.136 now the problem here is that on the actual device if we go to the

122
05:24.830 --> 05:26.320
yellow box itself

123
05:26.320 --> 05:35.040
if I do an IP adder we can in fact see that my IP address is 192.168.135.0136
WEBVTT
X-TIMESTAMP-MAP=LOCAL:00:00:00.000,MPEGTS:900000

123
05:26.320 --> 05:35.040
if I do an IP adder we can in fact see that my IP address is 192.168.135.0136

124
05:35.040 --> 05:36.240
now if I try to

125
05:36.240 --> 05:43.300
ping that IP address from here 192.168.135 and hit enter we do actually have a

126
05:43.300 --> 05:44.480
connection so the

127
05:44.480 --> 05:50.640
connection itself is not a problem and indeed if I happen to say Ansible SSH at

128
05:50.640 --> 05:54.240
192.168.135 and to

129
05:54.240 --> 05:59.000
enter notice we actually get the login so in this case here we can reach the

130
05:59.000 --> 06:00.160
device and we can
WEBVTT
X-TIMESTAMP-MAP=LOCAL:00:00:00.000,MPEGTS:900000

130
05:59.000 --> 06:00.160
device and we can

131
06:00.160 --> 06:04.210
authenticate with the device when we use the correct IP address and the case

132
06:04.210 --> 06:05.360
here what might be the

133
06:05.360 --> 06:10.460
problem is if I just escape out and I try to connect via its domain name this

134
06:10.460 --> 06:11.600
here as we can see is

135
06:11.600 --> 06:15.050
where we're getting the same error message no root to host so what I want to

136
06:15.050 --> 06:16.560
check is in my inventory

137
06:16.560 --> 06:20.610
file what do I have here in the case here I just have the domain name itself we

138
06:20.610 --> 06:21.520
don't have any

139
06:21.520 --> 06:25.950
IP addresses hardcoded here so what I would want to do is check my Etsy host

140
06:25.950 --> 06:27.280
files to ensure that

141
06:27.280 --> 06:31.570
we don't have any missed managed mappings so if I go into my Etsy host file
WEBVTT
X-TIMESTAMP-MAP=LOCAL:00:00:00.000,MPEGTS:900000

141
06:27.280 --> 06:31.570
we don't have any missed managed mappings so if I go into my Etsy host file

142
06:31.570 --> 06:32.880
right here we can indeed

143
06:32.880 --> 06:36.690
see that we have the erroneous mapping the IP address here for yellow box is

144
06:36.690 --> 06:38.240
ending in .136 when

145
06:38.240 --> 06:43.040
it should be ending in .135 so let's just modify this to 135 and let's just

146
06:43.040 --> 06:44.480
save the changes if I

147
06:44.480 --> 06:49.200
now try to ping the yellow box via its domain name now we have connectivity

148
06:49.200 --> 06:50.880
similarly if I try to

149
06:50.880 --> 06:56.700
SSH in directly we can SSH in directly to the yellow box now and as such if I

150
06:56.700 --> 06:57.600
try to run my

151
06:57.600 --> 07:02.320
Ansible playbook once again and to enter now we can see that the command is
WEBVTT
X-TIMESTAMP-MAP=LOCAL:00:00:00.000,MPEGTS:900000

151
06:57.600 --> 07:02.320
Ansible playbook once again and to enter now we can see that the command is

152
07:02.320 --> 07:03.840
correctly executing

153
07:03.840 --> 07:08.140
now one other common issue we may have with our connections failing is the user

154
07:08.140 --> 07:08.800
that we happen to

155
07:08.800 --> 07:12.870
be using that is running Ansible that is if that user does not have super user

156
07:12.870 --> 07:14.160
privileges the ability

157
07:14.160 --> 07:18.940
to use the sudo command certain tasks may actually fail so say for example on

158
07:18.940 --> 07:20.160
the blue box here I have

159
07:20.160 --> 07:24.410
this martin accounts if I go into my playbook here and I maybe modify the

160
07:24.410 --> 07:26.080
output so that we try to

161
07:26.080 --> 07:30.010
list the contents of the root directory which is going to require super user
WEBVTT
X-TIMESTAMP-MAP=LOCAL:00:00:00.000,MPEGTS:900000

161
07:26.080 --> 07:30.010
list the contents of the root directory which is going to require super user

162
07:30.010 --> 07:30.880
access so let me

163
07:30.880 --> 07:34.990
just change this to my blue box right here and inside the Ansible CFG file I'll

164
07:34.990 --> 07:35.920
change the remote

165
07:35.920 --> 07:40.810
user to be the martin accounts now right now if I just try to run the playbook

166
07:40.810 --> 07:41.680
as it is we're going

167
07:41.680 --> 07:46.240
to get permission denied because I didn't actually supply a passphrase and as

168
07:46.240 --> 07:47.680
such the user martin

169
07:47.680 --> 07:51.170
doesn't actually have password authentication configured and we can check this

170
07:51.170 --> 07:51.760
by going to the

171
07:51.760 --> 07:55.650
device here if your login is martin we can see here we're in martin's home

172
07:55.650 --> 07:56.800
directory but if we do

173
07:56.800 --> 08:01.920
an ls-la notice we do not have that hidden SSH directory whereby we'd actually
WEBVTT
X-TIMESTAMP-MAP=LOCAL:00:00:00.000,MPEGTS:900000

173
07:56.800 --> 08:01.920
an ls-la notice we do not have that hidden SSH directory whereby we'd actually

174
08:01.920 --> 08:03.360
have the authorized

175
08:03.360 --> 08:08.240
key file compare that to say if I log out and if I log in as the Ansible user

176
08:08.240 --> 08:12.440
but in the Ansible users home directory we can see we do have that dot ssh

177
08:12.440 --> 08:13.920
directory right here

178
08:13.920 --> 08:17.200
and we actually have the authorized key file right here indicating that we do

179
08:17.200 --> 08:17.680
have

180
08:17.680 --> 08:21.760
passwordless authentication configured for this particular user not in the case

181
08:21.760 --> 08:22.800
of the martin user

182
08:22.800 --> 08:26.920
now if we go back what I could do then is just specify that I want to ask for

183
08:26.920 --> 08:27.840
the password by

184
08:27.840 --> 08:31.490
saying -k for martin so we type in martin's password which in my case here is
WEBVTT
X-TIMESTAMP-MAP=LOCAL:00:00:00.000,MPEGTS:900000

184
08:27.840 --> 08:31.490
saying -k for martin so we type in martin's password which in my case here is

185
08:31.490 --> 08:32.880
just simply martin one

186
08:32.880 --> 08:37.280
and hit enter notice in the case here it specifies that we are missing the sudo

187
08:37.280 --> 08:37.920
password that is

188
08:37.920 --> 08:42.560
because the martin user is not configured for support user access now in this

189
08:42.560 --> 08:43.440
case here I could

190
08:43.440 --> 08:48.480
say ask become pass and this is going to ask me to give a super user password

191
08:48.480 --> 08:49.920
and attempt to use

192
08:49.920 --> 08:54.510
super user privileges so if I hit enter and I type in martin's password notice

193
08:54.510 --> 08:55.360
we still get

194
08:55.360 --> 08:59.830
permission denied and that is because we actually have not set up super user

195
08:59.830 --> 09:00.240
access
WEBVTT
X-TIMESTAMP-MAP=LOCAL:00:00:00.000,MPEGTS:900000

195
08:59.830 --> 09:00.240
access

196
09:00.240 --> 09:04.860
authentication for this particular user now if I happen to go to my device sudo

197
09:04.860 --> 09:05.920
vice sudo we can

198
09:05.920 --> 09:10.390
actually see here we have configured two accounts to be able to run root

199
09:10.390 --> 09:11.920
commands anywhere that is

200
09:11.920 --> 09:15.830
going to be the root user as well as the Ansible user so potentially what I

201
09:15.830 --> 09:16.720
could do is I could

202
09:16.720 --> 09:21.260
add the martin accounts to have the same type of access as the root account and

203
09:21.260 --> 09:22.240
Ansible that is

204
09:22.240 --> 09:26.070
to be able to run super user commands without the need for a password and then

205
09:26.070 --> 09:26.880
I could just like

206
09:26.880 --> 09:32.140
before effectively copy over my keys over onto the blue box device from the
WEBVTT
X-TIMESTAMP-MAP=LOCAL:00:00:00.000,MPEGTS:900000

206
09:26.880 --> 09:32.140
before effectively copy over my keys over onto the blue box device from the

207
09:32.140 --> 09:33.520
control node so that we

208
09:33.520 --> 09:37.030
could log in via the Ansible control node as this particular user and have

209
09:37.030 --> 09:38.800
those elevated privileges

210
09:38.800 --> 09:43.360
now one thing to note here notice we do not have the nugget user account here

211
09:43.360 --> 09:44.320
however if I happen

212
09:44.320 --> 09:48.320
to go back into my Ansible configuration file and I change the remote user to n

213
09:48.320 --> 09:49.760
ugget user if I run

214
09:49.760 --> 09:53.760
the playbook we seem to get the same type of problem we have our permission

215
09:53.760 --> 09:54.720
denied and that is

216
09:54.720 --> 09:58.620
because the nugget user is not configured for passwordless authentication which

217
09:58.620 --> 09:59.520
we can see right here we

218
09:59.520 --> 10:03.390
are prompted to enter a password however if I prompt to ask for the password
WEBVTT
X-TIMESTAMP-MAP=LOCAL:00:00:00.000,MPEGTS:900000

218
09:59.520 --> 10:03.390
are prompted to enter a password however if I prompt to ask for the password

219
10:03.390 --> 10:04.400
for that user via

220
10:04.400 --> 10:09.150
dash k and I just type in password one notice it's still saying here missing

221
10:09.150 --> 10:10.640
sudo password but

222
10:10.640 --> 10:16.600
however if I change this to ask be come pass and I type in password one again

223
10:16.600 --> 10:17.440
now the command

224
10:17.440 --> 10:21.990
actually works so notice we have a lot of potentially confusing issues in the

225
10:21.990 --> 10:24.000
case here the nugget user

226
10:24.000 --> 10:29.530
whilst it was not configured for passwordless root access as specified in via

227
10:29.530 --> 10:30.880
sudo this particular
WEBVTT
X-TIMESTAMP-MAP=LOCAL:00:00:00.000,MPEGTS:900000

227
10:29.530 --> 10:30.880
sudo this particular

228
10:30.880 --> 10:35.660
user here happens to be a member of a group that does have super user access

229
10:35.660 --> 10:37.200
and we can force Ansible

230
10:37.200 --> 10:42.220
to elevate privileges by specifying that we ask for the become password whereas

231
10:42.220 --> 10:43.360
in the case of the

232
10:43.360 --> 10:47.840
martin user the martin user was not specified for super user access either by

233
10:47.840 --> 10:48.800
using the vice

234
10:48.800 --> 10:52.950
sudo command nor did martin have any group membership to his super user

235
10:52.950 --> 10:54.640
accounts so martin couldn't even

236
10:54.640 --> 10:59.080
log in as the super user by manually providing a password so I know that was a

237
10:59.080 --> 10:59.840
lot to get to

238
10:59.840 --> 11:03.790
within this particular video just understand that with respect to Ansible there
WEBVTT
X-TIMESTAMP-MAP=LOCAL:00:00:00.000,MPEGTS:900000

238
10:59.840 --> 11:03.790
within this particular video just understand that with respect to Ansible there

239
11:03.790 --> 11:04.320
are many

240
11:04.320 --> 11:07.930
different reasons for a potential connection failure it's just really important

241
11:07.930 --> 11:08.480
that we go

242
11:08.480 --> 11:12.270
through things methodically and we really test the basics can be actually

243
11:12.270 --> 11:13.280
connected to the vice

244
11:13.280 --> 11:18.110
via a ping message can it be ping that via a domain name as well as its IP

245
11:18.110 --> 11:19.520
address if we happen to

246
11:19.520 --> 11:22.990
have an issue via one or the other then maybe that identifies a potential

247
11:22.990 --> 11:24.880
problem maybe your DNS

248
11:24.880 --> 11:29.210
configuration settings are erroneous perhaps you'd maybe just specify the wrong

249
11:29.210 --> 11:30.160
IP address in your
WEBVTT
X-TIMESTAMP-MAP=LOCAL:00:00:00.000,MPEGTS:900000

249
11:29.210 --> 11:30.160
IP address in your

250
11:30.160 --> 11:34.670
Ansible inventory can we actually authenticate to the target device who is

251
11:34.670 --> 11:35.680
actually configured to

252
11:35.680 --> 11:39.550
be the remote user who is Ansible trying to log in as and maybe if some play

253
11:39.550 --> 11:40.720
books are working but

254
11:40.720 --> 11:44.730
others which require super user access or not we want to determine if that

255
11:44.730 --> 11:45.440
remote user that

256
11:45.440 --> 11:50.030
we're attempting to log in as does actually have access to elevated privileges

257
11:50.030 --> 11:50.880
and this can be

258
11:50.880 --> 11:54.790
different whether they happen to be attempting passwordless login whereby they

259
11:54.790 --> 11:55.680
just seamlessly

260
11:55.680 --> 12:00.070
log in and are able to execute super user commands or perhaps maybe they can
WEBVTT
X-TIMESTAMP-MAP=LOCAL:00:00:00.000,MPEGTS:900000

260
11:55.680 --> 12:00.070
log in and are able to execute super user commands or perhaps maybe they can

261
12:00.070 --> 12:01.360
only log in and use

262
12:01.360 --> 12:05.840
elevated privileges when they manually supply that become password lots of

263
12:05.840 --> 12:07.040
potential problems

264
12:07.040 --> 12:10.880
with potential solutions the key thing to note here is really just to try to

265
12:10.880 --> 12:11.600
walk through things

266
12:11.600 --> 12:16.680
methodically and really really really read the output of the error message

267
12:16.680 --> 12:18.000
provided by Ansible.
