From d42227e083a75f681608e2fd49ded898636581e0 Mon Sep 17 00:00:00 2001 From: Cole Robinson Date: Wed, 1 Oct 2025 14:43:23 -0400 Subject: [PATCH] generator: deprecate and remove --sm-* options virt-customize and friends have the following options: --sm-register --sm-unregister --sm-attach --sm-remove --sm-credentials These run `subscription-manager` commands inside the VM, which is often necessary to get working package install for RHEL VMs. These were added in 2015ish. Conceptually I understand why we might want native support in the tools: virt-customize and virt-builder have package management knowledge, and for some distros subscription-manager is necessary. But this support doesn't add much convenience over calling the commands directly with `--run-command`. And on RHEL10, subscription-manager was reworked and complete drops the backing commands for `--sm-attach` and `--sm-remove`. We _could_ make this code smarter, try to detect that situation, and not error when subscription-manager is new enough. But if subscription-manager itself doesn't care about maintaining that kind of compat, I'm not sure why we should care either. Instead we decided to just rip it all out and document the alternatives. common module is updated to sync related changes: Cole Robinson (1): mlcustomize: deprecate and remove --sm-* options Richard W.M. Jones (3): mlstdutils: Export List.find_opt daemon, generator: Use power of 2 for initial size of Hashtbl.create mlcustomize/inject_virtio_win.ml: Use viostor.inf instead of guestor https://issues.redhat.com/browse/RHEL-113397 https://issues.redhat.com/browse/RHEL-113398 Signed-off-by: Cole Robinson --- common | 2 +- generator/customize.ml | 105 ++--------------------------------------- 2 files changed, 4 insertions(+), 103 deletions(-) diff --git a/common b/common index 7ecf3992b..90399dd18 160000 --- a/common +++ b/common @@ -1 +1 @@ -Subproject commit 7ecf3992b997d2774bece091a93b5b86cf5cd592 +Subproject commit 90399dd18a27cb179fe86d71da2f806e63f5bb12 diff --git a/generator/customize.ml b/generator/customize.ml index ae640571b..19511dcdc 100644 --- a/generator/customize.ml +++ b/generator/customize.ml @@ -49,7 +49,6 @@ and op_type = | UserPasswordSelector of string (* user:selector *) | SSHKeySelector of string (* user:selector *) | StringFn of (string * string) (* string, function name *) -| SMPoolSelector of string (* pool selector *) let ops = [ { op_name = "append-line"; @@ -474,48 +473,6 @@ It cannot delete directories, only regular files. =back|}; }; - { op_name = "sm-attach"; - op_type = SMPoolSelector "SELECTOR"; - op_discrim = "`SMAttach"; - op_exclude_v2v = false; - op_shortdesc = "Attach to a subscription-manager pool"; - op_pod_longdesc = "\ -Attach to a pool using C. - -See L for the format of -the C field."; - }; - - { op_name = "sm-register"; - op_type = Unit; - op_discrim = "`SMRegister"; - op_exclude_v2v = false; - op_shortdesc = "Register using subscription-manager"; - op_pod_longdesc = "\ -Register the guest using C. - -This requires credentials being set using I<--sm-credentials>."; - }; - - { op_name = "sm-remove"; - op_type = Unit; - op_discrim = "`SMRemove"; - op_exclude_v2v = false; - op_shortdesc = "Remove all the subscriptions"; - op_pod_longdesc = "\ -Remove all the subscriptions from the guest using -C."; - }; - - { op_name = "sm-unregister"; - op_type = Unit; - op_discrim = "`SMUnregister"; - op_exclude_v2v = false; - op_shortdesc = "Unregister using subscription-manager"; - op_pod_longdesc = "\ -Unregister the guest using C."; - }; - { op_name = "ssh-inject"; op_type = SSHKeySelector "USER[:SELECTOR]"; op_discrim = "`SSHInject"; @@ -647,7 +604,6 @@ type flag = { and flag_type = | FlagBool of bool (* boolean is the default value *) | FlagPasswordCrypto of string -| FlagSMCredentials of string let flags = [ { flag_name = "no-logfile"; @@ -709,17 +665,6 @@ The option is a no-op for guests that do not support SELinux.|}; flag_pod_longdesc = "This is a compatibility option that does nothing."; }; - { flag_name = "sm-credentials"; - flag_type = FlagSMCredentials "SELECTOR"; - flag_ml_var = "sm_credentials"; - flag_shortdesc = "Credentials for subscription-manager"; - flag_pod_longdesc = "\ -Set the credentials for C. - -See L for the format of -the C field."; - }; - ] let rec generate_customize_cmdline_mli () = @@ -775,8 +720,6 @@ let rec argspec ?(v2v = false) () = pr " let %s = ref %b in\n" var default | { flag_type = FlagPasswordCrypto _; flag_ml_var = var } -> pr " let %s = ref None in\n" var - | { flag_type = FlagSMCredentials _; flag_ml_var = var } -> - pr " let %s = ref None in\n" var ) flags; pr {| let rec get_ops () = { @@ -951,20 +894,6 @@ let rec argspec ?(v2v = false) () = pr " s_\"%s\"\n" shortdesc; pr " ),\n"; pr " Some %S, %S, %b;\n" v longdesc exclude_v2v - | { op_type = SMPoolSelector v; op_name = name; op_discrim = discrim; - op_exclude_v2v = exclude_v2v; - op_shortdesc = shortdesc; op_pod_longdesc = longdesc } -> - pr " (\n"; - pr " [ L\"%s\" ],\n" name; - pr " Getopt.String (\n"; - pr " s_\"%s\",\n" v; - pr " fun s ->\n"; - pr " let sel = Subscription_manager.parse_pool_selector s in\n"; - pr " List.push_front (%s sel) ops\n" discrim; - pr " ),\n"; - pr " s_\"%s\"\n" shortdesc; - pr " ),\n"; - pr " Some %S, %S, %b;\n" v longdesc exclude_v2v ) ops; List.iter ( @@ -993,20 +922,6 @@ let rec argspec ?(v2v = false) () = pr " s_\"%s\"\n" shortdesc; pr " ),\n"; pr " Some %S, %S, false;\n" v longdesc - | { flag_type = FlagSMCredentials v; flag_ml_var = var; - flag_name = name; flag_shortdesc = shortdesc; - flag_pod_longdesc = longdesc } -> - pr " (\n"; - pr " [ L\"%s\" ],\n" name; - pr " Getopt.String (\n"; - pr " s_\"%s\",\n" v; - pr " fun s ->\n"; - pr " %s := Some (Subscription_manager.parse_credentials_selector s)\n" - var; - pr " ),\n"; - pr " s_\"%s\"\n" shortdesc; - pr " ),\n"; - pr " Some %S, %S, false;\n" v longdesc ) flags; pr " ] @@ -1026,8 +941,7 @@ let rec argspec ?(v2v = false) () = | { op_type = TargetLinks _; } | { op_type = PasswordSelector _; } | { op_type = UserPasswordSelector _; } - | { op_type = SSHKeySelector _; } - | { op_type = SMPoolSelector _; } -> () + | { op_type = SSHKeySelector _; } -> () ) ops; pr {| ] in @@ -1118,10 +1032,6 @@ and generate_ops_struct_decl () = discrim name v | { op_type = StringFn (v, _); op_discrim = discrim; op_name = name } -> pr " | %s of string\n (* --%s %s *)\n" discrim name v - | { op_type = SMPoolSelector v; op_discrim = discrim; - op_name = name } -> - pr " | %s of Subscription_manager.sm_pool\n (* --%s %s *)\n" - discrim name v ) ops; pr "]\n"; @@ -1135,10 +1045,6 @@ and generate_ops_struct_decl () = flag_name = name } -> pr " %s : Password.password_crypto option;\n (* --%s %s *)\n" var name v - | { flag_type = FlagSMCredentials v; flag_ml_var = var; - flag_name = name } -> - pr " %s : Subscription_manager.sm_credentials option;\n (* --%s %s *)\n" - var name v ) flags; pr "}\n" @@ -1153,7 +1059,7 @@ let generate_customize_synopsis_pod ?(v2v = false) () = Some (n, sprintf "[--%s]" n) | { op_type = String v | StringPair v | StringTriplet v | StringList v | TargetLinks v | PasswordSelector v | UserPasswordSelector v - | SSHKeySelector v | StringFn (v, _) | SMPoolSelector v; + | SSHKeySelector v | StringFn (v, _); op_name = n } -> Some (n, sprintf "[--%s %s]" n v) ) ops @ @@ -1163,8 +1069,6 @@ let generate_customize_synopsis_pod ?(v2v = false) () = n, sprintf "[--%s]" n | { flag_type = FlagPasswordCrypto v; flag_name = n } -> n, sprintf "[--%s %s]" n v - | { flag_type = FlagSMCredentials v; flag_name = n } -> - n, sprintf "[--%s %s]" n v ) flags in (* Print the option names in the synopsis, line-wrapped. *) @@ -1198,7 +1102,7 @@ let generate_customize_options_pod ?(v2v = false) () = Some (n, sprintf "B<--%s>" n, ld) | { op_type = String v | StringPair v | StringTriplet v | StringList v | TargetLinks v | PasswordSelector v | UserPasswordSelector v - | SSHKeySelector v | StringFn (v, _) | SMPoolSelector v; + | SSHKeySelector v | StringFn (v, _); op_name = n; op_pod_longdesc = ld } -> Some (n, sprintf "B<--%s> %s" n v, ld) ) ops @ @@ -1209,9 +1113,6 @@ let generate_customize_options_pod ?(v2v = false) () = | { flag_type = FlagPasswordCrypto v; flag_name = n; flag_pod_longdesc = ld } -> n, sprintf "B<--%s> %s" n v, ld - | { flag_type = FlagSMCredentials v; - flag_name = n; flag_pod_longdesc = ld } -> - n, sprintf "B<--%s> %s" n v, ld ) flags in let cmp (arg1, _, _) (arg2, _, _) = compare (String.lowercase_ascii arg1) (String.lowercase_ascii arg2)