Mercurial > hg > Members > anatofuz > ie-virsh
comparison src/xml.rs @ 29:0b43942c8950
use &str at const
author | AnaTofuZ <anatofuz@gmail.com> |
---|---|
date | Sat, 21 Nov 2020 16:46:21 +0900 |
parents | afec42bdd5ab |
children | ba66504b5256 |
comparison
equal
deleted
inserted
replaced
28:1c3b6b6ee0b1 | 29:0b43942c8950 |
---|---|
16 const PASSWORD_LEN: usize = 30; | 16 const PASSWORD_LEN: usize = 30; |
17 | 17 |
18 const DOMAIN_XMLNS_QEMU: (&str, &str) = | 18 const DOMAIN_XMLNS_QEMU: (&str, &str) = |
19 ("xmlns:qemu", "http://libvirt.org/schemas/domain/qemu/1.0"); | 19 ("xmlns:qemu", "http://libvirt.org/schemas/domain/qemu/1.0"); |
20 | 20 |
21 const IE_VIRSH_TEMPLATE_VM_NAME: &[u8; 17] = b"ie-virsh-template"; | 21 const IE_VIRSH_TEMPLATE_VM_NAME: &str = "ie-virsh-template"; |
22 const VNC_XML_TAG: &[u8; 8] = b"graphics"; | 22 const VNC_XML_TAG: &str = "graphics"; |
23 | 23 |
24 const ROOT_START_TAG: &[u8; 6] = b"domain"; | 24 const ROOT_START_TAG: &str = "domain"; |
25 | 25 |
26 const QEMU_COMMAND_LINE_TAG: &[u8; 16] = b"qemu:commandline"; | 26 const QEMU_COMMAND_LINE_TAG: &str = "qemu:commandline"; |
27 const QEMU_ARG_TAG: &[u8; 8] = b"qemu:arg"; | 27 const QEMU_ARG_TAG: &str = "qemu:arg"; |
28 | 28 |
29 const TEMPLATE_XML_FILE: &str = "/etc/libvirt/template.xml"; | 29 const TEMPLATE_XML_FILE: &str = "/etc/libvirt/template.xml"; |
30 | 30 |
31 const LIBVIRT_XML_DIR: &str = "/etc/libvirt/qemu"; | 31 const LIBVIRT_XML_DIR: &str = "/etc/libvirt/qemu"; |
32 const QCOW2_PATH: &str = "/mnt/ie-virsh"; | 32 const QCOW2_PATH: &str = "/mnt/ie-virsh"; |
45 let mut reader = Reader::from_reader(BufReader::new(File::open(get_xml_dir(&user_pass))?)); | 45 let mut reader = Reader::from_reader(BufReader::new(File::open(get_xml_dir(&user_pass))?)); |
46 let mut buf = Vec::new(); | 46 let mut buf = Vec::new(); |
47 loop { | 47 loop { |
48 match reader.read_event(&mut buf) { | 48 match reader.read_event(&mut buf) { |
49 Ok(Event::Eof) => break, | 49 Ok(Event::Eof) => break, |
50 Ok(Event::Empty(ref e)) if e.name() == VNC_XML_TAG => {} | 50 Ok(Event::Empty(ref e)) if e.name() == VNC_XML_TAG.as_bytes() => {} |
51 Ok(_) => {} | 51 Ok(_) => {} |
52 Err(e) => panic!("Error at position {}: {:?}", reader.buffer_position(), e), | 52 Err(e) => panic!("Error at position {}: {:?}", reader.buffer_position(), e), |
53 } | 53 } |
54 } | 54 } |
55 Ok(String::from("ok")) | 55 Ok(String::from("ok")) |
114 let vm_uuid = Uuid::new_v4().to_string(); | 114 let vm_uuid = Uuid::new_v4().to_string(); |
115 let elem = BytesText::from_plain_str(&vm_uuid); | 115 let elem = BytesText::from_plain_str(&vm_uuid); |
116 writer.write_event(Event::Text(elem)).unwrap(); | 116 writer.write_event(Event::Text(elem)).unwrap(); |
117 } | 117 } |
118 | 118 |
119 Ok(Event::Start(ref e)) if (e.name() == ROOT_START_TAG && self.is_debug) => { | 119 Ok(Event::Start(ref e)) |
120 if (e.name() == ROOT_START_TAG.as_bytes() && self.is_debug) => | |
121 { | |
120 let mut elem = e.clone(); | 122 let mut elem = e.clone(); |
121 elem.push_attribute(DOMAIN_XMLNS_QEMU); | 123 elem.push_attribute(DOMAIN_XMLNS_QEMU); |
122 writer.write_event(Event::Start(elem)).unwrap(); | 124 writer.write_event(Event::Start(elem)).unwrap(); |
123 | 125 |
124 let qemu_command_line_start = BytesStart::borrowed_name(QEMU_COMMAND_LINE_TAG); | 126 let qemu_command_line_start = |
127 BytesStart::borrowed_name(QEMU_COMMAND_LINE_TAG.as_bytes()); | |
125 writer | 128 writer |
126 .write_event(Event::Start(qemu_command_line_start)) | 129 .write_event(Event::Start(qemu_command_line_start)) |
127 .unwrap(); | 130 .unwrap(); |
128 | 131 |
129 for value in ["-S", "-gdb"].iter() { | 132 for value in ["-S", "-gdb"].iter() { |
130 let mut qemu_elem = BytesStart::borrowed_name(QEMU_ARG_TAG); | 133 let mut qemu_elem = BytesStart::borrowed_name(QEMU_ARG_TAG.as_bytes()); |
131 let v: &str = &value; | 134 let v: &str = &value; |
132 qemu_elem.push_attribute(("value", v)); | 135 qemu_elem.push_attribute(("value", v)); |
133 writer.write_event(Event::Empty(qemu_elem)).unwrap(); | 136 writer.write_event(Event::Empty(qemu_elem)).unwrap(); |
134 } | 137 } |
135 | 138 |
136 let mut qemu_elem = BytesStart::borrowed_name(QEMU_ARG_TAG); | 139 let mut qemu_elem = BytesStart::borrowed_name(QEMU_ARG_TAG.as_bytes()); |
137 let gdb_port: &str = &format!("tcp::{}", self.tcp_port); | 140 let gdb_port: &str = &format!("tcp::{}", self.tcp_port); |
138 qemu_elem.push_attribute(("value", gdb_port)); | 141 qemu_elem.push_attribute(("value", gdb_port)); |
139 writer.write_event(Event::Empty(qemu_elem)).unwrap(); | 142 writer.write_event(Event::Empty(qemu_elem)).unwrap(); |
140 | 143 |
141 let qemu_command_line_end = BytesEnd::borrowed(QEMU_COMMAND_LINE_TAG); | 144 let qemu_command_line_end = |
145 BytesEnd::borrowed(QEMU_COMMAND_LINE_TAG.as_bytes()); | |
142 writer | 146 writer |
143 .write_event(Event::End(qemu_command_line_end)) | 147 .write_event(Event::End(qemu_command_line_end)) |
144 .unwrap(); | 148 .unwrap(); |
145 } | 149 } |
146 | 150 |
147 Ok(Event::Empty(ref e)) if e.name() == VNC_XML_TAG => { | 151 Ok(Event::Empty(ref e)) if e.name() == VNC_XML_TAG.as_bytes() => { |
148 let mut elem = e.clone(); | 152 let mut elem = e.clone(); |
149 let pw: &str = &self.vnc_password; | 153 let pw: &str = &self.vnc_password; |
150 elem.push_attribute(("passwd", pw)); | 154 elem.push_attribute(("passwd", pw)); |
151 writer.write_event(Event::Empty(elem)).ok(); | 155 writer.write_event(Event::Empty(elem)).ok(); |
152 } | 156 } |
162 elem.push_attribute(("file", qcow2_path)); | 166 elem.push_attribute(("file", qcow2_path)); |
163 } | 167 } |
164 writer.write_event(Event::Empty(elem)).ok(); | 168 writer.write_event(Event::Empty(elem)).ok(); |
165 } | 169 } |
166 | 170 |
167 Ok(Event::Text(ref e)) if e.escaped() == IE_VIRSH_TEMPLATE_VM_NAME => { | 171 Ok(Event::Text(ref e)) if e.escaped() == IE_VIRSH_TEMPLATE_VM_NAME.as_bytes() => { |
168 let elem = BytesText::from_plain_str(&self.vm_name); | 172 let elem = BytesText::from_plain_str(&self.vm_name); |
169 writer.write_event(Event::Text(elem)).unwrap(); | 173 writer.write_event(Event::Text(elem)).unwrap(); |
170 } | 174 } |
171 Ok(Event::Eof) => break, | 175 Ok(Event::Eof) => break, |
172 // you can use either `e` or `&e` if you don't want to move the event | 176 // you can use either `e` or `&e` if you don't want to move the event |