]> git.proxmox.com Git - proxmox-backup.git/blame - src/api2/node/config.rs
bump version to 2.0.9-2
[proxmox-backup.git] / src / api2 / node / config.rs
CommitLineData
09989d99 1use anyhow::Error;
09989d99
WB
2
3use proxmox::api::schema::Updatable;
4use proxmox::api::{api, Permission, Router, RpcEnvironment};
5
6use crate::api2::types::NODE_SCHEMA;
440472cb 7use crate::api2::node::apt::update_apt_proxy_config;
2732c474
DM
8use crate::config::acl::{PRIV_SYS_AUDIT, PRIV_SYS_MODIFY};
9use crate::config::node::{NodeConfig, NodeConfigUpdater};
09989d99
WB
10
11pub const ROUTER: Router = Router::new()
12 .get(&API_METHOD_GET_NODE_CONFIG)
13 .put(&API_METHOD_UPDATE_NODE_CONFIG);
14
15#[api(
16 input: {
17 properties: {
18 node: { schema: NODE_SCHEMA },
19 },
20 },
21 access: {
2732c474
DM
22 permission: &Permission::Privilege(&["system"], PRIV_SYS_AUDIT, false),
23 },
24 returns: {
25 type: NodeConfig,
09989d99
WB
26 },
27)]
2732c474
DM
28/// Get the node configuration
29pub fn get_node_config(mut rpcenv: &mut dyn RpcEnvironment) -> Result<NodeConfig, Error> {
09989d99
WB
30 let (config, digest) = crate::config::node::config()?;
31 rpcenv["digest"] = proxmox::tools::digest_to_hex(&digest).into();
2732c474 32 Ok(config)
09989d99
WB
33}
34
35#[api(
36 input: {
37 properties: {
38 node: { schema: NODE_SCHEMA },
39 digest: {
40 description: "Digest to protect against concurrent updates",
41 optional: true,
42 },
43 updater: {
44 type: NodeConfigUpdater,
45 flatten: true,
46 },
47 delete: {
48 description: "Options to remove from the configuration",
49 optional: true,
50 },
51 },
52 },
53 access: {
54 permission: &Permission::Privilege(&["system"], PRIV_SYS_MODIFY, false),
55 },
56 protected: true,
57)]
2732c474 58/// Update the node configuration
09989d99
WB
59pub fn update_node_config(
60 updater: NodeConfigUpdater,
61 delete: Option<String>,
62 digest: Option<String>,
63) -> Result<(), Error> {
64 let _lock = crate::config::node::lock()?;
65 let (mut config, expected_digest) = crate::config::node::config()?;
66 if let Some(digest) = digest {
67 // FIXME: GUI doesn't handle our non-inlined digest part here properly...
68 if !digest.is_empty() {
69 let digest = proxmox::tools::hex_to_digest(&digest)?;
70 crate::tools::detect_modified_configuration_file(&digest, &expected_digest)?;
71 }
72 }
73
74 let delete: Vec<&str> = delete
75 .as_deref()
76 .unwrap_or("")
77 .split(&[' ', ',', ';', '\0'][..])
78 .collect();
79
80 config.update_from(updater, &delete)?;
81
440472cb
DM
82 crate::config::node::save_config(&config)?;
83
84 update_apt_proxy_config(config.http_proxy().as_ref())?;
85
86 Ok(())
09989d99 87}