...

Source file src/edge-infra.dev/pkg/edge/rollouts/internal/inmem_examples.go

Documentation: edge-infra.dev/pkg/edge/rollouts/internal

     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