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 <crobinso@redhat.com>
This commit is contained in:
Cole Robinson
2025-10-01 14:43:23 -04:00
committed by rwmjones
parent 630628af78
commit d42227e083
2 changed files with 4 additions and 103 deletions

2
common

Submodule common updated: 7ecf3992b9...90399dd18a

View File

@@ -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<subscription-manager>.
See L<virt-builder(1)/SUBSCRIPTION-MANAGER> for the format of
the C<SELECTOR> 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<subscription-manager>.
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<subscription-manager>.";
};
{ 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<subscription-manager>.";
};
{ 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<subscription-manager>.
See L<virt-builder(1)/SUBSCRIPTION-MANAGER> for the format of
the C<SELECTOR> 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)