blob: 5e2fd70a9114157e480e74bf6626006499bd4ee8 [file] [log] [blame]
// Copyright 2016 The LUCI Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package deploy
import (
"fmt"
"strings"
"time"
"github.com/luci/luci-go/common/errors"
)
// AppYAMLString returns the GAE app.yaml string for this Duration.
func (d *Duration) AppYAMLString() string { return strings.Join(d.appYAMLStringParts(), " ") }
func (d *Duration) appYAMLStringParts() (parts []string) {
if d != nil {
parts = []string{fmt.Sprintf("%d%s", d.Value, d.Unit.appYAMLSuffix())}
for _, plus := range d.Plus {
parts = append(parts, plus.appYAMLStringParts()...)
}
}
return
}
// Duration returns the time.Duration that this Duration describes.
func (d *Duration) Duration() time.Duration {
if d == nil {
return 0
}
dv := time.Duration(d.Value) * d.Unit.durationUnit()
for _, plus := range d.Plus {
dv += plus.Duration()
}
return dv
}
func (u Duration_Unit) appYAMLSuffix() string {
switch u {
case Duration_MILLISECONDS:
return "ms"
case Duration_SECONDS:
return "s"
case Duration_MINUTES:
return "m"
case Duration_HOURS:
return "h"
case Duration_DAYS:
return "d"
default:
panic(fmt.Errorf("unknown Duration.Unit: %v", u))
}
}
func (u Duration_Unit) durationUnit() time.Duration {
switch u {
case Duration_MILLISECONDS:
return time.Millisecond
case Duration_SECONDS:
return time.Second
case Duration_MINUTES:
return time.Minute
case Duration_HOURS:
return time.Hour
case Duration_DAYS:
return 24 * time.Hour
default:
panic(fmt.Errorf("unknown Duration.Unit: %v", u))
}
}
// AppYAMLString returns the "app.yaml" string for this instance class.
//
// The supplied prefix is prepended to the instance class string. This prefix
// will differ based on the type of AppEngine module that the instance class
// is describing (e.g., for "F_1", the prefix is "F_").
func (v AppEngineModule_ClassicParams_InstanceClass) AppYAMLString(prefix string) string {
var name string
switch v {
case AppEngineModule_ClassicParams_IC_DEFAULT:
return ""
case AppEngineModule_ClassicParams_IC_1:
name = "1"
case AppEngineModule_ClassicParams_IC_2:
name = "2"
case AppEngineModule_ClassicParams_IC_4:
name = "4"
case AppEngineModule_ClassicParams_IC_4_1G:
name = "4_1G"
case AppEngineModule_ClassicParams_IC_8:
name = "8"
default:
panic(fmt.Errorf("unknown InstanceClass: %v", v))
}
return prefix + name
}
// AppYAMLString returns the "app.yaml" string for this option.
func (v AppEngineModule_Handler_LoginOption) AppYAMLString() string {
switch v {
case AppEngineModule_Handler_LOGIN_OPTIONAL:
return "optional"
case AppEngineModule_Handler_LOGIN_REQUIRED:
return "required"
case AppEngineModule_Handler_LOGIN_ADMIN:
return "admin"
default:
panic(fmt.Errorf("unknown handler login option %q", v))
}
}
// AppYAMLString returns the "app.yaml" string for this option.
func (v AppEngineModule_Handler_SecureOption) AppYAMLString() string {
switch v {
case AppEngineModule_Handler_SECURE_OPTIONAL:
return "optional"
case AppEngineModule_Handler_SECURE_NEVER:
return "never"
case AppEngineModule_Handler_SECURE_ALWAYS:
return "always"
default:
panic(fmt.Errorf("unknown handler secure option %q", v))
}
}
// AppYAMLString returns the "index.yaml" string for this option.
func (v AppEngineResources_Index_Direction) AppYAMLString() string {
switch v {
case AppEngineResources_Index_ASCENDING:
return "asc"
case AppEngineResources_Index_DESCENDING:
return "desc"
default:
panic(fmt.Errorf("unknown index direction %q", v))
}
}
// IndexDirectionFromAppYAMLString returns the
// AppEngineResources_Index_Direction value associated with the given
// "index.yaml" strnig value.
//
// This is a reverse of the AppEngineResources_Index_Direction's AppYAMLString.
//
// If the direction value is not recognized, an error will be returned.
func IndexDirectionFromAppYAMLString(v string) (AppEngineResources_Index_Direction, error) {
switch v {
case "asc", "":
return AppEngineResources_Index_ASCENDING, nil
case "desc":
return AppEngineResources_Index_DESCENDING, nil
default:
return 0, errors.Reason("invalid index direction %q", v).Err()
}
}
// KubeString returns the Kubernetes "restartPolicy" field string for the
// enumeration value.
func (v KubernetesPod_RestartPolicy) KubeString() string {
switch v {
case KubernetesPod_RESTART_ALWAYS:
return "Always"
case KubernetesPod_RESTART_ON_FAILURE:
return "OnFailure"
case KubernetesPod_RESTART_NEVER:
return "Never"
default:
panic(fmt.Errorf("unknown restart policy (%v)", v))
}
}
// KubeSuffix returns the Kubernetes configuration unit suffix for a given
// resource unit.
func (v KubernetesPod_Container_Resources_Unit) KubeSuffix() string {
switch v {
case KubernetesPod_Container_Resources_BYTE:
return ""
case KubernetesPod_Container_Resources_KILOBYTE:
return "K"
case KubernetesPod_Container_Resources_MEGABYTE:
return "M"
case KubernetesPod_Container_Resources_GIGABYTE:
return "G"
case KubernetesPod_Container_Resources_TERABYTE:
return "T"
case KubernetesPod_Container_Resources_PETABYTE:
return "P"
case KubernetesPod_Container_Resources_EXABYTE:
return "E"
case KubernetesPod_Container_Resources_KIBIBYTE:
return "Ki"
case KubernetesPod_Container_Resources_MEBIBYTE:
return "Mi"
case KubernetesPod_Container_Resources_GIBIBYTE:
return "Gi"
case KubernetesPod_Container_Resources_TEBIBYTE:
return "Ti"
case KubernetesPod_Container_Resources_PEBIBYTE:
return "Pi"
case KubernetesPod_Container_Resources_EXBIBYTE:
return "Ei"
default:
panic(fmt.Errorf("unknown resource unit (%v)", v))
}
}