Hi Rich, I tried to implement the logging feature, but I can't though compiling with this patch now, could you please give me some comments? The error message is below, --- ocamlfind ocamlopt -g -warn-error CDEFLMPSUVYZX -package unix -I ../src/.libs -I ../ocaml -c sysprep_operation.ml -o sysprep_operation.cmx File "sysprep_operation.ml", line 1, characters 0-1: Error: The implementation sysprep_operation.ml does not match the interface sysprep_operation.cmi: Type declarations do not match: type operation = { name : string; pod_description : string; extra_args : ((Arg.key * Arg.spec * Arg.doc) * string) list; perform : Guestfs.guestfs -> string -> bool -> flag list; } is not included in type operation = { name : string; pod_description : string; extra_args : ((Arg.key * Arg.spec * Arg.doc) * string) list; perform : Guestfs.guestfs -> string -> flag list; } The types for field perform are not equal. make[2]: *** [sysprep_operation.cmx] Error 2 make[2]: Leaving directory `/work/git/libguestfs/sysprep' Thanks a lot, Wanlong Gao Signed-off-by: Wanlong Gao <gaowanlong at cn.fujitsu.com> --- sysprep/main.ml | 9 ++++++--- sysprep/sysprep_operation.ml | 6 +++--- sysprep/sysprep_operation_cron_spool.ml | 10 ++++++++-- sysprep/sysprep_operation_dhcp_client_state.ml | 9 +++++++-- sysprep/sysprep_operation_dhcp_server_state.ml | 8 ++++++-- sysprep/sysprep_operation_hostname.ml | 4 +++- sysprep/sysprep_operation_logfiles.ml | 11 +++++++++-- sysprep/sysprep_operation_mail_spool.ml | 9 +++++++-- sysprep/sysprep_operation_net_hwaddr.ml | 3 ++- sysprep/sysprep_operation_random_seed.ml | 3 ++- sysprep/sysprep_operation_rhn_systemid.ml | 8 ++++++-- sysprep/sysprep_operation_script.ml | 2 +- sysprep/sysprep_operation_smolt_uuid.ml | 8 ++++++-- sysprep/sysprep_operation_ssh_hostkeys.ml | 8 ++++++-- sysprep/sysprep_operation_udev_persistent_net.ml | 7 +++++-- sysprep/sysprep_operation_utmp.ml | 7 +++++-- sysprep/sysprep_operation_yum_uuid.ml | 8 ++++++-- sysprep/utils.ml | 4 ++++ 18 files changed, 92 insertions(+), 32 deletions(-) diff --git a/sysprep/main.ml b/sysprep/main.ml index d06b0d2..7d3ce5e 100644 --- a/sysprep/main.ml +++ b/sysprep/main.ml @@ -29,7 +29,7 @@ let () = Sysprep_operation.bake () (* Command line argument parsing. *) let prog = Filename.basename Sys.executable_name -let debug_gc, operations, g, selinux_relabel +let debug_gc, operations, g, selinux_relabel, show_log let debug_gc = ref false in let domain = ref None in let dryrun = ref false in @@ -40,6 +40,7 @@ let debug_gc, operations, g, selinux_relabel let selinux_relabel = ref `Auto in let trace = ref false in let verbose = ref false in + let show_log = ref false in let display_version () let g = new G.guestfs () in @@ -112,6 +113,7 @@ let debug_gc, operations, g, selinux_relabel "-V", Arg.Unit display_version, " Display version and exit"; "--version", Arg.Unit display_version, " -\"-"; "-x", Arg.Set trace, " Enable tracing of libguestfs calls"; + "--log", Arg.Set show_log, " Enable operation logging"; ] @ Sysprep_operation.extra_args () in let anon_fun _ = raise (Arg.Bad "extra parameter on the command line") in let usage_msg @@ -162,6 +164,7 @@ read the man page virt-sysprep(1). let selinux_relabel = !selinux_relabel in let trace = !trace in let verbose = !verbose in + let show_log = !show_log in (* Connect to libguestfs. *) let g = new G.guestfs () in @@ -170,7 +173,7 @@ read the man page virt-sysprep(1). add g dryrun; g#launch (); - debug_gc, operations, g, selinux_relabel + debug_gc, operations, g, selinux_relabel, show_log let () (* Inspection. *) @@ -194,7 +197,7 @@ let () ) mps; (* Perform the operations. *) - let flags = Sysprep_operation.perform_operations ?operations g root in + let flags = Sysprep_operation.perform_operations ?operations g root show_log in (* Parse flags. *) let relabel = ref false in diff --git a/sysprep/sysprep_operation.ml b/sysprep/sysprep_operation.ml index 3fd8afc..65013c5 100644 --- a/sysprep/sysprep_operation.ml +++ b/sysprep/sysprep_operation.ml @@ -24,7 +24,7 @@ type operation = { name : string; pod_description : string; extra_args : ((Arg.key * Arg.spec * Arg.doc) * string) list; - perform : Guestfs.guestfs -> string -> flag list; + perform : Guestfs.guestfs -> string -> bool -> flag list; } let ops = ref [] @@ -169,7 +169,7 @@ let list_operations () *) List.iter (fun op -> print_endline op.name ) !ops -let perform_operations ?operations g root +let perform_operations ?operations g root show_log assert !baked; let ops @@ -182,7 +182,7 @@ let perform_operations ?operations g root List.map ( fun op -> (* eprintf "calling %S.perform g %S\n" op.name root; *) - op.perform g root + op.perform g root show_log ) ops in List.flatten flags diff --git a/sysprep/sysprep_operation_cron_spool.ml b/sysprep/sysprep_operation_cron_spool.ml index e67688b..6bd6ec4 100644 --- a/sysprep/sysprep_operation_cron_spool.ml +++ b/sysprep/sysprep_operation_cron_spool.ml @@ -17,11 +17,17 @@ *) open Sysprep_operation +open Utils module G = Guestfs -let cron_spool_perform g root - Array.iter g#rm_rf (g#glob_expand "/var/spool/cron/*"); +let cron_spool_perform g root show_log + let files = g#glob_expand "/var/spool/cron/*" in + Array.iter ( + fun glob -> + g#rm glob + logging show_log "Deleted %s" glob + ) files; [] let cron_spool_op = { diff --git a/sysprep/sysprep_operation_dhcp_client_state.ml b/sysprep/sysprep_operation_dhcp_client_state.ml index e3e87cb..17bb65b 100644 --- a/sysprep/sysprep_operation_dhcp_client_state.ml +++ b/sysprep/sysprep_operation_dhcp_client_state.ml @@ -20,11 +20,16 @@ open Sysprep_operation module G = Guestfs -let dhcp_client_state_perform g root +let dhcp_client_state_perform g root show_log let typ = g#inspect_get_type root in if typ = "linux" then ( List.iter ( - fun glob -> Array.iter g#rm_rf (g#glob_expand glob) + fun glob -> + Array.iter ( + fun glob2 -> + g#rm_rf glob2 + logging show_log "Deleted %s" glob2 + ) (g#glob_expand glob) ) [ "/var/lib/dhclient/*"; "/var/lib/dhcp/*" (* RHEL 3 *) ] ); [] diff --git a/sysprep/sysprep_operation_dhcp_server_state.ml b/sysprep/sysprep_operation_dhcp_server_state.ml index c5251ce..604a601 100644 --- a/sysprep/sysprep_operation_dhcp_server_state.ml +++ b/sysprep/sysprep_operation_dhcp_server_state.ml @@ -20,8 +20,12 @@ open Sysprep_operation module G = Guestfs -let dhcp_server_state_perform g root - Array.iter g#rm_rf (g#glob_expand "/var/lib/dhcpd/*"); +let dhcp_server_state_perform g root show_log + Array.iter ( + fun glob -> + g#rm_rf glob + logging show_log "Deleted %s" glob + ) (g#glob_expand "/var/lib/dhcpd/*"); [] let dhcp_server_state_op = { diff --git a/sysprep/sysprep_operation_hostname.ml b/sysprep/sysprep_operation_hostname.ml index 1472a1c..caf5358 100644 --- a/sysprep/sysprep_operation_hostname.ml +++ b/sysprep/sysprep_operation_hostname.ml @@ -25,7 +25,7 @@ module G = Guestfs let hostname = ref "localhost.localdomain" -let hostname_perform g root +let hostname_perform g root show_log let typ = g#inspect_get_type root in let distro = g#inspect_get_distro root in match typ, distro with @@ -42,10 +42,12 @@ let hostname_perform g root String.concat "\n" lines ^ sprintf "\nHOSTNAME=%s\n" !hostname in g#write filename file; + logging show_log "Modified HOSTNAME to %s" !hostname [ `Created_files ] | "linux", ("debian"|"ubuntu") -> g#write "/etc/hostname" !hostname; + logging show_log "Modified HOSTNAME to %s" !hostname [ `Created_files ] | _ -> [] diff --git a/sysprep/sysprep_operation_logfiles.ml b/sysprep/sysprep_operation_logfiles.ml index b4c6ea9..ba7fe45 100644 --- a/sysprep/sysprep_operation_logfiles.ml +++ b/sysprep/sysprep_operation_logfiles.ml @@ -50,10 +50,17 @@ let globs = List.sort compare [ ] let globs_as_pod = String.concat "\n" (List.map ((^) " ") globs) -let logfiles_perform g root +let logfiles_perform g root show_log let typ = g#inspect_get_type root in if typ = "linux" then ( - List.iter (fun glob -> Array.iter g#rm_rf (g#glob_expand glob)) globs + List.iter ( + fun glob -> + Array.iter ( + fun glob2 -> + g#rm_rf glob2 + logging show_log "Deleted %s\n" glob2 + ) (g#glob_expand glob); + ) globs; ); [] diff --git a/sysprep/sysprep_operation_mail_spool.ml b/sysprep/sysprep_operation_mail_spool.ml index 74f2d94..2add3cb 100644 --- a/sysprep/sysprep_operation_mail_spool.ml +++ b/sysprep/sysprep_operation_mail_spool.ml @@ -20,9 +20,14 @@ open Sysprep_operation module G = Guestfs -let mail_spool_perform g root +let mail_spool_perform g root show_log List.iter ( - fun glob -> Array.iter g#rm_rf (g#glob_expand glob) + fun glob -> + Array.iter ( + fun glob2 -> + g#rm_rf glob2 + logging show_log "Deleted %s" glob2 + ) (g#glob_expand glob) ) [ "/var/spool/mail/*"; "/var/mail/*"; diff --git a/sysprep/sysprep_operation_net_hwaddr.ml b/sysprep/sysprep_operation_net_hwaddr.ml index 8aa102a..0a59197 100644 --- a/sysprep/sysprep_operation_net_hwaddr.ml +++ b/sysprep/sysprep_operation_net_hwaddr.ml @@ -21,7 +21,7 @@ open Sysprep_operation module G = Guestfs -let net_hwaddr_perform g root +let net_hwaddr_perform g root show_log let typ = g#inspect_get_type root in let distro = g#inspect_get_distro root in match typ, distro with @@ -36,6 +36,7 @@ let net_hwaddr_perform g root ) lines in let file = String.concat "\n" lines ^ "\n" in g#write filename file + logging show_log "Replaced HWADDR in %s\n" filename ) filenames; if filenames <> [||] then [ `Created_files ] else [] diff --git a/sysprep/sysprep_operation_random_seed.ml b/sysprep/sysprep_operation_random_seed.ml index 989ffe8..6bafa09 100644 --- a/sysprep/sysprep_operation_random_seed.ml +++ b/sysprep/sysprep_operation_random_seed.ml @@ -20,7 +20,7 @@ open Sysprep_operation module G = Guestfs -let random_seed_perform g root +let random_seed_perform g root show_log let typ = g#inspect_get_type root in if typ = "linux" then ( let files = [ @@ -37,6 +37,7 @@ let random_seed_perform g root close_in chan; g#write file buf + logging show_log "Modified %s\n" file ) ) files; [ `Created_files ] diff --git a/sysprep/sysprep_operation_rhn_systemid.ml b/sysprep/sysprep_operation_rhn_systemid.ml index 35849e4..6b55382 100644 --- a/sysprep/sysprep_operation_rhn_systemid.ml +++ b/sysprep/sysprep_operation_rhn_systemid.ml @@ -20,13 +20,17 @@ open Sysprep_operation module G = Guestfs -let rhn_systemid_perform g root +let rhn_systemid_perform g root show_log let typ = g#inspect_get_type root in let distro = g#inspect_get_distro root in match typ, distro with | "linux", "rhel" -> - (try g#rm "/etc/sysconfig/rhn/systemid" with G.Error _ -> ()); + (try + let file = "/etc/sysconfig/rhn/systemid" in + g#rm file + logging show_log "Deleted %s\n" file + with G.Error _ -> ()); [] | _ -> [] diff --git a/sysprep/sysprep_operation_script.ml b/sysprep/sysprep_operation_script.ml index 977d41f..65b23c6 100644 --- a/sysprep/sysprep_operation_script.ml +++ b/sysprep/sysprep_operation_script.ml @@ -35,7 +35,7 @@ let set_scriptdir dir let scripts = ref [] let add_script script = scripts := script :: !scripts -let rec script_perform (g : Guestfs.guestfs) root +let rec script_perform (g : Guestfs.guestfs) root show_log let scripts = List.rev !scripts in if scripts <> [] then ( (* Create a temporary directory? *) diff --git a/sysprep/sysprep_operation_smolt_uuid.ml b/sysprep/sysprep_operation_smolt_uuid.ml index a85aa9b..78bca48 100644 --- a/sysprep/sysprep_operation_smolt_uuid.ml +++ b/sysprep/sysprep_operation_smolt_uuid.ml @@ -20,14 +20,18 @@ open Sysprep_operation module G = Guestfs -let smolt_uuid_perform g root +let smolt_uuid_perform g root show_log let typ = g#inspect_get_type root in if typ = "linux" then ( let files = [ "/etc/sysconfig/hw-uuid"; "/etc/smolt/uuid"; "/etc/smolt/hw-uuid" ] in List.iter ( - fun file -> try g#rm file with G.Error _ -> () + fun file -> + try + g#rm file + logging show_log "Deleted %s\n" file + with G.Error _ -> () ) files; [] diff --git a/sysprep/sysprep_operation_ssh_hostkeys.ml b/sysprep/sysprep_operation_ssh_hostkeys.ml index 8da405b..cd62342 100644 --- a/sysprep/sysprep_operation_ssh_hostkeys.ml +++ b/sysprep/sysprep_operation_ssh_hostkeys.ml @@ -20,11 +20,15 @@ open Sysprep_operation module G = Guestfs -let ssh_hostkeys_perform g root +let ssh_hostkeys_perform g root show_log let typ = g#inspect_get_type root in if typ <> "windows" then ( let files = g#glob_expand "/etc/ssh/*_host_*" in - Array.iter g#rm files; + Array.iter ( + fun file -> + g#rm file + logging show_log "Deleted %s\n" file + ) files; [] ) else [] diff --git a/sysprep/sysprep_operation_udev_persistent_net.ml b/sysprep/sysprep_operation_udev_persistent_net.ml index e54e140..c4a6696 100644 --- a/sysprep/sysprep_operation_udev_persistent_net.ml +++ b/sysprep/sysprep_operation_udev_persistent_net.ml @@ -20,10 +20,13 @@ open Sysprep_operation module G = Guestfs -let udev_persistent_net_perform g root +let udev_persistent_net_perform g root show_log let typ = g#inspect_get_type root in if typ = "linux" then ( - (try g#rm "/etc/udev/rules.d/70-persistent-net.rules" + (try + let file = "/etc/udev/rules.d/70-persistent-net.rules" in + g#rm file + logging show_log "Deleted %s\n" file with G.Error _ -> ()); [] ) diff --git a/sysprep/sysprep_operation_utmp.ml b/sysprep/sysprep_operation_utmp.ml index 69867e1..2f9394d 100644 --- a/sysprep/sysprep_operation_utmp.ml +++ b/sysprep/sysprep_operation_utmp.ml @@ -20,10 +20,13 @@ open Sysprep_operation module G = Guestfs -let utmp_perform g root +let utmp_perform g root show_log let typ = g#inspect_get_type root in if typ <> "windows" then ( - try g#rm "/var/run/utmp" + try + let file = "/var/run/utmp" in + g#rm file + logging show_log "Deleted %s\n" file with G.Error _ -> () ); [] diff --git a/sysprep/sysprep_operation_yum_uuid.ml b/sysprep/sysprep_operation_yum_uuid.ml index 396cac5..f7940de 100644 --- a/sysprep/sysprep_operation_yum_uuid.ml +++ b/sysprep/sysprep_operation_yum_uuid.ml @@ -20,10 +20,14 @@ open Sysprep_operation module G = Guestfs -let yum_uuid_perform g root +let yum_uuid_perform g root show_log let packager = g#inspect_get_package_management root in if packager = "yum" then ( - (try g#rm "/var/lib/yum/uuid" with G.Error _ -> ()); + (try + let file = "/var/lib/yum/uuid" in + g#rm file + logging show_log "Deleted %s\n" file + with G.Error _ -> ()); [] ) else [] diff --git a/sysprep/utils.ml b/sysprep/utils.ml index dfac57d..55c695a 100644 --- a/sysprep/utils.ml +++ b/sysprep/utils.ml @@ -69,3 +69,7 @@ let string_random8 String.make 1 c ) [1;2;3;4;5;6;7;8] ) + +let logging show_log list + if show_log then + eprintf list -- 1.7.10.rc3
Richard W.M. Jones
2012-Apr-06 08:56 UTC
[Libguestfs] [PATCH] virt-sysprep:add logging feature
On Fri, Apr 06, 2012 at 01:37:33PM +0800, Wanlong Gao wrote:> Hi Rich, > > I tried to implement the logging feature, but I can't though > compiling with this patch now, could you please give me > some comments? > > The error message is below, > --- > ocamlfind ocamlopt -g -warn-error CDEFLMPSUVYZX -package unix -I ../src/.libs -I ../ocaml -c sysprep_operation.ml -o sysprep_operation.cmx > File "sysprep_operation.ml", line 1, characters 0-1: > Error: The implementation sysprep_operation.ml > does not match the interface sysprep_operation.cmi: > Type declarations do not match: > type operation = { > name : string; > pod_description : string; > extra_args : ((Arg.key * Arg.spec * Arg.doc) * string) list; > perform : Guestfs.guestfs -> string -> bool -> flag list; > } > is not included in > type operation = { > name : string; > pod_description : string; > extra_args : ((Arg.key * Arg.spec * Arg.doc) * string) list; > perform : Guestfs.guestfs -> string -> flag list; > } > The types for field perform are not equal.Indeed they are not! The implementation (*.ml) has changed:> - perform : Guestfs.guestfs -> string -> flag list; > + perform : Guestfs.guestfs -> string -> bool -> flag list;but you must make an equivalent change to the interface (in sysprep_operation.mli) -- adding the extra debug flag. May I suggest another way to do this which is a bit more natural. Use a function. Declare it as: type debug_fn = ('a, unit, string, unit) format4 -> 'a type operation = { ... perform : Guestfs.guestfs -> debug:debug_fn -> string -> flag list } Implementations would just do this: let foo_perform g ~debug root debug "I'm calling foo %s" root; ... The main function does this: let debug fs ksprintf (fun str -> if show_log then prerr_endline str) fs ... Sysprep_operations.perform_operations ?operations ~debug g root Note that the debug function prints conditionally, based on whether show_log is set or not. Rich. -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones libguestfs lets you edit virtual machines. Supports shell scripting, bindings from many languages. http://libguestfs.org
Hi Rich, I did with your suggestions, please help reviewing. I got a compiling error, - File "sysprep_operation.mli", line 23, characters 17-19: Error: Unbound type parameter 'a make: *** [sysprep_operation.cmi] Error 2 make: Leaving directory `/work/git/libguestfs/sysprep' - Thanks, Wanlong Gao Signed-off-by: Wanlong Gao <gaowanlong at cn.fujitsu.com> --- sysprep/main.ml | 12 +++++++++--- sysprep/sysprep_operation.ml | 6 ++++-- sysprep/sysprep_operation.mli | 6 ++++-- sysprep/sysprep_operation_cron_spool.ml | 10 ++++++++-- sysprep/sysprep_operation_dhcp_client_state.ml | 9 +++++++-- sysprep/sysprep_operation_dhcp_server_state.ml | 8 ++++++-- sysprep/sysprep_operation_hostname.ml | 4 +++- sysprep/sysprep_operation_logfiles.ml | 11 +++++++++-- sysprep/sysprep_operation_mail_spool.ml | 9 +++++++-- sysprep/sysprep_operation_net_hwaddr.ml | 3 ++- sysprep/sysprep_operation_random_seed.ml | 3 ++- sysprep/sysprep_operation_rhn_systemid.ml | 8 ++++++-- sysprep/sysprep_operation_script.ml | 2 +- sysprep/sysprep_operation_smolt_uuid.ml | 8 ++++++-- sysprep/sysprep_operation_ssh_hostkeys.ml | 8 ++++++-- sysprep/sysprep_operation_udev_persistent_net.ml | 7 +++++-- sysprep/sysprep_operation_utmp.ml | 7 +++++-- sysprep/sysprep_operation_yum_uuid.ml | 8 ++++++-- 18 files changed, 96 insertions(+), 33 deletions(-) diff --git a/sysprep/main.ml b/sysprep/main.ml index d06b0d2..c456521 100644 --- a/sysprep/main.ml +++ b/sysprep/main.ml @@ -29,7 +29,7 @@ let () = Sysprep_operation.bake () (* Command line argument parsing. *) let prog = Filename.basename Sys.executable_name -let debug_gc, operations, g, selinux_relabel +let debug_gc, operations, g, selinux_relabel, show_log let debug_gc = ref false in let domain = ref None in let dryrun = ref false in @@ -40,6 +40,7 @@ let debug_gc, operations, g, selinux_relabel let selinux_relabel = ref `Auto in let trace = ref false in let verbose = ref false in + let show_log = ref false in let display_version () let g = new G.guestfs () in @@ -112,6 +113,7 @@ let debug_gc, operations, g, selinux_relabel "-V", Arg.Unit display_version, " Display version and exit"; "--version", Arg.Unit display_version, " -\"-"; "-x", Arg.Set trace, " Enable tracing of libguestfs calls"; + "--log", Arg.Set show_log, " Enable operation logging"; ] @ Sysprep_operation.extra_args () in let anon_fun _ = raise (Arg.Bad "extra parameter on the command line") in let usage_msg @@ -162,6 +164,7 @@ read the man page virt-sysprep(1). let selinux_relabel = !selinux_relabel in let trace = !trace in let verbose = !verbose in + let show_log = !show_log in (* Connect to libguestfs. *) let g = new G.guestfs () in @@ -170,7 +173,7 @@ read the man page virt-sysprep(1). add g dryrun; g#launch (); - debug_gc, operations, g, selinux_relabel + debug_gc, operations, g, selinux_relabel, show_log let () (* Inspection. *) @@ -194,7 +197,10 @@ let () ) mps; (* Perform the operations. *) - let flags = Sysprep_operation.perform_operations ?operations g root in + let flags = Sysprep_operation.perform_operations ?operations ~debug g root in + + let debug fs + ksprintf (fun str -> if show_log then prerr_endline str) fs in (* Parse flags. *) let relabel = ref false in diff --git a/sysprep/sysprep_operation.ml b/sysprep/sysprep_operation.ml index 3fd8afc..5bb870f 100644 --- a/sysprep/sysprep_operation.ml +++ b/sysprep/sysprep_operation.ml @@ -20,11 +20,13 @@ open Printf type flag = [ `Created_files ] +type debug_fn = ('a, unit, string, unit) format4 -> 'a + type operation = { name : string; pod_description : string; extra_args : ((Arg.key * Arg.spec * Arg.doc) * string) list; - perform : Guestfs.guestfs -> string -> flag list; + perform : Guestfs.guestfs -> debug:debug_fn -> string -> flag list; } let ops = ref [] @@ -169,7 +171,7 @@ let list_operations () *) List.iter (fun op -> print_endline op.name ) !ops -let perform_operations ?operations g root +let perform_operations ?operations ~debug g root assert !baked; let ops diff --git a/sysprep/sysprep_operation.mli b/sysprep/sysprep_operation.mli index 5fe035f..64976a9 100644 --- a/sysprep/sysprep_operation.mli +++ b/sysprep/sysprep_operation.mli @@ -20,6 +20,8 @@ type flag = [ `Created_files ] +type debug_fn = ('a, unit, string, unit) format4 -> 'a + type operation = { name : string; (** Operation name, also used to enable the operation on the command @@ -39,7 +41,7 @@ type operation = { You can decide the types of the arguments, whether they are mandatory etc. *) - perform : Guestfs.guestfs -> string -> flag list; + perform : Guestfs.guestfs -> debug:debug_fn -> string -> flag list; (** The function which is called to perform this operation, when enabled. @@ -95,5 +97,5 @@ val add_to_set : string -> set -> set Note that this will raise [Not_found] if [name] is not a valid operation name. *) -val perform_operations : ?operations:set -> Guestfs.guestfs -> string -> flag list +val perform_operations : ?operations:set -> Guestfs.guestfs -> debug:debug_fn -> string -> flag list (** Perform all operations, or the subset listed in the [operations] set. *) diff --git a/sysprep/sysprep_operation_cron_spool.ml b/sysprep/sysprep_operation_cron_spool.ml index e67688b..b822be7 100644 --- a/sysprep/sysprep_operation_cron_spool.ml +++ b/sysprep/sysprep_operation_cron_spool.ml @@ -17,11 +17,17 @@ *) open Sysprep_operation +open Utils module G = Guestfs -let cron_spool_perform g root - Array.iter g#rm_rf (g#glob_expand "/var/spool/cron/*"); +let cron_spool_perform ~debug g root + let files = g#glob_expand "/var/spool/cron/*" in + Array.iter ( + fun glob -> + g#rm glob + debug "Deleted %s" glob + ) files; [] let cron_spool_op = { diff --git a/sysprep/sysprep_operation_dhcp_client_state.ml b/sysprep/sysprep_operation_dhcp_client_state.ml index e3e87cb..9048edb 100644 --- a/sysprep/sysprep_operation_dhcp_client_state.ml +++ b/sysprep/sysprep_operation_dhcp_client_state.ml @@ -20,11 +20,16 @@ open Sysprep_operation module G = Guestfs -let dhcp_client_state_perform g root +let dhcp_client_state_perform ~debug g root let typ = g#inspect_get_type root in if typ = "linux" then ( List.iter ( - fun glob -> Array.iter g#rm_rf (g#glob_expand glob) + fun glob -> + Array.iter ( + fun glob2 -> + g#rm_rf glob2 + debug "Deleted %s" glob2 + ) (g#glob_expand glob) ) [ "/var/lib/dhclient/*"; "/var/lib/dhcp/*" (* RHEL 3 *) ] ); [] diff --git a/sysprep/sysprep_operation_dhcp_server_state.ml b/sysprep/sysprep_operation_dhcp_server_state.ml index c5251ce..2d72ab7 100644 --- a/sysprep/sysprep_operation_dhcp_server_state.ml +++ b/sysprep/sysprep_operation_dhcp_server_state.ml @@ -20,8 +20,12 @@ open Sysprep_operation module G = Guestfs -let dhcp_server_state_perform g root - Array.iter g#rm_rf (g#glob_expand "/var/lib/dhcpd/*"); +let dhcp_server_state_perform ~debug g root + Array.iter ( + fun glob -> + g#rm_rf glob + debug "Deleted %s" glob + ) (g#glob_expand "/var/lib/dhcpd/*"); [] let dhcp_server_state_op = { diff --git a/sysprep/sysprep_operation_hostname.ml b/sysprep/sysprep_operation_hostname.ml index 1472a1c..26c14a3 100644 --- a/sysprep/sysprep_operation_hostname.ml +++ b/sysprep/sysprep_operation_hostname.ml @@ -25,7 +25,7 @@ module G = Guestfs let hostname = ref "localhost.localdomain" -let hostname_perform g root +let hostname_perform ~debug g root let typ = g#inspect_get_type root in let distro = g#inspect_get_distro root in match typ, distro with @@ -42,10 +42,12 @@ let hostname_perform g root String.concat "\n" lines ^ sprintf "\nHOSTNAME=%s\n" !hostname in g#write filename file; + debug "Modified HOSTNAME to %s" !hostname [ `Created_files ] | "linux", ("debian"|"ubuntu") -> g#write "/etc/hostname" !hostname; + debug "Modified HOSTNAME to %s" !hostname [ `Created_files ] | _ -> [] diff --git a/sysprep/sysprep_operation_logfiles.ml b/sysprep/sysprep_operation_logfiles.ml index b4c6ea9..8bf5838 100644 --- a/sysprep/sysprep_operation_logfiles.ml +++ b/sysprep/sysprep_operation_logfiles.ml @@ -50,10 +50,17 @@ let globs = List.sort compare [ ] let globs_as_pod = String.concat "\n" (List.map ((^) " ") globs) -let logfiles_perform g root +let logfiles_perform ~debug g root let typ = g#inspect_get_type root in if typ = "linux" then ( - List.iter (fun glob -> Array.iter g#rm_rf (g#glob_expand glob)) globs + List.iter ( + fun glob -> + Array.iter ( + fun glob2 -> + g#rm_rf glob2 + debug "Deleted %s\n" glob2 + ) (g#glob_expand glob); + ) globs; ); [] diff --git a/sysprep/sysprep_operation_mail_spool.ml b/sysprep/sysprep_operation_mail_spool.ml index 74f2d94..76cc40b 100644 --- a/sysprep/sysprep_operation_mail_spool.ml +++ b/sysprep/sysprep_operation_mail_spool.ml @@ -20,9 +20,14 @@ open Sysprep_operation module G = Guestfs -let mail_spool_perform g root +let mail_spool_perform ~debug g root List.iter ( - fun glob -> Array.iter g#rm_rf (g#glob_expand glob) + fun glob -> + Array.iter ( + fun glob2 -> + g#rm_rf glob2 + debug "Deleted %s" glob2 + ) (g#glob_expand glob) ) [ "/var/spool/mail/*"; "/var/mail/*"; diff --git a/sysprep/sysprep_operation_net_hwaddr.ml b/sysprep/sysprep_operation_net_hwaddr.ml index 8aa102a..86840c1 100644 --- a/sysprep/sysprep_operation_net_hwaddr.ml +++ b/sysprep/sysprep_operation_net_hwaddr.ml @@ -21,7 +21,7 @@ open Sysprep_operation module G = Guestfs -let net_hwaddr_perform g root +let net_hwaddr_perform ~debug g root let typ = g#inspect_get_type root in let distro = g#inspect_get_distro root in match typ, distro with @@ -36,6 +36,7 @@ let net_hwaddr_perform g root ) lines in let file = String.concat "\n" lines ^ "\n" in g#write filename file + debug "Replaced HWADDR in %s\n" filename ) filenames; if filenames <> [||] then [ `Created_files ] else [] diff --git a/sysprep/sysprep_operation_random_seed.ml b/sysprep/sysprep_operation_random_seed.ml index 989ffe8..1302918 100644 --- a/sysprep/sysprep_operation_random_seed.ml +++ b/sysprep/sysprep_operation_random_seed.ml @@ -20,7 +20,7 @@ open Sysprep_operation module G = Guestfs -let random_seed_perform g root +let random_seed_perform ~debug g root let typ = g#inspect_get_type root in if typ = "linux" then ( let files = [ @@ -37,6 +37,7 @@ let random_seed_perform g root close_in chan; g#write file buf + debug "Modified %s\n" file ) ) files; [ `Created_files ] diff --git a/sysprep/sysprep_operation_rhn_systemid.ml b/sysprep/sysprep_operation_rhn_systemid.ml index 35849e4..c00f262 100644 --- a/sysprep/sysprep_operation_rhn_systemid.ml +++ b/sysprep/sysprep_operation_rhn_systemid.ml @@ -20,13 +20,17 @@ open Sysprep_operation module G = Guestfs -let rhn_systemid_perform g root +let rhn_systemid_perform ~debug g root let typ = g#inspect_get_type root in let distro = g#inspect_get_distro root in match typ, distro with | "linux", "rhel" -> - (try g#rm "/etc/sysconfig/rhn/systemid" with G.Error _ -> ()); + (try + let file = "/etc/sysconfig/rhn/systemid" in + g#rm file + debug "Deleted %s\n" file + with G.Error _ -> ()); [] | _ -> [] diff --git a/sysprep/sysprep_operation_script.ml b/sysprep/sysprep_operation_script.ml index 977d41f..6364a54 100644 --- a/sysprep/sysprep_operation_script.ml +++ b/sysprep/sysprep_operation_script.ml @@ -35,7 +35,7 @@ let set_scriptdir dir let scripts = ref [] let add_script script = scripts := script :: !scripts -let rec script_perform (g : Guestfs.guestfs) root +let rec script_perform ~debug (g : Guestfs.guestfs) root let scripts = List.rev !scripts in if scripts <> [] then ( (* Create a temporary directory? *) diff --git a/sysprep/sysprep_operation_smolt_uuid.ml b/sysprep/sysprep_operation_smolt_uuid.ml index a85aa9b..aad87a5 100644 --- a/sysprep/sysprep_operation_smolt_uuid.ml +++ b/sysprep/sysprep_operation_smolt_uuid.ml @@ -20,14 +20,18 @@ open Sysprep_operation module G = Guestfs -let smolt_uuid_perform g root +let smolt_uuid_perform ~debug g root let typ = g#inspect_get_type root in if typ = "linux" then ( let files = [ "/etc/sysconfig/hw-uuid"; "/etc/smolt/uuid"; "/etc/smolt/hw-uuid" ] in List.iter ( - fun file -> try g#rm file with G.Error _ -> () + fun file -> + try + g#rm file + debug "Deleted %s\n" file + with G.Error _ -> () ) files; [] diff --git a/sysprep/sysprep_operation_ssh_hostkeys.ml b/sysprep/sysprep_operation_ssh_hostkeys.ml index 8da405b..4f3b569 100644 --- a/sysprep/sysprep_operation_ssh_hostkeys.ml +++ b/sysprep/sysprep_operation_ssh_hostkeys.ml @@ -20,11 +20,15 @@ open Sysprep_operation module G = Guestfs -let ssh_hostkeys_perform g root +let ssh_hostkeys_perform ~debug g root let typ = g#inspect_get_type root in if typ <> "windows" then ( let files = g#glob_expand "/etc/ssh/*_host_*" in - Array.iter g#rm files; + Array.iter ( + fun file -> + g#rm file + debug "Deleted %s\n" file + ) files; [] ) else [] diff --git a/sysprep/sysprep_operation_udev_persistent_net.ml b/sysprep/sysprep_operation_udev_persistent_net.ml index e54e140..5b4941e 100644 --- a/sysprep/sysprep_operation_udev_persistent_net.ml +++ b/sysprep/sysprep_operation_udev_persistent_net.ml @@ -20,10 +20,13 @@ open Sysprep_operation module G = Guestfs -let udev_persistent_net_perform g root +let udev_persistent_net_perform ~debug g root let typ = g#inspect_get_type root in if typ = "linux" then ( - (try g#rm "/etc/udev/rules.d/70-persistent-net.rules" + (try + let file = "/etc/udev/rules.d/70-persistent-net.rules" in + g#rm file + debug "Deleted %s\n" file with G.Error _ -> ()); [] ) diff --git a/sysprep/sysprep_operation_utmp.ml b/sysprep/sysprep_operation_utmp.ml index 69867e1..4d4950a 100644 --- a/sysprep/sysprep_operation_utmp.ml +++ b/sysprep/sysprep_operation_utmp.ml @@ -20,10 +20,13 @@ open Sysprep_operation module G = Guestfs -let utmp_perform g root +let utmp_perform ~debug g root let typ = g#inspect_get_type root in if typ <> "windows" then ( - try g#rm "/var/run/utmp" + try + let file = "/var/run/utmp" in + g#rm file + debug "Deleted %s\n" file with G.Error _ -> () ); [] diff --git a/sysprep/sysprep_operation_yum_uuid.ml b/sysprep/sysprep_operation_yum_uuid.ml index 396cac5..3b6738c 100644 --- a/sysprep/sysprep_operation_yum_uuid.ml +++ b/sysprep/sysprep_operation_yum_uuid.ml @@ -20,10 +20,14 @@ open Sysprep_operation module G = Guestfs -let yum_uuid_perform g root +let yum_uuid_perform ~debug g root let packager = g#inspect_get_package_management root in if packager = "yum" then ( - (try g#rm "/var/lib/yum/uuid" with G.Error _ -> ()); + (try + let file = "/var/lib/yum/uuid" in + g#rm file + debug "Deleted %s\n" file + with G.Error _ -> ()); [] ) else [] -- 1.7.10.rc3