add daily update and maintenance task
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
This commit is contained in:
		@ -24,6 +24,7 @@ use crate::server::WorkerTask;
 | 
			
		||||
use crate::tools;
 | 
			
		||||
use crate::tools::ticket::{self, Empty, Ticket};
 | 
			
		||||
 | 
			
		||||
pub mod apt;
 | 
			
		||||
pub mod disks;
 | 
			
		||||
pub mod dns;
 | 
			
		||||
pub mod network;
 | 
			
		||||
@ -32,7 +33,6 @@ pub mod subscription;
 | 
			
		||||
 | 
			
		||||
pub(crate) mod rrd;
 | 
			
		||||
 | 
			
		||||
mod apt;
 | 
			
		||||
mod journal;
 | 
			
		||||
mod services;
 | 
			
		||||
mod status;
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										73
									
								
								src/bin/proxmox-daily-update.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								src/bin/proxmox-daily-update.rs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,73 @@
 | 
			
		||||
use anyhow::Error;
 | 
			
		||||
use serde_json::{json, Value};
 | 
			
		||||
 | 
			
		||||
use proxmox::api::{cli::*, RpcEnvironment, ApiHandler};
 | 
			
		||||
 | 
			
		||||
use proxmox_backup::api2;
 | 
			
		||||
use proxmox_backup::tools::subscription;
 | 
			
		||||
 | 
			
		||||
async fn wait_for_local_worker(upid_str: &str) -> Result<(), Error> {
 | 
			
		||||
    let upid: proxmox_backup::server::UPID = upid_str.parse()?;
 | 
			
		||||
    let sleep_duration = core::time::Duration::new(0, 100_000_000);
 | 
			
		||||
 | 
			
		||||
    loop {
 | 
			
		||||
        if !proxmox_backup::server::worker_is_active_local(&upid) {
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
        tokio::time::delay_for(sleep_duration).await;
 | 
			
		||||
    }
 | 
			
		||||
    Ok(())
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Daily update
 | 
			
		||||
async fn do_update(
 | 
			
		||||
    rpcenv: &mut dyn RpcEnvironment,
 | 
			
		||||
) -> Result<Value, Error> {
 | 
			
		||||
    let param = json!({});
 | 
			
		||||
 | 
			
		||||
    let method = &api2::node::subscription::API_METHOD_CHECK_SUBSCRIPTION;
 | 
			
		||||
    let _res = match method.handler {
 | 
			
		||||
        ApiHandler::Sync(handler) => (handler)(param, method, rpcenv)?,
 | 
			
		||||
        _ => unreachable!(),
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    let notify = match subscription::read_subscription() {
 | 
			
		||||
        Ok(Some(subscription)) => subscription.status == subscription::SubscriptionStatus::ACTIVE,
 | 
			
		||||
        Ok(None) => false,
 | 
			
		||||
        Err(err) => {
 | 
			
		||||
            eprintln!("Error reading subscription - {}", err);
 | 
			
		||||
            false
 | 
			
		||||
        },
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    let param = json!({
 | 
			
		||||
        "notify": notify,
 | 
			
		||||
    });
 | 
			
		||||
    let method = &api2::node::apt::API_METHOD_APT_UPDATE_DATABASE;
 | 
			
		||||
    let upid = match method.handler {
 | 
			
		||||
        ApiHandler::Sync(handler) => (handler)(param, method, rpcenv)?,
 | 
			
		||||
        _ => unreachable!(),
 | 
			
		||||
    };
 | 
			
		||||
    wait_for_local_worker(upid.as_str().unwrap()).await?;
 | 
			
		||||
 | 
			
		||||
    // TODO: certificate checks/renewal/... ?
 | 
			
		||||
 | 
			
		||||
    // TODO: cleanup tasks like in PVE?
 | 
			
		||||
 | 
			
		||||
    Ok(Value::Null)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fn main() {
 | 
			
		||||
    proxmox_backup::tools::setup_safe_path_env();
 | 
			
		||||
 | 
			
		||||
    let mut rpcenv = CliEnvironment::new();
 | 
			
		||||
    rpcenv.set_auth_id(Some(String::from("root@pam")));
 | 
			
		||||
 | 
			
		||||
    match proxmox_backup::tools::runtime::main(do_update(&mut rpcenv)) {
 | 
			
		||||
        Err(err) => {
 | 
			
		||||
            eprintln!("error during update: {}", err);
 | 
			
		||||
            std::process::exit(1);
 | 
			
		||||
        },
 | 
			
		||||
        _ => (),
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user