blob: 54e22bde4a538c692473ae5546f4494d034c6f34 (
plain) (
blame)
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
|
#compdef fmadm
_fm_modules() {
compadd "$@" - ${${(f)"$(_call_program modules fmadm config)"}[2,-1]// */}
}
_fm_faulted_fmris() {
compadd "$@" - $(fmadm faulty -r 2> /dev/null | awk '{print $1}')
}
_fm_faulted_uuids() {
compadd "$@" - $(fmadm faulty -s 2> /dev/null | tail +4 | awk '{print $4}')
}
_fm_faulted_labels() {
local line q='"'
compadd "$@" - $(fmadm faulty -f 2> /dev/null | while read line; do
if [[ $line == "----"* ]]; then
read line
if [[ $line == '"'* ]]; then
print ${${line[(r)$q,(rn:2:)$q]}[2,-2]}
fi
fi
done)
}
local curcontext="$curcontext" state line expl ret=1
local -A opt_args
local -a subcmds args
# TODO: lookup-alias and remove-alias need completion based on the
# output of list-alias, but I have no examples of that output.
subcmds=(
faulty list acquit replaced repaired list-alert clear
list-defect list-fault
add-alias remove-alias lookup-alias list-alias sync-alias
config load unload reset rotate flush
)
_arguments -C -A "-*" \
'-q[quiet mode]' \
'1:fmadm subcommand:compadd -M "r:|-=* r:|=*" -a subcmds' \
'*::command:->subcmd' && ret=0
[[ -z $state ]] && return ret
service="$words[1]"
curcontext="${curcontext%:*}-$service:"
case $service in
(faulty|list|list-alert|list-defect|list-fault)
args+=(
'-f[display faulty FRUs]'
'-i[display persistent cache IDs]'
'-p[page output]'
'-r[display resources]'
'-s[display one-line summaries]'
'-u[only display fault with given uuid]:uuid:_fm_faulted_uuids'
'-v[display full output]'
)
;|
(list|faulty)
_arguments -A "-*" $args \
'-a[display all faults]' \
'-g[group faults]' \
'-n[limit output to specified number of entries]:number'
;;
(list-alert|list-defect|list-fault)
_arguments -A "-*" $args \
'-a[display all resources]'
;;
(acquit)
_alternative \
'fmadm-acquit-label:label:_fm_faulted_labels' \
'fmadm-acquit-uuid:uuid:_fm_faulted_uuids' \
'fmadm-acquit-fmri:fmri:_fm_faulted_fmris' && ret=0
;;
(repaired|replaced)
_alternative \
'fmadm-acquit-label:label:_fm_faulted_labels' \
'fmadm-acquit-fmri:fmri:_fm_faulted_fmris' && ret=0
;;
(add-alias)
_arguments :chassis :alias-id :comment && ret=0
;;
(remove-alias|lookup-alias)
_message -e aliases 'chassis or alias-id'
;;
(load)
_directories && ret=0
;;
(unload)
_fm_modules && ret=0
;;
(reset)
_arguments -A "-*" \
'-s[reset named SERD]:serd' \
':module:_fm_modules' && ret=0
;;
(rotate)
_values 'logfile' errlog fltlog infolog infolog_hival && ret=0
;;
(flush)
_fm_faulted_fmris && ret=0
;;
(list-alias|config|sync-aliases) _message 'no more arguments' ;;
(*) # fallback to defaults for any new or unhandled subcommand
_default && ret=0
;;
esac
return ret
|