github.com/cloudfoundry-community/cloudfoundry-cli@v6.44.1-0.20240130060226-cda5ed8e89a5+incompatible/actor/v7action/feature_flag.go (about)

     1  package v7action
     2  
     3  import (
     4  	"code.cloudfoundry.org/cli/actor/actionerror"
     5  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccerror"
     6  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccv3"
     7  	"code.cloudfoundry.org/cli/resources"
     8  )
     9  
    10  type FeatureFlag resources.FeatureFlag
    11  
    12  // GetFeatureFlagByName returns a featureFlag with the provided name.
    13  func (actor Actor) GetFeatureFlagByName(featureFlagName string) (FeatureFlag, Warnings, error) {
    14  	var (
    15  		ccv3FeatureFlag resources.FeatureFlag
    16  		warnings        ccv3.Warnings
    17  		err             error
    18  	)
    19  	ccv3FeatureFlag, warnings, err = actor.CloudControllerClient.GetFeatureFlag(featureFlagName)
    20  
    21  	if err != nil {
    22  		if _, ok := err.(ccerror.FeatureFlagNotFoundError); ok {
    23  			return FeatureFlag{}, Warnings(warnings), actionerror.FeatureFlagNotFoundError{FeatureFlagName: featureFlagName}
    24  		}
    25  		return FeatureFlag{}, Warnings(warnings), err
    26  	}
    27  
    28  	return FeatureFlag(ccv3FeatureFlag), Warnings(warnings), err
    29  }
    30  
    31  func (actor Actor) GetFeatureFlags() ([]FeatureFlag, Warnings, error) {
    32  
    33  	var (
    34  		featureFlags []FeatureFlag
    35  	)
    36  	ccv3FeatureFlags, warnings, err := actor.CloudControllerClient.GetFeatureFlags()
    37  
    38  	if err != nil {
    39  		return nil, Warnings(warnings), err
    40  	}
    41  
    42  	for _, flag := range ccv3FeatureFlags {
    43  		featureFlags = append(featureFlags, FeatureFlag(flag))
    44  	}
    45  
    46  	return featureFlags, Warnings(warnings), nil
    47  }
    48  
    49  func (actor Actor) EnableFeatureFlag(flagName string) (Warnings, error) {
    50  	return actor.updateFeatureFlag(FeatureFlag{Name: flagName, Enabled: true})
    51  }
    52  
    53  func (actor Actor) DisableFeatureFlag(flagName string) (Warnings, error) {
    54  	return actor.updateFeatureFlag(FeatureFlag{Name: flagName, Enabled: false})
    55  }
    56  
    57  func (actor Actor) updateFeatureFlag(flag FeatureFlag) (Warnings, error) {
    58  	_, warnings, err := actor.CloudControllerClient.UpdateFeatureFlag(resources.FeatureFlag(flag))
    59  
    60  	if _, ok := err.(ccerror.FeatureFlagNotFoundError); ok {
    61  		err = actionerror.FeatureFlagNotFoundError{FeatureFlagName: flag.Name}
    62  	}
    63  	return Warnings(warnings), err
    64  }