summaryrefslogtreecommitdiff
path: root/completions/ipmitool
blob: 3a90eeb4a09df8c1710bc1f01c0a2f01290eb154 (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
203
204
205
206
207
208
209
210
211
212
213
214
# bash completion for ipmitool

have ipmitool && {

_ipmitool_singleline_help()
{
    COMPREPLY=( $( compgen -W "$( $1 $2 2>&1 | \
        sed -ne 's/[,\r]//g' -e 's/^.*[Cc]ommands://p' )" -- "$cur" ) )
}

_ipmitool()
{
    local cur prev

    COMPREPLY=()
    _get_comp_words_by_ref cur prev

    case $prev in
        -h|-V|-p|-U|-e|-k|-y|-P|-m|-b|-t|-B|-T|-l)
            return 0
            ;;
        -d)
            COMPREPLY=( $( compgen -W "$( \
                command ls -d /dev/ipmi* /dev/ipmi/* /dev/ipmidev/* \
                2>/dev/null | sed -ne 's/^[^0-9]*\([0-9]\{1,\}\)/\1/p' )" \
                -- "$cur" ) )
            return 0
            ;;
        -I)
            COMPREPLY=( $( compgen -W "$( $1 -h 2>&1 | \
                sed -e '/^Interfaces:/,/^[[:space:]]*$/!d' \
                -ne 's/^[[:space:]]\{1,\}\([^[:space:]]\{1,\}\).*/\1/p' )" \
                -- "$cur" ) )
            return 0
            ;;
        -H)
            _known_hosts_real "$cur"
            return 0
            ;;
        -f|-S|-O)
            _filedir
            return 0
            ;;
        -C)
            COMPREPLY=( $( compgen -W '0 1 2 3 4 5 6 7 8 9 10 11 12 13 14' \
                -- "$cur" ) )
            return 0
            ;;
        -L)
            COMPREPLY=( $( compgen -W 'CALLBACK USER OPERATOR ADMINISTRATOR' \
                -- "$cur" ) )
            return 0
            ;;
        -A)
            COMPREPLY=( $( compgen -W 'NONE PASSWORD MD2 MD5 OEM' -- "$cur" ) )
            return 0
            ;;
        -o)
            COMPREPLY=( $( compgen -W "$( $1 -o list 2>&1 | \
                awk '/^[ \t]+/ { print $1 }' ) list" -- "$cur" ) )
            return 0
            ;;
    esac

    if [[ "$cur" == -* ]]; then
        COMPREPLY=( $( compgen -W '-h -V -v -c -d -I -H -p -U -f -S -a \
            -e -C -k -y -L -A -P -E -K -m -b -t -B -T -l -o -O' -- "$cur" ) )
        return 0
    fi

    # Find out command and subcommand

    local cmds=( raw i2c spd lan chassis power event mc sdr sensor fru gendev
        sel pef sol tsol isol user channel session sunoem kontronoem picmg fwum
        firewall shell exec set hpm ekanalyzer)
    local i c cmd subcmd
    for (( i=1; i < ${#COMP_WORDS[@]}-1; i++ )); do
        [[ -n $cmd ]] && subcmd=${COMP_WORDS[i]} && break
        for c in ${cmds[@]}; do
            [ ${COMP_WORDS[i]} = $c ] && cmd=$c && break
        done
    done

    if [ -z "$cmd" ]; then
        COMPREPLY=( $( compgen -W '${cmds[@]}' -- "$cur" ) )
        return 0
    fi

    # Command/subcommand completions

    case $cmd in

        shell)
            ;;

        exec)
            _filedir
            ;;

        chassis|power|kontronoem|fwum)
            _ipmitool_singleline_help $1 $cmd
            ;;

        lan)
            case $subcmd in
                print|set)
                    ;;
                alert)
                    [ "$prev" = alert ] && \
                        COMPREPLY=( $( compgen -W 'print set' -- "$cur" ) )
                    ;;
                stats)
                    [ "$prev" = stats ] && \
                        COMPREPLY=( $( compgen -W 'print set' -- "$cur" ) )
                    ;;
                *)
                    COMPREPLY=( $( compgen -W 'print set alert stats' \
                        -- "$cur" ) )
                    ;;
            esac
            ;;

        sdr)
            case $subcmd in
                get|info|type|list|entity)
                    ;;
                elist)
                    COMPREPLY=( $( compgen -W 'all full compact event mclog fru
                        generic' -- "$cur" ) )
                    ;;
                dump)
                    _filedir
                    ;;
                fill)
                    case $prev in
                        fill)
                            COMPREPLY=( $( compgen -W 'sensors file' \
                                -- "$cur" ) )
                            ;;
                        file)
                            _filedir
                            ;;
                    esac
                    ;;
                *)
                    COMPREPLY=( $( compgen -W 'get info type list elist entity
                        dump fill' -- "$cur" ) )
                    ;;
            esac
            ;;

        sensor)
            case $subcmd in
                list|get|thresh)
                    ;;
                *)
                    COMPREPLY=( $( compgen -W 'list get thresh' -- "$cur" ) )
                    ;;
            esac
            ;;

        sel)
            case $subcmd in
                info|clear|list|elist|delete)
                    ;;
                add|save|writeraw|readraw)
                    _filedir
                    ;;
                time)
                    [ "$prev" = time ] && \
                        COMPREPLY=( $( compgen -W 'get set' -- "$cur" ) )
                    ;;
                *)
                    COMPREPLY=( $( compgen -W 'info clear list elist delete add
                        get save writeraw readraw time' -- "$cur" ) )
                    ;;
            esac
            ;;

        user)
            case $subcmd in
                summary|list|disable|enable|priv|test)
                    ;;
                set)
                    [ "$prev" = set ] && \
                        COMPREPLY=( $( compgen -W 'name password' -- "$cur" ) )
                    ;;
                *)
                    COMPREPLY=( $( compgen -W 'summary list set disable enable
                        priv test' -- "$cur" ) )
                    ;;
            esac
            ;;

        set)
            [ "$prev" = set ] && \
                COMPREPLY=( $( compgen -W 'hostname username password privlvl
                    authtype localaddr targetaddr port csv verbose' \
                        -- "$cur" ) )
            ;;

    esac
}

} &&
complete -F _ipmitool ipmitool

# Local variables:
# mode: shell-script
# sh-basic-offset: 4
# sh-indent-comment: t
# indent-tabs-mode: nil
# End:
# ex: ts=4 sw=4 et filetype=sh