depend on proxmox 0.1.31 - use Value to store result metadata
This commit is contained in:
parent
2e686e0a63
commit
e8d1da6a15
@ -37,7 +37,7 @@ pam = "0.7"
|
|||||||
pam-sys = "0.5"
|
pam-sys = "0.5"
|
||||||
percent-encoding = "2.1"
|
percent-encoding = "2.1"
|
||||||
pin-utils = "0.1.0"
|
pin-utils = "0.1.0"
|
||||||
proxmox = { version = "0.1.30", features = [ "sortable-macro", "api-macro" ] }
|
proxmox = { version = "0.1.31", features = [ "sortable-macro", "api-macro" ] }
|
||||||
#proxmox = { git = "ssh://gitolite3@proxdev.maurer-it.com/rust/proxmox", version = "0.1.2", features = [ "sortable-macro", "api-macro" ] }
|
#proxmox = { git = "ssh://gitolite3@proxdev.maurer-it.com/rust/proxmox", version = "0.1.2", features = [ "sortable-macro", "api-macro" ] }
|
||||||
#proxmox = { path = "../proxmox/proxmox", features = [ "sortable-macro", "api-macro" ] }
|
#proxmox = { path = "../proxmox/proxmox", features = [ "sortable-macro", "api-macro" ] }
|
||||||
regex = "1.2"
|
regex = "1.2"
|
||||||
|
@ -2,7 +2,7 @@ use anyhow::{bail, Error};
|
|||||||
use std::sync::{Arc, Mutex};
|
use std::sync::{Arc, Mutex};
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
|
|
||||||
use serde_json::Value;
|
use serde_json::{json, Value};
|
||||||
|
|
||||||
use proxmox::tools::digest_to_hex;
|
use proxmox::tools::digest_to_hex;
|
||||||
use proxmox::tools::fs::{replace_file, CreateOptions};
|
use proxmox::tools::fs::{replace_file, CreateOptions};
|
||||||
@ -80,7 +80,7 @@ impl SharedBackupState {
|
|||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
pub struct BackupEnvironment {
|
pub struct BackupEnvironment {
|
||||||
env_type: RpcEnvironmentType,
|
env_type: RpcEnvironmentType,
|
||||||
result_attributes: HashMap<String, Value>,
|
result_attributes: Value,
|
||||||
user: String,
|
user: String,
|
||||||
pub debug: bool,
|
pub debug: bool,
|
||||||
pub formatter: &'static OutputFormatter,
|
pub formatter: &'static OutputFormatter,
|
||||||
@ -110,7 +110,7 @@ impl BackupEnvironment {
|
|||||||
};
|
};
|
||||||
|
|
||||||
Self {
|
Self {
|
||||||
result_attributes: HashMap::new(),
|
result_attributes: json!({}),
|
||||||
env_type,
|
env_type,
|
||||||
user,
|
user,
|
||||||
worker,
|
worker,
|
||||||
@ -480,12 +480,12 @@ impl BackupEnvironment {
|
|||||||
|
|
||||||
impl RpcEnvironment for BackupEnvironment {
|
impl RpcEnvironment for BackupEnvironment {
|
||||||
|
|
||||||
fn set_result_attrib(&mut self, name: &str, value: Value) {
|
fn result_attrib_mut(&mut self) -> &mut Value {
|
||||||
self.result_attributes.insert(name.into(), value);
|
&mut self.result_attributes
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_result_attrib(&self, name: &str) -> Option<&Value> {
|
fn result_attrib(&self) -> &Value {
|
||||||
self.result_attributes.get(name)
|
&self.result_attributes
|
||||||
}
|
}
|
||||||
|
|
||||||
fn env_type(&self) -> RpcEnvironmentType {
|
fn env_type(&self) -> RpcEnvironmentType {
|
||||||
|
@ -66,7 +66,7 @@ fn check_duplicate_gateway_v6(config: &NetworkConfig, iface: &str) -> Result<(),
|
|||||||
pub fn list_network_devices(
|
pub fn list_network_devices(
|
||||||
_param: Value,
|
_param: Value,
|
||||||
_info: &ApiMethod,
|
_info: &ApiMethod,
|
||||||
rpcenv: &mut dyn RpcEnvironment,
|
mut rpcenv: &mut dyn RpcEnvironment,
|
||||||
) -> Result<Value, Error> {
|
) -> Result<Value, Error> {
|
||||||
|
|
||||||
let (config, digest) = network::config()?;
|
let (config, digest) = network::config()?;
|
||||||
@ -84,7 +84,7 @@ pub fn list_network_devices(
|
|||||||
|
|
||||||
let diff = network::changes()?;
|
let diff = network::changes()?;
|
||||||
if !diff.is_empty() {
|
if !diff.is_empty() {
|
||||||
rpcenv.set_result_attrib("changes", diff.into());
|
rpcenv["changes"] = diff.into();
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(list.into())
|
Ok(list.into())
|
||||||
|
@ -131,7 +131,7 @@ fn dump_journal(
|
|||||||
fn get_syslog(
|
fn get_syslog(
|
||||||
param: Value,
|
param: Value,
|
||||||
_info: &ApiMethod,
|
_info: &ApiMethod,
|
||||||
rpcenv: &mut dyn RpcEnvironment,
|
mut rpcenv: &mut dyn RpcEnvironment,
|
||||||
) -> Result<Value, Error> {
|
) -> Result<Value, Error> {
|
||||||
|
|
||||||
let (count, lines) = dump_journal(
|
let (count, lines) = dump_journal(
|
||||||
@ -141,7 +141,7 @@ fn get_syslog(
|
|||||||
param["until"].as_str(),
|
param["until"].as_str(),
|
||||||
param["service"].as_str())?;
|
param["service"].as_str())?;
|
||||||
|
|
||||||
rpcenv.set_result_attrib("total", Value::from(count));
|
rpcenv["total"] = Value::from(count);
|
||||||
|
|
||||||
Ok(json!(lines))
|
Ok(json!(lines))
|
||||||
}
|
}
|
||||||
|
@ -156,7 +156,7 @@ fn extract_upid(param: &Value) -> Result<UPID, Error> {
|
|||||||
/// Read task log.
|
/// Read task log.
|
||||||
async fn read_task_log(
|
async fn read_task_log(
|
||||||
param: Value,
|
param: Value,
|
||||||
rpcenv: &mut dyn RpcEnvironment,
|
mut rpcenv: &mut dyn RpcEnvironment,
|
||||||
) -> Result<Value, Error> {
|
) -> Result<Value, Error> {
|
||||||
|
|
||||||
let upid = extract_upid(¶m)?;
|
let upid = extract_upid(¶m)?;
|
||||||
@ -199,11 +199,11 @@ async fn read_task_log(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
rpcenv.set_result_attrib("total", Value::from(count));
|
rpcenv["total"] = Value::from(count);
|
||||||
|
|
||||||
if test_status {
|
if test_status {
|
||||||
let active = crate::server::worker_is_active(&upid).await?;
|
let active = crate::server::worker_is_active(&upid).await?;
|
||||||
rpcenv.set_result_attrib("active", Value::from(active));
|
rpcenv["active"] = Value::from(active);
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(json!(lines))
|
Ok(json!(lines))
|
||||||
@ -304,7 +304,7 @@ pub fn list_tasks(
|
|||||||
errors: bool,
|
errors: bool,
|
||||||
running: bool,
|
running: bool,
|
||||||
param: Value,
|
param: Value,
|
||||||
rpcenv: &mut dyn RpcEnvironment,
|
mut rpcenv: &mut dyn RpcEnvironment,
|
||||||
) -> Result<Vec<TaskListItem>, Error> {
|
) -> Result<Vec<TaskListItem>, Error> {
|
||||||
|
|
||||||
let username = rpcenv.get_user().unwrap();
|
let username = rpcenv.get_user().unwrap();
|
||||||
@ -382,7 +382,7 @@ pub fn list_tasks(
|
|||||||
if (result.len() as u64) < limit { result.push(entry); };
|
if (result.len() as u64) < limit { result.push(entry); };
|
||||||
}
|
}
|
||||||
|
|
||||||
rpcenv.set_result_attrib("total", Value::from(count));
|
rpcenv["total"] = Value::from(count);
|
||||||
|
|
||||||
Ok(result)
|
Ok(result)
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,7 @@
|
|||||||
//use anyhow::{bail, format_err, Error};
|
//use anyhow::{bail, format_err, Error};
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use std::collections::HashMap;
|
|
||||||
|
|
||||||
use serde_json::Value;
|
use serde_json::{json, Value};
|
||||||
|
|
||||||
use proxmox::api::{RpcEnvironment, RpcEnvironmentType};
|
use proxmox::api::{RpcEnvironment, RpcEnvironmentType};
|
||||||
|
|
||||||
@ -16,7 +15,7 @@ use crate::server::formatter::*;
|
|||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
pub struct ReaderEnvironment {
|
pub struct ReaderEnvironment {
|
||||||
env_type: RpcEnvironmentType,
|
env_type: RpcEnvironmentType,
|
||||||
result_attributes: HashMap<String, Value>,
|
result_attributes: Value,
|
||||||
user: String,
|
user: String,
|
||||||
pub debug: bool,
|
pub debug: bool,
|
||||||
pub formatter: &'static OutputFormatter,
|
pub formatter: &'static OutputFormatter,
|
||||||
@ -37,7 +36,7 @@ impl ReaderEnvironment {
|
|||||||
|
|
||||||
|
|
||||||
Self {
|
Self {
|
||||||
result_attributes: HashMap::new(),
|
result_attributes: json!({}),
|
||||||
env_type,
|
env_type,
|
||||||
user,
|
user,
|
||||||
worker,
|
worker,
|
||||||
@ -61,12 +60,12 @@ impl ReaderEnvironment {
|
|||||||
|
|
||||||
impl RpcEnvironment for ReaderEnvironment {
|
impl RpcEnvironment for ReaderEnvironment {
|
||||||
|
|
||||||
fn set_result_attrib(&mut self, name: &str, value: Value) {
|
fn result_attrib_mut(&mut self) -> &mut Value {
|
||||||
self.result_attributes.insert(name.into(), value);
|
&mut self.result_attributes
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_result_attrib(&self, name: &str) -> Option<&Value> {
|
fn result_attrib(&self) -> &Value {
|
||||||
self.result_attributes.get(name)
|
&self.result_attributes
|
||||||
}
|
}
|
||||||
|
|
||||||
fn env_type(&self) -> RpcEnvironmentType {
|
fn env_type(&self) -> RpcEnvironmentType {
|
||||||
|
@ -262,11 +262,9 @@ fn list_network_devices(mut param: Value, rpcenv: &mut dyn RpcEnvironment) -> Re
|
|||||||
_ => unreachable!(),
|
_ => unreachable!(),
|
||||||
};
|
};
|
||||||
|
|
||||||
if let Some(changes) = rpcenv.get_result_attrib("changes") {
|
if let Value::String(ref diff) = rpcenv["changes"] {
|
||||||
if let Some(diff) = changes.as_str() {
|
if output_format == "text" {
|
||||||
if output_format == "text" {
|
eprintln!("pending changes:\n{}\n", diff);
|
||||||
eprintln!("pending changes:\n{}\n", diff);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -339,10 +337,8 @@ fn pending_network_changes(mut param: Value, rpcenv: &mut dyn RpcEnvironment) ->
|
|||||||
_ => unreachable!(),
|
_ => unreachable!(),
|
||||||
};
|
};
|
||||||
|
|
||||||
if let Some(changes) = rpcenv.get_result_attrib("changes") {
|
if let Value::String(ref diff) = rpcenv["changes"] {
|
||||||
if let Some(diff) = changes.as_str() {
|
println!("{}", diff);
|
||||||
println!("{}", diff);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(Value::Null)
|
Ok(Value::Null)
|
||||||
|
@ -1,19 +1,18 @@
|
|||||||
use std::collections::HashMap;
|
use serde_json::{json, Value};
|
||||||
use serde_json::Value;
|
|
||||||
|
|
||||||
use proxmox::api::{RpcEnvironment, RpcEnvironmentType};
|
use proxmox::api::{RpcEnvironment, RpcEnvironmentType};
|
||||||
|
|
||||||
/// Encapsulates information about the runtime environment
|
/// Encapsulates information about the runtime environment
|
||||||
pub struct RestEnvironment {
|
pub struct RestEnvironment {
|
||||||
env_type: RpcEnvironmentType,
|
env_type: RpcEnvironmentType,
|
||||||
result_attributes: HashMap<String, Value>,
|
result_attributes: Value,
|
||||||
user: Option<String>,
|
user: Option<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl RestEnvironment {
|
impl RestEnvironment {
|
||||||
pub fn new(env_type: RpcEnvironmentType) -> Self {
|
pub fn new(env_type: RpcEnvironmentType) -> Self {
|
||||||
Self {
|
Self {
|
||||||
result_attributes: HashMap::new(),
|
result_attributes: json!({}),
|
||||||
user: None,
|
user: None,
|
||||||
env_type,
|
env_type,
|
||||||
}
|
}
|
||||||
@ -22,12 +21,12 @@ impl RestEnvironment {
|
|||||||
|
|
||||||
impl RpcEnvironment for RestEnvironment {
|
impl RpcEnvironment for RestEnvironment {
|
||||||
|
|
||||||
fn set_result_attrib(&mut self, name: &str, value: Value) {
|
fn result_attrib_mut (&mut self) -> &mut Value {
|
||||||
self.result_attributes.insert(name.into(), value);
|
&mut self.result_attributes
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_result_attrib(&self, name: &str) -> Option<&Value> {
|
fn result_attrib(&self) -> &Value {
|
||||||
self.result_attributes.get(name)
|
&self.result_attributes
|
||||||
}
|
}
|
||||||
|
|
||||||
fn env_type(&self) -> RpcEnvironmentType {
|
fn env_type(&self) -> RpcEnvironmentType {
|
||||||
|
@ -41,16 +41,13 @@ pub fn json_data_response(data: Value) -> Response<Body> {
|
|||||||
|
|
||||||
fn add_result_attributes(result: &mut Value, rpcenv: &dyn RpcEnvironment)
|
fn add_result_attributes(result: &mut Value, rpcenv: &dyn RpcEnvironment)
|
||||||
{
|
{
|
||||||
if let Some(total) = rpcenv.get_result_attrib("total").and_then(|v| v.as_u64()) {
|
let attributes = match rpcenv.result_attrib().as_object() {
|
||||||
result["total"] = Value::from(total);
|
Some(attr) => attr,
|
||||||
}
|
None => return,
|
||||||
|
};
|
||||||
|
|
||||||
if let Some(active) = rpcenv.get_result_attrib("active").and_then(|v| v.as_bool()) {
|
for (key, value) in attributes {
|
||||||
result["active"] = Value::from(active);
|
result[key] = value.clone();
|
||||||
}
|
|
||||||
|
|
||||||
if let Some(changes) = rpcenv.get_result_attrib("changes") {
|
|
||||||
result["changes"] = changes.clone();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user