forked from Katenary/katenary
svc-optional
This commit is contained in:
@@ -200,6 +200,12 @@ func (chart *HelmChart) generateDeployment(service types.ServiceConfig, deployme
|
||||
logger.Info("Ignoring service ", service.Name)
|
||||
return nil
|
||||
}
|
||||
|
||||
// isgnored service
|
||||
if isSvcOptional(service) {
|
||||
logger.Info("Optional service ", service.Name)
|
||||
return nil
|
||||
}
|
||||
|
||||
// helm dependency
|
||||
if isHelmDependency, err := chart.setDependencies(service); err != nil {
|
||||
|
||||
@@ -50,6 +50,9 @@ func Generate(project *types.Project) (*HelmChart, error) {
|
||||
// drop all services with the "ignore" label
|
||||
dropIngoredServices(project)
|
||||
|
||||
// optional all services with the "svc-optional" label
|
||||
makeSvcOptionalServices(project)
|
||||
|
||||
fixContainerNames(project)
|
||||
|
||||
// rename all services name to remove dashes
|
||||
@@ -223,6 +226,16 @@ func dropIngoredServices(project *types.Project) {
|
||||
}
|
||||
}
|
||||
|
||||
// makeSvcOptionalServices makes all services optional with the "svc-optional" label set to true (or yes).
|
||||
func makeSvcOptionalServices(project *types.Project) {
|
||||
for name, service := range project.Services {
|
||||
if isSvcOptional(service) {
|
||||
// delete(project.Services, name)
|
||||
// make optional
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// fixResourceNames renames all services and related resources to remove dashes.
|
||||
func fixResourceNames(project *types.Project) error {
|
||||
// rename all services name to remove dashes
|
||||
|
||||
@@ -34,6 +34,7 @@ type Service struct {
|
||||
SamePod *string `yaml:"same-pod,omitempty" json:"same-pod,omitempty" jsonschema:"title=Same Pod,description=Service that should be in the same pod"`
|
||||
Description *string `yaml:"description,omitempty" json:"description,omitempty" jsonschema:"title=Description,description=Description of the service that will be injected in the values.yaml file"`
|
||||
Ignore *bool `yaml:"ignore,omitempty" json:"ignore,omitempty" jsonschema:"title=Ignore,description=Ignore the service in the conversion"`
|
||||
SvcOptional *bool `yaml:"svc-optional,omitempty" json:"svc-optional,omitempty" jsonschema:"title=SvcOptional,description=SvcOptional the service in the conversion"`
|
||||
Dependencies []labelstructs.Dependency `yaml:"dependencies,omitempty" json:"dependencies,omitempty" jsonschema:"title=Dependencies,description=Services that should be injected in the Chart.yaml file"`
|
||||
ConfigMapFiles *labelstructs.ConfigMapFiles `yaml:"configmap-files,omitempty" json:"configmap-files,omitempty" jsonschema:"title=ConfigMap Files,description=Files that should be injected as ConfigMap"`
|
||||
MapEnv *labelstructs.MapEnv `yaml:"map-env,omitempty" json:"map-env,omitempty" jsonschema:"title=Map Env,description=Map environment variables to another value"`
|
||||
@@ -94,6 +95,7 @@ func OverrideWithConfig(project *types.Project) {
|
||||
mustGetLabelContent(s.SamePod, labels.LabelSamePod)
|
||||
mustGetLabelContent(s.Description, labels.LabelDescription)
|
||||
mustGetLabelContent(s.Ignore, labels.LabelIgnore)
|
||||
mustGetLabelContent(s.SvcOptional, labels.LabelSvcOptional)
|
||||
mustGetLabelContent(s.Dependencies, labels.LabelDependencies)
|
||||
mustGetLabelContent(s.ConfigMapFiles, labels.LabelConfigMapFiles)
|
||||
mustGetLabelContent(s.MapEnv, labels.LabelMapEnv)
|
||||
|
||||
@@ -30,6 +30,7 @@ const (
|
||||
LabelSamePod Label = KatenaryLabelPrefix + "/same-pod"
|
||||
LabelDescription Label = KatenaryLabelPrefix + "/description"
|
||||
LabelIgnore Label = KatenaryLabelPrefix + "/ignore"
|
||||
LabelSvcOptional Label = KatenaryLabelPrefix + "/svc-optional"
|
||||
LabelDependencies Label = KatenaryLabelPrefix + "/dependencies"
|
||||
LabelConfigMapFiles Label = KatenaryLabelPrefix + "/configmap-files"
|
||||
LabelCronJob Label = KatenaryLabelPrefix + "/cronjob"
|
||||
|
||||
@@ -183,6 +183,12 @@
|
||||
example: "labels:\n {{ .KatenaryPrefix }}/ignore: \"true\""
|
||||
type: "bool"
|
||||
|
||||
"svc-optional":
|
||||
short: "Make the service optional in the resulting helm chart"
|
||||
long: "Making a service optional to be exported in helm chart."
|
||||
example: "labels:\n {{ .KatenaryPrefix }}/svc-optional: \"true\""
|
||||
type: "bool"
|
||||
|
||||
"dependencies":
|
||||
short: "Add Helm dependencies to the service."
|
||||
long: |-
|
||||
|
||||
@@ -83,6 +83,14 @@ func isIgnored(service types.ServiceConfig) bool {
|
||||
return false
|
||||
}
|
||||
|
||||
// isSvcOptionald returns true if the service is optional.
|
||||
func isSvcOptional(service types.ServiceConfig) bool {
|
||||
if v, ok := service.Labels[labels.LabelSvcOptional]; ok {
|
||||
return v == "true" || v == "yes" || v == "1"
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// UnWrapTPL removes the line wrapping from a template.
|
||||
func UnWrapTPL(in []byte) []byte {
|
||||
return regexpLineWrap.ReplaceAll(in, []byte(" }}"))
|
||||
|
||||
Reference in New Issue
Block a user