Skip to main content

arcbox_migration/
docker_types.rs

1//! Docker CLI JSON DTOs used by migration planning.
2
3use serde::{Deserialize, Serialize};
4use std::collections::HashMap;
5
6/// Docker daemon info needed by migration.
7#[derive(Debug, Clone, Deserialize)]
8pub struct DockerInfo {
9    /// Daemon name.
10    #[serde(rename = "Name")]
11    pub name: String,
12    /// Server version.
13    #[serde(rename = "ServerVersion")]
14    pub server_version: String,
15    /// Operating system.
16    #[serde(rename = "OperatingSystem")]
17    pub operating_system: String,
18    /// Architecture.
19    #[serde(rename = "Architecture")]
20    pub architecture: String,
21}
22
23/// Image inspect response subset.
24#[derive(Debug, Clone, Deserialize)]
25pub struct ImageInspect {
26    /// Image identifier.
27    #[serde(rename = "Id")]
28    pub id: String,
29    /// Repo tags.
30    #[serde(rename = "RepoTags", default)]
31    pub repo_tags: Vec<String>,
32    /// Repo digests.
33    #[serde(rename = "RepoDigests", default)]
34    pub repo_digests: Vec<String>,
35}
36
37/// Volume inspect response subset.
38#[derive(Debug, Clone, Deserialize)]
39pub struct VolumeInspect {
40    /// Volume name.
41    #[serde(rename = "Name")]
42    pub name: String,
43    /// Driver name.
44    #[serde(rename = "Driver")]
45    pub driver: String,
46    /// Labels.
47    #[serde(rename = "Labels", default)]
48    pub labels: Option<HashMap<String, String>>,
49    /// Driver options.
50    #[serde(rename = "Options", default)]
51    pub options: Option<HashMap<String, String>>,
52}
53
54/// Network inspect response subset.
55#[derive(Debug, Clone, Deserialize)]
56pub struct NetworkInspect {
57    /// Network name.
58    #[serde(rename = "Name")]
59    pub name: String,
60    /// Network identifier.
61    #[serde(rename = "Id")]
62    pub id: String,
63    /// Driver.
64    #[serde(rename = "Driver")]
65    pub driver: String,
66    /// Whether the network is internal.
67    #[serde(rename = "Internal", default)]
68    pub internal: bool,
69    /// Whether IPv6 is enabled.
70    #[serde(rename = "EnableIPv6", default)]
71    pub enable_ipv6: bool,
72    /// Whether the network is attachable.
73    #[serde(rename = "Attachable", default)]
74    pub attachable: bool,
75    /// Labels.
76    #[serde(rename = "Labels", default)]
77    pub labels: Option<HashMap<String, String>>,
78    /// Driver options.
79    #[serde(rename = "Options", default)]
80    pub options: Option<HashMap<String, String>>,
81    /// IPAM settings.
82    #[serde(rename = "IPAM", default)]
83    pub ipam: NetworkIpam,
84}
85
86/// Network IPAM settings.
87#[derive(Debug, Clone, Default, Deserialize)]
88pub struct NetworkIpam {
89    /// IPAM driver.
90    #[serde(rename = "Driver", default)]
91    pub driver: String,
92    /// IPAM config entries.
93    #[serde(rename = "Config", default)]
94    pub config: Vec<NetworkIpamConfig>,
95}
96
97/// Network IPAM config entry.
98#[derive(Debug, Clone, Default, Deserialize, Serialize, PartialEq)]
99pub struct NetworkIpamConfig {
100    /// Subnet CIDR.
101    #[serde(rename = "Subnet", default)]
102    pub subnet: String,
103    /// Gateway address.
104    #[serde(rename = "Gateway", default)]
105    pub gateway: String,
106    /// IP range.
107    #[serde(rename = "IPRange", default)]
108    pub ip_range: String,
109}
110
111/// Container inspect response subset.
112#[derive(Debug, Clone, Deserialize)]
113pub struct ContainerInspect {
114    /// Container identifier.
115    #[serde(rename = "Id")]
116    pub id: String,
117    /// Container name (leading slash included).
118    #[serde(rename = "Name")]
119    pub name: String,
120    /// Image ID.
121    #[serde(rename = "Image")]
122    pub image: String,
123    /// Container state.
124    #[serde(rename = "State")]
125    pub state: ContainerState,
126    /// Container config.
127    #[serde(rename = "Config")]
128    pub config: ContainerConfig,
129    /// Host config.
130    #[serde(rename = "HostConfig")]
131    pub host_config: HostConfig,
132    /// Network settings.
133    #[serde(rename = "NetworkSettings")]
134    pub network_settings: NetworkSettings,
135    /// Mounts.
136    #[serde(rename = "Mounts", default)]
137    pub mounts: Vec<MountPoint>,
138}
139
140/// Container state subset.
141#[derive(Debug, Clone, Deserialize)]
142pub struct ContainerState {
143    /// Status string.
144    #[serde(rename = "Status")]
145    pub status: String,
146    /// Whether the container is running.
147    #[serde(rename = "Running", default)]
148    pub running: bool,
149}
150
151/// Container config subset.
152#[derive(Debug, Clone, Default, Deserialize)]
153pub struct ContainerConfig {
154    /// Hostname.
155    #[serde(rename = "Hostname", default)]
156    pub hostname: String,
157    /// Domain name.
158    #[serde(rename = "Domainname", default)]
159    pub domainname: String,
160    /// User.
161    #[serde(rename = "User", default)]
162    pub user: String,
163    /// Environment variables.
164    #[serde(rename = "Env", default)]
165    pub env: Option<Vec<String>>,
166    /// Command.
167    #[serde(rename = "Cmd", default)]
168    pub cmd: Option<Vec<String>>,
169    /// Image reference string.
170    #[serde(rename = "Image", default)]
171    pub image: String,
172    /// Working directory.
173    #[serde(rename = "WorkingDir", default)]
174    pub working_dir: String,
175    /// Entrypoint.
176    #[serde(rename = "Entrypoint", default)]
177    pub entrypoint: Option<Vec<String>>,
178    /// Labels.
179    #[serde(rename = "Labels", default)]
180    pub labels: Option<HashMap<String, String>>,
181    /// TTY mode.
182    #[serde(rename = "Tty", default)]
183    pub tty: bool,
184    /// Open stdin.
185    #[serde(rename = "OpenStdin", default)]
186    pub open_stdin: bool,
187    /// Exposed ports.
188    #[serde(rename = "ExposedPorts", default)]
189    pub exposed_ports: Option<HashMap<String, serde_json::Value>>,
190}
191
192/// Host config subset.
193#[derive(Debug, Clone, Default, Deserialize)]
194pub struct HostConfig {
195    /// Port bindings.
196    #[serde(rename = "PortBindings", default)]
197    pub port_bindings: Option<HashMap<String, Option<Vec<PortBinding>>>>,
198    /// Restart policy.
199    #[serde(rename = "RestartPolicy", default)]
200    pub restart_policy: Option<RestartPolicy>,
201    /// Privileged mode.
202    #[serde(rename = "Privileged", default)]
203    pub privileged: bool,
204    /// Read-only root filesystem.
205    #[serde(rename = "ReadonlyRootfs", default)]
206    pub readonly_rootfs: bool,
207    /// Extra hosts.
208    #[serde(rename = "ExtraHosts", default)]
209    pub extra_hosts: Option<Vec<String>>,
210    /// Auto remove.
211    #[serde(rename = "AutoRemove", default)]
212    pub auto_remove: bool,
213}
214
215/// Restart policy subset.
216#[derive(Debug, Clone, Default, Deserialize)]
217pub struct RestartPolicy {
218    /// Policy name.
219    #[serde(rename = "Name", default)]
220    pub name: String,
221    /// Maximum retry count.
222    #[serde(rename = "MaximumRetryCount", default)]
223    pub maximum_retry_count: i64,
224}
225
226/// Network settings subset.
227#[derive(Debug, Clone, Default, Deserialize)]
228pub struct NetworkSettings {
229    /// Networks keyed by name.
230    #[serde(rename = "Networks", default)]
231    pub networks: HashMap<String, EndpointSettings>,
232}
233
234/// Endpoint settings subset.
235#[derive(Debug, Clone, Default, Deserialize)]
236pub struct EndpointSettings {
237    /// Aliases.
238    #[serde(rename = "Aliases", default)]
239    pub aliases: Option<Vec<String>>,
240}
241
242/// Mount description subset.
243#[derive(Debug, Clone, Deserialize)]
244pub struct MountPoint {
245    /// Mount type.
246    #[serde(rename = "Type")]
247    pub mount_type: String,
248    /// Volume name when applicable.
249    #[serde(rename = "Name", default)]
250    pub name: String,
251    /// Source path or volume mountpoint.
252    #[serde(rename = "Source", default)]
253    pub source: String,
254    /// Destination path inside the container.
255    #[serde(rename = "Destination")]
256    pub destination: String,
257    /// Mount mode.
258    #[serde(rename = "Mode", default)]
259    pub mode: String,
260    /// Whether the mount is writable.
261    #[serde(rename = "RW", default)]
262    pub rw: bool,
263}
264
265/// Port binding subset.
266#[derive(Debug, Clone, Deserialize)]
267pub struct PortBinding {
268    /// Host IP.
269    #[serde(rename = "HostIp", default)]
270    pub host_ip: String,
271    /// Host port.
272    #[serde(rename = "HostPort", default)]
273    pub host_port: String,
274}