github.com/Thanhphan1147/cloudfoundry-cli@v7.1.0+incompatible/actor/v7pushaction/actor.go (about)

     1  // Package v7pushaction contains the business logic for orchestrating a V2 app
     2  // push.
     3  package v7pushaction
     4  
     5  import (
     6  	"regexp"
     7  )
     8  
     9  // Warnings is a list of warnings returned back from the cloud controller
    10  type Warnings []string
    11  
    12  // Actor handles all business logic for Cloud Controller operations.
    13  type Actor struct {
    14  	SharedActor SharedActor
    15  	V7Actor     V7Actor
    16  
    17  	PreparePushPlanSequence   []UpdatePushPlanFunc
    18  	ChangeApplicationSequence func(plan PushPlan) []ChangeApplicationFunc
    19  	TransformManifestSequence []HandleFlagOverrideFunc
    20  
    21  	startWithProtocol *regexp.Regexp
    22  	urlValidator      *regexp.Regexp
    23  }
    24  
    25  const ProtocolRegexp = "^https?://|^tcp://"
    26  const URLRegexp = "^(?:https?://|tcp://)?(?:(?:[\\w-]+\\.)|(?:[*]\\.))+\\w+(?:\\:\\d+)?(?:/.*)*(?:\\.\\w+)?$"
    27  
    28  // NewActor returns a new actor.
    29  func NewActor(v3Actor V7Actor, sharedActor SharedActor) *Actor {
    30  	actor := &Actor{
    31  		SharedActor: sharedActor,
    32  		V7Actor:     v3Actor,
    33  
    34  		startWithProtocol: regexp.MustCompile(ProtocolRegexp),
    35  		urlValidator:      regexp.MustCompile(URLRegexp),
    36  	}
    37  
    38  	actor.TransformManifestSequence = []HandleFlagOverrideFunc{
    39  		// app name override must come first, so it can trim the manifest
    40  		// from multiple apps down to just one
    41  		HandleAppNameOverride,
    42  
    43  		HandleInstancesOverride,
    44  		HandleStartCommandOverride,
    45  
    46  		// Type must come before endpoint because endpoint validates against type
    47  		HandleHealthCheckTypeOverride,
    48  		HandleHealthCheckEndpointOverride,
    49  
    50  		HandleHealthCheckTimeoutOverride,
    51  		HandleMemoryOverride,
    52  		HandleDiskOverride,
    53  		HandleNoRouteOverride,
    54  		HandleRandomRouteOverride,
    55  		HandleTaskOverride,
    56  
    57  		// this must come after all routing related transforms
    58  		HandleDefaultRouteOverride,
    59  
    60  		HandleDockerImageOverride,
    61  		HandleDockerUsernameOverride,
    62  		HandleStackOverride,
    63  		HandleBuildpacksOverride,
    64  		HandleStrategyOverride,
    65  		HandleAppPathOverride,
    66  		HandleDropletPathOverride,
    67  	}
    68  
    69  	actor.PreparePushPlanSequence = []UpdatePushPlanFunc{
    70  		SetDefaultBitsPathForPushPlan,
    71  		SetupDropletPathForPushPlan,
    72  		actor.SetupAllResourcesForPushPlan,
    73  		SetupDeploymentStrategyForPushPlan,
    74  		SetupNoStartForPushPlan,
    75  		SetupNoWaitForPushPlan,
    76  		SetupTaskAppForPushPlan,
    77  	}
    78  
    79  	actor.ChangeApplicationSequence = func(plan PushPlan) []ChangeApplicationFunc {
    80  		var sequence []ChangeApplicationFunc
    81  		sequence = append(sequence, actor.GetPrepareApplicationSourceSequence(plan)...)
    82  		sequence = append(sequence, actor.GetRuntimeSequence(plan)...)
    83  		return sequence
    84  	}
    85  
    86  	return actor
    87  }