/[smeserver]/rpms/smeserver-yum/sme10/smeserver-yum-2.6.0-bz11300-improve-postupdate-events.patch
ViewVC logotype

Contents of /rpms/smeserver-yum/sme10/smeserver-yum-2.6.0-bz11300-improve-postupdate-events.patch

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.1 - (show annotations) (download)
Mon Feb 15 22:11:02 2021 UTC (3 years, 9 months ago) by jpp
Branch: MAIN
CVS Tags: smeserver-yum-2_6_0-60_el7_sme, smeserver-yum-2_6_0-48_el7_sme, smeserver-yum-2_6_0-46_el7_sme, smeserver-yum-2_6_0-52_el7_sme, smeserver-yum-2_6_0-62_el7_sme, smeserver-yum-2_6_0-49_el7_sme, smeserver-yum-2_6_0-44_el7_sme, smeserver-yum-2_6_0-47_el7_sme, smeserver-yum-2_6_0-51_el7_sme, smeserver-yum-2_6_0-45_el7_sme, smeserver-yum-2_6_0-50_el7_sme, smeserver-yum-2_6_0-61_el7_sme, smeserver-yum-2_6_0-64_el7_sme, smeserver-yum-2_6_0-58_el7_sme, smeserver-yum-2_6_0-55_el7_sme, smeserver-yum-2_6_0-57_el7_sme, smeserver-yum-2_6_0-54_el7_sme, smeserver-yum-2_6_0-56_el7_sme, smeserver-yum-2_6_0-53_el7_sme, smeserver-yum-2_6_0-59_el7_sme, smeserver-yum-2_6_0-63_el7_sme
* Mon Feb 15 2021 Jean-Philipe Pialasse <tests@pialasse.com> 2.6.0-44.sme
- fix poor handling of service adjusting and action order [SME: 11300]
  now a temp event is created
  also better logging, better handling of update vs removal

1 diff -Nur smeserver-yum-2.6.0.old/root/usr/lib/yum-plugins/smeserver.py smeserver-yum-2.6.0/root/usr/lib/yum-plugins/smeserver.py
2 --- smeserver-yum-2.6.0.old/root/usr/lib/yum-plugins/smeserver.py 2021-02-15 17:05:10.702000000 -0500
3 +++ smeserver-yum-2.6.0/root/usr/lib/yum-plugins/smeserver.py 2021-02-15 17:07:34.080000000 -0500
4 @@ -1,6 +1,9 @@
5 # vim: noexpandtab tabstop=4
6
7 import os
8 +import shutil
9 +import subprocess
10 +import syslog
11 from yum.constants import *
12 from yum.plugins import PluginYumExit
13 from yum.plugins import TYPE_CORE
14 @@ -21,8 +24,6 @@
15
16 eventlist = dict()
17 actionlist = dict()
18 -actionlistpre = dict()
19 -actionlistpost = dict()
20 templateslist = dict()
21 serviceslist = dict()
22
23 @@ -62,13 +63,35 @@
24 servicenames['qpsmtpd']='qpsmtpd'
25
26 smechange = False
27 +smechangelist = dict()
28 ourfile = False
29 erasing = False
30 DEBUG = False
31
32 def log(s):
33 - if DEBUG:
34 + if DEBUG :
35 print s
36 +def createevent():
37 + if os.path.isdir('/etc/e-smith/events/temp'):
38 + shutil.rmtree('/etc/e-smith/events/temp')
39 + os.makedirs('/etc/e-smith/events/temp/services2adjust', 0o777)
40 + os.makedirs('/etc/e-smith/events/temp/templates2expand', 0o777)
41 +
42 +def addtemplate2expand(template):
43 + #check filename
44 + head_tail = os.path.split(template)
45 + head = head_tail[0];
46 + filename = head_tail[1];
47 + # create dir
48 + if not os.path.isdir('/etc/e-smith/events/temp/templates2expand' + head):
49 + os.makedirs('/etc/e-smith/events/temp/templates2expand' + head, 0o777)
50 + #touch file
51 + fname= '/etc/e-smith/events/temp/templates2expand'+ template
52 + fhandle = open(fname, 'a')
53 + try:
54 + os.utime(fname, None)
55 + finally:
56 + fhandle.close()
57
58 def report_yum_status(status):
59 fileHandle = open(status_file, 'w')
60 @@ -100,6 +123,7 @@
61 report_yum_status('postresolve')
62
63 def pretrans_hook(conduit):
64 +# we might need to change the strategy here to make a difference between update and removal.
65 #transaction set states
66 #TS_UPDATE = 10
67 #TS_INSTALL = 20
68 @@ -122,20 +146,23 @@
69 global smechange
70 global eventlist
71 global actionlist
72 - global actionlistpre
73 - global actionlistpost
74 global templateslist
75 global serviceslist
76 global erasing
77
78 + # reinstall are not listed there so already skipped
79 + # downgrade are going there
80 + # update are going there, we filter them out
81 + # real removal are the real deal there ; downgrade are played like if they were removal
82 for tsmem in removes:
83 erasing = True
84 (n, a, e, v, r) = tsmem.po.pkgtup
85 - #only for debug
86 - log('**Package: ' + tsmem.name + ' remove')
87 + if tsmem.output_state == TS_UPDATED :
88 + # if we are actually updating then we are not removing, and new package will do better... skipping
89 + log('skiping as updating ==> state ' + str(tsmem.po.state) + " RPM current state" + str(tsmem.current_state) + " RPM output state" + str(tsmem.output_state))
90 + continue
91 + log('**Package: ' + tsmem.name + ' to be removed')
92 smeevent = tsmem.name + '-update'
93 - #only for debug
94 - #log(smeevent)
95 if os.path.isdir(events_path + os.sep + smeevent):
96 tmppath = events_path + os.sep + smeevent + os.sep
97 eventlist[tsmem.name] = smeevent
98 @@ -147,8 +174,7 @@
99 mytmptemplate = os.path.join(subdir, file).replace(tmppathtmpl,os.sep)
100 if not templateslist.has_key(mytmptemplate):
101 templateslist[mytmptemplate]=mytmptemplate
102 - #tmptmplpath = subdir + os.sep + file
103 - log(" template " + file)
104 + log(" template " + mytmptemplate)
105
106 # nothing for actions ???
107
108 @@ -173,12 +199,29 @@
109 else:
110 if (n.startswith('smeserver') or n.startswith('e-smith')) and not n.startswith('smeserver-locale'):
111 smechange = True
112 + smechangelist[n]=str(tsmem.po.state) + " " + str(tsmem.current_state) + " " + str(tsmem.output_state)
113 + log("smechange set to True because of " + n + " with " + str(tsmem.po.state) + " " + str(tsmem.current_state) + " " + str(tsmem.output_state) )
114
115 #only for debug
116 log('## smechange: '+str(smechange))
117 log('## eventlist: '+ str(eventlist.keys()))
118 log('## templateslist: '+str(templateslist.keys()))
119 - log('## serviceslist: '+str(serviceslist.keys()))
120 + log('## serviceslist: '+str(serviceslist.items()))
121 + log('## smechangelist: ' + str(smechangelist.keys()))
122 +
123 + # would it be a good idea to do some action/event there to stop service being removed ?
124 + # create an empty temp event
125 + print "Creating temporary event 'temp' and populating it..."
126 + createevent()
127 + if len(serviceslist)>0:
128 + print " Adding services to adjust"
129 + for kservices in serviceslist:
130 + log(" " + kservices + ": " + serviceslist[kservices])
131 + os.symlink(serviceslist[kservices], '/etc/e-smith/events/temp/services2adjust/' + kservices)
132 +
133 + # execute the event ; should we really wait ??
134 + print "Executing signal-event temp before uninstalling ..........."
135 + os.spawnl(os.P_WAIT,signal_event,signal_event, 'temp')
136
137 def posttrans_hook(conduit):
138 report_yum_status('posttrans')
139 @@ -188,8 +231,6 @@
140 global smechange
141 global eventlist
142 global actionlist
143 - global actionlistpre
144 - global actionlistpost
145 global templateslist
146 global serviceslist
147 global erasing
148 @@ -197,42 +238,34 @@
149
150 for tsmem in ts.getMembers():
151 (n, a, e, v, r) = tsmem.po.pkgtup
152 - #print 'smechange: '+str(smechange)
153
154 # we're upgrading/installing/removing a rebootpkgs package.. a reboot is required
155 for pkg in rebootpkgs:
156 if n.startswith(pkg):
157 log('**Package: ' + tsmem.name + ' triggers reboot')
158 - #smechange = True
159 # we do some exclusions -devel -doc ...
160 if pkg in rebootpkgsexclude:
161 - #print 'lista'
162 cont=False
163 for name in rebootpkgsexclude[pkg]:
164 - #print name
165 if n.startswith(pkg + name):
166 - #print pkg + name + ' => smechange'
167 cont=True
168 - #smechange = True
169 if cont:
170 # this is an exception we do not need reboot : -devel, -doc ...
171 continue
172 # either no exception or does not fit exceptions: we need reboot
173 smechange = True
174 + smechangelist[n]=str(tsmem.po.state) + " " + str(tsmem.current_state) + " " + str(tsmem.output_state)
175 + log("smechange set to True because of " + n + " with " + str(tsmem.po.state) + " " + str(tsmem.current_state) + " " + str(tsmem.output_state))
176 + #log("smechange set to True because of " + pkg)
177
178 # check if we're upgrading a restartpkgs rpm
179 for pkg in restartpkgs:
180 - #print pkg
181 if n.startswith(pkg):
182 if pkg in servicenames:
183 - #print 'lista'
184 for name in servicenames[pkg]:
185 - #print name
186 if not serviceslist.has_key(name):
187 serviceslist[name] = 'restart'
188 else:
189 - #only for debug
190 - #print pkg
191 if not serviceslist.has_key(pkg):
192 serviceslist[pkg] = 'restart'
193
194 @@ -244,7 +277,6 @@
195 # if not smechange and not erasing:
196 if True:
197
198 - #smeevent = 'yum-reconfigure-' + tsmem.name
199 smeevent = tsmem.name + '-update'
200 if os.path.isdir(events_path + os.sep + smeevent):
201 tmppath = events_path + os.sep + smeevent + os.sep
202 @@ -256,19 +288,8 @@
203
204 mytmpaction = os.path.realpath(os.readlink(tmppath + f).replace("..",events_path))
205 #log(" link " + f + ": " + mytmpaction)
206 + actionlist[f]=mytmpaction
207
208 - if f < "S05generic_template_expand":
209 - if not actionlistpre.has_key(mytmpaction):
210 - actionlistpre[mytmpaction] = mytmpaction
211 - log(" action Pre : " + f + " -> " + mytmpaction)
212 - elif f > "S90adjust-services":
213 - if not actionlistpost.has_key(mytmpaction):
214 - actionlistpost[mytmpaction] = mytmpaction
215 - log(" action Post : " + f + " -> " + mytmpaction)
216 - else:
217 - if not actionlist.has_key(mytmpaction):
218 - actionlist[mytmpaction] = mytmpaction
219 - log(" action : " + f + " -> " + mytmpaction)
220
221 if os.path.isdir(tmppath + "templates2expand" + os.sep):
222 tmppathtmpl = tmppath + "templates2expand" + os.sep
223 @@ -277,7 +298,6 @@
224 mytmptemplate = os.path.join(subdir, file).replace(tmppathtmpl,os.sep)
225 if not templateslist.has_key(mytmptemplate):
226 templateslist[mytmptemplate]=mytmptemplate
227 - #tmptmplpath = subdir + os.sep + file
228 log(" template " + mytmptemplate)
229
230 if os.path.isdir(tmppath + "services2adjust" + os.sep):
231 @@ -298,18 +318,16 @@
232 else:
233 if (n.startswith('smeserver') or n.startswith('e-smith')) and not n.startswith('smeserver-locale'):
234 smechange = True
235 -
236 + smechangelist[n]=str(tsmem.po.state) + " " + str(tsmem.current_state) + " " + str(tsmem.output_state)
237 + log("smechange set to True because of " + n + " with " + str(tsmem.po.state) + " " + str(tsmem.current_state) + " " + str(tsmem.output_state) )
238
239 #only for debug
240 log('## smechange: '+str(smechange))
241 - #print 'post-trans'
242 log('## eventlist: '+ str(eventlist))
243 - log('## actions early: ' + str(actionlistpre.keys()))
244 log('## templateslist: '+str(templateslist.keys()))
245 - log('## actions: ' + str(actionlist.keys()))
246 - log('## serviceslist: '+str(serviceslist.keys()))
247 - log('## actions late: ' + str(actionlistpost.keys()))
248 -
249 + log('## serviceslist: '+str(serviceslist.items()))
250 + log('## actions ALL: ' + str(actionlist.keys()))
251 + log('## smechangelist: ' + str(smechangelist.keys()))
252
253 # check if smechange is true or if eventlist has items.. in both cases we must initialize databases
254 if smechange == True or len(eventlist)>0:
255 @@ -317,62 +335,58 @@
256 os.spawnl(os.P_WAIT, initialize_database, initialize_database)
257
258 # just in case we add systemd-default and systemd-reload
259 - if not actionlist.has_key('/etc/e-smith/events/actions/systemd-default'):
260 - actionlist['/etc/e-smith/events/actions/systemd-default'] = '/etc/e-smith/events/actions/systemd-default'
261 - if not actionlist.has_key('/etc/e-smith/events/actions/systemd-reload'):
262 - actionlist['/etc/e-smith/events/actions/systemd-reload'] = '/etc/e-smith/events/actions/systemd-reload'
263 -
264 - # now, if smechange is false (no reboot needed), we can execute actions, expan templates and adjust services
265 - #if not smechange:
266 -
267 - if len(actionlistpre)>0:
268 - print "Executing early actions"
269 - for kactions in actionlistpre:
270 - log(" " + kactions)
271 - if os.path.isfile(kactions):
272 - os.spawnl(os.P_WAIT, kactions, kactions)
273 + if not actionlist.has_key('S88systemd-default'):
274 + actionlist['S88systemd-default'] = '/etc/e-smith/events/actions/systemd-default'
275 + if not actionlist.has_key('S89systemd-reload'):
276 + actionlist['S89systemd-reload'] = '/etc/e-smith/events/actions/systemd-reload'
277 +
278 + # now, if smechange is false (no reboot needed), we can execute actions, expand templates and adjust services
279 +
280 + # create an empty temp event
281 + print "Creating temporary event 'temp' and populating it..."
282 + createevent()
283 +
284 + # fill it with our list of actions
285 + if len(actionlist)>0:
286 + print " Adding actions to execute"
287 + for kactions in actionlist:
288 + log(" " + kactions)
289 + if os.path.isfile(actionlist[kactions]):
290 + os.symlink(actionlist[kactions],'/etc/e-smith/events/temp/' + kactions)
291
292 + # fill it with our list of templates to expand
293 if len(templateslist)>0:
294 - print "Expanding templates"
295 + print " Adding templates to expand"
296 for ktemplates in templateslist:
297 - log(" " + ktemplates)
298 + log(" " + ktemplates)
299 mytemplatedir = '/etc/e-smith/templates/' + ktemplates
300 mytemplatemeta = '/etc/e-smith/templates.metadata/' + ktemplates
301 if os.path.exists(mytemplatedir) or os.path.exists(mytemplatemeta):
302 - os.spawnl(os.P_WAIT, expand_template, expand_template, ktemplates)
303 -
304 - if len(actionlist)>0:
305 - print "Executing actions"
306 - for kactions in actionlist:
307 - log(" " + kactions)
308 - if os.path.isfile(kactions):
309 - os.spawnl(os.P_WAIT, kactions, kactions,"post-upgrade")
310 + addtemplate2expand(ktemplates)
311
312 if len(serviceslist)>0:
313 - print "Adjusting services"
314 + print " Adding services to adjust"
315 for kservices in serviceslist:
316 - print kservices + ": " + serviceslist[kservices]
317 - os.spawnl(os.P_WAIT, service, service, kservices, serviceslist[kservices])
318 + log(" " + kservices + ": " + serviceslist[kservices])
319 + os.symlink(serviceslist[kservices], '/etc/e-smith/events/temp/services2adjust/' + kservices)
320
321 - if len(actionlistpost)>0:
322 - print "Executing late actions"
323 - for kactions in actionlistpost:
324 - log(" " + kactions)
325 - if os.path.isfile(kactions):
326 - os.spawnl(os.P_WAIT, kactions, kactions)
327 + # execute the event ; should we really wait ??
328 + print "Executing signal-event temp ..........."
329 + os.spawnl(os.P_WAIT,signal_event,signal_event, 'temp')
330
331 if smechange:
332 os.spawnl(os.P_WAIT, config_set, config_set, 'set', 'UnsavedChanges', 'yes')
333 os.spawnl(os.P_WAIT, navigation_conf, navigation_conf)
334 + syslog.syslog('Needs signal-event post-upgrade; signal-event reboot because of: ' + str(smechangelist.keys()) )
335 print "Reload yum db for server-manager"
336 os.spawnl(os.P_WAIT, systemctl, systemctl, 'restart', 'yum')
337
338 def close_hook(conduit):
339 if ourfile and os.path.isfile('/var/run/yum.status'):
340 os.unlink('/var/run/yum.status')
341 - log("***Close***")
342
343 if smechange:
344 + print "\nThe following rpms urge the need of a reboot:\n" + str(smechangelist.keys())
345 print "\n=============================================================="
346 print "WARNING: You now need to run BOTH of the following commands"
347 print "to ensure consistent system state:\n"

admin@koozali.org
ViewVC Help
Powered by ViewVC 1.2.1 RSS 2.0 feed