juju.plugin.zsh 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. # ---------------------------------------------------------- #
  2. # Aliases and functions for juju (https://juju.is) #
  3. # ---------------------------------------------------------- #
  4. # Load TAB completions
  5. # You need juju's bash completion script installed. By default bash-completion's
  6. # location will be used (i.e. pkg-config --variable=completionsdir bash-completion).
  7. completion_file="$(pkg-config --variable=completionsdir bash-completion 2>/dev/null)/juju" || \
  8. completion_file="/usr/share/bash-completion/completions/juju"
  9. [[ -f "$completion_file" ]] && source "$completion_file"
  10. unset completion_file
  11. # ---------------------------------------------------------- #
  12. # Aliases (in alphabetic order) #
  13. # #
  14. # Generally, #
  15. # - `!` means --force --no-wait -y #
  16. # - `ds` suffix means --destroy-storage #
  17. # ---------------------------------------------------------- #
  18. alias j="juju"
  19. alias jam="juju add-model --config logging-config=\"<root>=WARNING; unit=DEBUG\"\
  20. --config update-status-hook-interval=\"60m\""
  21. alias jb='juju bootstrap'
  22. alias jbng='juju bootstrap --no-gui'
  23. alias jbl='juju bootstrap localhost'
  24. alias jblng='juju bootstrap --no-gui localhost'
  25. alias jbm='juju bootstrap microk8s'
  26. alias jbmng='juju bootstrap --no-gui microk8s'
  27. alias jc='juju config'
  28. alias jcld='juju clouds'
  29. alias jclda='juju clouds --all'
  30. alias jctl='juju controllers'
  31. alias jctlr='juju controllers --refresh'
  32. alias jdc='juju destroy-controller --destroy-all-models'
  33. alias 'jdc!'='juju destroy-controller --destroy-all-models --force --no-wait -y'
  34. alias jdcds='juju destroy-controller --destroy-all-models --destroy-storage'
  35. alias 'jdcds!'='juju destroy-controller --destroy-all-models --destroy-storage --force --no-wait -y'
  36. alias jdm='juju destroy-model'
  37. alias 'jdm!'='juju destroy-model --force --no-wait -y'
  38. alias jdmds='juju destroy-model --destroy-storage'
  39. alias 'jdmds!'='juju destroy-model --destroy-storage --force --no-wait -y'
  40. alias jde='juju deploy --channel=edge'
  41. alias jd='juju deploy'
  42. alias jdl='juju debug-log --ms'
  43. alias jdlr='juju debug-log --ms --replay'
  44. alias jcon='juju consume'
  45. alias jeb='juju export-bundle'
  46. alias jex='juju expose'
  47. alias jh='juju help'
  48. alias jkc='juju kill-controller -y -t 0'
  49. alias jm='juju models'
  50. alias jmc='juju model-config'
  51. alias jof='juju offer'
  52. alias jra='juju run-action'
  53. alias jraw='juju run-action --wait'
  54. alias jrel='juju relate'
  55. alias jrm='juju remove-application'
  56. alias 'jrm!'='juju remove-application --force --no-wait'
  57. alias jrmds='juju remove-application --destroy-storage'
  58. alias 'jrmds!'='juju remove-application --destroy-storage --force --no-wait'
  59. alias jrmrel='juju remove-relation'
  60. alias 'jrmrel!'='juju remove-relation --force'
  61. alias jrmsas='juju remove-saas'
  62. alias jrp='juju refresh --path'
  63. alias jrs='juju remove-storage'
  64. alias 'jrs!'='juju remove-storage --force'
  65. alias jsa='juju scale-application'
  66. alias jsh='juju ssh'
  67. alias jshc='juju ssh --container'
  68. alias jshm='juju show-model'
  69. alias jssl='juju show-status-log'
  70. alias jstj='juju status --format=json'
  71. alias jst='juju status --relations --color'
  72. alias jsts='juju status --relations --storage --color'
  73. alias jsu='juju show-unit'
  74. alias jsw='juju switch'
  75. # ---------------------------------------------------------- #
  76. # Functions (in alphabetic order) #
  77. # ---------------------------------------------------------- #
  78. # Get app or unit address
  79. jaddr() {
  80. # $1 = app name
  81. # $2 = unit number (optional)
  82. if (( ! ${+commands[jq]} )); then
  83. echo "jq is required but could not be found." >&2
  84. return 1
  85. fi
  86. if [[ $# -eq 1 ]]; then
  87. # Get app address
  88. juju status "$1" --format=json \
  89. | jq -r ".applications.\"$1\".address"
  90. elif [[ $# -eq 2 ]]; then
  91. # Get unit address
  92. juju status "$1/$2" --format=json \
  93. | jq -r ".applications.\"$1\".units.\"$1/$2\".address"
  94. else
  95. echo "Invalid number of arguments."
  96. echo "Usage: jaddr <app-name> [<unit-number>]"
  97. echo "Example: jaddr karma"
  98. echo "Example: jaddr karma 0"
  99. return 1
  100. fi
  101. }
  102. # Destroy all controllers
  103. jclean() {
  104. if (( ! ${+commands[jq]} )); then
  105. echo "jq is required but could not be found." >&2
  106. return 1
  107. fi
  108. local controllers=$(juju controllers --format=json | jq -r '.controllers | keys[]' 2>/dev/null)
  109. if [[ -z "$controllers" ]]; then
  110. echo "No controllers registered"
  111. return 0
  112. fi
  113. echo "This will forcefully destroy all storages, models and controllers."
  114. echo "Controllers to be destroyed:"
  115. echo "$controllers"
  116. if ! read -q '?Are you sure (y/n)? '; then
  117. echo
  118. echo "Aborted."
  119. return 0
  120. fi
  121. echo
  122. for controller in ${=controllers}; do
  123. timeout 2m juju destroy-controller --destroy-all-models --destroy-storage --force --no-wait -y $controller
  124. timeout 2m juju kill-controller -y -t 0 $controller 2>/dev/null
  125. timeout 10s juju unregister $controller 2>/dev/null
  126. done
  127. }
  128. # Display app and unit relation data
  129. jreld() {
  130. # $1 = relation name
  131. # $2 = app name
  132. # $3 = unit number
  133. if [[ $# -ne 3 ]]; then
  134. echo "Invalid number of arguments."
  135. echo "Usage: jreld <relation-name> <app-name> <unit-number>"
  136. echo "Example: jreld karma-dashboard alertmanager 0"
  137. return 1
  138. fi
  139. local relid="$(juju run "relation-ids $1" --unit $2/$3)"
  140. if [[ -z "$relid" ]]; then
  141. return 1
  142. fi
  143. echo "App data:"
  144. juju run "relation-get -r $relid --app - $2" --unit $2/$3
  145. echo
  146. echo "Unit data:"
  147. juju run "relation-get -r $relid - $2" --unit $2/$3
  148. }
  149. # Watch juju status, with optional interval (default: 5 sec)
  150. wjst() {
  151. local interval="${1:-5}"
  152. shift $(( $# > 0 ))
  153. watch -n "$interval" --color juju status --relations --color "$@"
  154. }