Browse code

Add zsh completion for the new 'docker secret' command

Signed-off-by: Steve Durrheimer <s.durrheimer@gmail.com>

Steve Durrheimer authored on 2016/11/13 23:43:49
Showing 1 changed files
... ...
@@ -1515,6 +1515,107 @@ __docker_plugin_subcommand() {
1515 1515
 
1516 1516
 # EO plugin
1517 1517
 
1518
+# BO secret
1519
+
1520
+__docker_secrets() {
1521
+    [[ $PREFIX = -* ]] && return 1
1522
+    integer ret=1
1523
+    local line s
1524
+    declare -a lines secrets
1525
+
1526
+    type=$1; shift
1527
+
1528
+    lines=(${(f)${:-"$(_call_program commands docker $docker_options secret ls)"$'\n'}})
1529
+
1530
+    # Parse header line to find columns
1531
+    local i=1 j=1 k header=${lines[1]}
1532
+    declare -A begin end
1533
+    while (( j < ${#header} - 1 )); do
1534
+        i=$(( j + ${${header[$j,-1]}[(i)[^ ]]} - 1 ))
1535
+        j=$(( i + ${${header[$i,-1]}[(i)  ]} - 1 ))
1536
+        k=$(( j + ${${header[$j,-1]}[(i)[^ ]]} - 2 ))
1537
+        begin[${header[$i,$((j-1))]}]=$i
1538
+        end[${header[$i,$((j-1))]}]=$k
1539
+    done
1540
+    end[${header[$i,$((j-1))]}]=-1
1541
+    lines=(${lines[2,-1]})
1542
+
1543
+    # ID
1544
+    if [[ $type = (ids|all) ]]; then
1545
+        for line in $lines; do
1546
+            s="${line[${begin[ID]},${end[ID]}]%% ##}"
1547
+            secrets=($secrets $s)
1548
+        done
1549
+    fi
1550
+
1551
+    # Names
1552
+    if [[ $type = (names|all) ]]; then
1553
+        for line in $lines; do
1554
+            s="${line[${begin[NAME]},${end[NAME]}]%% ##}"
1555
+            secrets=($secrets $s)
1556
+        done
1557
+    fi
1558
+
1559
+    _describe -t secrets-list "secrets" secrets "$@" && ret=0
1560
+    return ret
1561
+}
1562
+
1563
+__docker_complete_secrets() {
1564
+    [[ $PREFIX = -* ]] && return 1
1565
+    __docker_secrets all "$@"
1566
+}
1567
+
1568
+__docker_secret_commands() {
1569
+    local -a _docker_secret_subcommands
1570
+    _docker_secret_subcommands=(
1571
+        "create:Create a secret using stdin as content"
1572
+        "inspect:Display detailed information on one or more secrets"
1573
+        "ls:List secrets"
1574
+        "rm:Remove one or more secrets"
1575
+    )
1576
+    _describe -t docker-secret-commands "docker secret command" _docker_secret_subcommands
1577
+}
1578
+
1579
+__docker_secret_subcommand() {
1580
+    local -a _command_args opts_help
1581
+    local expl help="--help"
1582
+    integer ret=1
1583
+
1584
+    opts_help=("(: -)--help[Print usage]")
1585
+
1586
+    case "$words[1]" in
1587
+        (create)
1588
+            _arguments $(__docker_arguments) \
1589
+                $opts_help \
1590
+                "($help)*"{-l=,--label=}"[Secret labels]:label: " \
1591
+                "($help -):secret: " && ret=0
1592
+            ;;
1593
+        (inspect)
1594
+            _arguments $(__docker_arguments) \
1595
+                $opts_help \
1596
+                "($help -f --format)"{-f=,--format=}"[Format the output using the given Go template]:template: " \
1597
+                "($help -)*:secret:__docker_complete_secrets" && ret=0
1598
+            ;;
1599
+        (ls|list)
1600
+            _arguments $(__docker_arguments) \
1601
+                $opts_help \
1602
+                "($help -q --quiet)"{-q,--quiet}"[Only display IDs]" && ret=0
1603
+            ;;
1604
+        (rm|remove)
1605
+            _arguments $(__docker_arguments) \
1606
+                $opts_help \
1607
+                "($help -)*:secret:__docker_complete_secrets" && ret=0
1608
+            ;;
1609
+        (help)
1610
+            _arguments $(__docker_arguments) ":subcommand:__docker_secret_commands" && ret=0
1611
+            ;;
1612
+    esac
1613
+
1614
+    return ret
1615
+}
1616
+
1617
+# EO secret
1618
+
1518 1619
 # BO service
1519 1620
 
1520 1621
 __docker_service_complete_ls_filters() {
... ...
@@ -2311,6 +2412,23 @@ __docker_subcommand() {
2311 2311
                     ;;
2312 2312
             esac
2313 2313
             ;;
2314
+        (secret)
2315
+            local curcontext="$curcontext" state
2316
+            _arguments $(__docker_arguments) \
2317
+                $opts_help \
2318
+                "($help -): :->command" \
2319
+                "($help -)*:: :->option-or-argument" && ret=0
2320
+
2321
+            case $state in
2322
+                (command)
2323
+                    __docker_secret_commands && ret=0
2324
+                    ;;
2325
+                (option-or-argument)
2326
+                    curcontext=${curcontext%:*:*}:docker-${words[-1]}:
2327
+                    __docker_secret_subcommand && ret=0
2328
+                    ;;
2329
+            esac
2330
+            ;;
2314 2331
         (service)
2315 2332
             local curcontext="$curcontext" state
2316 2333
             _arguments $(__docker_arguments) \