Skip to main content

canic_host/deployment_truth/model/inventory/
mod.rs

1use super::artifact::ObservedArtifactV1;
2use super::plan::DeploymentIdentityV1;
3use serde::{Deserialize, Serialize};
4
5///
6/// DeploymentInventoryV1
7///
8#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
9pub struct DeploymentInventoryV1 {
10    pub schema_version: u32,
11    pub inventory_id: String,
12    pub observed_at: String,
13    pub observed_identity: Option<DeploymentIdentityV1>,
14    pub observed_root: Option<DeploymentRootObservationV1>,
15    pub local_config: LocalDeploymentConfigV1,
16    pub observed_canisters: Vec<ObservedCanisterV1>,
17    pub observed_pool: Vec<ObservedPoolCanisterV1>,
18    pub observed_artifacts: Vec<ObservedArtifactV1>,
19    pub observed_verifier_readiness: VerifierReadinessObservationV1,
20    pub unresolved_observations: Vec<DeploymentObservationGapV1>,
21}
22
23///
24/// DeploymentRootObservationV1
25///
26#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
27pub struct DeploymentRootObservationV1 {
28    pub deployment_name: String,
29    pub network: String,
30    pub fleet_template: String,
31    pub root_principal: String,
32    pub observed_canister_id: String,
33    pub observation_source: DeploymentRootObservationSourceV1,
34    pub control_class: CanisterControlClassV1,
35    pub controllers: Vec<String>,
36    pub module_hash: Option<String>,
37    pub status: Option<String>,
38    pub role_assignment_source: Option<String>,
39}
40
41///
42/// DeploymentRootObservationSourceV1
43///
44#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
45pub enum DeploymentRootObservationSourceV1 {
46    IcpCanisterStatus,
47    LocalDeploymentState,
48}
49
50///
51/// ExpectedCanisterV1
52///
53#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
54pub struct ExpectedCanisterV1 {
55    pub role: String,
56    pub canister_id: Option<String>,
57    pub control_class: CanisterControlClassV1,
58}
59
60///
61/// ObservedCanisterV1
62///
63#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
64pub struct ObservedCanisterV1 {
65    pub canister_id: String,
66    pub role: Option<String>,
67    pub control_class: CanisterControlClassV1,
68    pub controllers: Vec<String>,
69    pub module_hash: Option<String>,
70    pub status: Option<String>,
71    pub root_trust_anchor: Option<String>,
72    pub canonical_embedded_config_digest: Option<String>,
73    pub role_assignment_source: Option<String>,
74}
75
76///
77/// CanisterControlClassV1
78///
79#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
80pub enum CanisterControlClassV1 {
81    DeploymentControlled,
82    CanicManagedPool,
83    ExternallyImported,
84    JointlyControlled,
85    UserControlled,
86    UnknownUnsafe,
87}
88
89///
90/// ExpectedPoolCanisterV1
91///
92#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
93pub struct ExpectedPoolCanisterV1 {
94    pub pool: String,
95    pub canister_id: Option<String>,
96    pub role: Option<String>,
97}
98
99///
100/// ObservedPoolCanisterV1
101///
102#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
103pub struct ObservedPoolCanisterV1 {
104    pub pool: String,
105    pub canister_id: String,
106    pub role: Option<String>,
107    pub control_class: CanisterControlClassV1,
108}
109
110///
111/// LocalDeploymentConfigV1
112///
113#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
114pub struct LocalDeploymentConfigV1 {
115    pub config_path: Option<String>,
116    pub raw_config_sha256: Option<String>,
117    pub canonical_embedded_config_sha256: Option<String>,
118}
119
120///
121/// VerifierReadinessExpectationV1
122///
123#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
124pub struct VerifierReadinessExpectationV1 {
125    pub required: bool,
126    pub expected_role_epochs: Vec<RoleEpochExpectationV1>,
127}
128
129///
130/// VerifierReadinessObservationV1
131///
132#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
133pub struct VerifierReadinessObservationV1 {
134    pub status: ObservationStatusV1,
135    pub role_epochs: Vec<RoleEpochObservationV1>,
136}
137
138///
139/// RoleEpochExpectationV1
140///
141#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
142pub struct RoleEpochExpectationV1 {
143    pub role: String,
144    pub minimum_epoch: u64,
145}
146
147///
148/// RoleEpochObservationV1
149///
150#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
151pub struct RoleEpochObservationV1 {
152    pub role: String,
153    pub observed_epoch: Option<u64>,
154    pub status: ObservationStatusV1,
155}
156
157///
158/// DeploymentObservationGapV1
159///
160#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
161pub struct DeploymentObservationGapV1 {
162    pub key: String,
163    pub description: String,
164}
165
166///
167/// ObservationStatusV1
168///
169#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
170pub enum ObservationStatusV1 {
171    NotObserved,
172    Observed,
173    Missing,
174    Inconclusive,
175}