ocaml/xapi/cli_frontend.ml | 6 +-
ocaml/xapi/cli_operations.ml | 2 +-
ocaml/xapi/cli_printer.ml | 87 ++++++++++++++--------------
ocaml/xapi/xapi_cli.ml | 129 +++++++++++++++++++-----------------------
ocaml/xe-cli/newcli.ml | 20 +------
5 files changed, 106 insertions(+), 138 deletions(-)
# HG changeset patch
# User Mike McClurg <mike.mcclurg@xxxxxxxxxx>
# Date 1286985041 -3600
# Node ID 8ca7127d9f3909ed9459ed49e0cc6dbff3171afd
# Parent d29070e598d7c64cdddbebf7362aff6188a559ec
CA-26252: Removed all traces of compat-mode. FIXED.
Signed-off-by: Mike McClurg <mike.mcclurg@xxxxxxxxxx>
diff --git a/ocaml/xapi/cli_frontend.ml b/ocaml/xapi/cli_frontend.ml
--- a/ocaml/xapi/cli_frontend.ml
+++ b/ocaml/xapi/cli_frontend.ml
@@ -2592,10 +2592,8 @@
printer (Cli_printer.PList (make_list vm_cmds))
end
-let cmd_help printer minimal is_compat cmd =
- if is_compat
- then geneva_help printer minimal cmd
- else rio_help printer minimal cmd
+let cmd_help printer minimal cmd =
+ rio_help printer minimal cmd
diff --git a/ocaml/xapi/cli_operations.ml b/ocaml/xapi/cli_operations.ml
--- a/ocaml/xapi/cli_operations.ml
+++ b/ocaml/xapi/cli_operations.ml
@@ -462,7 +462,7 @@
end
-let stdparams = ["server";"password";"port";"username"; "minimal"; "force";
"multiple"; "compat"; "all"; "message-priority"]
+let stdparams = ["server";"password";"port";"username"; "minimal"; "force";
"multiple"; "all"; "message-priority"]
(* This goes through the list of parameters, extracting any of the form
map-name-key=value *)
(* where map-name is the name of a map in the class. These will be used to set
the key-value *)
diff --git a/ocaml/xapi/cli_printer.ml b/ocaml/xapi/cli_printer.ml
--- a/ocaml/xapi/cli_printer.ml
+++ b/ocaml/xapi/cli_printer.ml
@@ -36,14 +36,14 @@
let n = len - String.length s in
s^(String.make (if n>0 then n else 0) ' ')
-let rec multi_line_record is_compat r =
- let maxlen = 4 + List.fold_left max 0 (List.map (fun (a,b) -> String.length
a) r) in
- let indent fs = List.map (fun (f,v)->(pad_string f maxlen,v)) fs in
- let r =
- match r with
- ((k,v)::fs) -> ((if is_compat then k else (pad_rhs k
maxlen)),v)::(indent fs)
- | _ -> r in
- (String.concat "\n" (List.map (fun (f,v)->f^": "^v) r))^"\n"
+let rec multi_line_record r =
+ let maxlen = 4 + List.fold_left max 0 (List.map (fun (a,b) ->
String.length a) r) in
+ let indent fs = List.map (fun (f,v)->(pad_string f maxlen,v)) fs in
+ let r =
+ match r with
+ ((k,v)::fs) -> ((pad_rhs k maxlen),v)::(indent
fs)
+ | _ -> r in
+ (String.concat "\n" (List.map (fun (f,v)->f^": "^v) r))^"\n"
(* Used to escape commas in --minimal mode *)
let escape_commas x =
@@ -53,42 +53,41 @@
] in
Stringext.String.escaped ~rules x
-let make_printer is_compat sock minimal =
- let buffer = ref [] in
+let make_printer sock minimal =
+ let buffer = ref [] in
- let multi_line_xapi_minimal pval =
- match pval with
- | (PTable rs) ->
- if (List.length rs > 0) && (List.length (List.hd rs) > 0) then
- let names = List.map (fun r -> snd (List.hd r)) rs in
- let escaped_names = List.map escape_commas names in
- buffer := (String.concat "," escaped_names) :: !buffer
- | (PList ss) ->
- let escaped_ss = List.map escape_commas ss in
- buffer := (String.concat "," escaped_ss) :: !buffer
- | _ ->
- ()
- in
-
- let multi_line_xapi pval =
- match pval with
- | (PTable rs) ->
- List.iter (fun l -> marshal sock (Command (Print (l ^ "\n"))))
(List.map (multi_line_record is_compat) rs)
- | (PList ss) ->
- List.iter (fun l -> marshal sock (Command (Print (l)))) ss
- | (PMsg ss) ->
- marshal sock (Command (Print ss))
- | (PStderr ss) ->
- marshal sock (Command (PrintStderr ss))
- in
-
- let minimal_flush () =
- marshal sock (Command(Print (String.concat "," (!buffer))))
- in
-
- let flush () =
- ()
- in
+ let multi_line_xapi_minimal pval =
+ match pval with
+ | (PTable rs) ->
+ if (List.length rs > 0) && (List.length
(List.hd rs) > 0) then
+ let names = List.map (fun r -> snd
(List.hd r)) rs in
+ let escaped_names = List.map
escape_commas names in
+ buffer := (String.concat ","
escaped_names) :: !buffer
+ | (PList ss) ->
+ let escaped_ss = List.map escape_commas ss in
+ buffer := (String.concat "," escaped_ss) ::
!buffer
+ | _ ->
+ ()
+ in
- if minimal then (multi_line_xapi_minimal, minimal_flush) else
(multi_line_xapi, flush)
+ let multi_line_xapi pval =
+ match pval with
+ | (PTable rs) ->
+ List.iter (fun l -> marshal sock (Command
(Print (l ^ "\n")))) (List.map multi_line_record rs)
+ | (PList ss) ->
+ List.iter (fun l -> marshal sock (Command
(Print (l)))) ss
+ | (PMsg ss) ->
+ marshal sock (Command (Print ss))
+ | (PStderr ss) ->
+ marshal sock (Command (PrintStderr ss))
+ in
+ let minimal_flush () =
+ marshal sock (Command(Print (String.concat "," (!buffer))))
+ in
+
+ let flush () =
+ ()
+ in
+
+ if minimal then (multi_line_xapi_minimal, minimal_flush) else
(multi_line_xapi, flush)
diff --git a/ocaml/xapi/xapi_cli.ml b/ocaml/xapi/xapi_cli.ml
--- a/ocaml/xapi/xapi_cli.ml
+++ b/ocaml/xapi/xapi_cli.ml
@@ -38,43 +38,41 @@
let towrite = string ^ "\r\n" in
ignore(Unix.write s towrite 0 (String.length towrite))
-let forward args s session is_compat =
- (* Reject forwarding cli commands if the request came in from a tcp socket *)
- if not (Context.is_unix_socket s) then raise (Api_errors.Server_error
(Api_errors.host_is_slave,[Pool_role.get_master_address ()]));
- let host = Pool_role.get_master_address () in
- let port = !Xapi_globs.https_port in
- let st_proc = Xmlrpcclient.get_reusable_stunnel
- ~write_to_log:Xmlrpcclient.write_to_log host port in
- finally
- (fun () ->
- let ms = st_proc.Stunnel.fd in
- (* Headers *)
- let body = String.concat "\r\n" args in
- let body =
- if is_compat then "compat\r\n"^body else body in
- let body =
- match session with None -> body | Some s ->
("session_id="^(Ref.string_of s)^"\r\n")^body in
- List.iter (write ms)
- ["POST /cli HTTP/1.1";"Content-Length: "^(string_of_int (String.length
body)); ""];
- ignore_int (Unix.write ms body 0 (String.length body));
- let (_ : int * int) = unmarshal_protocol ms in
- marshal_protocol ms;
- Unixext.proxy (Unix.dup s) (Unix.dup ms)
- )
- (fun () ->
- if Xmlrpcclient.check_reusable st_proc.Stunnel.fd then begin
- Stunnel_cache.add st_proc
- end else begin
- debug "Disconnecting CLI because it is not reusable";
- Stunnel.disconnect st_proc
- end
- )
+let forward args s session =
+ (* Reject forwarding cli commands if the request came in from a tcp
socket *)
+ if not (Context.is_unix_socket s) then raise (Api_errors.Server_error
(Api_errors.host_is_slave,[Pool_role.get_master_address ()]));
+ let host = Pool_role.get_master_address () in
+ let port = !Xapi_globs.https_port in
+ let st_proc = Xmlrpcclient.get_reusable_stunnel
+ ~write_to_log:Xmlrpcclient.write_to_log host port in
+ finally
+ (fun () ->
+ let ms = st_proc.Stunnel.fd in
+ (* Headers *)
+ let body = String.concat "\r\n" args in
+ let body =
+ match session with None -> body | Some s ->
("session_id="^(Ref.string_of s)^"\r\n")^body in
+ List.iter (write ms)
+ ["POST /cli HTTP/1.1";"Content-Length:
"^(string_of_int (String.length body)); ""];
+ ignore_int (Unix.write ms body 0 (String.length body));
+ let (_ : int * int) = unmarshal_protocol ms in
+ marshal_protocol ms;
+ Unixext.proxy (Unix.dup s) (Unix.dup ms)
+ )
+ (fun () ->
+ if Xmlrpcclient.check_reusable st_proc.Stunnel.fd then
begin
+ Stunnel_cache.add st_proc
+ end else begin
+ debug "Disconnecting CLI because it is not
reusable";
+ Stunnel.disconnect st_proc
+ end
+ )
(* Check that keys are all present in cmd *)
let check_required_keys cmd keylist =
let (_: (string * string) list) = get_params cmd in
- List.map (get_reqd_param cmd) keylist
+ List.map (get_reqd_param cmd) keylist
let with_session ~local rpc u p session f =
let session, logout =
@@ -94,11 +92,11 @@
(fun () -> f session)
(fun () -> do_logout ())
-let do_rpcs req s username password minimal is_compat cmd session args =
+let do_rpcs req s username password minimal cmd session args =
let cmdname = get_cmdname cmd in
let cspec =
try
- Hashtbl.find (if is_compat then cmdtable_geneva else cmdtable) cmdname
+ Hashtbl.find cmdtable cmdname
with
Not_found -> raise (Unknown_command cmdname) in
(* Forward if we're not the master, and if the cspec doesn't contain the key
'neverforward' *)
@@ -110,10 +108,10 @@
let generic_rpc = Helpers.get_rpc () in
let rpc = generic_rpc req s in
if do_forward
- then with_session ~local:false rpc username password session (fun sess ->
forward args s (Some sess) is_compat)
+ then with_session ~local:false rpc username password session (fun sess ->
forward args s (Some sess))
else
begin
- let (printer,flush) = Cli_printer.make_printer is_compat s minimal in
+ let (printer,flush) = Cli_printer.make_printer s minimal in
let flush_and_marshall() = flush (); marshal s (Command(Exit 0)) in
begin
match cspec.implementation with
@@ -138,13 +136,13 @@
warn "Uncaught exception: Unix_error '%s' '%s' '%s'"
(Unix.error_message a) b c;
raise e
-let do_help is_compat cmd minimal s =
- let (printer,flush)=Cli_printer.make_printer is_compat s minimal in
- cmd_help printer minimal is_compat cmd;
+let do_help cmd minimal s =
+ let (printer,flush)=Cli_printer.make_printer s minimal in
+ cmd_help printer minimal cmd;
flush ();
marshal s (Command (Exit 0))
-let exec_command req is_compat cmd s session args =
+let exec_command req cmd s session args =
let params = get_params cmd in
let minimal =
if (List.mem_assoc "minimal" params)
@@ -163,8 +161,8 @@
else
debug "xe %s %s" cmd_name (String.concat " " (List.map (fun (k,
v) -> k ^ "=" ^ v) params));
if cmd_name = "help"
- then do_help is_compat cmd minimal s
- else do_rpcs req s u p minimal is_compat cmd session args
+ then do_help cmd minimal s
+ else do_rpcs req s u p minimal cmd session args
let get_line str i =
@@ -190,36 +188,25 @@
marshal sock (Command (Print msg))) errs;
marshal sock (Command (Exit 1))
-(* If compatability mode is requested, then 'compat' is the first line sent
- * by the thin cli. If we find this, set is_compat true and strip the line
- * from the arguments *)
let do_handle (req:Http.request) str (s:Unix.file_descr) =
- let rec get_args n cur =
- let (next,arg) = get_line str n in
- let arg = zap_cr arg in
- match next with
- Some i -> get_args i (arg::cur)
- | None -> (arg::cur)
- in
- let args = List.rev (get_args 0 []) in
- let (session,args) =
- try
- let line = List.hd args in
- if String.startswith "session_id=" line
- then (Some (Ref.of_string (String.sub line 11 (String.length line -
11))), List.tl args)
- else (None,args)
- with _ -> (None,args) in
- let (is_compat,args) =
- try
- let is_compat = List.hd args = "compat" in
- (is_compat, if is_compat then List.tl args else args)
- with _ -> (false,args) in
- let cmd =
- if is_compat
- then parse_commandline ("xe"::args)
- else parse_commandline_2 ("xe"::args) in
- ignore(exec_command req is_compat cmd s session args)
-
+ let rec get_args n cur =
+ let (next,arg) = get_line str n in
+ let arg = zap_cr arg in
+ match next with
+ Some i -> get_args i (arg::cur)
+ | None -> (arg::cur)
+ in
+ let args = List.rev (get_args 0 []) in
+ let (session,args) =
+ try
+ let line = List.hd args in
+ if String.startswith "session_id=" line
+ then (Some (Ref.of_string (String.sub line 11
(String.length line - 11))), List.tl args)
+ else (None,args)
+ with _ -> (None,args) in
+ let cmd = parse_commandline_2 ("xe"::args) in
+ ignore(exec_command req cmd s session args)
+
let exception_handler s e =
debug "Xapi_cli.exception_handler: Got exception %s"
(ExnHelper.string_of_exn e);
log_backtrace ();
diff --git a/ocaml/xe-cli/newcli.ml b/ocaml/xe-cli/newcli.ml
--- a/ocaml/xe-cli/newcli.ml
+++ b/ocaml/xe-cli/newcli.ml
@@ -22,7 +22,6 @@
let xapiserver = ref "127.0.0.1"
let xapiuname = ref "root"
let xapipword = ref "null"
-let xapicompatmode = ref false
let xapipasswordfile = ref ""
let xapicompathost = ref "127.0.0.1"
let xapiport = ref None
@@ -50,18 +49,8 @@
exception Usage
let usage () =
- if !xapicompatmode
- then
- begin
- error "COMPATABILITY MODE\n";
- error "Usage: %s <cmd> [-h server] [-p port] ([-u username] [-pw
password] or [-pwf <password file>]) <other arguments>\n" Sys.argv.(0);
- error "\nA full list of commands can be obtained by running \n\t%s help
-h <server> -p <port>\n" Sys.argv.(0)
- end
- else
- begin
- error "Usage: %s <cmd> [-s server] [-p port] ([-u username] [-pw
password] or [-pwf <password file>]) <other arguments>\n" Sys.argv.(0);
- error "\nA full list of commands can be obtained by running \n\t%s help
-s <server> -p <port>\n" Sys.argv.(0)
- end
+ error "Usage: %s <cmd> [-s server] [-p port] ([-u username] [-pw password]
or [-pwf <password file>]) <other arguments>\n" Sys.argv.(0);
+ error "\nA full list of commands can be obtained by running \n\t%s help -s
<server> -p <port>\n" Sys.argv.(0)
let is_localhost ip = ip = "127.0.0.1"
@@ -153,9 +142,6 @@
| "password" -> xapipword := v
| "passwordfile" -> xapipasswordfile := v
| "nossl" -> xeusessl := not(bool_of_string v)
- | "compat" ->
- xapicompatmode := (try (bool_of_string v) with _ -> false);
- reserve_args := (k ^ "=" ^ v) :: !reserve_args
| "debug" -> xedebug := (try bool_of_string v with _ -> false)
| "debugonfail" -> xedebugonfail := (try bool_of_string v with _ ->
false)
| _ -> raise Not_found);
@@ -170,7 +156,6 @@
| "-pw" :: pw :: xs -> Some("password", pw, xs)
| "-pwf" :: pwf :: xs -> Some("passwordfile", pwf, xs)
| "--nossl" :: xs -> Some("nossl", "true", xs)
- | "--compat" :: xs -> Some("compat", "true", xs)
| "--debug" :: xs -> Some("debug", "true", xs)
| "--debug-on-fail" :: xs -> Some("debugonfail", "true", xs)
| "-h" :: h :: xs -> Some("server", h, xs)
@@ -475,7 +460,6 @@
let ic, oc = open_channels () in
Printf.fprintf oc "POST /cli HTTP/1.0\r\n";
let args = args @ [("username="^ !xapiuname);("password="^
!xapipword)] in
- let args = if !xapicompatmode then "compat"::args else args in
let args = String.concat "\n" args in
Printf.fprintf oc "User-agent: xe-cli/Unix/%d.%d\r\n" major minor;
Printf.fprintf oc "content-length: %d\r\n\r\n" (String.length args);
_______________________________________________
xen-api mailing list
xen-api@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/mailman/listinfo/xen-api
|