4 //use lazy_static::lazy_static;
6 use proxmox
::api
::const_regex
;
7 use proxmox
::api
::schema
::*;
8 use proxmox
::tools
::*; // required to use IPRE!() macro ???
10 // File names: may not contain slashes, may not start with "."
11 pub const FILENAME_FORMAT
: ApiStringFormat
= ApiStringFormat
::VerifyFn(|name
| {
12 if name
.starts_with('
.'
) {
13 bail
!("file names may not start with '.'");
15 if name
.contains('
/'
) {
16 bail
!("file names may not contain slashes");
23 pub IP_FORMAT_REGEX
= IPRE
!();
24 pub SHA256_HEX_REGEX
= r
"^[a-f0-9]{64}$"; // fixme: define in common_regex ?
25 pub SYSTEMD_DATETIME_REGEX
= r
"^\d{4}-\d{2}-\d{2}( \d{2}:\d{2}(:\d{2})?)?$"; // fixme: define in common_regex ?
28 pub const SYSTEMD_DATETIME_FORMAT
: ApiStringFormat
=
29 ApiStringFormat
::Pattern(&SYSTEMD_DATETIME_REGEX
);
31 pub const IP_FORMAT
: ApiStringFormat
=
32 ApiStringFormat
::Pattern(&IP_FORMAT_REGEX
);
34 pub const PVE_CONFIG_DIGEST_FORMAT
: ApiStringFormat
=
35 ApiStringFormat
::Pattern(&SHA256_HEX_REGEX
);
37 pub const PVE_CONFIG_DIGEST_SCHEMA
: Schema
= StringSchema
::new(r
#"\
38 Prevent changes if current configuration file has different SHA256 digest.
39 This can be used to prevent concurrent modifications.
42 .format(&PVE_CONFIG_DIGEST_FORMAT
)
46 pub const CHUNK_DIGEST_FORMAT
: ApiStringFormat
=
47 ApiStringFormat
::Pattern(&SHA256_HEX_REGEX
);
49 pub const CHUNK_DIGEST_SCHEMA
: Schema
= StringSchema
::new("Chunk digest (SHA256).")
50 .format(&CHUNK_DIGEST_FORMAT
)
53 pub const NODE_SCHEMA
: Schema
= StringSchema
::new("Node name (or 'localhost')")
54 .format(&ApiStringFormat
::VerifyFn(|node
| {
55 if node
== "localhost" || node
== proxmox
::tools
::nodename() {
58 bail
!("no such node '{}'", node
);
63 pub const SEARCH_DOMAIN_SCHEMA
: Schema
=
64 StringSchema
::new("Search domain for host-name lookup.").schema();
66 pub const FIRST_DNS_SERVER_SCHEMA
: Schema
=
67 StringSchema
::new("First name server IP address.")
71 pub const SECOND_DNS_SERVER_SCHEMA
: Schema
=
72 StringSchema
::new("Second name server IP address.")
76 pub const THIRD_DNS_SERVER_SCHEMA
: Schema
=
77 StringSchema
::new("Third name server IP address.")
81 pub const BACKUP_ARCHIVE_NAME_SCHEMA
: Schema
=
82 StringSchema
::new("Backup archive name.")
83 .format(&FILENAME_FORMAT
)
86 pub const BACKUP_TYPE_SCHEMA
: Schema
=
87 StringSchema
::new("Backup type.")
88 .format(&ApiStringFormat
::Enum(&["vm", "ct", "host"]))
91 pub const BACKUP_ID_SCHEMA
: Schema
=
92 StringSchema
::new("Backup ID.")
93 .format(&FILENAME_FORMAT
)
96 pub const BACKUP_TIME_SCHEMA
: Schema
=
97 IntegerSchema
::new("Backup time (Unix epoch.)")
98 .minimum(1_547_797_308)
101 pub const UPID_SCHEMA
: Schema
= StringSchema
::new("Unique Process/Task ID.")