File tree Expand file tree Collapse file tree 2 files changed +24
-26
lines changed Expand file tree Collapse file tree 2 files changed +24
-26
lines changed Original file line number Diff line number Diff line change @@ -121,18 +121,21 @@ def do_edit(self, context):
121
121
'''
122
122
cfg = corosync .conf ()
123
123
try :
124
- utils .edit_file_ext (cfg , template = '' )
124
+ rc = utils .edit_file_ext (cfg , corosync .is_valid_corosync_conf )
125
+ if rc and len (utils .list_cluster_nodes ()) > 1 :
126
+ logger .warning (f"\" { cfg } \" has changed, should be synced with other nodes" )
127
+ logger .info ("Use \" crm corosync diff\" to show the difference" )
128
+ logger .info ("Use \" crm corosync push\" to sync" )
125
129
except IOError as e :
126
130
context .fatal_error (str (e ))
127
131
128
132
def do_show (self , context ):
129
133
'''
130
134
Display the corosync configuration.
131
135
'''
132
- cfg = corosync .conf ()
133
- if not os .path .isfile (cfg ):
134
- context .fatal_error ("No corosync configuration found on this node." )
135
- utils .page_string (open (cfg ).read ())
136
+ if not corosync .is_valid_corosync_conf ():
137
+ return False
138
+ utils .page_file (corosync .conf ())
136
139
137
140
def do_log (self , context ):
138
141
'''
Original file line number Diff line number Diff line change @@ -1221,31 +1221,26 @@ def edit_file(fname):
1221
1221
return ext_cmd_nosudo ("%s %s" % (config .core .editor , fname ))
1222
1222
1223
1223
1224
- def edit_file_ext (fname , template = '' ) :
1224
+ def edit_file_ext (fname : str , validator : typing . Callable [[ typing . IO ], bool ] = None ) -> bool :
1225
1225
'''
1226
1226
Edit a file via a temporary file.
1227
1227
Raises IOError on any error.
1228
+
1229
+ returns True if the file was changed
1228
1230
'''
1229
- if not os .path .isfile (fname ):
1230
- s = template
1231
- else :
1232
- s = open (fname ).read ()
1233
- filehash = hash (s )
1234
- tmpfile = str2tmp (s )
1235
- try :
1236
- try :
1237
- if edit_file (tmpfile ) != 0 :
1238
- return
1239
- s = open (tmpfile , 'r' ).read ()
1240
- if hash (s ) == filehash : # file unchanged
1241
- return
1242
- f2 = open (fname , 'w' )
1243
- f2 .write (s )
1244
- f2 .close ()
1245
- finally :
1246
- os .unlink (tmpfile )
1247
- except OSError as e :
1248
- raise IOError (e )
1231
+ with create_tempfile () as tmpfile :
1232
+ shutil .copyfile (fname , tmpfile )
1233
+ if edit_file (tmpfile ) != 0 :
1234
+ raise IOError (f"Cannot edit file \" { fname } \" " )
1235
+ changed_data = read_from_file (tmpfile )
1236
+ source_data = read_from_file (fname )
1237
+ if hash (changed_data ) != hash (source_data ):
1238
+ if validator and not validator (tmpfile ):
1239
+ return False
1240
+ shutil .copyfile (tmpfile , fname )
1241
+ return True
1242
+ else :
1243
+ return False
1249
1244
1250
1245
1251
1246
def need_pager (s , w , h ):
You can’t perform that action at this time.
0 commit comments