106 lines
3.0 KiB
Go
106 lines
3.0 KiB
Go
package kubernetes
|
|
|
|
import (
|
|
"github.com/hashicorp/terraform/helper/schema"
|
|
api "k8s.io/kubernetes/pkg/apis/autoscaling/v1"
|
|
)
|
|
|
|
func expandHorizontalPodAutoscalerSpec(in []interface{}) api.HorizontalPodAutoscalerSpec {
|
|
if len(in) == 0 || in[0] == nil {
|
|
return api.HorizontalPodAutoscalerSpec{}
|
|
}
|
|
spec := api.HorizontalPodAutoscalerSpec{}
|
|
m := in[0].(map[string]interface{})
|
|
if v, ok := m["max_replicas"]; ok {
|
|
spec.MaxReplicas = int32(v.(int))
|
|
}
|
|
if v, ok := m["min_replicas"].(int); ok && v > 0 {
|
|
spec.MinReplicas = ptrToInt32(int32(v))
|
|
}
|
|
if v, ok := m["scale_target_ref"]; ok {
|
|
spec.ScaleTargetRef = expandCrossVersionObjectReference(v.([]interface{}))
|
|
}
|
|
if v, ok := m["target_cpu_utilization_percentage"].(int); ok && v > 0 {
|
|
spec.TargetCPUUtilizationPercentage = ptrToInt32(int32(v))
|
|
}
|
|
|
|
return spec
|
|
}
|
|
|
|
func expandCrossVersionObjectReference(in []interface{}) api.CrossVersionObjectReference {
|
|
if len(in) == 0 || in[0] == nil {
|
|
return api.CrossVersionObjectReference{}
|
|
}
|
|
ref := api.CrossVersionObjectReference{}
|
|
m := in[0].(map[string]interface{})
|
|
|
|
if v, ok := m["api_version"]; ok {
|
|
ref.APIVersion = v.(string)
|
|
}
|
|
if v, ok := m["kind"]; ok {
|
|
ref.Kind = v.(string)
|
|
}
|
|
if v, ok := m["name"]; ok {
|
|
ref.Name = v.(string)
|
|
}
|
|
return ref
|
|
}
|
|
|
|
func flattenHorizontalPodAutoscalerSpec(spec api.HorizontalPodAutoscalerSpec) []interface{} {
|
|
m := make(map[string]interface{}, 0)
|
|
m["max_replicas"] = spec.MaxReplicas
|
|
if spec.MinReplicas != nil {
|
|
m["min_replicas"] = *spec.MinReplicas
|
|
}
|
|
m["scale_target_ref"] = flattenCrossVersionObjectReference(spec.ScaleTargetRef)
|
|
if spec.TargetCPUUtilizationPercentage != nil {
|
|
m["target_cpu_utilization_percentage"] = *spec.TargetCPUUtilizationPercentage
|
|
}
|
|
return []interface{}{m}
|
|
}
|
|
|
|
func flattenCrossVersionObjectReference(ref api.CrossVersionObjectReference) []interface{} {
|
|
m := make(map[string]interface{}, 0)
|
|
if ref.APIVersion != "" {
|
|
m["api_version"] = ref.APIVersion
|
|
}
|
|
if ref.Kind != "" {
|
|
m["kind"] = ref.Kind
|
|
}
|
|
if ref.Name != "" {
|
|
m["name"] = ref.Name
|
|
}
|
|
return []interface{}{m}
|
|
}
|
|
|
|
func patchHorizontalPodAutoscalerSpec(prefix string, pathPrefix string, d *schema.ResourceData) []PatchOperation {
|
|
ops := make([]PatchOperation, 0)
|
|
|
|
if d.HasChange(prefix + "max_replicas") {
|
|
ops = append(ops, &ReplaceOperation{
|
|
Path: pathPrefix + "/maxReplicas",
|
|
Value: d.Get(prefix + "max_replicas").(int),
|
|
})
|
|
}
|
|
if d.HasChange(prefix + "min_replicas") {
|
|
ops = append(ops, &ReplaceOperation{
|
|
Path: pathPrefix + "/minReplicas",
|
|
Value: d.Get(prefix + "min_replicas").(int),
|
|
})
|
|
}
|
|
if d.HasChange(prefix + "scale_target_ref") {
|
|
ops = append(ops, &ReplaceOperation{
|
|
Path: pathPrefix + "/scaleTargetRef",
|
|
Value: expandCrossVersionObjectReference(d.Get(prefix + "scale_target_ref").([]interface{})),
|
|
})
|
|
}
|
|
if d.HasChange(prefix + "target_cpu_utilization_percentage") {
|
|
ops = append(ops, &ReplaceOperation{
|
|
Path: pathPrefix + "/targetCPUUtilizationPercentage",
|
|
Value: d.Get(prefix + "target_cpu_utilization_percentage").(int),
|
|
})
|
|
}
|
|
|
|
return ops
|
|
}
|