Skip to main content

assemblyline_models/datastore/
service_delta.rs

1use std::collections::HashMap;
2
3use serde::{Deserialize, Serialize};
4use struct_metadata::Described;
5
6use crate::datastore::service::SubmissionParams;
7use crate::types::{NonZeroInteger, ServiceName};
8use crate::{ElasticMeta, Readable, types::{ClassificationString, JsonMap, Text}};
9
10use super::service::{AccessMode, ChannelKinds, EnvironmentVariable, FetchMethods, ParamKinds, RegistryType, SignatureDelimiter};
11
12// from assemblyline import odm
13// from assemblyline.odm.models.service import SIGNATURE_DELIMITERS
14
15
16// REF_DEPENDENCY_CONFIG = "Refer to:<br>[Service - DependencyConfig](../service/#dependencyconfig)"
17// REF_DOCKER_CONFIG = "Refer to:<br>[Service - DockerConfig](../service/#dockerconfig)"
18// REF_ENVVAR = "Refer to:<br>[Service - Enviroment Variable](../service/#environmentvariable)"
19// REF_PV = "Refer to:<br>[Service - PeristentVolume](../service/#persistentvolume)"
20// REF_SERVICE = "Refer to:<br>[Service](../service/#service)"
21// REF_SUBMISSION_PARAMS = "Refer to:<br>[Service - SubmissionParams](../service/#submissionparams)"
22// REF_UPDATE_CONFIG = "Refer to:<br>[Service - UpdateConfig](../service/#updateconfig)"
23// REF_UPDATE_SOURCE = "Refer to:<br>[Service - UpdateSource](../service/#updatesource)"
24
25
26/// Docker Configuration Delta
27#[derive(Serialize, Deserialize, Described, Default)]
28#[metadata_type(ElasticMeta)]
29#[serde(default)]
30#[metadata(index=false, store=false)]
31pub struct DockerConfigDelta {
32    /// REF_DOCKER_CONFIG
33    pub allow_internet_access: Option<bool>,
34    /// REF_DOCKER_CONFIG
35    pub command: Option<Vec<String>>,
36    /// REF_DOCKER_CONFIG
37    pub cpu_cores: Option<f32>,
38    /// REF_DOCKER_CONFIG
39    pub environment: Option<Vec<EnvironmentVariable>>,
40    /// REF_DOCKER_CONFIG
41    pub image: Option<String>,
42    /// REF_DOCKER_CONFIG
43    pub registry_username: Option<String>,
44    /// REF_DOCKER_CONFIG
45    pub registry_password: Option<String>,
46    /// REF_DOCKER_CONFIG
47    pub registry_type: Option<RegistryType>,
48    /// REF_DOCKER_CONFIG
49    pub ports: Option<Vec<String>>,
50    /// REF_DOCKER_CONFIG
51    pub ram_mb: Option<i32>,
52    /// REF_DOCKER_CONFIG
53    pub ram_mb_min: Option<i32>,
54    /// REF_DOCKER_CONFIG
55    pub service_account: Option<String>,
56    /// REF_DOCKER_CONFIG
57    pub labels: Option<Vec<EnvironmentVariable>>,
58}
59
60
61#[derive(Serialize, Deserialize, Described, Default)]
62#[metadata_type(ElasticMeta)]
63#[serde(default)]
64#[metadata(index=false, store=false)]
65pub struct UpdateSourceDelta {
66    /// REF_UPDATE_SOURCE
67    pub enabled: Option<bool>,
68    /// REF_UPDATE_SOURCE
69    pub name: Option<String>,
70    /// REF_UPDATE_SOURCE
71    pub password: Option<String>,
72    /// REF_UPDATE_SOURCE
73    pub pattern: Option<String>,
74    /// REF_UPDATE_SOURCE
75    pub private_key: Option<String>,
76    /// REF_UPDATE_SOURCE
77    pub ca_cert: Option<String>,
78    /// REF_UPDATE_SOURCE
79    pub ssl_ignore_errors: Option<bool>,
80    /// REF_UPDATE_SOURCE
81    pub proxy: Option<String>,
82    /// REF_UPDATE_SOURCE
83    pub uri: Option<String>,
84    /// REF_UPDATE_SOURCE
85    pub username: Option<String>,
86    /// REF_UPDATE_SOURCE
87    pub headers: Option<Vec<EnvironmentVariable>>,
88    /// REF_UPDATE_SOURCE
89    pub default_classification: Option<ClassificationString>,
90    /// REF_UPDATE_SOURCE
91    pub use_managed_identity: Option<bool>,
92    /// REF_UPDATE_SOURCE
93    pub git_branch: Option<String>,
94    /// REF_UPDATE_SOURCE
95    pub sync: Option<bool>,
96    /// REF_UPDATE_SOURCE
97    pub fetch_method: Option<FetchMethods>,
98    /// REF_UPDATE_SOURCE
99    pub override_classification: Option<bool>,
100    /// REF_UPDATE_SOURCE
101    pub configuration: Option<HashMap<String, serde_json::Value>>,
102    /// REF_UPDATE_SOURCE
103    pub data: Option<Text>,
104    /// REF_UPDATE_SOURCE
105    #[metadata(mapping="integer")]
106    pub update_interval: Option<NonZeroInteger>,
107    /// REF_UPDATE_SOURCE
108    pub ignore_cache: Option<bool>,
109}
110
111#[derive(Serialize, Deserialize, Described, Default)]
112#[serde(default)]
113#[metadata_type(ElasticMeta)]
114#[metadata(index=false, store=false)]
115pub struct PersistentVolumeDelta {
116    /// REF_PV
117    pub mount_path: Option<String>,
118    /// REF_PV
119    pub capacity: Option<String>,
120    /// REF_PV
121    pub storage_class: Option<String>,
122    /// REF_PV
123    pub access_mode: Option<AccessMode>,
124}
125
126#[derive(Serialize, Deserialize, Described, Default)]
127#[serde(default)]
128#[metadata_type(ElasticMeta)]
129#[metadata(index=false, store=false)]
130pub struct DependencyConfigDelta {
131    /// REF_DEPENDENCY_CONFIG
132    pub container: Option<DockerConfigDelta>,
133    /// REF_DEPENDENCY_CONFIG
134    pub volumes: Option<HashMap<String, PersistentVolumeDelta>>,
135    /// REF_DEPENDENCY_CONFIG
136    pub run_as_core: Option<bool>,
137}
138
139#[derive(Serialize, Deserialize, Described, Default)]
140#[serde(default)]
141#[metadata_type(ElasticMeta)]
142#[metadata(index=false, store=false)]
143pub struct UpdateConfigDelta {
144    /// REF_UPDATE_CONFIG
145    #[metadata[index=true]]
146    pub generates_signatures: Option<bool>,
147    /// REF_UPDATE_CONFIG
148    pub sources: Option<Vec<UpdateSourceDelta>>,
149    /// REF_UPDATE_CONFIG
150    pub update_interval_seconds: Option<i32>,
151    /// REF_UPDATE_CONFIG
152    pub wait_for_update: Option<bool>,
153    /// REF_UPDATE_CONFIG
154    pub signature_delimiter: Option<SignatureDelimiter>,
155    /// REF_UPDATE_CONFIG
156    pub custom_delimiter: Option<String>,
157    /// REF_UPDATE_CONFIG
158    pub default_pattern: Option<Text>,
159}
160
161#[derive(Serialize, Deserialize, Described, Default)]
162#[serde(default)]
163#[metadata_type(ElasticMeta)]
164#[metadata(index=false, store=false)]
165pub struct SubmissionParamsDelta {
166    /// REF_SUBMISSION_PARAMS
167    pub default: Option<serde_json::Value>,
168    /// REF_SUBMISSION_PARAMS
169    pub name: Option<String>,
170    /// REF_SUBMISSION_PARAMS
171    #[serde(rename="type")]
172    pub _type: Option<ParamKinds>,
173    /// REF_SUBMISSION_PARAMS
174    pub value: Option<serde_json::Value>,
175    /// REF_SUBMISSION_PARAMS
176    pub list: Option<serde_json::Value>,
177    /// REF_SUBMISSION_PARAMS
178    pub hide: Option<bool>,
179}
180
181impl From<SubmissionParams> for SubmissionParamsDelta {
182    fn from(value: SubmissionParams) -> Self {
183        Self {
184            default: Some(value.default),
185            name: Some(value.name),
186            _type: Some(value.param_type),
187            value: Some(value.value),
188            list: Some(serde_json::Value::Array(value.list)),
189            hide: Some(value.hide),
190        }
191    }
192}
193
194
195/// Service Delta relative to Initial Service Configuration
196#[derive(Serialize, Deserialize, Described, Default)]
197#[serde(default)]
198#[metadata_type(ElasticMeta)]
199#[metadata(index=true, store=false)]
200pub struct ServiceDelta {
201    /// REF_SERVICE
202    #[metadata(store=true)]
203    pub accepts: Option<String>,
204    /// REF_SERVICE
205    #[metadata(store=true)]
206    pub rejects: Option<String>,
207    /// REF_SERVICE
208    pub auto_update: Option<bool>,
209    /// REF_SERVICE
210    #[metadata(store=true)]
211    pub category: Option<String>,
212    /// REF_SERVICE
213    #[metadata(mapping="keyword")]
214    pub classification: Option<ClassificationString>,
215    /// REF_SERVICE
216    #[metadata(index=false)]
217    pub config: Option<JsonMap>,
218    /// REF_SERVICE
219    #[metadata(store=true)]
220    pub description: Option<Text>,
221    /// REF_SERVICE
222    #[metadata(mapping="keyword")]
223    pub default_result_classification: Option<ClassificationString>,
224    /// REF_SERVICE
225    #[metadata(store=true)]
226    pub enabled: Option<bool>,
227    /// REF_SERVICE
228    pub is_external: Option<bool>,
229    /// REF_SERVICE
230    pub licence_count: Option<i32>,
231    /// REF_SERVICE
232    pub max_queue_length: Option<i32>,
233    /// REF_SERVICE
234    pub min_instances: Option<i32>,
235
236    /// REF_SERVICE
237    pub uses_tags: Option<bool>,
238    /// REF_SERVICE
239    pub uses_tag_scores: Option<bool>,
240    /// REF_SERVICE
241    pub uses_temp_submission_data: Option<bool>,
242    /// REF_SERVICE
243    pub uses_metadata: Option<bool>,
244    pub monitored_keys: Option<Vec<String>>,
245
246    /// REF_SERVICE
247    #[metadata(store=true)]
248    pub name: Option<ServiceName>,
249    /// REF_SERVICE
250    #[metadata(store=true)]
251    pub version: String,
252
253    /// REF_SERVICE
254    pub privileged: Option<bool>,
255    /// REF_SERVICE
256    pub disable_cache: Option<bool>,
257
258    /// REF_SERVICE
259    #[metadata(store=true)]
260    pub stage: Option<String>,
261    /// REF_SERVICE
262    #[metadata(index=false)]
263    pub submission_params: Option<Vec<SubmissionParamsDelta>>,
264    /// REF_SERVICE
265    pub timeout: Option<i32>,
266
267    /// REF_SERVICE
268    pub docker_config: Option<DockerConfigDelta>,
269    /// REF_SERVICE
270    pub dependencies: HashMap<String, DependencyConfigDelta>,
271
272    /// REF_SERVICE
273    pub update_channel: Option<ChannelKinds>,
274    /// REF_SERVICE
275    pub update_config: Option<UpdateConfigDelta>,
276
277    /// REF_SERVICE
278    pub recursion_prevention: Option<Vec<String>>,
279}
280
281impl Readable for ServiceDelta {
282    fn set_from_archive(&mut self, _from_archive: bool) {}
283}