20
20
# shift_nodepool_capacity.py pool-to-drain pool-to-grow shrink_increment:grow_increment num_to_add
21
21
#
22
22
# EG:
23
- # shift_nodepool_capacity.py default-pool pool-n1-highmem-8-300gb 2:1 5
23
+ # shift_nodepool_capacity.py 5 2:1 default-pool pool-n1-highmem-8-300gb
24
24
#
25
25
# for nodefs on the prow builds cluster
26
26
# USE AT YOUR OWN RISK.
27
27
28
+ import argparse
28
29
import sys
29
30
import subprocess
30
31
import json
31
32
import math
32
33
33
- # xref prow/Makefile get-build-cluster-credentials
34
- # TODO: perhaps make these configurable
35
- CLUSTER = 'prow'
36
- ZONE = 'us-central1-f'
37
- PROJECT = 'k8s-prow-builds'
38
-
39
34
40
35
def get_pool_sizes (project , zone , cluster ):
41
36
"""returns a map of node pool name to size using the gcloud cli."""
@@ -92,18 +87,39 @@ def prompt_confirmation():
92
87
print ('Confirmed.' )
93
88
94
89
95
- def main ():
90
+ # xref prow/Makefile get-build-cluster-credentials
91
+ def parse_args (args ):
92
+ parser = argparse .ArgumentParser ()
93
+ parser .add_argument ('nodes' , type = int ,
94
+ help = 'Number of Nodes to add.' )
95
+ parser .add_argument ('ratio' , type = str ,
96
+ help = 'ShrinkIncrement:GrowIncrement, Ex 2:1.' )
97
+ parser .add_argument ('shrink' , type = str ,
98
+ help = 'Pool name to drain nodes from.' )
99
+ parser .add_argument ('grow' , type = str ,
100
+ help = 'Pool name to grow nodes into.' )
101
+ parser .add_argument ('--cluster' , type = str , default = "prow" ,
102
+ help = 'Name of GCP cluster.' )
103
+ parser .add_argument ('--zone' , type = str , default = 'us-central1-f' ,
104
+ help = 'GCP zonal location of the cluster.' )
105
+ parser .add_argument ('--project' , type = str , default = 'k8s-prow-builds' ,
106
+ help = 'GCP Project that the cluster exists within.' )
107
+ return parser .parse_args (args )
108
+
109
+
110
+ def main (options ):
96
111
# parse cli
97
- nodes_to_add = int ( sys . argv [ - 1 ])
112
+ nodes_to_add = options . nodes
98
113
99
- ratio = sys . argv [ - 2 ] .split (':' )
114
+ ratio = options . ratio .split (':' )
100
115
shrink_increment , grow_increment = int (ratio [0 ]), int (ratio [1 ])
101
116
102
- pool_to_grow = sys . argv [ - 3 ]
103
- pool_to_shrink = sys . argv [ - 4 ]
117
+ pool_to_grow = options . grow
118
+ pool_to_shrink = options . shrink
104
119
105
120
# obtain current pool sizes
106
- pool_sizes = get_pool_sizes (PROJECT , ZONE , CLUSTER )
121
+ project , zone , cluster = options .project , options .zone , options .cluster
122
+ pool_sizes = get_pool_sizes (project , zone , cluster )
107
123
pool_to_grow_initial = pool_sizes [pool_to_grow ]
108
124
pool_to_shrink_initial = pool_sizes [pool_to_shrink ]
109
125
@@ -120,7 +136,7 @@ def main():
120
136
'Shifting NodePool capacity for project = "{project}",'
121
137
'zone = "{zone}", cluster = "{cluster}"'
122
138
).format (
123
- project = PROJECT , zone = ZONE , cluster = CLUSTER ,
139
+ project = project , zone = zone , cluster = cluster ,
124
140
))
125
141
print ('' )
126
142
print ((
@@ -163,7 +179,7 @@ def main():
163
179
shrink_increment = shrink_increment , pool_to_shrink = pool_to_shrink ,
164
180
))
165
181
new_size = max (pool_to_shrink_initial - (i * shrink_increment + shrink_increment ), 0 )
166
- resize_nodepool (pool_to_shrink , new_size , PROJECT , ZONE , CLUSTER )
182
+ resize_nodepool (pool_to_shrink , new_size , project , zone , cluster )
167
183
print ('' )
168
184
169
185
# ditto for growing, modulo the cap
@@ -172,11 +188,11 @@ def main():
172
188
num_to_add = num_to_add , pool_to_grow = pool_to_grow ,
173
189
))
174
190
new_size = pool_to_grow_initial + (i * grow_increment + num_to_add )
175
- resize_nodepool (pool_to_grow , new_size , PROJECT , ZONE , CLUSTER )
191
+ resize_nodepool (pool_to_grow , new_size , project , zone , cluster )
176
192
print ('' )
177
193
178
194
print ('' )
179
195
print ('Done' )
180
196
181
197
if __name__ == '__main__' :
182
- main ()
198
+ main (parse_args ( sys . argv [ 1 :]) )
0 commit comments