1 package internal
2
3 import (
4 "fmt"
5
6 "edge-infra.dev/pkg/edge/rollouts"
7 "edge-infra.dev/pkg/edge/rollouts/examples"
8 )
9
10 const (
11 ExamplePlanID = "my-example-plan"
12 ExampleRolloutID = "my-example-rollout"
13 ExampleClusterID = "my-cluster-id"
14 ExampleBannerID = "my-banner-id"
15 StoreArtifactName = "store"
16 )
17
18 type BannerByteGraphs map[string][]byte
19 type BannerByteGraphStore map[string]BannerByteGraphs
20 type BannerGraphs map[string]*rollouts.RolloutGraph
21 type BannerGraphStore map[string]BannerGraphs
22
23 func NewBannerGraphStore(graphs BannerByteGraphStore) (BannerGraphStore, error) {
24 bgs := BannerGraphStore{}
25 if graphs == nil {
26 return bgs, nil
27 }
28 for bannerID, bGraphs := range graphs {
29 bg := BannerGraphs{}
30 for rolloutID, graphBytes := range bGraphs {
31 g, err := rollouts.NewRolloutGraphFromJSON(graphBytes)
32 if err != nil {
33 return bgs, err
34 }
35 bg[rolloutID] = g
36 }
37 bgs[bannerID] = bg
38 }
39 return bgs, nil
40 }
41
42 var ExampleBannerByteGraphStore = BannerByteGraphStore{
43 ExampleBannerID: BannerByteGraphs{
44 ExampleRolloutID: examples.SampleGraphJSON,
45 },
46 }
47
48 type BannerBytePlans map[string][]byte
49 type BannerBytePlanStore map[string]BannerBytePlans
50 type BannerPlans map[string]rollouts.RolloutPlan
51 type BannerPlanStore map[string]BannerPlans
52
53 func NewBannerPlanStore(plans BannerBytePlanStore) (BannerPlanStore, error) {
54 bps := BannerPlanStore{}
55 if plans == nil {
56 return bps, nil
57 }
58 for bannerID, bPlans := range plans {
59 bp := BannerPlans{}
60 for rolloutID, planBytes := range bPlans {
61 p, err := rollouts.NewRolloutPlanFromJSON(planBytes)
62 if err != nil {
63 return bps, err
64 }
65 bp[rolloutID] = p
66 }
67 bps[bannerID] = bp
68 }
69 return bps, nil
70 }
71
72 var ExampleBannerBytePlanStore = BannerBytePlanStore{
73 ExampleBannerID: BannerBytePlans{
74 ExamplePlanID: examples.SamplePlanJSON,
75 },
76 }
77
78 type LabelStore map[string][]string
79
80 func NewExampleLabelStore() LabelStore {
81 return LabelStore{
82 "dev": {"dev0", "dev1", "dev2"},
83 "staging:east": {"stage0-east", "stage1-east"},
84 "staging:west": {"stage0-west", "stage1-west"},
85 "prod:us": {"prod0-us"},
86 }
87 }
88
89 type TargetGroupStateStore struct {
90 clusterVersions map[string]ClusterVersionState
91 }
92
93 type VersionState struct {
94 Ready bool
95 Version string
96 }
97
98 func (vs *VersionState) String() string {
99 return fmt.Sprintf("Ready: %t, Version: %s", vs.Ready, vs.Version)
100 }
101
102 type ClusterVersionState map[string]*VersionState
103
104 func NewExampleTGStore() TargetGroupStateStore {
105 return TargetGroupStateStore{
106 clusterVersions: map[string]ClusterVersionState{
107 "dev0": {StoreArtifactName: &VersionState{Ready: false, Version: "0.20"}},
108 "dev1": {StoreArtifactName: &VersionState{Ready: false, Version: "0.20"}},
109 "dev2": {StoreArtifactName: &VersionState{Ready: false, Version: "0.20"}},
110 "stage0-east": {StoreArtifactName: &VersionState{Ready: false, Version: "0.20"}},
111 "stage1-east": {StoreArtifactName: &VersionState{Ready: false, Version: "0.20"}},
112 "stage0-west": {StoreArtifactName: &VersionState{Ready: false, Version: "0.20"}},
113 "stage1-west": {StoreArtifactName: &VersionState{Ready: false, Version: "0.20"}},
114 "prod0-us": {StoreArtifactName: &VersionState{Ready: false, Version: "0.20"}},
115 },
116 }
117 }
118
119 type ArtifactVersionStore map[string]string
120
121 func NewExampleAVStore() ArtifactVersionStore { return ArtifactVersionStore{"store": "0.20"} }
122
123 type ApprovalGateStore map[rollouts.NodeKey]rollouts.GateApproval
124
125 func NewExampleAGStore() ApprovalGateStore { return ApprovalGateStore{"ag1": rollouts.GatePending} }
126
View as plain text