Skip to main content

canic_host/deployment_truth/model/authority/
mod.rs

1use super::{CanisterControlClassV1, SafetyFindingV1};
2use serde::{Deserialize, Serialize};
3
4///
5/// AuthorityReconciliationPlanV1
6///
7#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
8pub struct AuthorityReconciliationPlanV1 {
9    pub schema_version: u32,
10    pub plan_id: String,
11    pub inventory_id: String,
12    pub authority_profile_hash: Option<String>,
13    pub canister_actions: Vec<CanisterAuthorityActionV1>,
14    pub automatic_actions: Vec<AuthorityAutomaticActionV1>,
15    pub hard_failures: Vec<SafetyFindingV1>,
16    pub external_actions_required: Vec<AuthorityExternalActionV1>,
17}
18
19///
20/// AuthorityAutomaticActionV1
21///
22#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
23pub struct AuthorityAutomaticActionV1 {
24    pub subject: String,
25    pub canister_id: String,
26    pub role: Option<String>,
27    pub action: AuthorityActionV1,
28    pub observed_controllers: Vec<String>,
29    pub desired_controllers: Vec<String>,
30    pub controller_delta: AuthorityControllerDeltaV1,
31    pub reason: String,
32}
33
34///
35/// AuthorityControllerDeltaV1
36///
37#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)]
38pub struct AuthorityControllerDeltaV1 {
39    pub add_controllers: Vec<String>,
40    pub remove_controllers: Vec<String>,
41}
42
43///
44/// CanisterAuthorityActionV1
45///
46#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
47pub struct CanisterAuthorityActionV1 {
48    pub canister_id: Option<String>,
49    pub role: Option<String>,
50    pub control_classification: CanisterControlClassV1,
51    pub observed_controllers: Vec<String>,
52    pub desired_controllers: Vec<String>,
53    pub controller_delta: AuthorityControllerDeltaV1,
54    pub action: AuthorityActionV1,
55    pub state: AuthorityReconciliationStateV1,
56    pub can_apply: bool,
57    pub reason: String,
58}
59
60///
61/// AuthorityExternalActionV1
62///
63#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
64pub struct AuthorityExternalActionV1 {
65    pub subject: String,
66    pub canister_id: Option<String>,
67    pub role: Option<String>,
68    pub control_classification: CanisterControlClassV1,
69    pub state: AuthorityReconciliationStateV1,
70    pub action: AuthorityActionV1,
71    pub observed_controllers: Vec<String>,
72    pub desired_controllers: Vec<String>,
73    pub controller_delta: AuthorityControllerDeltaV1,
74    pub reason: String,
75}
76
77///
78/// AuthorityActionV1
79///
80#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
81pub enum AuthorityActionV1 {
82    None,
83    AddControllers,
84    RemoveControllers,
85    ReplaceControllerSet,
86    RequiresExternalController,
87    RequiresDestructiveImportConfirmation,
88    ObserveOnly,
89    AdoptPlanAvailable,
90    BlockedByPolicy,
91    UnknownObservation,
92}
93
94///
95/// AuthorityReconciliationStateV1
96///
97#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
98pub enum AuthorityReconciliationStateV1 {
99    AlreadyCorrect,
100    CanApplyAutomatically,
101    RequiresExternalAction,
102    UnsafeBlocked,
103    Unknown,
104}