1use crate::{
8 config::{ComponentDeploymentLabel, ComponentDeploymentLimits, ComponentDeploymentPurpose},
9 dto::fleet_registry::FleetRegistryVersion,
10 ids::{
11 ComponentDeploymentConfigurationDigest, ComponentGroupDeploymentId,
12 ComponentGroupMemberPath, ComponentGroupPlacementId, ComponentGroupSpecId, ComponentSpecId,
13 FleetBinding, FleetSubnetRootBinding, FleetSubnetRootReleaseSet,
14 },
15};
16use candid::{CandidType, Principal};
17use serde::{Deserialize, Serialize};
18
19#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
21#[serde(deny_unknown_fields)]
22pub struct FleetComponentProvisioningPlan {
23 pub fleet: FleetBinding,
24 pub fleet_registry: FleetRegistryVersion,
25 pub configuration_digest: ComponentDeploymentConfigurationDigest,
26 pub operation: FleetComponentProvisioningOperation,
27 pub directory_confirmation_roots: Vec<Principal>,
28 pub batches: Vec<FleetSubnetRootProvisioningBatch>,
29}
30
31#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
33#[serde(deny_unknown_fields)]
34pub enum FleetComponentProvisioningOperation {
35 FreshInstall,
36 ScaleOut {
37 deployment: ComponentGroupDeploymentId,
38 previous_placements: u32,
39 requested_placements: u32,
40 },
41}
42
43#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
45#[serde(deny_unknown_fields)]
46pub struct FleetSubnetRootProvisioningBatch {
47 pub root: FleetSubnetRootBinding,
48 pub active_release_set: FleetSubnetRootReleaseSet,
49 pub placements: Vec<ComponentGroupPlacementPlan>,
50}
51
52#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
54#[serde(deny_unknown_fields)]
55pub struct ComponentGroupPlacementPlan {
56 pub group_placement: ComponentGroupPlacementId,
57 pub component_group: ComponentGroupSpecId,
58 pub entries: Vec<ComponentGroupPlanEntry>,
59}
60
61#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
63#[serde(deny_unknown_fields)]
64pub struct ComponentGroupPlanEntry {
65 pub member_path: ComponentGroupMemberPath,
66 pub component_spec: ComponentSpecId,
67 pub spec_hash: [u8; 32],
68 pub purpose: ComponentDeploymentPurpose,
69 pub labels: Vec<ComponentDeploymentLabel>,
70 pub limits: ComponentDeploymentLimits,
71}
72
73#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
75#[serde(deny_unknown_fields)]
76pub struct RootComponentProvisioningAcceptanceRequest {
77 pub fleet_registry: FleetRegistryVersion,
78 pub configuration_digest: ComponentDeploymentConfigurationDigest,
79 pub operation_id: [u8; 32],
80 pub plan_hash: [u8; 32],
81 pub batch: FleetSubnetRootProvisioningBatch,
82}
83
84#[derive(CandidType, Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
86#[serde(deny_unknown_fields)]
87pub struct RootComponentProvisioningStatusRequest {
88 pub operation_id: [u8; 32],
89 pub plan_hash: [u8; 32],
90}
91
92#[derive(CandidType, Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
94pub enum RootComponentProvisioningPhase {
95 Accepted,
96 Provisioned,
97 Published,
98 RuntimesActive,
99}
100
101#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
103#[serde(deny_unknown_fields)]
104pub struct RootComponentProvisioningStatusResponse {
105 pub operation_id: [u8; 32],
106 pub plan_hash: [u8; 32],
107 pub fleet_registry: FleetRegistryVersion,
108 pub configuration_digest: ComponentDeploymentConfigurationDigest,
109 pub fleet_subnet_root: Principal,
110 pub phase: RootComponentProvisioningPhase,
111 pub placement_count: u32,
112 pub component_count: u32,
113 pub accepted_at_ns: u64,
114 pub receipt_content_hash: [u8; 32],
115}