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)]
112#[metadata_type(ElasticMeta)]
113#[metadata(index=false, store=false)]
114pub struct PersistentVolumeDelta {
115    /// REF_PV
116    pub mount_path: Option<String>,
117    /// REF_PV
118    pub capacity: Option<String>,
119    /// REF_PV
120    pub storage_class: Option<String>,
121    /// REF_PV
122    pub access_mode: Option<AccessMode>,
123}
124
125#[derive(Serialize, Deserialize, Described)]
126#[metadata_type(ElasticMeta)]
127#[metadata(index=false, store=false)]
128pub struct DependencyConfigDelta {
129    /// REF_DEPENDENCY_CONFIG
130    pub container: Option<DockerConfigDelta>,
131    /// REF_DEPENDENCY_CONFIG
132    pub volumes: Option<HashMap<String, PersistentVolumeDelta>>,
133    /// REF_DEPENDENCY_CONFIG
134    pub run_as_core: Option<bool>,
135}
136
137#[derive(Serialize, Deserialize, Described)]
138#[metadata_type(ElasticMeta)]
139#[metadata(index=false, store=false)]
140pub struct UpdateConfigDelta {
141    /// REF_UPDATE_CONFIG
142    #[metadata[index=true]]
143    pub generates_signatures: Option<bool>,
144    /// REF_UPDATE_CONFIG
145    pub sources: Option<Vec<UpdateSourceDelta>>,
146    /// REF_UPDATE_CONFIG
147    pub update_interval_seconds: Option<i32>,
148    /// REF_UPDATE_CONFIG
149    pub wait_for_update: Option<bool>,
150    /// REF_UPDATE_CONFIG
151    pub signature_delimiter: Option<SignatureDelimiter>,
152    /// REF_UPDATE_CONFIG
153    pub custom_delimiter: Option<String>,
154    /// REF_UPDATE_CONFIG
155    pub default_pattern: Option<Text>,
156}
157
158#[derive(Serialize, Deserialize, Described)]
159#[metadata_type(ElasticMeta)]
160#[metadata(index=false, store=false)]
161pub struct SubmissionParamsDelta {
162    /// REF_SUBMISSION_PARAMS
163    pub default: Option<serde_json::Value>,
164    /// REF_SUBMISSION_PARAMS
165    pub name: Option<String>,
166    /// REF_SUBMISSION_PARAMS
167    #[serde(rename="type")]
168    pub _type: Option<ParamKinds>,
169    /// REF_SUBMISSION_PARAMS
170    pub value: Option<serde_json::Value>,
171    /// REF_SUBMISSION_PARAMS
172    pub list: Option<serde_json::Value>,
173    /// REF_SUBMISSION_PARAMS
174    pub hide: Option<bool>,
175}
176
177impl From<SubmissionParams> for SubmissionParamsDelta {
178    fn from(value: SubmissionParams) -> Self {
179        Self {
180            default: Some(value.default),
181            name: Some(value.name),
182            _type: Some(value.param_type),
183            value: Some(value.value),
184            list: Some(serde_json::Value::Array(value.list)),
185            hide: Some(value.hide),
186        }
187    }
188}
189
190
191/// Service Delta relative to Initial Service Configuration
192#[derive(Serialize, Deserialize, Described, Default)]
193#[serde(default)]
194#[metadata_type(ElasticMeta)]
195#[metadata(index=true, store=false)]
196pub struct ServiceDelta {
197    /// REF_SERVICE
198    #[metadata(store=true)]
199    pub accepts: Option<String>,
200    /// REF_SERVICE
201    #[metadata(store=true)]
202    pub rejects: Option<String>,
203    /// REF_SERVICE
204    pub auto_update: Option<bool>,
205    /// REF_SERVICE
206    #[metadata(store=true)]
207    pub category: Option<String>,
208    /// REF_SERVICE
209    #[metadata(mapping="keyword")]
210    pub classification: Option<ClassificationString>,
211    /// REF_SERVICE
212    #[metadata(index=false)]
213    pub config: Option<JsonMap>,
214    /// REF_SERVICE
215    #[metadata(store=true)]
216    pub description: Option<Text>,
217    /// REF_SERVICE
218    #[metadata(mapping="keyword")]
219    pub default_result_classification: Option<ClassificationString>,
220    /// REF_SERVICE
221    #[metadata(store=true)]
222    pub enabled: Option<bool>,
223    /// REF_SERVICE
224    pub is_external: Option<bool>,
225    /// REF_SERVICE
226    pub licence_count: Option<i32>,
227    /// REF_SERVICE
228    pub max_queue_length: Option<i32>,
229    /// REF_SERVICE
230    pub min_instances: Option<i32>,
231
232    /// REF_SERVICE
233    pub uses_tags: Option<bool>,
234    /// REF_SERVICE
235    pub uses_tag_scores: Option<bool>,
236    /// REF_SERVICE
237    pub uses_temp_submission_data: Option<bool>,
238    /// REF_SERVICE
239    pub uses_metadata: Option<bool>,
240    pub monitored_keys: Option<Vec<String>>,
241
242    /// REF_SERVICE
243    #[metadata(store=true)]
244    pub name: Option<ServiceName>, 
245    /// REF_SERVICE
246    #[metadata(store=true)]
247    pub version: String,
248
249    /// REF_SERVICE
250    pub privileged: Option<bool>,
251    /// REF_SERVICE
252    pub disable_cache: Option<bool>,
253
254    /// REF_SERVICE
255    #[metadata(store=true)]
256    pub stage: Option<String>, 
257    /// REF_SERVICE
258    #[metadata(index=false)]
259    pub submission_params: Option<Vec<SubmissionParamsDelta>>,
260    /// REF_SERVICE
261    pub timeout: Option<i32>,
262
263    /// REF_SERVICE
264    pub docker_config: Option<DockerConfigDelta>,
265    /// REF_SERVICE
266    pub dependencies: HashMap<String, DependencyConfigDelta>,
267
268    /// REF_SERVICE
269    pub update_channel: Option<ChannelKinds>,
270    /// REF_SERVICE
271    pub update_config: Option<UpdateConfigDelta>,
272
273    /// REF_SERVICE
274    pub recursion_prevention: Option<Vec<String>>,
275}
276
277impl Readable for ServiceDelta {
278    fn set_from_archive(&mut self, _from_archive: bool) {}
279}