@@ -108,10 +108,15 @@ def stop_all_scenarios(scenarios):
108
108
console .print ("[bold green]All scenarios have been stopped.[/bold green]" )
109
109
110
110
111
+ @click .option (
112
+ "--force" ,
113
+ is_flag = True ,
114
+ default = False ,
115
+ help = "Skip confirmations" ,
116
+ )
111
117
@click .command ()
112
- def down ():
118
+ def down (force ):
113
119
"""Bring down a running warnet quickly"""
114
- console .print ("[bold yellow]Bringing down the warnet...[/bold yellow]" )
115
120
116
121
def uninstall_release (namespace , release_name ):
117
122
cmd = f"helm uninstall { release_name } --namespace { namespace } --wait=false"
@@ -123,19 +128,53 @@ def delete_pod(pod_name, namespace):
123
128
subprocess .Popen (cmd , shell = True , stdout = subprocess .DEVNULL , stderr = subprocess .DEVNULL )
124
129
return f"Initiated deletion of pod: { pod_name } in namespace { namespace } "
125
130
131
+ namespaces = get_namespaces ()
132
+ print (namespaces )
133
+ release_list : list [dict [str , str ]] = []
134
+ for namespace in namespaces :
135
+ command = f"helm list --namespace { namespace .metadata .name } -o json"
136
+ result = run_command (command )
137
+ if result :
138
+ releases = json .loads (result )
139
+ for release in releases :
140
+ release_list .append ({"namespace" : namespace .metadata .name , "name" : release ["name" ]})
141
+
142
+ if not force :
143
+ affected_namespaces = set ([entry ["namespace" ] for entry in release_list ])
144
+ namespace_listing = "\n " .join (affected_namespaces )
145
+ confirmed = "confirmed"
146
+ click .secho ("Preparing to bring down the running Warnet..." , fg = "yellow" )
147
+ click .secho ("The listed namespaces will be affected:" , fg = "yellow" )
148
+ click .secho (f" { namespace_listing } " , fg = "blue" )
149
+
150
+ proj_answers = inquirer .prompt (
151
+ [
152
+ inquirer .Confirm (
153
+ confirmed ,
154
+ message = click .style (
155
+ "Do you want to bring down the running Warnet?" , fg = "yellow" , bold = False
156
+ ),
157
+ default = False ,
158
+ ),
159
+ ]
160
+ )
161
+ if not proj_answers :
162
+ click .secho ("Operation cancelled by user." , fg = "yellow" )
163
+ sys .exit (0 )
164
+ if proj_answers [confirmed ]:
165
+ click .secho ("Bringing down the warnet..." , fg = "yellow" )
166
+ else :
167
+ click .secho ("Operation cancelled by user" , fg = "yellow" )
168
+ sys .exit (0 )
169
+
126
170
with ThreadPoolExecutor (max_workers = 10 ) as executor :
127
171
futures = []
128
172
129
173
# Uninstall Helm releases
130
- for namespace in get_namespaces ():
131
- command = f"helm list --namespace { namespace .metadata .name } -o json"
132
- result = run_command (command )
133
- if result :
134
- releases = json .loads (result )
135
- for release in releases :
136
- futures .append (
137
- executor .submit (uninstall_release , namespace .metadata .name , release ["name" ])
138
- )
174
+ for release in release_list :
175
+ futures .append (
176
+ executor .submit (uninstall_release , release ["namespace" ], release ["name" ])
177
+ )
139
178
140
179
# Delete remaining pods
141
180
pods = get_pods ()
0 commit comments