浏览代码

feat(juju): add `jclean` function to destroy all registered controllers (#10426)

Closes #10426
sed-i 2 年之前
父节点
当前提交
f045810697
共有 2 个文件被更改,包括 33 次插入0 次删除
  1. 1 0
      plugins/juju/README.md
  2. 32 0
      plugins/juju/juju.plugin.zsh

+ 1 - 0
plugins/juju/README.md

@@ -113,5 +113,6 @@ Naming convention:
 
 - `jaddr <app_name> [unit_num]`: display app or unit IP address.
 - `jreld <relation_name> <app_name> <unit_num>`: display app and unit relation data.
+- `jclean`: destroy all controllers
 - `wjst [interval_secs] [args_for_watch]`: watch juju status, with optional interval
   (default: 5s); you may pass additional arguments to `watch`.

+ 32 - 0
plugins/juju/juju.plugin.zsh

@@ -95,6 +95,37 @@ jaddr() {
   fi
 }
 
+# Destroy all controllers
+jclean() {
+  if (( ! ${+commands[jq]} )); then
+    echo "jq is required but could not be found." >&2
+    return 1
+  fi
+
+  local controllers=$(juju controllers --format=json | jq -r '.controllers | keys[]' 2>/dev/null)
+  if [[ -z "$controllers" ]]; then
+    echo "No controllers registered"
+    return 0
+  fi
+
+  echo "This will forcefully destroy all storages, models and controllers."
+  echo "Controllers to be destroyed:"
+  echo "$controllers"
+
+  if ! read -q '?Are you sure (y/n)? '; then
+    echo
+    echo "Aborted."
+    return 0
+  fi
+
+  echo
+  for controller in ${=controllers}; do
+    timeout 2m juju destroy-controller --destroy-all-models --destroy-storage --force --no-wait -y $controller
+    timeout 2m juju kill-controller -y -t 0 $controller 2>/dev/null
+    timeout 10s juju unregister $controller 2>/dev/null
+  done
+}
+
 # Display app and unit relation data
 jreld() {
   # $1 = relation name
@@ -125,3 +156,4 @@ wjst() {
   shift $(( $# > 0 ))
   watch -n "$interval" --color juju status --relations --storage --color "$@"
 }
+