canic_host/deployment_truth/model/authority/
mod.rs1use super::{CanisterControlClassV1, SafetyFindingV1};
2use serde::{Deserialize, Serialize};
3
4#[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#[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#[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#[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#[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#[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#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
98pub enum AuthorityReconciliationStateV1 {
99 AlreadyCorrect,
100 CanApplyAutomatically,
101 RequiresExternalAction,
102 UnsafeBlocked,
103 Unknown,
104}