oci_spec/runtime/
windows.rs

1use crate::error::OciSpecError;
2use derive_builder::Builder;
3use getset::{CopyGetters, Getters, Setters};
4use serde::{Deserialize, Serialize};
5use std::collections::HashMap;
6
7#[derive(
8    Builder,
9    Clone,
10    Debug,
11    Default,
12    Deserialize,
13    Eq,
14    CopyGetters,
15    Getters,
16    Setters,
17    PartialEq,
18    Serialize,
19)]
20#[serde(rename_all = "camelCase")]
21#[builder(
22    default,
23    pattern = "owned",
24    setter(into, strip_option),
25    build_fn(error = "OciSpecError")
26)]
27/// Windows defines the runtime configuration for Windows based containers,
28/// including Hyper-V containers.
29pub struct Windows {
30    #[serde(default, skip_serializing_if = "Option::is_none")]
31    #[getset(get = "pub", set = "pub")]
32    /// LayerFolders contains a list of absolute paths to directories
33    /// containing image layers.
34    layer_folders: Option<Vec<String>>,
35
36    #[serde(default, skip_serializing_if = "Option::is_none")]
37    #[getset(get = "pub", set = "pub")]
38    /// Devices are the list of devices to be mapped into the container.
39    devices: Option<Vec<WindowsDevice>>,
40
41    #[serde(default, skip_serializing_if = "Option::is_none")]
42    #[getset(get_copy = "pub", set = "pub")]
43    /// Resources contains information for handling resource constraints for
44    /// the container.
45    resources: Option<WindowsResources>,
46
47    #[serde(default, skip_serializing_if = "Option::is_none")]
48    #[getset(get = "pub", set = "pub")]
49    /// CredentialSpec contains a JSON object describing a group Managed
50    /// Service Account (gMSA) specification.
51    credential_spec: Option<HashMap<String, Option<serde_json::Value>>>,
52
53    #[serde(default, skip_serializing_if = "Option::is_none")]
54    #[getset(get_copy = "pub", set = "pub")]
55    /// Servicing indicates if the container is being started in a mode to
56    /// apply a Windows Update servicing operation.
57    servicing: Option<bool>,
58
59    #[serde(default, skip_serializing_if = "Option::is_none")]
60    #[getset(get_copy = "pub", set = "pub")]
61    /// IgnoreFlushesDuringBoot indicates if the container is being started
62    /// in a mode where disk writes are not flushed during its boot
63    /// process.
64    ignore_flushes_during_boot: Option<bool>,
65
66    #[serde(default, skip_serializing_if = "Option::is_none")]
67    #[getset(get = "pub", set = "pub")]
68    /// HyperV contains information for running a container with Hyper-V
69    /// isolation.
70    hyperv: Option<WindowsHyperV>,
71
72    #[serde(default, skip_serializing_if = "Option::is_none")]
73    #[getset(get = "pub", set = "pub")]
74    /// Network restriction configuration.
75    network: Option<WindowsNetwork>,
76}
77
78#[derive(
79    Builder, Clone, Debug, Default, Deserialize, Eq, Getters, Setters, PartialEq, Serialize,
80)]
81#[serde(rename_all = "camelCase")]
82#[builder(
83    default,
84    pattern = "owned",
85    setter(into, strip_option),
86    build_fn(error = "OciSpecError")
87)]
88#[getset(get = "pub", set = "pub")]
89/// WindowsDevice represents information about a host device to be mapped
90/// into the container.
91pub struct WindowsDevice {
92    /// Device identifier: interface class GUID, etc..
93    id: String,
94
95    /// Device identifier type: "class", etc..
96    id_type: String,
97}
98
99#[derive(
100    Builder, Clone, Copy, Debug, Default, Deserialize, Eq, Getters, Setters, PartialEq, Serialize,
101)]
102#[builder(
103    default,
104    pattern = "owned",
105    setter(into, strip_option),
106    build_fn(error = "OciSpecError")
107)]
108#[getset(get_copy = "pub", set = "pub")]
109/// Available windows resources.
110pub struct WindowsResources {
111    #[serde(default, skip_serializing_if = "Option::is_none")]
112    /// Memory restriction configuration.
113    memory: Option<WindowsMemoryResources>,
114
115    #[serde(default, skip_serializing_if = "Option::is_none")]
116    /// CPU resource restriction configuration.
117    cpu: Option<WindowsCPUResources>,
118
119    #[serde(default, skip_serializing_if = "Option::is_none")]
120    /// Storage restriction configuration.
121    storage: Option<WindowsStorageResources>,
122}
123
124#[derive(
125    Builder, Clone, Copy, Debug, Default, Deserialize, Eq, Getters, Setters, PartialEq, Serialize,
126)]
127#[builder(
128    default,
129    pattern = "owned",
130    setter(into, strip_option),
131    build_fn(error = "OciSpecError")
132)]
133#[getset(get_copy = "pub", set = "pub")]
134/// WindowsMemoryResources contains memory resource management settings.
135pub struct WindowsMemoryResources {
136    #[serde(default, skip_serializing_if = "Option::is_none")]
137    /// Memory limit in bytes.
138    limit: Option<u64>,
139}
140
141#[derive(
142    Builder, Clone, Copy, Debug, Default, Deserialize, Eq, Getters, Setters, PartialEq, Serialize,
143)]
144#[builder(
145    default,
146    pattern = "owned",
147    setter(into, strip_option),
148    build_fn(error = "OciSpecError")
149)]
150#[getset(get_copy = "pub", set = "pub")]
151/// WindowsCPUResources contains CPU resource management settings.
152pub struct WindowsCPUResources {
153    #[serde(default, skip_serializing_if = "Option::is_none")]
154    /// Number of CPUs available to the container.
155    count: Option<u64>,
156
157    #[serde(default, skip_serializing_if = "Option::is_none")]
158    /// CPU shares (relative weight to other containers with cpu shares).
159    shares: Option<u16>,
160
161    #[serde(default, skip_serializing_if = "Option::is_none")]
162    /// Specifies the portion of processor cycles that this container can
163    /// use as a percentage times 100.
164    maximum: Option<u16>,
165}
166
167#[derive(
168    Builder, Clone, Copy, Debug, Default, Deserialize, Eq, Getters, Setters, PartialEq, Serialize,
169)]
170#[serde(rename_all = "camelCase")]
171#[builder(
172    default,
173    pattern = "owned",
174    setter(into, strip_option),
175    build_fn(error = "OciSpecError")
176)]
177#[getset(get_copy = "pub", set = "pub")]
178/// WindowsStorageResources contains storage resource management settings.
179pub struct WindowsStorageResources {
180    #[serde(default, skip_serializing_if = "Option::is_none")]
181    /// Specifies maximum Iops for the system drive.
182    iops: Option<u64>,
183
184    #[serde(default, skip_serializing_if = "Option::is_none")]
185    /// Specifies maximum bytes per second for the system drive.
186    bps: Option<u64>,
187
188    #[serde(default, skip_serializing_if = "Option::is_none")]
189    /// Sandbox size specifies the minimum size of the system drive in
190    /// bytes.
191    sandbox_size: Option<u64>,
192}
193
194#[derive(
195    Builder, Clone, Debug, Default, Deserialize, Eq, Getters, Setters, PartialEq, Serialize,
196)]
197#[serde(rename_all = "camelCase")]
198#[builder(
199    default,
200    pattern = "owned",
201    setter(into, strip_option),
202    build_fn(error = "OciSpecError")
203)]
204#[getset(get = "pub", set = "pub")]
205/// WindowsHyperV contains information for configuring a container to run
206/// with Hyper-V isolation.
207pub struct WindowsHyperV {
208    #[serde(default, skip_serializing_if = "Option::is_none")]
209    /// UtilityVMPath is an optional path to the image used for the Utility
210    /// VM.
211    utility_vm_path: Option<String>,
212}
213
214#[derive(
215    Builder, Clone, Debug, Default, Deserialize, Eq, Getters, Setters, PartialEq, Serialize,
216)]
217#[serde(rename_all = "camelCase")]
218#[builder(
219    default,
220    pattern = "owned",
221    setter(into, strip_option),
222    build_fn(error = "OciSpecError")
223)]
224/// WindowsNetwork contains network settings for Windows containers.
225pub struct WindowsNetwork {
226    #[serde(default, skip_serializing_if = "Option::is_none")]
227    #[getset(get = "pub", set = "pub")]
228    /// List of HNS endpoints that the container should connect to.
229    endpoint_list: Option<Vec<String>>,
230
231    #[serde(
232        default,
233        skip_serializing_if = "Option::is_none",
234        rename = "allowUnqualifiedDNSQuery"
235    )]
236    #[getset(get_copy = "pub", set = "pub")]
237    /// Specifies if unqualified DNS name resolution is allowed.
238    allow_unqualified_dns_query: Option<bool>,
239
240    #[serde(
241        default,
242        skip_serializing_if = "Option::is_none",
243        rename = "DNSSearchList"
244    )]
245    #[getset(get = "pub", set = "pub")]
246    /// Comma separated list of DNS suffixes to use for name resolution.
247    dns_search_list: Option<Vec<String>>,
248
249    #[serde(default, skip_serializing_if = "Option::is_none")]
250    #[getset(get = "pub", set = "pub")]
251    /// Name (ID) of the container that we will share with the network
252    /// stack.
253    network_shared_container_name: Option<String>,
254
255    #[serde(default, skip_serializing_if = "Option::is_none")]
256    #[getset(get = "pub", set = "pub")]
257    /// name (ID) of the network namespace that will be used for the
258    /// container.
259    network_namespace: Option<String>,
260}