1use core::fmt;
2use std::collections::HashMap;
3
4use serde::{Deserialize, Serialize};
5
6use crate::models::podman::common::{
7 id_mapping_options::IdMappingOptions, image_volume::ImageVolume,
8 linux_device_cgroup::LinuxDeviceCgroup, linux_resources::LinuxResources,
9 linux_throttle_device::LinuxThrottleDevice, linux_weight_device::LinuxWeightDevice,
10 named_volume::NamedVolume, namespace::Namespace, overlay_volume::OverlayVolume,
11 per_network_options::PerNetworkOptions, port_mapping::PortMapping,
12 schema2_health_config::Schema2HealthConfig, volume_mount::VolumeMount,
13};
14
15#[derive(Serialize, Default)]
16pub struct ContainerCreateOptions {
17 pub annotations: Option<HashMap<String, String>>,
18 pub apparmor_profile: Option<String>,
19 pub artifact_volumes: Option<Vec<ContainerCreateArtifactVolumeOptions>>,
20 pub base_hosts_file: Option<String>,
21 pub cap_add: Option<Vec<String>>,
22 pub cap_drop: Option<Vec<String>>,
23 pub cgroup_parent: Option<String>,
24 pub cgroupns: Option<Namespace>,
25 pub cgroups_mode: Option<String>,
26 pub chroot_directories: Option<Vec<String>>,
27 pub cni_networks: Option<Vec<String>>,
28 pub command: Option<Vec<String>>,
29 pub conmon_pid_file: Option<String>,
30 #[serde(rename = "containerCreateCommand")]
31 pub container_create_command: Option<Vec<String>>,
32 pub create_working_dir: Option<bool>,
33 #[serde(rename = "dependencyContainers")]
34 pub dependency_containers: Option<Vec<String>>,
35 pub device_cgroup_rule: Option<Vec<LinuxDeviceCgroup>>,
36 pub devices: Option<Vec<ContainerCreateLinuxDeviceOptions>>,
37 pub devices_from: Option<Vec<String>>,
38 pub dns_option: Option<Vec<String>>,
39 pub dns_search: Option<Vec<String>>,
40 pub dns_server: Option<Vec<String>>,
41 pub entrypoint: Option<Vec<String>>,
42 pub env: Option<HashMap<String, String>>,
43 pub env_host: Option<bool>,
44 pub envmerge: Option<Vec<String>>,
45 pub expose: Option<HashMap<u16, String>>,
46 pub group_entry: Option<String>,
47 pub groups: Option<Vec<String>>,
48 pub health_check_on_failure_action: Option<i64>,
49 pub healthconfig: Option<Schema2HealthConfig>,
50 #[serde(rename = "healthLogDestination")]
51 pub health_log_destination: Option<String>,
52 #[serde(rename = "healthMaxLogCount")]
53 pub health_max_log_count: Option<u64>,
54 #[serde(rename = "healthMaxLogSize")]
55 pub health_max_log_size: Option<u64>,
56 pub host_device_list: Option<Vec<ContainerCreateLinuxDeviceOptions>>,
57 pub hostadd: Option<Vec<String>>,
58 pub hostname: Option<String>,
59 pub hostusers: Option<Vec<String>>,
60 pub httpproxy: Option<bool>,
61 pub idmappings: Option<IdMappingOptions>,
62 pub image: Option<String>,
63 pub image_arch: Option<String>,
64 pub image_os: Option<String>,
65 pub image_variant: Option<String>,
66 pub image_volume_mode: Option<String>,
67 pub image_volumes: Option<Vec<ImageVolume>>,
68 pub init: Option<bool>,
69 pub init_container_type: Option<String>,
70 pub init_path: Option<String>,
71 #[serde(rename = "intelRdt")]
72 pub intel_rdt: Option<ContainerCreateIntelRdtOptions>,
73 pub ipcns: Option<Namespace>,
74 pub label_nested: Option<bool>,
75 pub labels: Option<HashMap<String, String>>,
76 pub log_configuration: Option<ContainerCreateLogConfigurationOptions>,
77 pub manage_password: Option<bool>,
78 pub mask: Option<Vec<String>>,
79 pub mounts: Option<Vec<VolumeMount>>,
80 pub name: Option<String>,
81 pub netns: Option<Namespace>,
82 pub network_options: Option<HashMap<String, Vec<String>>>,
83 #[serde(rename = "Networks")]
84 pub networks: Option<HashMap<String, PerNetworkOptions>>,
85 pub no_new_privileges: Option<bool>,
86 pub oci_runtime: Option<String>,
87 pub oom_score_adj: Option<i64>,
88 pub overlay_volumes: Option<Vec<OverlayVolume>>,
89 pub passwd_entry: Option<String>,
90 pub personality: Option<ContainerCreatePersonalityOptions>,
91 pub pidns: Option<Namespace>,
92 pub pod: Option<String>,
93 pub portmappings: Option<Vec<PortMapping>>,
94 pub privileged: Option<bool>,
95 pub procfs_opts: Option<Vec<String>>,
96 pub publish_image_ports: Option<bool>,
97 pub r_limits: Option<Vec<ContainerCreateRLimitOptions>>,
98 pub raw_image_name: Option<String>,
99 pub read_only_filesystem: Option<bool>,
100 pub read_write_tmpfs: Option<bool>,
101 pub remove: Option<bool>,
102 #[serde(rename = "removeImage")]
103 pub remove_image: Option<bool>,
104 pub resource_limits: Option<LinuxResources>,
105 pub restart_policy: Option<String>,
106 pub restart_tries: Option<u64>,
107 pub rootfs: Option<String>,
108 pub rootfs_mapping: Option<String>,
109 pub rootfs_overlay: Option<bool>,
110 pub rootfs_propagation: Option<String>,
111 #[serde(rename = "sdnotifyMode")]
112 pub sdnotify_mode: Option<String>,
113 pub seccomp_policy: Option<String>,
114 pub seccomp_profile_path: Option<String>,
115 pub secret_env: Option<HashMap<String, String>>,
116 pub secrets: Option<Vec<ContainerCreateSecretOptions>>,
117 pub selinux_opts: Option<Vec<String>>,
118 pub shm_size: Option<i64>,
119 pub shm_size_systemd: Option<i64>,
120 #[serde(rename = "startupHealthConfig")]
121 pub startup_health_config: Option<ContainerCreateStartupHealthConfigOptions>,
122 pub stdin: Option<bool>,
123 pub stop_signal: Option<i64>,
124 pub stop_timeout: Option<u64>,
125 pub storage_opts: Option<HashMap<String, String>>,
126 pub sysctl: Option<HashMap<String, String>>,
127 pub systemd: Option<String>,
128 pub terminal: Option<bool>,
129 #[serde(rename = "throttleReadBpsDevice")]
130 pub throttle_read_bps_device: Option<HashMap<String, LinuxThrottleDevice>>,
131 #[serde(rename = "throttleReadIOPSDevice")]
132 pub throttle_read_iops_device: Option<HashMap<String, LinuxThrottleDevice>>,
133 #[serde(rename = "throttleWriteBpsDevice")]
134 pub throttle_write_bps_device: Option<HashMap<String, LinuxThrottleDevice>>,
135 #[serde(rename = "throttleWriteIOPSDevice")]
136 pub throttle_write_iops_device: Option<HashMap<String, LinuxThrottleDevice>>,
137 pub timeout: Option<u64>,
138 pub timezone: Option<String>,
139 pub umask: Option<String>,
140 pub unified: Option<HashMap<String, String>>,
141 pub unmask: Option<Vec<String>>,
142 pub unsetenv: Option<Vec<String>>,
143 pub unsetenvall: Option<bool>,
144 pub use_image_hostname: Option<bool>,
145 pub use_image_hosts: Option<bool>,
146 pub use_image_resolve_conf: Option<bool>,
147 pub user: Option<String>,
148 pub userns: Option<Namespace>,
149 pub utsns: Option<Namespace>,
150 pub volatile: Option<bool>,
151 pub volumes: Option<Vec<NamedVolume>>,
152 pub volumes_from: Option<Vec<String>>,
153 pub weight_device: Option<HashMap<String, LinuxWeightDevice>>,
154 pub work_dir: Option<String>,
155}
156
157#[derive(Serialize, Default)]
158pub struct ContainerCreateArtifactVolumeOptions {
159 pub destination: Option<String>,
160 pub digest: Option<String>,
161 pub name: Option<String>,
162 pub source: Option<String>,
163 pub title: Option<String>,
164}
165
166#[derive(Serialize, Default)]
167#[serde(rename_all = "camelCase")]
168pub struct ContainerCreateLinuxDeviceOptions {
169 pub file_mode: Option<u32>,
170 pub gid: Option<u32>,
171 pub major: Option<i64>,
172 pub minor: Option<i64>,
173 pub path: Option<String>,
174 pub r#type: Option<String>,
175 pub uid: Option<u32>,
176}
177
178#[derive(Serialize, Default)]
179#[serde(rename_all = "camelCase")]
180pub struct ContainerCreateIntelRdtOptions {
181 #[serde(rename = "closID")]
182 pub clos_id: Option<String>,
183 #[serde(rename = "enableCMT")]
184 pub enable_cmt: Option<bool>,
185 #[serde(rename = "enableMBM")]
186 pub enable_mbm: Option<bool>,
187 pub l3_cache_schema: Option<String>,
188 pub mem_bw_schema: Option<String>,
189}
190
191#[derive(Serialize, Default)]
192pub struct ContainerCreateLogConfigurationOptions {
193 pub driver: Option<String>,
194 pub options: Option<HashMap<String, String>>,
195 pub path: Option<String>,
196 pub size: Option<i64>,
197}
198
199#[derive(Serialize, Default)]
200pub struct ContainerCreatePersonalityOptions {
201 pub domain: Option<String>,
202 pub flags: Option<Vec<String>>,
203}
204
205#[derive(Serialize, Default)]
206pub struct ContainerCreateRLimitOptions {
207 pub hard: Option<u64>,
208 pub soft: Option<u64>,
209 pub r#type: Option<String>,
210}
211
212#[derive(Serialize, Default)]
213#[serde(rename_all = "PascalCase")]
214pub struct ContainerCreateSecretOptions {
215 pub key: Option<String>,
216 pub secret: Option<String>,
217}
218
219#[derive(Serialize, Default)]
220#[serde(rename_all = "PascalCase")]
221pub struct ContainerCreateStartupHealthConfigOptions {
222 pub interval: Option<i64>,
223 pub retries: Option<i64>,
224 pub start_interval: Option<i64>,
225 pub start_period: Option<i64>,
226 pub successes: Option<i64>,
227 pub test: Option<Vec<String>>,
228 pub timeout: Option<i64>,
229}
230
231#[derive(Deserialize, Serialize)]
232pub struct ContainerCreate {
233 pub id: String,
234 pub warnings: Vec<String>,
235}
236
237impl fmt::Debug for ContainerCreate {
238 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
239 let json = serde_json::to_string_pretty(self).map_err(|_| fmt::Error)?;
240 f.write_str(&json)
241 }
242}