@@ -38,7 +38,7 @@ def get(self, namespace, name=None, **kwargs):
3838
3939 return response
4040
41- def manifest (self , namespace , name , target , ** kwargs ):
41+ def manifest (self , namespace , name , app_type , target , ** kwargs ):
4242 min_replicas = kwargs .get ('min' )
4343 max_replicas = kwargs .get ('max' )
4444 cpu_percent = kwargs .get ('cpu_percent' )
@@ -51,7 +51,7 @@ def manifest(self, namespace, name, target, **kwargs):
5151
5252 labels = {
5353 'app' : namespace ,
54- 'type' : kwargs . get ( ' app_type' ) ,
54+ 'type' : app_type ,
5555 'heritage' : 'deis' ,
5656 }
5757
@@ -66,41 +66,53 @@ def manifest(self, namespace, name, target, **kwargs):
6666 'spec' : {
6767 'minReplicas' : min_replicas ,
6868 'maxReplicas' : max_replicas ,
69- 'scaleRef' : {
70- # only works with Deployments, RS and RC
71- 'kind' : target ['kind' ],
72- 'name' : target ['metadata' ]['name' ],
73- # the resource of the above which does the scale action
74- 'subresource' : 'scale' ,
75- },
76- 'cpuUtilization' : {
77- 'targetPercentage' : cpu_percent
78- }
7969 }
8070 }
8171
72+ if self .version () >= 1.3 :
73+ manifest ['spec' ]['targetCPUUtilizationPercentage' ] = cpu_percent
74+
75+ manifest ['spec' ]['scaleTargetRef' ] = {
76+ # only works with Deployments, RS and RC
77+ 'kind' : target ['kind' ],
78+ 'name' : target ['metadata' ]['name' ],
79+ }
80+ elif self .version () <= 1.2 :
81+ # api changed between version
82+ manifest ['spec' ]['cpuUtilization' ] = {
83+ 'targetPercentage' : cpu_percent
84+ }
85+
86+ manifest ['spec' ]['scaleRef' ] = {
87+ # only works with Deployments, RS and RC
88+ 'kind' : target ['kind' ],
89+ 'name' : target ['metadata' ]['name' ],
90+ # the resource of the above which does the scale action
91+ 'subresource' : 'scale' ,
92+ }
93+
8294 return manifest
8395
84- def create (self , namespace , name , target , ** kwargs ):
85- manifest = self .manifest (namespace , name , target , ** kwargs )
96+ def create (self , namespace , name , app_type , target , ** kwargs ):
97+ manifest = self .manifest (namespace , name , app_type , target , ** kwargs )
8698
8799 url = self .api ("/namespaces/{}/horizontalpodautoscalers" , namespace )
88100 response = self .session .post (url , json = manifest )
89101 if self .unhealthy (response .status_code ):
102+ self .log (namespace , 'template used: {}' .format (json .dumps (manifest , indent = 4 )), 'DEBUG' ) # noqa
90103 raise KubeHTTPException (
91104 response ,
92105 'create HorizontalPodAutoscaler "{}" in Namespace "{}"' , name , namespace
93106 )
94- self .log (namespace , 'template used: {}' .format (json .dumps (manifest , indent = 4 )), 'DEBUG' ) # noqa
95107
96108 # optionally wait for HPA if requested
97109 if kwargs .get ('wait' , False ):
98110 self .wait (namespace , name )
99111
100112 return response
101113
102- def update (self , namespace , name , target , ** kwargs ):
103- manifest = self .manifest (namespace , name , target , ** kwargs )
114+ def update (self , namespace , name , app_type , target , ** kwargs ):
115+ manifest = self .manifest (namespace , name , app_type , target , ** kwargs )
104116
105117 url = self .api ("/namespaces/{}/horizontalpodautoscalers/{}" , namespace , name )
106118 response = self .session .put (url , json = manifest )
@@ -137,8 +149,12 @@ def wait(self, namespace, name):
137149 # ideally it would use the resources wait commands but they vary
138150 for _ in range (30 ):
139151 # fetch resource attached to it
140- resource_kind = hpa ['spec' ]['scaleRef' ]['kind' ].lower ()
141- resource_name = hpa ['spec' ]['scaleRef' ]['name' ]
152+ if self .version () >= 1.3 :
153+ resource_kind = hpa ['spec' ]['scaleTargetRef' ]['kind' ].lower ()
154+ resource_name = hpa ['spec' ]['scaleTargetRef' ]['name' ]
155+ elif self .version () <= 1.2 :
156+ resource_kind = hpa ['spec' ]['scaleRef' ]['kind' ].lower ()
157+ resource_name = hpa ['spec' ]['scaleRef' ]['name' ]
142158
143159 resource = getattr (self , resource_kind )
144160 resource = getattr (resource , 'get' )(namespace , resource_name ).json ()
0 commit comments