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