forked from brl/citadel
implement current command
This commit is contained in:
parent
7bd693f9dc
commit
5f84b381e3
@ -44,6 +44,10 @@ fn main() {
|
|||||||
.about("Set an application image as the default image to boot")
|
.about("Set an application image as the default image to boot")
|
||||||
.arg(Arg::with_name("name").required(true)))
|
.arg(Arg::with_name("name").required(true)))
|
||||||
|
|
||||||
|
.subcommand(SubCommand::with_name("current")
|
||||||
|
.about("Set an application image as 'current'")
|
||||||
|
.arg(Arg::with_name("name").required(true)))
|
||||||
|
|
||||||
.get_matches();
|
.get_matches();
|
||||||
|
|
||||||
let result = match matches.subcommand() {
|
let result = match matches.subcommand() {
|
||||||
@ -51,6 +55,7 @@ fn main() {
|
|||||||
("start", Some(m)) => start_cmd(m),
|
("start", Some(m)) => start_cmd(m),
|
||||||
("stop", Some(m)) => stop_cmd(m),
|
("stop", Some(m)) => stop_cmd(m),
|
||||||
("default", Some(m)) => default_cmd(m),
|
("default", Some(m)) => default_cmd(m),
|
||||||
|
("current", Some(m)) => current_cmd(m),
|
||||||
_ => Ok(()),
|
_ => Ok(()),
|
||||||
};
|
};
|
||||||
if let Err(e) = result {
|
if let Err(e) = result {
|
||||||
@ -92,3 +97,14 @@ fn default_cmd(matches: &ArgMatches) -> Result<()> {
|
|||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn current_cmd(matches: &ArgMatches) -> Result<()> {
|
||||||
|
let name = matches.value_of("name").unwrap();
|
||||||
|
let mut manager = ImageManager::load()?;
|
||||||
|
if manager.image_exists(name) {
|
||||||
|
manager.set_current(name)?;
|
||||||
|
} else {
|
||||||
|
warn!("No image '{}' exists", name);
|
||||||
|
}
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
@ -55,7 +55,6 @@ impl ImageManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let appimg = AppImg::new(name)?;
|
let appimg = AppImg::new(name)?;
|
||||||
println!("adding: {}", appimg.name());
|
|
||||||
self.images.insert(appimg.name().to_string(), appimg);
|
self.images.insert(appimg.name().to_string(), appimg);
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
@ -84,7 +83,7 @@ impl ImageManager {
|
|||||||
// if current is not set, set it to this instance
|
// if current is not set, set it to this instance
|
||||||
let set_as_current = self.current.is_none();
|
let set_as_current = self.current.is_none();
|
||||||
if set_as_current {
|
if set_as_current {
|
||||||
self.set_current(name)?;
|
self.set_current_target(name)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
match self.images.get(name) {
|
match self.images.get(name) {
|
||||||
@ -123,7 +122,7 @@ impl ImageManager {
|
|||||||
fs::remove_file(&path)?;
|
fs::remove_file(&path)?;
|
||||||
}
|
}
|
||||||
if let Some(img_name) = self.find_running_image_name() {
|
if let Some(img_name) = self.find_running_image_name() {
|
||||||
self.set_current(&img_name)?;
|
self.set_current_target(&img_name)?;
|
||||||
systemd::systemctl_start(DESKTOPD_SERVICE);
|
systemd::systemctl_start(DESKTOPD_SERVICE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -182,6 +181,32 @@ impl ImageManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn set_current(&mut self, name: &str) -> Result<()> {
|
pub fn set_current(&mut self, name: &str) -> Result<()> {
|
||||||
|
{
|
||||||
|
let img = match self.images.get(name) {
|
||||||
|
Some(img) => img,
|
||||||
|
None => {
|
||||||
|
warn!("Cannot set {} as current, no image with that name exists", name);
|
||||||
|
return Ok(());
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
if self.is_current(img) {
|
||||||
|
warn!("Image {} is already current image", name);
|
||||||
|
return Ok(());
|
||||||
|
}
|
||||||
|
|
||||||
|
if !img.is_running() {
|
||||||
|
img.start()?;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
self.set_current_target(name)?;
|
||||||
|
systemd::systemctl_restart(DESKTOPD_SERVICE);
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
fn set_current_target(&mut self, name: &str) -> Result<()> {
|
||||||
if !is_valid_name(name) {
|
if !is_valid_name(name) {
|
||||||
warn!("{} is not a valid image name", name);
|
warn!("{} is not a valid image name", name);
|
||||||
return Ok(())
|
return Ok(())
|
||||||
|
Loading…
Reference in New Issue
Block a user