mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-04 04:08:16 +00:00 
			
		
		
		
	Merge pull request #60371 from superbrothers/__kubectl_cp-1
Automatic merge from submit-queue (batch tested with PRs 63526, 60371, 63444). If you want to cherry-pick this change to another branch, please follow the instructions <a href="https://github.com/kubernetes/community/blob/master/contributors/devel/cherry-picks.md">here</a>. Support completion for kubectl cp **What this PR does / why we need it**: With this PR, kubectl cp supports completion. I tested this PR in bash and zsh. ``` $ kubectl cp kube-system/<tab> kube-system/kube-state-metrics-769566fdfb-4v52s: kube-system/kubernetes-dashboard-6b6ddbd46-t5bv9: kube-system/prometheus-694594c45b-qk5lq: ``` **Which issue(s) this PR fixes** *(optional, in `fixes #<issue number>(, fixes #<issue_number>, ...)` format, will close the issue(s) when PR gets merged)*: Fixes kubernetes/kubectl#5 **Special notes for your reviewer**: @cblecker **Release note**: ```release-note `kubectl cp` supports completion. ```
This commit is contained in:
		@@ -94,13 +94,15 @@ __kubectl_parse_config()
 | 
			
		||||
    fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# $1 is the name of resource (required)
 | 
			
		||||
# $2 is template string for kubectl get (optional)
 | 
			
		||||
__kubectl_parse_get()
 | 
			
		||||
{
 | 
			
		||||
    local template
 | 
			
		||||
    template="{{ range .items  }}{{ .metadata.name }} {{ end }}"
 | 
			
		||||
    template="${2:-"{{ range .items  }}{{ .metadata.name }} {{ end }}"}"
 | 
			
		||||
    local kubectl_out
 | 
			
		||||
    if kubectl_out=$(kubectl get $(__kubectl_override_flags) -o template --template="${template}" "$1" 2>/dev/null); then
 | 
			
		||||
        COMPREPLY=( $( compgen -W "${kubectl_out[*]}" -- "$cur" ) )
 | 
			
		||||
        COMPREPLY+=( $( compgen -W "${kubectl_out[*]}" -- "$cur" ) )
 | 
			
		||||
    fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -171,6 +173,36 @@ __kubectl_require_pod_and_container()
 | 
			
		||||
    return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
__kubectl_cp()
 | 
			
		||||
{
 | 
			
		||||
    if [[ $(type -t compopt) = "builtin" ]]; then
 | 
			
		||||
        compopt -o nospace
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    case "$cur" in
 | 
			
		||||
        /*|[.~]*) # looks like a path
 | 
			
		||||
            return
 | 
			
		||||
            ;;
 | 
			
		||||
        *:*) # TODO: complete remote files in the pod
 | 
			
		||||
            return
 | 
			
		||||
            ;;
 | 
			
		||||
        */*) # complete <namespace>/<pod>
 | 
			
		||||
            local template namespace kubectl_out
 | 
			
		||||
            template="{{ range .items }}{{ .metadata.namespace }}/{{ .metadata.name }}: {{ end }}"
 | 
			
		||||
            namespace="${cur%%/*}"
 | 
			
		||||
            if kubectl_out=( $(kubectl get $(__kubectl_override_flags) --namespace "${namespace}" -o template --template="${template}" pods 2>/dev/null) ); then
 | 
			
		||||
                COMPREPLY=( $(compgen -W "${kubectl_out[*]}" -- "${cur}") )
 | 
			
		||||
            fi
 | 
			
		||||
            return
 | 
			
		||||
            ;;
 | 
			
		||||
        *) # complete namespaces, pods, and filedirs
 | 
			
		||||
            __kubectl_parse_get "namespace" "{{ range .items  }}{{ .metadata.name }}/ {{ end }}"
 | 
			
		||||
            __kubectl_parse_get "pod" "{{ range .items  }}{{ .metadata.name }}: {{ end }}"
 | 
			
		||||
            _filedir
 | 
			
		||||
            ;;
 | 
			
		||||
    esac
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
__custom_func() {
 | 
			
		||||
    case ${last_command} in
 | 
			
		||||
        kubectl_get | kubectl_describe | kubectl_delete | kubectl_label | kubectl_edit | kubectl_patch |\
 | 
			
		||||
@@ -203,6 +235,10 @@ __custom_func() {
 | 
			
		||||
            __kubectl_config_get_clusters
 | 
			
		||||
            return
 | 
			
		||||
            ;;
 | 
			
		||||
        kubectl_cp)
 | 
			
		||||
            __kubectl_cp
 | 
			
		||||
            return
 | 
			
		||||
            ;;
 | 
			
		||||
        *)
 | 
			
		||||
            ;;
 | 
			
		||||
    esac
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user