Mercurial > hg > Members > anatofuz > ie-virsh
annotate src/command.rs @ 20:da4858f4658d
impl define cmd
author | AnaTofuZ <k198584@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 03 Nov 2020 17:21:27 +0900 |
parents | d37203a877d9 |
children | 9f3d29b8561a |
rev | line source |
---|---|
12 | 1 use super::virsh; |
19 | 2 use super::xml; |
12 | 3 |
17
5477c26e6984
impl sub commands that use uid
AnaTofuZ <k198584@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
4 pub fn list(user_name: &'static str) { |
12 | 5 let (ldump_msg, vm_list_strs) = virsh::get_vm_list(user_name); |
6 println!("{}", ldump_msg.info_msg); | |
7 println!("{}", ldump_msg.border_line); | |
8 for vm_info in vm_list_strs { | |
9 println!("{}", vm_info); | |
10 } | |
11 } | |
13 | 12 |
19 | 13 pub fn define(user_name: &'static str, vm_name: String) { |
20 | 14 let vm_name = generate_vm_name(user_name, &vm_name); |
15 let vm_arg = xml::GenerateVMArg::new(user_name, vm_name, false); | |
16 vm_arg.generate().ok(); | |
17 exec_cmd_from_name_or_id(user_name, &vm_name, "define") | |
19 | 18 } |
19 | |
17
5477c26e6984
impl sub commands that use uid
AnaTofuZ <k198584@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
20 pub fn start(user_name: &'static str, vm_name: String) { |
5477c26e6984
impl sub commands that use uid
AnaTofuZ <k198584@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
21 virsh::command_require_vm_name(get_vm_name(user_name, &vm_name), "start"); |
5477c26e6984
impl sub commands that use uid
AnaTofuZ <k198584@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
22 } |
5477c26e6984
impl sub commands that use uid
AnaTofuZ <k198584@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
23 |
5477c26e6984
impl sub commands that use uid
AnaTofuZ <k198584@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
24 pub fn shutdown(user_name: &'static str, vm_name: String) { |
5477c26e6984
impl sub commands that use uid
AnaTofuZ <k198584@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
25 exec_cmd_from_name_or_id(user_name, &vm_name, "shutdown") |
5477c26e6984
impl sub commands that use uid
AnaTofuZ <k198584@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
26 } |
5477c26e6984
impl sub commands that use uid
AnaTofuZ <k198584@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
27 |
5477c26e6984
impl sub commands that use uid
AnaTofuZ <k198584@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
28 pub fn destroy(user_name: &'static str, vm_name: String) { |
5477c26e6984
impl sub commands that use uid
AnaTofuZ <k198584@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
29 exec_cmd_from_name_or_id(user_name, &vm_name, "destroy") |
5477c26e6984
impl sub commands that use uid
AnaTofuZ <k198584@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
30 } |
5477c26e6984
impl sub commands that use uid
AnaTofuZ <k198584@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
31 |
5477c26e6984
impl sub commands that use uid
AnaTofuZ <k198584@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
32 pub fn console(user_name: &'static str, vm_name: String) { |
5477c26e6984
impl sub commands that use uid
AnaTofuZ <k198584@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
33 exec_cmd_from_name_or_id(user_name, &vm_name, "console") |
5477c26e6984
impl sub commands that use uid
AnaTofuZ <k198584@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
34 } |
5477c26e6984
impl sub commands that use uid
AnaTofuZ <k198584@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
35 |
5477c26e6984
impl sub commands that use uid
AnaTofuZ <k198584@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
36 pub fn vncdisplay(user_name: &'static str, vm_name: String) { |
5477c26e6984
impl sub commands that use uid
AnaTofuZ <k198584@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
37 exec_cmd_from_name_or_id(user_name, &vm_name, "vncdisplay") |
16 | 38 } |
39 | |
18 | 40 pub fn ttyconsole(user_name: &'static str, vm_name: String) { |
41 exec_cmd_from_name_or_id(user_name, &vm_name, "ttyconsole") | |
42 } | |
43 | |
44 pub fn dumpxml(user_name: &'static str, vm_name: String) { | |
45 exec_cmd_from_name_or_id(user_name, &vm_name, "dumpxml") | |
46 } | |
47 | |
48 pub fn undefine(user_name: &'static str, vm_name: String) { | |
49 exec_cmd_from_name_or_id(user_name, &vm_name, "undefine") | |
50 } | |
51 | |
19 | 52 pub fn domiflist(user_name: &'static str, vm_name: String) { |
53 exec_cmd_from_name_or_id(user_name, &vm_name, "domiflist") | |
54 } | |
55 | |
56 pub fn dominfo(user_name: &'static str, vm_name: String) { | |
57 exec_cmd_from_name_or_id(user_name, &vm_name, "dominfo") | |
58 } | |
18 | 59 |
17
5477c26e6984
impl sub commands that use uid
AnaTofuZ <k198584@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
60 fn exec_cmd_from_name_or_id(user_name: &'static str, name_or_id: &str, command: &str) { |
5477c26e6984
impl sub commands that use uid
AnaTofuZ <k198584@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
61 if name_or_id.parse::<u8>().is_ok() { |
5477c26e6984
impl sub commands that use uid
AnaTofuZ <k198584@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
62 let vm_name_or_none = get_vm_name_from_id(user_name, &name_or_id); |
5477c26e6984
impl sub commands that use uid
AnaTofuZ <k198584@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
63 if let Some(vm_name) = vm_name_or_none { |
5477c26e6984
impl sub commands that use uid
AnaTofuZ <k198584@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
64 return virsh::command_require_vm_name(vm_name, command); |
5477c26e6984
impl sub commands that use uid
AnaTofuZ <k198584@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
65 } |
5477c26e6984
impl sub commands that use uid
AnaTofuZ <k198584@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
66 } |
5477c26e6984
impl sub commands that use uid
AnaTofuZ <k198584@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
67 virsh::command_require_vm_name(get_vm_name(user_name, name_or_id), command); |
5477c26e6984
impl sub commands that use uid
AnaTofuZ <k198584@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
68 } |
5477c26e6984
impl sub commands that use uid
AnaTofuZ <k198584@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
69 |
5477c26e6984
impl sub commands that use uid
AnaTofuZ <k198584@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
70 fn get_vm_name_from_id(user_name: &'static str, arg_id: &str) -> Option<String> { |
5477c26e6984
impl sub commands that use uid
AnaTofuZ <k198584@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
71 let (_, vm_list_strs) = virsh::get_vm_list(user_name); |
5477c26e6984
impl sub commands that use uid
AnaTofuZ <k198584@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
72 for vm in vm_list_strs { |
5477c26e6984
impl sub commands that use uid
AnaTofuZ <k198584@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
73 let mut splitted = vm.split_whitespace(); |
5477c26e6984
impl sub commands that use uid
AnaTofuZ <k198584@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
74 let vm_id = splitted.next().unwrap(); |
5477c26e6984
impl sub commands that use uid
AnaTofuZ <k198584@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
75 if (vm_id != "-") && (vm_id == arg_id) { |
5477c26e6984
impl sub commands that use uid
AnaTofuZ <k198584@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
76 let vm_name = splitted.next().unwrap(); |
5477c26e6984
impl sub commands that use uid
AnaTofuZ <k198584@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
77 return Some(String::from(vm_name)); |
5477c26e6984
impl sub commands that use uid
AnaTofuZ <k198584@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
78 } |
5477c26e6984
impl sub commands that use uid
AnaTofuZ <k198584@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
79 } |
5477c26e6984
impl sub commands that use uid
AnaTofuZ <k198584@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
80 None |
5477c26e6984
impl sub commands that use uid
AnaTofuZ <k198584@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
81 } |
5477c26e6984
impl sub commands that use uid
AnaTofuZ <k198584@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
82 |
5477c26e6984
impl sub commands that use uid
AnaTofuZ <k198584@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
83 fn get_vm_name(user_name: &'static str, vm_name: &str) -> String { |
13 | 84 let vm_name = match vm_name.parse::<u8>() { |
15 | 85 Ok(_) => format!("{}-{}", user_name, vm_name), |
17
5477c26e6984
impl sub commands that use uid
AnaTofuZ <k198584@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
86 Err(_) => vm_name.to_string(), |
13 | 87 }; |
88 | |
16 | 89 if vm_name.starts_with(user_name) { |
90 return vm_name; | |
91 } | |
92 format!("{}-{}", user_name, vm_name) | |
13 | 93 } |
20 | 94 |
95 | |
96 fn generate_vm_name(user_name:&'static str, vm_name: &str) -> String { | |
97 if vm_name.starts_with(user_name) { | |
98 return vm_name.to_string(); | |
99 } | |
100 format!("{}-{}", user_name, vm_name) | |
101 } |