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