podman_client/models/podman/containers/
create.rs

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}