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