From e61c672aa7044ee62c1147c79a7bf5c4fe59dfd5 Mon Sep 17 00:00:00 2001 From: Dan Walsh Date: Fri, 2 Dec 2016 10:15:15 -0500 Subject: [PATCH] Add missing man pages and bash completions for kpod We need to start off with man pages and bash completion support for kpod. Also fix Makefile to install kpod by default Signed-off-by: Dan Walsh --- .gitignore | 6 ++- Makefile | 24 +++++++++--- completions/bash/kpod | 89 +++++++++++++++++++++++++++++++++++++++++++ docs/kpod-launch.1.md | 42 ++++++++++++++++++++ docs/kpod.1.md | 39 +++++++++++++++++++ 5 files changed, 193 insertions(+), 7 deletions(-) create mode 100644 completions/bash/kpod create mode 100644 docs/kpod-launch.1.md create mode 100644 docs/kpod.1.md diff --git a/.gitignore b/.gitignore index a2d046d8..dabc6067 100644 --- a/.gitignore +++ b/.gitignore @@ -5,7 +5,9 @@ conmon/conmon conmon/conmon.o pause/pause pause/pause.o -/docs/*.[58] -/docs/*.[58].gz +/docs/*.[158] +/docs/*.[158].gz vendor/src/github.com/kubernetes-incubator/cri-o ocid.conf +*.orig +*.rej diff --git a/Makefile b/Makefile index 6caab14d..cd75bc26 100644 --- a/Makefile +++ b/Makefile @@ -17,6 +17,7 @@ ETCDIR_OCID ?= ${ETCDIR}/ocid GO_MD2MAN ?= $(shell which go-md2man) export GOPATH := ${CURDIR}/vendor BUILDTAGS := selinux seccomp +BASHINSTALLDIR=${PREFIX}/share/bash-completion/completions all: binaries ocid.conf docs @@ -63,7 +64,7 @@ clean: rm -f ocic ocid rm -f kpod rm -f ${OCID_LINK} - rm -f docs/*.5 docs/*.8 + rm -f docs/*.1 docs/*.5 docs/*.8 find . -name \*~ -delete find . -name \#\* -delete make -C conmon clean @@ -86,7 +87,7 @@ binaries: ocid ocic kpod conmon pause MANPAGES_MD := $(wildcard docs/*.md) MANPAGES := $(MANPAGES_MD:%.md=%) -docs/%.8: docs/%.8.md +docs/%.1: docs/%.1.md @which go-md2man > /dev/null 2>/dev/null || (echo "ERROR: go-md2man not found. Consider 'make install.tools' target" && false) $(GO_MD2MAN) -in $< -out $@.tmp && touch $@.tmp && mv $@.tmp $@ @@ -94,31 +95,44 @@ docs/%.5: docs/%.5.md @which go-md2man > /dev/null 2>/dev/null || (echo "ERROR: go-md2man not found. Consider 'make install.tools' target" && false) $(GO_MD2MAN) -in $< -out $@.tmp && touch $@.tmp && mv $@.tmp $@ +docs/%.8: docs/%.8.md + @which go-md2man > /dev/null 2>/dev/null || (echo "ERROR: go-md2man not found. Consider 'make install.tools' target" && false) + $(GO_MD2MAN) -in $< -out $@.tmp && touch $@.tmp && mv $@.tmp $@ + docs: $(MANPAGES) install: + install -D -m 755 kpod $(BINDIR)/kpod install -D -m 755 ocid $(BINDIR)/ocid install -D -m 755 ocic $(BINDIR)/ocic install -D -m 755 conmon/conmon $(LIBEXECDIR)/ocid/conmon install -D -m 755 pause/pause $(LIBEXECDIR)/ocid/pause - install -d -m 755 $(MANDIR)/man{8,5} - install -m 644 $(filter %.8,$(MANPAGES)) -t $(MANDIR)/man8 + install -d -m 755 $(MANDIR)/man{1,4,8} + install -m 644 $(filter %.1,$(MANPAGES)) -t $(MANDIR)/man1 install -m 644 $(filter %.5,$(MANPAGES)) -t $(MANDIR)/man5 + install -m 644 $(filter %.8,$(MANPAGES)) -t $(MANDIR)/man8 install -D -m 644 ocid.conf $(ETCDIR_OCID)/ocid.conf install -D -m 644 seccomp.json $(ETCDIR_OCID)/seccomp.json +install.completions: + install -d -m 755 ${BASHINSTALLDIR} + install -m 644 -D completions/bash/kpod ${BASHINSTALLDIR} + install.systemd: install -D -m 644 contrib/systemd/ocid.service $(PREFIX)/lib/systemd/system/ocid.service uninstall: rm -f $(BINDIR)/{ocid,ocic} rm -f $(LIBEXECDIR)/ocid/{conmon,pause} - for i in $(filter %.8,$(MANPAGES)); do \ + for i in $(filter %.1,$(MANPAGES)); do \ rm -f $(MANDIR)/man8/$$(basename $${i}); \ done for i in $(filter %.5,$(MANPAGES)); do \ rm -f $(MANDIR)/man5/$$(basename $${i}); \ done + for i in $(filter %.8,$(MANPAGES)); do \ + rm -f $(MANDIR)/man8/$$(basename $${i}); \ + done .PHONY: .gitvalidation # When this is running in travis, it will only check the travis commit range diff --git a/completions/bash/kpod b/completions/bash/kpod new file mode 100644 index 00000000..9b96bc42 --- /dev/null +++ b/completions/bash/kpod @@ -0,0 +1,89 @@ +#! /bin/bash + +: ${PROG:=$(basename ${BASH_SOURCE})} + +_complete_() { + local options_with_args=$1 + local boolean_options="$2 -h --help" + + case "$prev" in + $options_with_args) + return + ;; + esac + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "$boolean_options $options_with_args" -- "$cur" ) ) + ;; + esac +} + +_kpod_launch() { + local options_with_args=" + " + local boolean_options=" + " + _complete_ "$options_with_args" "$boolean_options" +} + +_kpod_kpod() { + local options_with_args=" + " + local boolean_options=" + --version -v + --help -h + " + commands=" + launch + " + + case "$prev" in + $main_options_with_args_glob ) + return + ;; + esac + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "$boolean_options $options_with_args" -- "$cur" ) ) + ;; + *) + COMPREPLY=( $( compgen -W "${commands[*]} help" -- "$cur" ) ) + ;; + esac +} + +_cli_bash_autocomplete() { + local cur opts base + + COMPREPLY=() + cur="${COMP_WORDS[COMP_CWORD]}" + COMPREPLY=() + local cur prev words cword + + _get_comp_words_by_ref -n : cur prev words cword + + local command=${PROG} cpos=0 + local counter=1 + counter=1 + while [ $counter -lt $cword ]; do + case "!${words[$counter]}" in + *) + command=$(echo "${words[$counter]}" | sed 's/-/_/g') + cpos=$counter + (( cpos++ )) + break + ;; + esac + (( counter++ )) + done + + local completions_func=_kpod_${command} + declare -F $completions_func >/dev/null && $completions_func + + eval "$previous_extglob_setting" + return 0 +} + +complete -F _cli_bash_autocomplete $PROG diff --git a/docs/kpod-launch.1.md b/docs/kpod-launch.1.md new file mode 100644 index 00000000..f1f1e010 --- /dev/null +++ b/docs/kpod-launch.1.md @@ -0,0 +1,42 @@ +% kpod(8) # kpod-launch - Simple management tool for pods and images +% Dan Walsh +% SEPTEMBER 2016 +# NAME +kpod-launch - Launch a new pod + +# SYNOPSIS +**kpod launch** +[**--help**|**-h**] + +# DESCRIPTION +Launch a container process in a new pod. **kpod launch** starts a process with +its own file system, its own networking, and its own isolated process tree. +The IMAGE which starts the process may define defaults related to the process +that will be launch in the pod, the networking to expose, and more, but +**kpod launch** gives final control to the operator or administrator who +starts the pod from the image. For that reason **kpod launch** has more +options than any other kpod commands. + +If the IMAGE is not already loaded then **kpod launch** will pull the IMAGE, and +all image dependencies, from the repository in the same way launching **kpod +pull** IMAGE, before it starts the container from that image. + +**kpod [GLOBAL OPTIONS]** + +**kpod [GLOBAL OPTIONS] launch [OPTIONS]** + +# GLOBAL OPTIONS + +**--help, -h** + Print usage statement + +# COMMANDS + +## launch +Launch a pod + +# SEE ALSO +kpod(1), ocid(8), ocid.conf(5) + +# HISTORY +Dec 2016, Originally compiled by Dan Walsh diff --git a/docs/kpod.1.md b/docs/kpod.1.md new file mode 100644 index 00000000..fc094e67 --- /dev/null +++ b/docs/kpod.1.md @@ -0,0 +1,39 @@ +% kpod(8) # kpod - Simple management tool for pods and images +% Dan Walsh +% SEPTEMBER 2016 +# NAME +kpod + +# SYNOPSIS +**kpod** +[**--help**|**-h**] + +# DESCRIPTION +kpod is a simple client only tool to help with debugging issues when daemons +such as CRI runtime and the kubelet are not responding or failing. A shared API +layer could be created to share code between the daemon and kpod. kpod does not +require any daemon running. kpod utilizes the same underlying components that +ocid uses i.e. containers/image, container/storage, oci-runtime-tool/generate, +runc or any other OCI compatible runtime. kpod shares state with ocid and so +has the capability to debug pods/images created by ocid. + +**kpod [GLOBAL OPTIONS]** + +# GLOBAL OPTIONS + +**--help, -h** + Print usage statement + +**--version, -v** + Print the version + +# COMMANDS + +## launch +Launch a pod + +# SEE ALSO +ocid(8), ocid.conf(5) + +# HISTORY +Dec 2016, Originally compiled by Dan Walsh