From a031b83a09a8628435317a03f199cdc18b78262f Mon Sep 17 00:00:00 2001 From: Matthew Heon Date: Wed, 1 Nov 2017 11:24:59 -0400 Subject: Initial checkin from CRI-O repo Signed-off-by: Matthew Heon --- Makefile | 244 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 244 insertions(+) create mode 100644 Makefile (limited to 'Makefile') diff --git a/Makefile b/Makefile new file mode 100644 index 000000000..4a1b812b3 --- /dev/null +++ b/Makefile @@ -0,0 +1,244 @@ +GO ?= go +EPOCH_TEST_COMMIT ?= 1cc5a27 +PROJECT := github.com/kubernetes-incubator/cri-o +GIT_BRANCH := $(shell git rev-parse --abbrev-ref HEAD 2>/dev/null) +GIT_BRANCH_CLEAN := $(shell echo $(GIT_BRANCH) | sed -e "s/[^[:alnum:]]/-/g") +CRIO_IMAGE := crio_dev$(if $(GIT_BRANCH_CLEAN),:$(GIT_BRANCH_CLEAN)) +CRIO_INSTANCE := crio_dev +PREFIX ?= ${DESTDIR}/usr/local +BINDIR ?= ${PREFIX}/bin +LIBEXECDIR ?= ${PREFIX}/libexec +MANDIR ?= ${PREFIX}/share/man +ETCDIR ?= ${DESTDIR}/etc +ETCDIR_CRIO ?= ${ETCDIR}/crio +BUILDTAGS ?= seccomp $(shell hack/btrfs_tag.sh) $(shell hack/libdm_tag.sh) $(shell hack/btrfs_installed_tag.sh) $(shell hack/ostree_tag.sh) $(shell hack/selinux_tag.sh) + +BASHINSTALLDIR=${PREFIX}/share/bash-completion/completions +OCIUMOUNTINSTALLDIR=$(PREFIX)/share/oci-umount/oci-umount.d + +SELINUXOPT ?= $(shell test -x /usr/sbin/selinuxenabled && selinuxenabled && echo -Z) +PACKAGES ?= $(shell go list -tags "${BUILDTAGS}" ./... | grep -v github.com/kubernetes-incubator/cri-o/vendor) + +COMMIT_NO := $(shell git rev-parse HEAD 2> /dev/null || true) +GIT_COMMIT := $(if $(shell git status --porcelain --untracked-files=no),"${COMMIT_NO}-dirty","${COMMIT_NO}") +BUILD_INFO := $(shell date +%s) + +KPOD_VERSION := ${shell cat ./KPOD_VERSION} + +# If GOPATH not specified, use one in the local directory +ifeq ($(GOPATH),) +export GOPATH := $(CURDIR)/_output +unexport GOBIN +endif +GOPKGDIR := $(GOPATH)/src/$(PROJECT) +GOPKGBASEDIR := $(shell dirname "$(GOPKGDIR)") + +# Update VPATH so make finds .gopathok +VPATH := $(VPATH):$(GOPATH) +SHRINKFLAGS := -s -w +BASE_LDFLAGS := ${SHRINKFLAGS} -X main.gitCommit=${GIT_COMMIT} -X main.buildInfo=${BUILD_INFO} +KPOD_LDFLAGS := -X main.kpodVersion=${KPOD_VERSION} +LDFLAGS := -ldflags '${BASE_LDFLAGS}' +LDFLAGS_KPOD := -ldflags '${BASE_LDFLAGS} ${KPOD_LDFLAGS}' + +all: binaries crio.conf docs + +default: help + +help: + @echo "Usage: make " + @echo + @echo " * 'install' - Install binaries to system locations" + @echo " * 'binaries' - Build crio, conmon, pause, crioctl and kpod" + @echo " * 'integration' - Execute integration tests" + @echo " * 'clean' - Clean artifacts" + @echo " * 'lint' - Execute the source code linter" + @echo " * 'gofmt' - Verify the source code gofmt" + +.gopathok: +ifeq ("$(wildcard $(GOPKGDIR))","") + mkdir -p "$(GOPKGBASEDIR)" + ln -s "$(CURDIR)" "$(GOPKGBASEDIR)" +endif + touch "$(GOPATH)/.gopathok" + +lint: .gopathok + @echo "checking lint" + @./.tool/lint + +gofmt: + @./hack/verify-gofmt.sh + +conmon: + $(MAKE) -C $@ + +pause: + $(MAKE) -C $@ + +test/bin2img/bin2img: .gopathok $(wildcard test/bin2img/*.go) + $(GO) build $(LDFLAGS) -tags "$(BUILDTAGS) containers_image_ostree_stub" -o $@ $(PROJECT)/test/bin2img + +test/copyimg/copyimg: .gopathok $(wildcard test/copyimg/*.go) + $(GO) build $(LDFLAGS) -tags "$(BUILDTAGS) containers_image_ostree_stub" -o $@ $(PROJECT)/test/copyimg + +test/checkseccomp/checkseccomp: .gopathok $(wildcard test/checkseccomp/*.go) + $(GO) build $(LDFLAGS) -tags "$(BUILDTAGS) containers_image_ostree_stub" -o $@ $(PROJECT)/test/checkseccomp + +crio: .gopathok $(shell hack/find-godeps.sh $(GOPKGDIR) cmd/crio $(PROJECT)) + $(GO) build $(LDFLAGS) -tags "$(BUILDTAGS) containers_image_ostree_stub" -o bin/$@ $(PROJECT)/cmd/crio + +crioctl: .gopathok $(shell hack/find-godeps.sh $(GOPKGDIR) cmd/crioctl $(PROJECT)) + $(GO) build $(LDFLAGS) -tags "$(BUILDTAGS) containers_image_ostree_stub" -o bin/$@ $(PROJECT)/cmd/crioctl + +kpod: .gopathok $(shell hack/find-godeps.sh $(GOPKGDIR) cmd/kpod $(PROJECT)) + $(GO) build $(LDFLAGS_KPOD) -tags "$(BUILDTAGS)" -o bin/$@ $(PROJECT)/cmd/kpod + +crio.conf: crio + ./bin/crio --config="" config --default > crio.conf + +clean: +ifneq ($(GOPATH),) + rm -f "$(GOPATH)/.gopathok" +endif + rm -rf _output + rm -f docs/*.1 docs/*.5 docs/*.8 + rm -fr test/testdata/redis-image + find . -name \*~ -delete + find . -name \#\* -delete + rm -f bin/crioctl bin/crio bin/kpod + make -C conmon clean + make -C pause clean + rm -f test/bin2img/bin2img + rm -f test/copyimg/copyimg + rm -f test/checkseccomp/checkseccomp + +crioimage: + docker build -t ${CRIO_IMAGE} . + +dbuild: crioimage + docker run --name=${CRIO_INSTANCE} --privileged ${CRIO_IMAGE} -v ${PWD}:/go/src/${PROJECT} --rm make binaries + +integration: crioimage + docker run -e STORAGE_OPTIONS="--storage-driver=vfs" -e TESTFLAGS -e TRAVIS -t --privileged --rm -v ${CURDIR}:/go/src/${PROJECT} ${CRIO_IMAGE} make localintegration + +testunit: + $(GO) test -tags "$(BUILDTAGS)" -cover $(PACKAGES) + +localintegration: clean binaries test-binaries + ./test/test_runner.sh ${TESTFLAGS} + +binaries: crio conmon pause kpod crioctl +test-binaries: test/bin2img/bin2img test/copyimg/copyimg test/checkseccomp/checkseccomp + +MANPAGES_MD := $(wildcard docs/*.md) +MANPAGES := $(MANPAGES_MD:%.md=%) + +docs/%.1: docs/%.1.md .gopathok + (go-md2man -in $< -out $@.tmp && touch $@.tmp && mv $@.tmp $@) || ($(GOPATH)/bin/go-md2man -in $< -out $@.tmp && touch $@.tmp && mv $@.tmp $@) + +docs/%.5: docs/%.5.md .gopathok + (go-md2man -in $< -out $@.tmp && touch $@.tmp && mv $@.tmp $@) || ($(GOPATH)/bin/go-md2man -in $< -out $@.tmp && touch $@.tmp && mv $@.tmp $@) + +docs/%.8: docs/%.8.md .gopathok + (go-md2man -in $< -out $@.tmp && touch $@.tmp && mv $@.tmp $@) || ($(GOPATH)/bin/go-md2man -in $< -out $@.tmp && touch $@.tmp && mv $@.tmp $@) + +docs: $(MANPAGES) + +install: .gopathok install.bin install.man + +install.bin: + install ${SELINUXOPT} -D -m 755 bin/crio $(BINDIR)/crio + install ${SELINUXOPT} -D -m 755 bin/crioctl $(BINDIR)/crioctl + install ${SELINUXOPT} -D -m 755 bin/kpod $(BINDIR)/kpod + install ${SELINUXOPT} -D -m 755 bin/conmon $(LIBEXECDIR)/crio/conmon + install ${SELINUXOPT} -D -m 755 bin/pause $(LIBEXECDIR)/crio/pause + +install.man: + install ${SELINUXOPT} -d -m 755 $(MANDIR)/man1 + install ${SELINUXOPT} -d -m 755 $(MANDIR)/man5 + install ${SELINUXOPT} -d -m 755 $(MANDIR)/man8 + install ${SELINUXOPT} -m 644 $(filter %.1,$(MANPAGES)) -t $(MANDIR)/man1 + install ${SELINUXOPT} -m 644 $(filter %.5,$(MANPAGES)) -t $(MANDIR)/man5 + install ${SELINUXOPT} -m 644 $(filter %.8,$(MANPAGES)) -t $(MANDIR)/man8 + +install.config: + install ${SELINUXOPT} -D -m 644 crio.conf $(ETCDIR_CRIO)/crio.conf + install ${SELINUXOPT} -D -m 644 seccomp.json $(ETCDIR_CRIO)/seccomp.json + install ${SELINUXOPT} -D -m 644 crio-umount.conf $(OCIUMOUNTINSTALLDIR)/crio-umount.conf + +install.completions: + install ${SELINUXOPT} -d -m 755 ${BASHINSTALLDIR} + install ${SELINUXOPT} -m 644 -D completions/bash/kpod ${BASHINSTALLDIR} + +install.systemd: + install ${SELINUXOPT} -D -m 644 contrib/systemd/crio.service $(PREFIX)/lib/systemd/system/crio.service + ln -sf crio.service $(PREFIX)/lib/systemd/system/cri-o.service + install ${SELINUXOPT} -D -m 644 contrib/systemd/crio-shutdown.service $(PREFIX)/lib/systemd/system/crio-shutdown.service + +uninstall: + rm -f $(BINDIR)/crio + rm -f $(BINDIR)/crioctl + rm -f $(LIBEXECDIR)/crio/conmon + rm -f $(LIBEXECDIR)/crio/pause + 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 +.gitvalidation: .gopathok +ifeq ($(TRAVIS),true) + GIT_CHECK_EXCLUDE="./vendor" $(GOPATH)/bin/git-validation -q -run DCO,short-subject,dangling-whitespace +else + GIT_CHECK_EXCLUDE="./vendor" $(GOPATH)/bin/git-validation -v -run DCO,short-subject,dangling-whitespace -range $(EPOCH_TEST_COMMIT)..HEAD +endif + +.PHONY: install.tools + +install.tools: .install.gitvalidation .install.gometalinter .install.md2man + +.install.gitvalidation: .gopathok + if [ ! -x "$(GOPATH)/bin/git-validation" ]; then \ + go get -u github.com/vbatts/git-validation; \ + fi + +.install.gometalinter: .gopathok + if [ ! -x "$(GOPATH)/bin/gometalinter" ]; then \ + go get -u github.com/alecthomas/gometalinter; \ + cd $(GOPATH)/src/github.com/alecthomas/gometalinter; \ + git checkout 23261fa046586808612c61da7a81d75a658e0814; \ + go install github.com/alecthomas/gometalinter; \ + $(GOPATH)/bin/gometalinter --install; \ + fi + +.install.md2man: .gopathok + if [ ! -x "$(GOPATH)/bin/go-md2man" ]; then \ + go get -u github.com/cpuguy83/go-md2man; \ + fi + +.install.ostree: .gopathok + if ! pkg-config ostree-1 2> /dev/null ; then \ + git clone https://github.com/ostreedev/ostree $(GOPATH)/src/github.com/ostreedev/ostree ; \ + cd $(GOPATH)/src/github.com/ostreedev/ostree ; \ + ./autogen.sh --prefix=/usr/local; \ + make all install; \ + fi + +.PHONY: \ + binaries \ + clean \ + conmon \ + default \ + docs \ + gofmt \ + help \ + install \ + lint \ + pause \ + uninstall -- cgit v1.2.3-54-g00ecf From 637de4d0d3a4702fa37c1c9256f926dbbf6c05ae Mon Sep 17 00:00:00 2001 From: Matthew Heon Date: Wed, 1 Nov 2017 11:29:12 -0400 Subject: Remove CRI-O binaries and makefile targets Signed-off-by: Matthew Heon --- Makefile | 33 +-- cmd/crio/config.go | 192 -------------- cmd/crio/daemon_linux.go | 20 -- cmd/crio/main.go | 532 -------------------------------------- cmd/crioctl/container.go | 653 ----------------------------------------------- cmd/crioctl/image.go | 173 ------------- cmd/crioctl/info.go | 31 --- cmd/crioctl/main.go | 113 -------- cmd/crioctl/sandbox.go | 386 ---------------------------- cmd/crioctl/system.go | 41 --- 10 files changed, 7 insertions(+), 2167 deletions(-) delete mode 100644 cmd/crio/config.go delete mode 100644 cmd/crio/daemon_linux.go delete mode 100644 cmd/crio/main.go delete mode 100644 cmd/crioctl/container.go delete mode 100644 cmd/crioctl/image.go delete mode 100644 cmd/crioctl/info.go delete mode 100644 cmd/crioctl/main.go delete mode 100644 cmd/crioctl/sandbox.go delete mode 100644 cmd/crioctl/system.go (limited to 'Makefile') diff --git a/Makefile b/Makefile index 4a1b812b3..bbeee9d2f 100644 --- a/Makefile +++ b/Makefile @@ -41,7 +41,7 @@ KPOD_LDFLAGS := -X main.kpodVersion=${KPOD_VERSION} LDFLAGS := -ldflags '${BASE_LDFLAGS}' LDFLAGS_KPOD := -ldflags '${BASE_LDFLAGS} ${KPOD_LDFLAGS}' -all: binaries crio.conf docs +all: binaries docs default: help @@ -49,7 +49,7 @@ help: @echo "Usage: make " @echo @echo " * 'install' - Install binaries to system locations" - @echo " * 'binaries' - Build crio, conmon, pause, crioctl and kpod" + @echo " * 'binaries' - Build conmon and kpod" @echo " * 'integration' - Execute integration tests" @echo " * 'clean' - Clean artifacts" @echo " * 'lint' - Execute the source code linter" @@ -62,6 +62,9 @@ ifeq ("$(wildcard $(GOPKGDIR))","") endif touch "$(GOPATH)/.gopathok" +.bindir: + mkdir -p bin/ + lint: .gopathok @echo "checking lint" @./.tool/lint @@ -72,9 +75,6 @@ gofmt: conmon: $(MAKE) -C $@ -pause: - $(MAKE) -C $@ - test/bin2img/bin2img: .gopathok $(wildcard test/bin2img/*.go) $(GO) build $(LDFLAGS) -tags "$(BUILDTAGS) containers_image_ostree_stub" -o $@ $(PROJECT)/test/bin2img @@ -84,18 +84,9 @@ test/copyimg/copyimg: .gopathok $(wildcard test/copyimg/*.go) test/checkseccomp/checkseccomp: .gopathok $(wildcard test/checkseccomp/*.go) $(GO) build $(LDFLAGS) -tags "$(BUILDTAGS) containers_image_ostree_stub" -o $@ $(PROJECT)/test/checkseccomp -crio: .gopathok $(shell hack/find-godeps.sh $(GOPKGDIR) cmd/crio $(PROJECT)) - $(GO) build $(LDFLAGS) -tags "$(BUILDTAGS) containers_image_ostree_stub" -o bin/$@ $(PROJECT)/cmd/crio - -crioctl: .gopathok $(shell hack/find-godeps.sh $(GOPKGDIR) cmd/crioctl $(PROJECT)) - $(GO) build $(LDFLAGS) -tags "$(BUILDTAGS) containers_image_ostree_stub" -o bin/$@ $(PROJECT)/cmd/crioctl - kpod: .gopathok $(shell hack/find-godeps.sh $(GOPKGDIR) cmd/kpod $(PROJECT)) $(GO) build $(LDFLAGS_KPOD) -tags "$(BUILDTAGS)" -o bin/$@ $(PROJECT)/cmd/kpod -crio.conf: crio - ./bin/crio --config="" config --default > crio.conf - clean: ifneq ($(GOPATH),) rm -f "$(GOPATH)/.gopathok" @@ -105,9 +96,8 @@ endif rm -fr test/testdata/redis-image find . -name \*~ -delete find . -name \#\* -delete - rm -f bin/crioctl bin/crio bin/kpod + rm -f bin/kpod make -C conmon clean - make -C pause clean rm -f test/bin2img/bin2img rm -f test/copyimg/copyimg rm -f test/checkseccomp/checkseccomp @@ -127,7 +117,7 @@ testunit: localintegration: clean binaries test-binaries ./test/test_runner.sh ${TESTFLAGS} -binaries: crio conmon pause kpod crioctl +binaries: .bindir conmon kpod test-binaries: test/bin2img/bin2img test/copyimg/copyimg test/checkseccomp/checkseccomp MANPAGES_MD := $(wildcard docs/*.md) @@ -147,11 +137,8 @@ docs: $(MANPAGES) install: .gopathok install.bin install.man install.bin: - install ${SELINUXOPT} -D -m 755 bin/crio $(BINDIR)/crio - install ${SELINUXOPT} -D -m 755 bin/crioctl $(BINDIR)/crioctl install ${SELINUXOPT} -D -m 755 bin/kpod $(BINDIR)/kpod install ${SELINUXOPT} -D -m 755 bin/conmon $(LIBEXECDIR)/crio/conmon - install ${SELINUXOPT} -D -m 755 bin/pause $(LIBEXECDIR)/crio/pause install.man: install ${SELINUXOPT} -d -m 755 $(MANDIR)/man1 @@ -162,7 +149,6 @@ install.man: install ${SELINUXOPT} -m 644 $(filter %.8,$(MANPAGES)) -t $(MANDIR)/man8 install.config: - install ${SELINUXOPT} -D -m 644 crio.conf $(ETCDIR_CRIO)/crio.conf install ${SELINUXOPT} -D -m 644 seccomp.json $(ETCDIR_CRIO)/seccomp.json install ${SELINUXOPT} -D -m 644 crio-umount.conf $(OCIUMOUNTINSTALLDIR)/crio-umount.conf @@ -170,11 +156,6 @@ install.completions: install ${SELINUXOPT} -d -m 755 ${BASHINSTALLDIR} install ${SELINUXOPT} -m 644 -D completions/bash/kpod ${BASHINSTALLDIR} -install.systemd: - install ${SELINUXOPT} -D -m 644 contrib/systemd/crio.service $(PREFIX)/lib/systemd/system/crio.service - ln -sf crio.service $(PREFIX)/lib/systemd/system/cri-o.service - install ${SELINUXOPT} -D -m 644 contrib/systemd/crio-shutdown.service $(PREFIX)/lib/systemd/system/crio-shutdown.service - uninstall: rm -f $(BINDIR)/crio rm -f $(BINDIR)/crioctl diff --git a/cmd/crio/config.go b/cmd/crio/config.go deleted file mode 100644 index 76e3361d4..000000000 --- a/cmd/crio/config.go +++ /dev/null @@ -1,192 +0,0 @@ -package main - -import ( - "os" - "text/template" - - "github.com/kubernetes-incubator/cri-o/server" - "github.com/urfave/cli" -) - -var commentedConfigTemplate = template.Must(template.New("config").Parse(` -# The "crio" table contains all of the server options. -[crio] - -# root is a path to the "root directory". CRIO stores all of its data, -# including container images, in this directory. -root = "{{ .Root }}" - -# run is a path to the "run directory". CRIO stores all of its state -# in this directory. -runroot = "{{ .RunRoot }}" - -# storage_driver select which storage driver is used to manage storage -# of images and containers. -storage_driver = "{{ .Storage }}" - -# storage_option is used to pass an option to the storage driver. -storage_option = [ -{{ range $opt := .StorageOptions }}{{ printf "\t%q,\n" $opt }}{{ end }}] - -# The "crio.api" table contains settings for the kubelet/gRPC -# interface (which is also used by crioctl). -[crio.api] - -# listen is the path to the AF_LOCAL socket on which crio will listen. -listen = "{{ .Listen }}" - -# stream_address is the IP address on which the stream server will listen -stream_address = "{{ .StreamAddress }}" - -# stream_port is the port on which the stream server will listen -stream_port = "{{ .StreamPort }}" - -# file_locking is whether file-based locking will be used instead of -# in-memory locking -file_locking = {{ .FileLocking }} - -# The "crio.runtime" table contains settings pertaining to the OCI -# runtime used and options for how to set up and manage the OCI runtime. -[crio.runtime] - -# runtime is the OCI compatible runtime used for trusted container workloads. -# This is a mandatory setting as this runtime will be the default one -# and will also be used for untrusted container workloads if -# runtime_untrusted_workload is not set. -runtime = "{{ .Runtime }}" - -# runtime_untrusted_workload is the OCI compatible runtime used for untrusted -# container workloads. This is an optional setting, except if -# default_container_trust is set to "untrusted". -runtime_untrusted_workload = "{{ .RuntimeUntrustedWorkload }}" - -# default_workload_trust is the default level of trust crio puts in container -# workloads. It can either be "trusted" or "untrusted", and the default -# is "trusted". -# Containers can be run through different container runtimes, depending on -# the trust hints we receive from kubelet: -# - If kubelet tags a container workload as untrusted, crio will try first to -# run it through the untrusted container workload runtime. If it is not set, -# crio will use the trusted runtime. -# - If kubelet does not provide any information about the container workload trust -# level, the selected runtime will depend on the default_container_trust setting. -# If it is set to "untrusted", then all containers except for the host privileged -# ones, will be run by the runtime_untrusted_workload runtime. Host privileged -# containers are by definition trusted and will always use the trusted container -# runtime. If default_container_trust is set to "trusted", crio will use the trusted -# container runtime for all containers. -default_workload_trust = "{{ .DefaultWorkloadTrust }}" - -# no_pivot instructs the runtime to not use pivot_root, but instead use MS_MOVE -no_pivot = {{ .NoPivot }} - -# conmon is the path to conmon binary, used for managing the runtime. -conmon = "{{ .Conmon }}" - -# conmon_env is the environment variable list for conmon process, -# used for passing necessary environment variable to conmon or runtime. -conmon_env = [ -{{ range $env := .ConmonEnv }}{{ printf "\t%q,\n" $env }}{{ end }}] - -# selinux indicates whether or not SELinux will be used for pod -# separation on the host. If you enable this flag, SELinux must be running -# on the host. -selinux = {{ .SELinux }} - -# seccomp_profile is the seccomp json profile path which is used as the -# default for the runtime. -seccomp_profile = "{{ .SeccompProfile }}" - -# apparmor_profile is the apparmor profile name which is used as the -# default for the runtime. -apparmor_profile = "{{ .ApparmorProfile }}" - -# cgroup_manager is the cgroup management implementation to be used -# for the runtime. -cgroup_manager = "{{ .CgroupManager }}" - -# hooks_dir_path is the oci hooks directory for automatically executed hooks -hooks_dir_path = "{{ .HooksDirPath }}" - -# default_mounts is the mounts list to be mounted for the container when created -default_mounts = [ -{{ range $mount := .DefaultMounts }}{{ printf "\t%q, \n" $mount }}{{ end }}] - -# pids_limit is the number of processes allowed in a container -pids_limit = {{ .PidsLimit }} - -# log_size_max is the max limit for the container log size in bytes. -# Negative values indicate that no limit is imposed. -log_size_max = {{ .LogSizeMax }} - -# The "crio.image" table contains settings pertaining to the -# management of OCI images. -[crio.image] - -# default_transport is the prefix we try prepending to an image name if the -# image name as we receive it can't be parsed as a valid source reference -default_transport = "{{ .DefaultTransport }}" - -# pause_image is the image which we use to instantiate infra containers. -pause_image = "{{ .PauseImage }}" - -# pause_command is the command to run in a pause_image to have a container just -# sit there. If the image contains the necessary information, this value need -# not be specified. -pause_command = "{{ .PauseCommand }}" - -# signature_policy is the name of the file which decides what sort of policy we -# use when deciding whether or not to trust an image that we've pulled. -# Outside of testing situations, it is strongly advised that this be left -# unspecified so that the default system-wide policy will be used. -signature_policy = "{{ .SignaturePolicyPath }}" - -# image_volumes controls how image volumes are handled. -# The valid values are mkdir and ignore. -image_volumes = "{{ .ImageVolumes }}" - -# insecure_registries is used to skip TLS verification when pulling images. -insecure_registries = [ -{{ range $opt := .InsecureRegistries }}{{ printf "\t%q,\n" $opt }}{{ end }}] - -# registries is used to specify a comma separated list of registries to be used -# when pulling an unqualified image (e.g. fedora:rawhide). -registries = [ -{{ range $opt := .Registries }}{{ printf "\t%q,\n" $opt }}{{ end }}] - -# The "crio.network" table contains settings pertaining to the -# management of CNI plugins. -[crio.network] - -# network_dir is is where CNI network configuration -# files are stored. -network_dir = "{{ .NetworkDir }}" - -# plugin_dir is is where CNI plugin binaries are stored. -plugin_dir = "{{ .PluginDir }}" -`)) - -// TODO: Currently ImageDir isn't really used, so we haven't added it to this -// template. Add it once the storage code has been merged. - -var configCommand = cli.Command{ - Name: "config", - Usage: "generate crio configuration files", - Flags: []cli.Flag{ - cli.BoolFlag{ - Name: "default", - Usage: "output the default configuration", - }, - }, - Action: func(c *cli.Context) error { - // At this point, app.Before has already parsed the user's chosen - // config file. So no need to handle that here. - config := c.App.Metadata["config"].(*server.Config) - if c.Bool("default") { - config = server.DefaultConfig() - } - - // Output the commented config. - return commentedConfigTemplate.ExecuteTemplate(os.Stdout, "config", config) - }, -} diff --git a/cmd/crio/daemon_linux.go b/cmd/crio/daemon_linux.go deleted file mode 100644 index 884d3f269..000000000 --- a/cmd/crio/daemon_linux.go +++ /dev/null @@ -1,20 +0,0 @@ -// +build linux - -package main - -import ( - systemdDaemon "github.com/coreos/go-systemd/daemon" - "github.com/sirupsen/logrus" -) - -func sdNotify() { - if _, err := systemdDaemon.SdNotify(true, "READY=1"); err != nil { - logrus.Warnf("Failed to sd_notify systemd: %v", err) - } -} - -// notifySystem sends a message to the host when the server is ready to be used -func notifySystem() { - // Tell the init daemon we are accepting requests - go sdNotify() -} diff --git a/cmd/crio/main.go b/cmd/crio/main.go deleted file mode 100644 index e58adb114..000000000 --- a/cmd/crio/main.go +++ /dev/null @@ -1,532 +0,0 @@ -package main - -import ( - "context" - "fmt" - "net" - "net/http" - _ "net/http/pprof" - "os" - "os/signal" - "sort" - "strings" - "time" - - "github.com/containers/storage/pkg/reexec" - "github.com/kubernetes-incubator/cri-o/libkpod" - "github.com/kubernetes-incubator/cri-o/server" - "github.com/kubernetes-incubator/cri-o/version" - "github.com/opencontainers/selinux/go-selinux" - "github.com/sirupsen/logrus" - "github.com/soheilhy/cmux" - "github.com/urfave/cli" - "golang.org/x/sys/unix" - "google.golang.org/grpc" - "k8s.io/kubernetes/pkg/kubelet/apis/cri/v1alpha1/runtime" -) - -// gitCommit is the commit that the binary is being built from. -// It will be populated by the Makefile. -var gitCommit = "" - -func validateConfig(config *server.Config) error { - switch config.ImageVolumes { - case libkpod.ImageVolumesMkdir: - case libkpod.ImageVolumesIgnore: - case libkpod.ImageVolumesBind: - default: - return fmt.Errorf("Unrecognized image volume type specified") - - } - - // This needs to match the read buffer size in conmon - if config.LogSizeMax >= 0 && config.LogSizeMax < 8192 { - return fmt.Errorf("log size max should be negative or >= 8192") - } - return nil -} - -func mergeConfig(config *server.Config, ctx *cli.Context) error { - // Don't parse the config if the user explicitly set it to "". - if path := ctx.GlobalString("config"); path != "" { - if err := config.UpdateFromFile(path); err != nil { - if ctx.GlobalIsSet("config") || !os.IsNotExist(err) { - return err - } - - // We don't error out if --config wasn't explicitly set and the - // default doesn't exist. But we will log a warning about it, so - // the user doesn't miss it. - logrus.Warnf("default configuration file does not exist: %s", server.CrioConfigPath) - } - } - - // Override options set with the CLI. - if ctx.GlobalIsSet("conmon") { - config.Conmon = ctx.GlobalString("conmon") - } - if ctx.GlobalIsSet("pause-command") { - config.PauseCommand = ctx.GlobalString("pause-command") - } - if ctx.GlobalIsSet("pause-image") { - config.PauseImage = ctx.GlobalString("pause-image") - } - if ctx.GlobalIsSet("signature-policy") { - config.SignaturePolicyPath = ctx.GlobalString("signature-policy") - } - if ctx.GlobalIsSet("root") { - config.Root = ctx.GlobalString("root") - } - if ctx.GlobalIsSet("runroot") { - config.RunRoot = ctx.GlobalString("runroot") - } - if ctx.GlobalIsSet("storage-driver") { - config.Storage = ctx.GlobalString("storage-driver") - } - if ctx.GlobalIsSet("storage-opt") { - config.StorageOptions = ctx.GlobalStringSlice("storage-opt") - } - if ctx.GlobalIsSet("file-locking") { - config.FileLocking = ctx.GlobalBool("file-locking") - } - if ctx.GlobalIsSet("insecure-registry") { - config.InsecureRegistries = ctx.GlobalStringSlice("insecure-registry") - } - if ctx.GlobalIsSet("registry") { - config.Registries = ctx.GlobalStringSlice("registry") - } - if ctx.GlobalIsSet("default-transport") { - config.DefaultTransport = ctx.GlobalString("default-transport") - } - if ctx.GlobalIsSet("listen") { - config.Listen = ctx.GlobalString("listen") - } - if ctx.GlobalIsSet("stream-address") { - config.StreamAddress = ctx.GlobalString("stream-address") - } - if ctx.GlobalIsSet("stream-port") { - config.StreamPort = ctx.GlobalString("stream-port") - } - if ctx.GlobalIsSet("runtime") { - config.Runtime = ctx.GlobalString("runtime") - } - if ctx.GlobalIsSet("selinux") { - config.SELinux = ctx.GlobalBool("selinux") - } - if ctx.GlobalIsSet("seccomp-profile") { - config.SeccompProfile = ctx.GlobalString("seccomp-profile") - } - if ctx.GlobalIsSet("apparmor-profile") { - config.ApparmorProfile = ctx.GlobalString("apparmor-profile") - } - if ctx.GlobalIsSet("cgroup-manager") { - config.CgroupManager = ctx.GlobalString("cgroup-manager") - } - if ctx.GlobalIsSet("hooks-dir-path") { - config.HooksDirPath = ctx.GlobalString("hooks-dir-path") - } - if ctx.GlobalIsSet("default-mounts") { - config.DefaultMounts = ctx.GlobalStringSlice("default-mounts") - } - if ctx.GlobalIsSet("pids-limit") { - config.PidsLimit = ctx.GlobalInt64("pids-limit") - } - if ctx.GlobalIsSet("log-size-max") { - config.LogSizeMax = ctx.GlobalInt64("log-size-max") - } - if ctx.GlobalIsSet("cni-config-dir") { - config.NetworkDir = ctx.GlobalString("cni-config-dir") - } - if ctx.GlobalIsSet("cni-plugin-dir") { - config.PluginDir = ctx.GlobalString("cni-plugin-dir") - } - if ctx.GlobalIsSet("image-volumes") { - config.ImageVolumes = libkpod.ImageVolumesType(ctx.GlobalString("image-volumes")) - } - return nil -} - -func catchShutdown(gserver *grpc.Server, sserver *server.Server, hserver *http.Server, signalled *bool) { - sig := make(chan os.Signal, 10) - signal.Notify(sig, unix.SIGINT, unix.SIGTERM) - go func() { - for s := range sig { - switch s { - case unix.SIGINT: - logrus.Debugf("Caught SIGINT") - case unix.SIGTERM: - logrus.Debugf("Caught SIGTERM") - default: - continue - } - *signalled = true - gserver.GracefulStop() - hserver.Shutdown(context.Background()) - // TODO(runcom): enable this after https://github.com/kubernetes/kubernetes/pull/51377 - //sserver.StopStreamServer() - sserver.StopExitMonitor() - if err := sserver.Shutdown(); err != nil { - logrus.Warnf("error shutting down main service %v", err) - } - return - } - }() -} - -func main() { - if reexec.Init() { - return - } - app := cli.NewApp() - - var v []string - v = append(v, version.Version) - if gitCommit != "" { - v = append(v, fmt.Sprintf("commit: %s", gitCommit)) - } - app.Name = "crio" - app.Usage = "crio server" - app.Version = strings.Join(v, "\n") - app.Metadata = map[string]interface{}{ - "config": server.DefaultConfig(), - } - - app.Flags = []cli.Flag{ - cli.StringFlag{ - Name: "config", - Value: server.CrioConfigPath, - Usage: "path to configuration file", - }, - cli.StringFlag{ - Name: "conmon", - Usage: "path to the conmon executable", - }, - cli.StringFlag{ - Name: "listen", - Usage: "path to crio socket", - }, - cli.StringFlag{ - Name: "stream-address", - Usage: "bind address for streaming socket", - }, - cli.StringFlag{ - Name: "stream-port", - Usage: "bind port for streaming socket (default: \"10010\")", - }, - cli.StringFlag{ - Name: "log", - Value: "", - Usage: "set the log file path where internal debug information is written", - }, - cli.StringFlag{ - Name: "log-format", - Value: "text", - Usage: "set the format used by logs ('text' (default), or 'json')", - }, - cli.StringFlag{ - Name: "log-level", - Usage: "log messages above specified level: debug, info (default), warn, error, fatal or panic", - }, - - cli.StringFlag{ - Name: "pause-command", - Usage: "name of the pause command in the pause image", - }, - cli.StringFlag{ - Name: "pause-image", - Usage: "name of the pause image", - }, - cli.StringFlag{ - Name: "signature-policy", - Usage: "path to signature policy file", - }, - cli.StringFlag{ - Name: "root", - Usage: "crio root dir", - }, - cli.StringFlag{ - Name: "runroot", - Usage: "crio state dir", - }, - cli.StringFlag{ - Name: "storage-driver", - Usage: "storage driver", - }, - cli.StringSliceFlag{ - Name: "storage-opt", - Usage: "storage driver option", - }, - cli.BoolFlag{ - Name: "file-locking", - Usage: "enable or disable file-based locking", - }, - cli.StringSliceFlag{ - Name: "insecure-registry", - Usage: "whether to disable TLS verification for the given registry", - }, - cli.StringSliceFlag{ - Name: "registry", - Usage: "registry to be prepended when pulling unqualified images, can be specified multiple times", - }, - cli.StringFlag{ - Name: "default-transport", - Usage: "default transport", - }, - cli.StringFlag{ - Name: "runtime", - Usage: "OCI runtime path", - }, - cli.StringFlag{ - Name: "seccomp-profile", - Usage: "default seccomp profile path", - }, - cli.StringFlag{ - Name: "apparmor-profile", - Usage: "default apparmor profile name (default: \"crio-default\")", - }, - cli.BoolFlag{ - Name: "selinux", - Usage: "enable selinux support", - }, - cli.StringFlag{ - Name: "cgroup-manager", - Usage: "cgroup manager (cgroupfs or systemd)", - }, - cli.Int64Flag{ - Name: "pids-limit", - Value: libkpod.DefaultPidsLimit, - Usage: "maximum number of processes allowed in a container", - }, - cli.Int64Flag{ - Name: "log-size-max", - Value: libkpod.DefaultLogSizeMax, - Usage: "maximum log size in bytes for a container", - }, - cli.StringFlag{ - Name: "cni-config-dir", - Usage: "CNI configuration files directory", - }, - cli.StringFlag{ - Name: "cni-plugin-dir", - Usage: "CNI plugin binaries directory", - }, - cli.StringFlag{ - Name: "image-volumes", - Value: string(libkpod.ImageVolumesMkdir), - Usage: "image volume handling ('mkdir', 'bind', or 'ignore')", - }, - cli.StringFlag{ - Name: "hooks-dir-path", - Usage: "set the OCI hooks directory path", - Value: libkpod.DefaultHooksDirPath, - Hidden: true, - }, - cli.StringSliceFlag{ - Name: "default-mounts", - Usage: "add one or more default mount paths in the form host:container", - Hidden: true, - }, - cli.BoolFlag{ - Name: "profile", - Usage: "enable pprof remote profiler on localhost:6060", - }, - cli.IntFlag{ - Name: "profile-port", - Value: 6060, - Usage: "port for the pprof profiler", - }, - cli.BoolFlag{ - Name: "enable-metrics", - Usage: "enable metrics endpoint for the servier on localhost:9090", - }, - cli.IntFlag{ - Name: "metrics-port", - Value: 9090, - Usage: "port for the metrics endpoint", - }, - } - - sort.Sort(cli.FlagsByName(app.Flags)) - sort.Sort(cli.FlagsByName(configCommand.Flags)) - - app.Commands = []cli.Command{ - configCommand, - } - - app.Before = func(c *cli.Context) error { - // Load the configuration file. - config := c.App.Metadata["config"].(*server.Config) - if err := mergeConfig(config, c); err != nil { - return err - } - - if err := validateConfig(config); err != nil { - return err - } - - cf := &logrus.TextFormatter{ - TimestampFormat: "2006-01-02 15:04:05.000000000Z07:00", - FullTimestamp: true, - } - - logrus.SetFormatter(cf) - - if loglevel := c.GlobalString("log-level"); loglevel != "" { - level, err := logrus.ParseLevel(loglevel) - if err != nil { - return err - } - - logrus.SetLevel(level) - } - - if path := c.GlobalString("log"); path != "" { - f, err := os.OpenFile(path, os.O_CREATE|os.O_WRONLY|os.O_APPEND|os.O_SYNC, 0666) - if err != nil { - return err - } - logrus.SetOutput(f) - } - - switch c.GlobalString("log-format") { - case "text": - // retain logrus's default. - case "json": - logrus.SetFormatter(new(logrus.JSONFormatter)) - default: - return fmt.Errorf("unknown log-format %q", c.GlobalString("log-format")) - } - - return nil - } - - app.Action = func(c *cli.Context) error { - if c.GlobalBool("profile") { - profilePort := c.GlobalInt("profile-port") - profileEndpoint := fmt.Sprintf("localhost:%v", profilePort) - go func() { - http.ListenAndServe(profileEndpoint, nil) - }() - } - - args := c.Args() - if len(args) > 0 { - for _, command := range app.Commands { - if args[0] == command.Name { - break - } - } - return fmt.Errorf("command %q not supported", args[0]) - } - - config := c.App.Metadata["config"].(*server.Config) - - if !config.SELinux { - selinux.SetDisabled() - } - - if _, err := os.Stat(config.Runtime); os.IsNotExist(err) { - // path to runtime does not exist - return fmt.Errorf("invalid --runtime value %q", err) - } - - // Remove the socket if it already exists - if _, err := os.Stat(config.Listen); err == nil { - if err := os.Remove(config.Listen); err != nil { - logrus.Fatal(err) - } - } - lis, err := net.Listen("unix", config.Listen) - if err != nil { - logrus.Fatalf("failed to listen: %v", err) - } - - s := grpc.NewServer() - - service, err := server.New(config) - if err != nil { - logrus.Fatal(err) - } - - if c.GlobalBool("enable-metrics") { - metricsPort := c.GlobalInt("metrics-port") - me, err := service.CreateMetricsEndpoint() - if err != nil { - logrus.Fatalf("Failed to create metrics endpoint: %v", err) - } - l, err := net.Listen("tcp", fmt.Sprintf(":%v", metricsPort)) - if err != nil { - logrus.Fatalf("Failed to create listener for metrics: %v", err) - } - go func() { - if err := http.Serve(l, me); err != nil { - logrus.Fatalf("Failed to serve metrics endpoint: %v", err) - } - }() - } - - runtime.RegisterRuntimeServiceServer(s, service) - runtime.RegisterImageServiceServer(s, service) - - // after the daemon is done setting up we can notify systemd api - notifySystem() - - go func() { - service.StartExitMonitor() - }() - - m := cmux.New(lis) - grpcL := m.Match(cmux.HTTP2HeaderField("content-type", "application/grpc")) - httpL := m.Match(cmux.HTTP1Fast()) - - infoMux := service.GetInfoMux() - srv := &http.Server{ - Handler: infoMux, - ReadTimeout: 5 * time.Second, - } - - graceful := false - catchShutdown(s, service, srv, &graceful) - - go s.Serve(grpcL) - go srv.Serve(httpL) - - serverCloseCh := make(chan struct{}) - go func() { - defer close(serverCloseCh) - if err := m.Serve(); err != nil { - if graceful && strings.Contains(strings.ToLower(err.Error()), "use of closed network connection") { - err = nil - } else { - logrus.Errorf("Failed to serve grpc grpc request: %v", err) - } - } - }() - - // TODO(runcom): enable this after https://github.com/kubernetes/kubernetes/pull/51377 - //streamServerCloseCh := service.StreamingServerCloseChan() - serverExitMonitorCh := service.ExitMonitorCloseChan() - select { - // TODO(runcom): enable this after https://github.com/kubernetes/kubernetes/pull/51377 - //case <-streamServerCloseCh: - case <-serverExitMonitorCh: - case <-serverCloseCh: - } - - service.Shutdown() - - // TODO(runcom): enable this after https://github.com/kubernetes/kubernetes/pull/51377 - //<-streamServerCloseCh - //logrus.Debug("closed stream server") - <-serverExitMonitorCh - logrus.Debug("closed exit monitor") - <-serverCloseCh - logrus.Debug("closed main server") - - return nil - } - - if err := app.Run(os.Args); err != nil { - logrus.Fatal(err) - } -} diff --git a/cmd/crioctl/container.go b/cmd/crioctl/container.go deleted file mode 100644 index e420e6c99..000000000 --- a/cmd/crioctl/container.go +++ /dev/null @@ -1,653 +0,0 @@ -package main - -import ( - "encoding/json" - "fmt" - "log" - "net/url" - "os" - "strings" - "time" - - "github.com/kubernetes-incubator/cri-o/client" - "github.com/urfave/cli" - "golang.org/x/net/context" - remocommandconsts "k8s.io/apimachinery/pkg/util/remotecommand" - restclient "k8s.io/client-go/rest" - "k8s.io/client-go/tools/remotecommand" - pb "k8s.io/kubernetes/pkg/kubelet/apis/cri/v1alpha1/runtime" -) - -var containerCommand = cli.Command{ - Name: "container", - Aliases: []string{"ctr"}, - Subcommands: []cli.Command{ - createContainerCommand, - inspectContainerCommand, - startContainerCommand, - stopContainerCommand, - removeContainerCommand, - containerStatusCommand, - listContainersCommand, - execSyncCommand, - execCommand, - }, -} - -type createOptions struct { - // configPath is path to the config for container - configPath string - // name sets the container name - name string - // podID of the container - podID string - // labels for the container - labels map[string]string -} - -var createContainerCommand = cli.Command{ - Name: "create", - Usage: "create a container", - Flags: []cli.Flag{ - cli.StringFlag{ - Name: "pod", - Usage: "the id of the pod sandbox to which the container belongs", - }, - cli.StringFlag{ - Name: "config", - Value: "config.json", - Usage: "the path of a container config file", - }, - cli.StringFlag{ - Name: "name", - Value: "", - Usage: "the name of the container", - }, - cli.StringSliceFlag{ - Name: "label", - Usage: "add key=value labels to the container", - }, - }, - Action: func(context *cli.Context) error { - // Set up a connection to the server. - conn, err := getClientConnection(context) - if err != nil { - return fmt.Errorf("failed to connect: %v", err) - } - defer conn.Close() - client := pb.NewRuntimeServiceClient(conn) - - if !context.IsSet("pod") { - return fmt.Errorf("Please specify the id of the pod sandbox to which the container belongs via the --pod option") - } - - opts := createOptions{ - configPath: context.String("config"), - name: context.String("name"), - podID: context.String("pod"), - labels: make(map[string]string), - } - - for _, l := range context.StringSlice("label") { - pair := strings.Split(l, "=") - if len(pair) != 2 { - return fmt.Errorf("incorrectly specified label: %v", l) - } - opts.labels[pair[0]] = pair[1] - } - - // Test RuntimeServiceClient.CreateContainer - err = CreateContainer(client, opts) - if err != nil { - return fmt.Errorf("Creating container failed: %v", err) - } - return nil - }, -} - -var startContainerCommand = cli.Command{ - Name: "start", - Usage: "start a container", - Flags: []cli.Flag{ - cli.StringFlag{ - Name: "id", - Value: "", - Usage: "id of the container", - }, - }, - Action: func(context *cli.Context) error { - // Set up a connection to the server. - conn, err := getClientConnection(context) - if err != nil { - return fmt.Errorf("failed to connect: %v", err) - } - defer conn.Close() - client := pb.NewRuntimeServiceClient(conn) - - err = StartContainer(client, context.String("id")) - if err != nil { - return fmt.Errorf("Starting the container failed: %v", err) - } - return nil - }, -} - -var stopContainerCommand = cli.Command{ - Name: "stop", - Usage: "stop a container", - Flags: []cli.Flag{ - cli.StringFlag{ - Name: "id", - Value: "", - Usage: "id of the container", - }, - cli.Int64Flag{ - Name: "timeout", - Value: 10, - Usage: "seconds to wait to kill the container after a graceful stop is requested", - }, - }, - Action: func(context *cli.Context) error { - // Set up a connection to the server. - conn, err := getClientConnection(context) - if err != nil { - return fmt.Errorf("failed to connect: %v", err) - } - defer conn.Close() - client := pb.NewRuntimeServiceClient(conn) - - err = StopContainer(client, context.String("id"), context.Int64("timeout")) - if err != nil { - return fmt.Errorf("Stopping the container failed: %v", err) - } - return nil - }, -} - -var removeContainerCommand = cli.Command{ - Name: "remove", - Usage: "remove a container", - Flags: []cli.Flag{ - cli.StringFlag{ - Name: "id", - Value: "", - Usage: "id of the container", - }, - }, - Action: func(context *cli.Context) error { - // Set up a connection to the server. - conn, err := getClientConnection(context) - if err != nil { - return fmt.Errorf("failed to connect: %v", err) - } - defer conn.Close() - client := pb.NewRuntimeServiceClient(conn) - - err = RemoveContainer(client, context.String("id")) - if err != nil { - return fmt.Errorf("Removing the container failed: %v", err) - } - return nil - }, -} - -var containerStatusCommand = cli.Command{ - Name: "status", - Usage: "get the status of a container", - Flags: []cli.Flag{ - cli.StringFlag{ - Name: "id", - Value: "", - Usage: "id of the container", - }, - }, - Action: func(context *cli.Context) error { - // Set up a connection to the server. - conn, err := getClientConnection(context) - if err != nil { - return fmt.Errorf("failed to connect: %v", err) - } - defer conn.Close() - client := pb.NewRuntimeServiceClient(conn) - - err = ContainerStatus(client, context.String("id")) - if err != nil { - return fmt.Errorf("Getting the status of the container failed: %v", err) - } - return nil - }, -} - -var execSyncCommand = cli.Command{ - Name: "execsync", - Usage: "exec a command synchronously in a container", - Flags: []cli.Flag{ - cli.StringFlag{ - Name: "id", - Value: "", - Usage: "id of the container", - }, - cli.Int64Flag{ - Name: "timeout", - Value: 0, - Usage: "timeout for the command", - }, - }, - Action: func(context *cli.Context) error { - // Set up a connection to the server. - conn, err := getClientConnection(context) - if err != nil { - return fmt.Errorf("failed to connect: %v", err) - } - defer conn.Close() - client := pb.NewRuntimeServiceClient(conn) - - err = ExecSync(client, context.String("id"), context.Args(), context.Int64("timeout")) - if err != nil { - return fmt.Errorf("execing command in container failed: %v", err) - } - return nil - }, -} - -var execCommand = cli.Command{ - Name: "exec", - Usage: "prepare a streaming endpoint to execute a command in the container", - Flags: []cli.Flag{ - cli.StringFlag{ - Name: "id", - Value: "", - Usage: "id of the container", - }, - cli.BoolFlag{ - Name: "tty", - Usage: "whether to use tty", - }, - cli.BoolFlag{ - Name: "stdin", - Usage: "whether to stream to stdin", - }, - cli.BoolFlag{ - Name: "url", - Usage: "do not exec command, just prepare streaming endpoint", - }, - }, - Action: func(context *cli.Context) error { - // Set up a connection to the server. - conn, err := getClientConnection(context) - if err != nil { - return fmt.Errorf("failed to connect: %v", err) - } - defer conn.Close() - client := pb.NewRuntimeServiceClient(conn) - - err = Exec(client, context.String("id"), context.Bool("tty"), context.Bool("stdin"), context.Bool("url"), context.Args()) - if err != nil { - return fmt.Errorf("execing command in container failed: %v", err) - } - return nil - }, -} - -type listOptions struct { - // id of the container - id string - // podID of the container - podID string - // state of the container - state string - // quiet is for listing just container IDs - quiet bool - // labels are selectors for the container - labels map[string]string -} - -var listContainersCommand = cli.Command{ - Name: "list", - Usage: "list containers", - Flags: []cli.Flag{ - cli.BoolFlag{ - Name: "quiet", - Usage: "list only container IDs", - }, - cli.StringFlag{ - Name: "id", - Value: "", - Usage: "filter by container id", - }, - cli.StringFlag{ - Name: "pod", - Value: "", - Usage: "filter by container pod id", - }, - cli.StringFlag{ - Name: "state", - Value: "", - Usage: "filter by container state", - }, - cli.StringSliceFlag{ - Name: "label", - Usage: "filter by key=value label", - }, - }, - Action: func(context *cli.Context) error { - // Set up a connection to the server. - conn, err := getClientConnection(context) - if err != nil { - return fmt.Errorf("failed to connect: %v", err) - } - defer conn.Close() - client := pb.NewRuntimeServiceClient(conn) - opts := listOptions{ - id: context.String("id"), - podID: context.String("pod"), - state: context.String("state"), - quiet: context.Bool("quiet"), - labels: make(map[string]string), - } - - for _, l := range context.StringSlice("label") { - pair := strings.Split(l, "=") - if len(pair) != 2 { - return fmt.Errorf("incorrectly specified label: %v", l) - } - opts.labels[pair[0]] = pair[1] - } - - err = ListContainers(client, opts) - if err != nil { - return fmt.Errorf("listing containers failed: %v", err) - } - return nil - }, -} - -// CreateContainer sends a CreateContainerRequest to the server, and parses -// the returned CreateContainerResponse. -func CreateContainer(client pb.RuntimeServiceClient, opts createOptions) error { - config, err := loadContainerConfig(opts.configPath) - if err != nil { - return err - } - - // Override the name by the one specified through CLI - if opts.name != "" { - config.Metadata.Name = opts.name - } - - for k, v := range opts.labels { - config.Labels[k] = v - } - - r, err := client.CreateContainer(context.Background(), &pb.CreateContainerRequest{ - PodSandboxId: opts.podID, - Config: config, - // TODO(runcom): this is missing PodSandboxConfig!!! - // we should/could find a way to retrieve it from the fs and set it here - }) - if err != nil { - return err - } - fmt.Println(r.ContainerId) - return nil -} - -// StartContainer sends a StartContainerRequest to the server, and parses -// the returned StartContainerResponse. -func StartContainer(client pb.RuntimeServiceClient, ID string) error { - if ID == "" { - return fmt.Errorf("ID cannot be empty") - } - _, err := client.StartContainer(context.Background(), &pb.StartContainerRequest{ - ContainerId: ID, - }) - if err != nil { - return err - } - fmt.Println(ID) - return nil -} - -// StopContainer sends a StopContainerRequest to the server, and parses -// the returned StopContainerResponse. -func StopContainer(client pb.RuntimeServiceClient, ID string, timeout int64) error { - if ID == "" { - return fmt.Errorf("ID cannot be empty") - } - _, err := client.StopContainer(context.Background(), &pb.StopContainerRequest{ - ContainerId: ID, - Timeout: timeout, - }) - if err != nil { - return err - } - fmt.Println(ID) - return nil -} - -// RemoveContainer sends a RemoveContainerRequest to the server, and parses -// the returned RemoveContainerResponse. -func RemoveContainer(client pb.RuntimeServiceClient, ID string) error { - if ID == "" { - return fmt.Errorf("ID cannot be empty") - } - _, err := client.RemoveContainer(context.Background(), &pb.RemoveContainerRequest{ - ContainerId: ID, - }) - if err != nil { - return err - } - fmt.Println(ID) - return nil -} - -// ContainerStatus sends a ContainerStatusRequest to the server, and parses -// the returned ContainerStatusResponse. -func ContainerStatus(client pb.RuntimeServiceClient, ID string) error { - if ID == "" { - return fmt.Errorf("ID cannot be empty") - } - r, err := client.ContainerStatus(context.Background(), &pb.ContainerStatusRequest{ - ContainerId: ID}) - if err != nil { - return err - } - fmt.Printf("ID: %s\n", r.Status.Id) - if r.Status.Metadata != nil { - if r.Status.Metadata.Name != "" { - fmt.Printf("Name: %s\n", r.Status.Metadata.Name) - } - fmt.Printf("Attempt: %v\n", r.Status.Metadata.Attempt) - } - // TODO(mzylowski): print it prettier - fmt.Printf("Status: %s\n", r.Status.State) - ctm := time.Unix(0, r.Status.CreatedAt) - fmt.Printf("Created: %v\n", ctm) - stm := time.Unix(0, r.Status.StartedAt) - fmt.Printf("Started: %v\n", stm) - ftm := time.Unix(0, r.Status.FinishedAt) - fmt.Printf("Finished: %v\n", ftm) - fmt.Printf("Exit Code: %v\n", r.Status.ExitCode) - fmt.Printf("Reason: %v\n", r.Status.Reason) - if r.Status.Image != nil { - fmt.Printf("Image: %v\n", r.Status.Image.Image) - } - fmt.Printf("ImageRef: %v\n", r.Status.ImageRef) - - return nil -} - -// ExecSync sends an ExecSyncRequest to the server, and parses -// the returned ExecSyncResponse. -func ExecSync(client pb.RuntimeServiceClient, ID string, cmd []string, timeout int64) error { - if ID == "" { - return fmt.Errorf("ID cannot be empty") - } - r, err := client.ExecSync(context.Background(), &pb.ExecSyncRequest{ - ContainerId: ID, - Cmd: cmd, - Timeout: timeout, - }) - if err != nil { - return err - } - fmt.Println("Stdout:") - fmt.Println(string(r.Stdout)) - fmt.Println("Stderr:") - fmt.Println(string(r.Stderr)) - fmt.Printf("Exit code: %v\n", r.ExitCode) - - return nil -} - -// Exec sends an ExecRequest to the server, and parses -// the returned ExecResponse. -func Exec(client pb.RuntimeServiceClient, ID string, tty bool, stdin bool, urlOnly bool, cmd []string) error { - if ID == "" { - return fmt.Errorf("ID cannot be empty") - } - r, err := client.Exec(context.Background(), &pb.ExecRequest{ - ContainerId: ID, - Cmd: cmd, - Tty: tty, - Stdin: stdin, - }) - if err != nil { - return err - } - - if urlOnly { - fmt.Println("URL:") - fmt.Println(r.Url) - return nil - } - - execURL, err := url.Parse(r.Url) - if err != nil { - return err - } - - streamExec, err := remotecommand.NewExecutor(&restclient.Config{}, "GET", execURL) - if err != nil { - return err - } - - options := remotecommand.StreamOptions{ - SupportedProtocols: remocommandconsts.SupportedStreamingProtocols, - Stdout: os.Stdout, - Stderr: os.Stderr, - Tty: tty, - } - - if stdin { - options.Stdin = os.Stdin - } - - return streamExec.Stream(options) -} - -// ListContainers sends a ListContainerRequest to the server, and parses -// the returned ListContainerResponse. -func ListContainers(client pb.RuntimeServiceClient, opts listOptions) error { - filter := &pb.ContainerFilter{} - if opts.id != "" { - filter.Id = opts.id - } - if opts.podID != "" { - filter.PodSandboxId = opts.podID - } - if opts.state != "" { - st := &pb.ContainerStateValue{} - st.State = pb.ContainerState_CONTAINER_UNKNOWN - switch opts.state { - case "created": - st.State = pb.ContainerState_CONTAINER_CREATED - filter.State = st - case "running": - st.State = pb.ContainerState_CONTAINER_RUNNING - filter.State = st - case "stopped": - st.State = pb.ContainerState_CONTAINER_EXITED - filter.State = st - default: - log.Fatalf("--state should be one of created, running or stopped") - } - } - if opts.labels != nil { - filter.LabelSelector = opts.labels - } - r, err := client.ListContainers(context.Background(), &pb.ListContainersRequest{ - Filter: filter, - }) - if err != nil { - return err - } - for _, c := range r.GetContainers() { - if opts.quiet { - fmt.Println(c.Id) - continue - } - fmt.Printf("ID: %s\n", c.Id) - fmt.Printf("Pod: %s\n", c.PodSandboxId) - if c.Metadata != nil { - if c.Metadata.Name != "" { - fmt.Printf("Name: %s\n", c.Metadata.Name) - } - fmt.Printf("Attempt: %v\n", c.Metadata.Attempt) - } - fmt.Printf("Status: %s\n", c.State) - if c.Image != nil { - fmt.Printf("Image: %s\n", c.Image.Image) - } - ctm := time.Unix(0, c.CreatedAt) - fmt.Printf("Created: %v\n", ctm) - if c.Labels != nil { - fmt.Println("Labels:") - for _, k := range getSortedKeys(c.Labels) { - fmt.Printf("\t%s -> %s\n", k, c.Labels[k]) - } - } - if c.Annotations != nil { - fmt.Println("Annotations:") - for _, k := range getSortedKeys(c.Annotations) { - fmt.Printf("\t%s -> %s\n", k, c.Annotations[k]) - } - } - fmt.Println() - } - return nil -} - -var inspectContainerCommand = cli.Command{ - Name: "inspect", - Usage: "get container info from crio daemon", - Flags: []cli.Flag{ - cli.StringFlag{ - Name: "id", - Value: "", - Usage: "id of the container", - }, - }, - Action: func(context *cli.Context) error { - ID := context.String("id") - if ID == "" { - return fmt.Errorf("ID cannot be empty") - } - c, err := client.New(context.GlobalString("connect")) - if err != nil { - return err - } - - cInfo, err := c.ContainerInfo(ID) - if err != nil { - return err - } - - jsonBytes, err := json.MarshalIndent(cInfo, "", " ") - if err != nil { - return err - } - fmt.Println(string(jsonBytes)) - return nil - }, -} diff --git a/cmd/crioctl/image.go b/cmd/crioctl/image.go deleted file mode 100644 index 426c67e9d..000000000 --- a/cmd/crioctl/image.go +++ /dev/null @@ -1,173 +0,0 @@ -package main - -import ( - "fmt" - - "github.com/urfave/cli" - "golang.org/x/net/context" - pb "k8s.io/kubernetes/pkg/kubelet/apis/cri/v1alpha1/runtime" -) - -var imageCommand = cli.Command{ - Name: "image", - Subcommands: []cli.Command{ - pullImageCommand, - listImageCommand, - imageStatusCommand, - removeImageCommand, - }, -} - -var pullImageCommand = cli.Command{ - Name: "pull", - Usage: "pull an image", - Action: func(context *cli.Context) error { - // Set up a connection to the server. - conn, err := getClientConnection(context) - if err != nil { - return fmt.Errorf("failed to connect: %v", err) - } - defer conn.Close() - client := pb.NewImageServiceClient(conn) - - _, err = PullImage(client, context.Args().Get(0)) - if err != nil { - return fmt.Errorf("pulling image failed: %v", err) - } - return nil - }, -} - -var listImageCommand = cli.Command{ - Name: "list", - Usage: "list images", - Flags: []cli.Flag{ - cli.BoolFlag{ - Name: "quiet", - Usage: "list only image IDs", - }, - }, - Action: func(context *cli.Context) error { - // Set up a connection to the server. - conn, err := getClientConnection(context) - if err != nil { - return fmt.Errorf("failed to connect: %v", err) - } - defer conn.Close() - client := pb.NewImageServiceClient(conn) - - r, err := ListImages(client, context.Args().Get(0)) - if err != nil { - return fmt.Errorf("listing images failed: %v", err) - } - quiet := context.Bool("quiet") - for _, image := range r.Images { - if quiet { - fmt.Printf("%s\n", image.Id) - continue - } - fmt.Printf("ID: %s\n", image.Id) - for _, tag := range image.RepoTags { - fmt.Printf("Tag: %s\n", tag) - } - for _, digest := range image.RepoDigests { - fmt.Printf("Digest: %s\n", digest) - } - if image.Size_ != 0 { - fmt.Printf("Size: %d\n", image.Size_) - } - } - return nil - }, -} - -var imageStatusCommand = cli.Command{ - Name: "status", - Usage: "return the status of an image", - Flags: []cli.Flag{ - cli.StringFlag{ - Name: "id", - Usage: "id of the image", - }, - }, - Action: func(context *cli.Context) error { - // Set up a connection to the server. - conn, err := getClientConnection(context) - if err != nil { - return fmt.Errorf("failed to connect: %v", err) - } - defer conn.Close() - client := pb.NewImageServiceClient(conn) - - r, err := ImageStatus(client, context.String("id")) - if err != nil { - return fmt.Errorf("image status request failed: %v", err) - } - image := r.Image - if image == nil { - return fmt.Errorf("no such image present") - } - fmt.Printf("ID: %s\n", image.Id) - for _, tag := range image.RepoTags { - fmt.Printf("Tag: %s\n", tag) - } - for _, digest := range image.RepoDigests { - fmt.Printf("Digest: %s\n", digest) - } - fmt.Printf("Size: %d\n", image.Size_) - return nil - }, -} -var removeImageCommand = cli.Command{ - Name: "remove", - Usage: "remove an image", - Flags: []cli.Flag{ - cli.StringFlag{ - Name: "id", - Value: "", - Usage: "id of the image", - }, - }, - Action: func(context *cli.Context) error { - // Set up a connection to the server. - conn, err := getClientConnection(context) - if err != nil { - return fmt.Errorf("failed to connect: %v", err) - } - defer conn.Close() - client := pb.NewImageServiceClient(conn) - - _, err = RemoveImage(client, context.String("id")) - if err != nil { - return fmt.Errorf("removing the image failed: %v", err) - } - return nil - }, -} - -// PullImage sends a PullImageRequest to the server, and parses -// the returned PullImageResponse. -func PullImage(client pb.ImageServiceClient, image string) (*pb.PullImageResponse, error) { - return client.PullImage(context.Background(), &pb.PullImageRequest{Image: &pb.ImageSpec{Image: image}}) -} - -// ListImages sends a ListImagesRequest to the server, and parses -// the returned ListImagesResponse. -func ListImages(client pb.ImageServiceClient, image string) (*pb.ListImagesResponse, error) { - return client.ListImages(context.Background(), &pb.ListImagesRequest{Filter: &pb.ImageFilter{Image: &pb.ImageSpec{Image: image}}}) -} - -// ImageStatus sends an ImageStatusRequest to the server, and parses -// the returned ImageStatusResponse. -func ImageStatus(client pb.ImageServiceClient, image string) (*pb.ImageStatusResponse, error) { - return client.ImageStatus(context.Background(), &pb.ImageStatusRequest{Image: &pb.ImageSpec{Image: image}}) -} - -// RemoveImage sends a RemoveImageRequest to the server, and parses -// the returned RemoveImageResponse. -func RemoveImage(client pb.ImageServiceClient, image string) (*pb.RemoveImageResponse, error) { - if image == "" { - return nil, fmt.Errorf("ID cannot be empty") - } - return client.RemoveImage(context.Background(), &pb.RemoveImageRequest{Image: &pb.ImageSpec{Image: image}}) -} diff --git a/cmd/crioctl/info.go b/cmd/crioctl/info.go deleted file mode 100644 index 1f06f594a..000000000 --- a/cmd/crioctl/info.go +++ /dev/null @@ -1,31 +0,0 @@ -package main - -import ( - "encoding/json" - "fmt" - - "github.com/kubernetes-incubator/cri-o/client" - "github.com/urfave/cli" -) - -var infoCommand = cli.Command{ - Name: "info", - Usage: "get crio daemon info", - Action: func(context *cli.Context) error { - c, err := client.New(context.GlobalString("connect")) - if err != nil { - return err - } - di, err := c.DaemonInfo() - if err != nil { - return err - } - - jsonBytes, err := json.MarshalIndent(di, "", " ") - if err != nil { - return err - } - fmt.Println(string(jsonBytes)) - return nil - }, -} diff --git a/cmd/crioctl/main.go b/cmd/crioctl/main.go deleted file mode 100644 index 3d77867fe..000000000 --- a/cmd/crioctl/main.go +++ /dev/null @@ -1,113 +0,0 @@ -package main - -import ( - "encoding/json" - "fmt" - "net" - "os" - "strings" - "time" - - "github.com/sirupsen/logrus" - "github.com/urfave/cli" - "google.golang.org/grpc" - pb "k8s.io/kubernetes/pkg/kubelet/apis/cri/v1alpha1/runtime" -) - -// This is populated by the Makefile from the VERSION file -// in the repository -var version = "" - -// gitCommit is the commit that the binary is being built from. -// It will be populated by the Makefile. -var gitCommit = "" - -func getClientConnection(context *cli.Context) (*grpc.ClientConn, error) { - conn, err := grpc.Dial(context.GlobalString("connect"), grpc.WithInsecure(), grpc.WithTimeout(context.GlobalDuration("timeout")), - grpc.WithDialer(func(addr string, timeout time.Duration) (net.Conn, error) { - return net.DialTimeout("unix", addr, timeout) - })) - if err != nil { - return nil, fmt.Errorf("failed to connect: %v", err) - } - return conn, nil -} - -func openFile(path string) (*os.File, error) { - f, err := os.Open(path) - if err != nil { - if os.IsNotExist(err) { - return nil, fmt.Errorf("config at %s not found", path) - } - return nil, err - } - return f, nil -} - -func loadPodSandboxConfig(path string) (*pb.PodSandboxConfig, error) { - f, err := openFile(path) - if err != nil { - return nil, err - } - defer f.Close() - - var config pb.PodSandboxConfig - if err := json.NewDecoder(f).Decode(&config); err != nil { - return nil, err - } - return &config, nil -} - -func loadContainerConfig(path string) (*pb.ContainerConfig, error) { - f, err := openFile(path) - if err != nil { - return nil, err - } - defer f.Close() - - var config pb.ContainerConfig - if err := json.NewDecoder(f).Decode(&config); err != nil { - return nil, err - } - return &config, nil -} - -func main() { - app := cli.NewApp() - var v []string - if version != "" { - v = append(v, version) - } - if gitCommit != "" { - v = append(v, fmt.Sprintf("commit: %s", gitCommit)) - } - - app.Name = "crioctl" - app.Usage = "client for crio" - app.Version = strings.Join(v, "\n") - - app.Commands = []cli.Command{ - podSandboxCommand, - containerCommand, - runtimeVersionCommand, - imageCommand, - infoCommand, - } - - app.Flags = []cli.Flag{ - cli.StringFlag{ - Name: "connect", - Value: "/var/run/crio.sock", - Usage: "Socket to connect to", - }, - cli.DurationFlag{ - Name: "timeout", - Value: 10 * time.Second, - Usage: "Timeout of connecting to server", - }, - } - - if err := app.Run(os.Args); err != nil { - logrus.Fatal(err) - } -} diff --git a/cmd/crioctl/sandbox.go b/cmd/crioctl/sandbox.go deleted file mode 100644 index e44183be3..000000000 --- a/cmd/crioctl/sandbox.go +++ /dev/null @@ -1,386 +0,0 @@ -package main - -import ( - "fmt" - "log" - "sort" - "strings" - "time" - - "github.com/urfave/cli" - "golang.org/x/net/context" - pb "k8s.io/kubernetes/pkg/kubelet/apis/cri/v1alpha1/runtime" -) - -var podSandboxCommand = cli.Command{ - Name: "pod", - Subcommands: []cli.Command{ - runPodSandboxCommand, - stopPodSandboxCommand, - removePodSandboxCommand, - podSandboxStatusCommand, - listPodSandboxCommand, - }, -} - -var runPodSandboxCommand = cli.Command{ - Name: "run", - Usage: "run a pod", - Flags: []cli.Flag{ - cli.StringFlag{ - Name: "config", - Value: "", - Usage: "the path of a pod sandbox config file", - }, - cli.StringFlag{ - Name: "name", - Value: "", - Usage: "the name of the pod sandbox", - }, - cli.StringSliceFlag{ - Name: "label", - Usage: "add key=value labels to the container", - }, - }, - Action: func(context *cli.Context) error { - // Set up a connection to the server. - conn, err := getClientConnection(context) - if err != nil { - return fmt.Errorf("failed to connect: %v", err) - } - defer conn.Close() - client := pb.NewRuntimeServiceClient(conn) - - opts := createOptions{ - configPath: context.String("config"), - name: context.String("name"), - labels: make(map[string]string), - } - - for _, l := range context.StringSlice("label") { - pair := strings.Split(l, "=") - if len(pair) != 2 { - return fmt.Errorf("incorrectly specified label: %v", l) - } - opts.labels[pair[0]] = pair[1] - } - - // Test RuntimeServiceClient.RunPodSandbox - err = RunPodSandbox(client, opts) - if err != nil { - return fmt.Errorf("Creating the pod sandbox failed: %v", err) - } - return nil - }, -} - -var stopPodSandboxCommand = cli.Command{ - Name: "stop", - Usage: "stop a pod sandbox", - Flags: []cli.Flag{ - cli.StringFlag{ - Name: "id", - Value: "", - Usage: "id of the pod sandbox", - }, - }, - Action: func(context *cli.Context) error { - // Set up a connection to the server. - conn, err := getClientConnection(context) - if err != nil { - return fmt.Errorf("failed to connect: %v", err) - } - defer conn.Close() - client := pb.NewRuntimeServiceClient(conn) - - err = StopPodSandbox(client, context.String("id")) - if err != nil { - return fmt.Errorf("stopping the pod sandbox failed: %v", err) - } - return nil - }, -} - -var removePodSandboxCommand = cli.Command{ - Name: "remove", - Usage: "remove a pod sandbox", - Flags: []cli.Flag{ - cli.StringFlag{ - Name: "id", - Value: "", - Usage: "id of the pod sandbox", - }, - }, - Action: func(context *cli.Context) error { - // Set up a connection to the server. - conn, err := getClientConnection(context) - if err != nil { - return fmt.Errorf("failed to connect: %v", err) - } - defer conn.Close() - client := pb.NewRuntimeServiceClient(conn) - - err = RemovePodSandbox(client, context.String("id")) - if err != nil { - return fmt.Errorf("removing the pod sandbox failed: %v", err) - } - return nil - }, -} - -var podSandboxStatusCommand = cli.Command{ - Name: "status", - Usage: "return the status of a pod", - Flags: []cli.Flag{ - cli.StringFlag{ - Name: "id", - Value: "", - Usage: "id of the pod", - }, - }, - Action: func(context *cli.Context) error { - // Set up a connection to the server. - conn, err := getClientConnection(context) - if err != nil { - return fmt.Errorf("failed to connect: %v", err) - } - defer conn.Close() - client := pb.NewRuntimeServiceClient(conn) - - err = PodSandboxStatus(client, context.String("id")) - if err != nil { - return fmt.Errorf("getting the pod sandbox status failed: %v", err) - } - return nil - }, -} - -var listPodSandboxCommand = cli.Command{ - Name: "list", - Usage: "list pod sandboxes", - Flags: []cli.Flag{ - cli.StringFlag{ - Name: "id", - Value: "", - Usage: "filter by pod sandbox id", - }, - cli.StringFlag{ - Name: "state", - Value: "", - Usage: "filter by pod sandbox state", - }, - cli.StringSliceFlag{ - Name: "label", - Usage: "filter by key=value label", - }, - cli.BoolFlag{ - Name: "quiet", - Usage: "list only pod IDs", - }, - }, - Action: func(context *cli.Context) error { - // Set up a connection to the server. - conn, err := getClientConnection(context) - if err != nil { - return fmt.Errorf("failed to connect: %v", err) - } - defer conn.Close() - client := pb.NewRuntimeServiceClient(conn) - - opts := listOptions{ - id: context.String("id"), - state: context.String("state"), - quiet: context.Bool("quiet"), - labels: make(map[string]string), - } - - for _, l := range context.StringSlice("label") { - pair := strings.Split(l, "=") - if len(pair) != 2 { - return fmt.Errorf("incorrectly specified label: %v", l) - } - opts.labels[pair[0]] = pair[1] - } - - err = ListPodSandboxes(client, opts) - if err != nil { - return fmt.Errorf("listing pod sandboxes failed: %v", err) - } - return nil - }, -} - -// RunPodSandbox sends a RunPodSandboxRequest to the server, and parses -// the returned RunPodSandboxResponse. -func RunPodSandbox(client pb.RuntimeServiceClient, opts createOptions) error { - config, err := loadPodSandboxConfig(opts.configPath) - if err != nil { - return err - } - - // Override the name by the one specified through CLI - if opts.name != "" { - config.Metadata.Name = opts.name - } - - for k, v := range opts.labels { - config.Labels[k] = v - } - - r, err := client.RunPodSandbox(context.Background(), &pb.RunPodSandboxRequest{Config: config}) - if err != nil { - return err - } - fmt.Println(r.PodSandboxId) - return nil -} - -// StopPodSandbox sends a StopPodSandboxRequest to the server, and parses -// the returned StopPodSandboxResponse. -func StopPodSandbox(client pb.RuntimeServiceClient, ID string) error { - if ID == "" { - return fmt.Errorf("ID cannot be empty") - } - _, err := client.StopPodSandbox(context.Background(), &pb.StopPodSandboxRequest{PodSandboxId: ID}) - if err != nil { - return err - } - fmt.Println(ID) - return nil -} - -// RemovePodSandbox sends a RemovePodSandboxRequest to the server, and parses -// the returned RemovePodSandboxResponse. -func RemovePodSandbox(client pb.RuntimeServiceClient, ID string) error { - if ID == "" { - return fmt.Errorf("ID cannot be empty") - } - _, err := client.RemovePodSandbox(context.Background(), &pb.RemovePodSandboxRequest{PodSandboxId: ID}) - if err != nil { - return err - } - fmt.Println(ID) - return nil -} - -// PodSandboxStatus sends a PodSandboxStatusRequest to the server, and parses -// the returned PodSandboxStatusResponse. -func PodSandboxStatus(client pb.RuntimeServiceClient, ID string) error { - if ID == "" { - return fmt.Errorf("ID cannot be empty") - } - r, err := client.PodSandboxStatus(context.Background(), &pb.PodSandboxStatusRequest{PodSandboxId: ID}) - if err != nil { - return err - } - fmt.Printf("ID: %s\n", r.Status.Id) - if r.Status.Metadata != nil { - if r.Status.Metadata.Name != "" { - fmt.Printf("Name: %s\n", r.Status.Metadata.Name) - } - if r.Status.Metadata.Uid != "" { - fmt.Printf("UID: %s\n", r.Status.Metadata.Uid) - } - if r.Status.Metadata.Namespace != "" { - fmt.Printf("Namespace: %s\n", r.Status.Metadata.Namespace) - } - fmt.Printf("Attempt: %v\n", r.Status.Metadata.Attempt) - } - fmt.Printf("Status: %s\n", r.Status.State) - ctm := time.Unix(0, r.Status.CreatedAt) - fmt.Printf("Created: %v\n", ctm) - if r.Status.Network != nil { - fmt.Printf("IP Address: %v\n", r.Status.Network.Ip) - } - if r.Status.Labels != nil { - fmt.Println("Labels:") - for _, k := range getSortedKeys(r.Status.Labels) { - fmt.Printf("\t%s -> %s\n", k, r.Status.Labels[k]) - } - } - if r.Status.Annotations != nil { - fmt.Println("Annotations:") - for _, k := range getSortedKeys(r.Status.Annotations) { - fmt.Printf("\t%s -> %s\n", k, r.Status.Annotations[k]) - } - } - return nil -} - -// ListPodSandboxes sends a ListPodSandboxRequest to the server, and parses -// the returned ListPodSandboxResponse. -func ListPodSandboxes(client pb.RuntimeServiceClient, opts listOptions) error { - filter := &pb.PodSandboxFilter{} - if opts.id != "" { - filter.Id = opts.id - } - if opts.state != "" { - st := &pb.PodSandboxStateValue{} - st.State = pb.PodSandboxState_SANDBOX_NOTREADY - switch opts.state { - case "ready": - st.State = pb.PodSandboxState_SANDBOX_READY - filter.State = st - case "notready": - st.State = pb.PodSandboxState_SANDBOX_NOTREADY - filter.State = st - default: - log.Fatalf("--state should be ready or notready") - } - } - if opts.labels != nil { - filter.LabelSelector = opts.labels - } - r, err := client.ListPodSandbox(context.Background(), &pb.ListPodSandboxRequest{ - Filter: filter, - }) - if err != nil { - return err - } - for _, pod := range r.Items { - if opts.quiet { - fmt.Println(pod.Id) - continue - } - fmt.Printf("ID: %s\n", pod.Id) - if pod.Metadata != nil { - if pod.Metadata.Name != "" { - fmt.Printf("Name: %s\n", pod.Metadata.Name) - } - if pod.Metadata.Uid != "" { - fmt.Printf("UID: %s\n", pod.Metadata.Uid) - } - if pod.Metadata.Namespace != "" { - fmt.Printf("Namespace: %s\n", pod.Metadata.Namespace) - } - fmt.Printf("Attempt: %v\n", pod.Metadata.Attempt) - } - fmt.Printf("Status: %s\n", pod.State) - ctm := time.Unix(0, pod.CreatedAt) - fmt.Printf("Created: %v\n", ctm) - if pod.Labels != nil { - fmt.Println("Labels:") - for _, k := range getSortedKeys(pod.Labels) { - fmt.Printf("\t%s -> %s\n", k, pod.Labels[k]) - } - } - if pod.Annotations != nil { - fmt.Println("Annotations:") - for _, k := range getSortedKeys(pod.Annotations) { - fmt.Printf("\t%s -> %s\n", k, pod.Annotations[k]) - } - } - fmt.Println() - } - return nil -} - -func getSortedKeys(m map[string]string) []string { - var keys []string - for k := range m { - keys = append(keys, k) - } - sort.Strings(keys) - - return keys -} diff --git a/cmd/crioctl/system.go b/cmd/crioctl/system.go deleted file mode 100644 index 7e04161c2..000000000 --- a/cmd/crioctl/system.go +++ /dev/null @@ -1,41 +0,0 @@ -package main - -import ( - "fmt" - - "github.com/urfave/cli" - "golang.org/x/net/context" - pb "k8s.io/kubernetes/pkg/kubelet/apis/cri/v1alpha1/runtime" -) - -var runtimeVersionCommand = cli.Command{ - Name: "runtimeversion", - Usage: "get runtime version information", - Action: func(context *cli.Context) error { - // Set up a connection to the server. - conn, err := getClientConnection(context) - if err != nil { - return fmt.Errorf("failed to connect: %v", err) - } - defer conn.Close() - client := pb.NewRuntimeServiceClient(conn) - - // Test RuntimeServiceClient.Version - version := "v1alpha1" - err = Version(client, version) - if err != nil { - return fmt.Errorf("Getting the runtime version failed: %v", err) - } - return nil - }, -} - -// Version sends a VersionRequest to the server, and parses the returned VersionResponse. -func Version(client pb.RuntimeServiceClient, version string) error { - r, err := client.Version(context.Background(), &pb.VersionRequest{Version: version}) - if err != nil { - return err - } - fmt.Printf("VersionResponse: Version: %s, RuntimeName: %s, RuntimeVersion: %s, RuntimeApiVersion: %s\n", r.Version, r.RuntimeName, r.RuntimeVersion, r.RuntimeApiVersion) - return nil -} -- cgit v1.2.3-54-g00ecf From c13f61798aa7bcf7b4de7ee31aa30148a3b08d97 Mon Sep 17 00:00:00 2001 From: Matthew Heon Date: Wed, 1 Nov 2017 13:22:04 -0400 Subject: Prune Server package. Convert to new github location. Signed-off-by: Matthew Heon --- CONTRIBUTING.md | 8 +- Dockerfile | 4 +- Makefile | 4 +- cmd/kpod/common.go | 11 +- cmd/kpod/diff.go | 2 +- cmd/kpod/history.go | 2 +- cmd/kpod/images.go | 6 +- cmd/kpod/info.go | 2 +- cmd/kpod/inspect.go | 6 +- cmd/kpod/kill.go | 2 +- cmd/kpod/load.go | 2 +- cmd/kpod/login.go | 2 +- cmd/kpod/logout.go | 2 +- cmd/kpod/logs.go | 2 +- cmd/kpod/mount.go | 2 +- cmd/kpod/pause.go | 2 +- cmd/kpod/ps.go | 6 +- cmd/kpod/pull.go | 4 +- cmd/kpod/push.go | 4 +- cmd/kpod/rename.go | 2 +- cmd/kpod/rm.go | 2 +- cmd/kpod/save.go | 2 +- cmd/kpod/stats.go | 4 +- cmd/kpod/stop.go | 2 +- cmd/kpod/tag.go | 2 +- cmd/kpod/unpause.go | 2 +- cmd/kpod/wait.go | 2 +- contrib/rpm/Makefile | 14 - contrib/rpm/crio.spec | 76 -- contrib/systemd/crio-shutdown.service | 14 - contrib/systemd/crio.service | 24 - contrib/test/integration/README.md | 21 - contrib/test/integration/ansible.cfg | 359 ------ contrib/test/integration/build/bats.yml | 17 - contrib/test/integration/build/cri-o.yml | 79 -- contrib/test/integration/build/cri-tools.yml | 16 - contrib/test/integration/build/kubernetes.yml | 63 - contrib/test/integration/build/plugins.yml | 50 - contrib/test/integration/build/runc.yml | 23 - .../test/integration/callback_plugins/default.py | 156 --- contrib/test/integration/e2e.yml | 57 - contrib/test/integration/golang.yml | 51 - contrib/test/integration/main.yml | 58 - contrib/test/integration/results.yml | 62 - contrib/test/integration/system.yml | 117 -- contrib/test/integration/test.yml | 25 - contrib/test/integration/vars.yml | 8 - contrib/test/requirements.txt | 54 - contrib/test/venv-ansible-playbook.sh | 106 -- kubernetes.md | 105 -- libkpod/config.go | 2 +- libkpod/container.go | 6 +- libkpod/container_data.go | 6 +- libkpod/container_server.go | 10 +- libkpod/kill.go | 4 +- libkpod/pause.go | 2 +- libkpod/remove.go | 2 +- libkpod/rename.go | 4 +- libkpod/sandbox/sandbox.go | 2 +- libkpod/stats.go | 2 +- libkpod/stop.go | 2 +- libkpod/wait.go | 2 +- libpod/container.go | 2 +- libpod/diff.go | 2 +- libpod/images/image_data.go | 2 +- libpod/in_memory_state.go | 2 +- libpod/oci.go | 2 +- libpod/runtime_img.go | 2 +- oci/oci.go | 2 +- server/apparmor/aaparser.go | 89 -- server/apparmor/apparmor_common.go | 14 - server/apparmor/apparmor_supported.go | 145 --- server/apparmor/apparmor_unsupported.go | 18 - server/apparmor/template.go | 45 - server/config.go | 112 -- server/container_attach.go | 147 --- server/container_create.go | 1215 -------------------- server/container_exec.go | 108 -- server/container_execsync.go | 46 - server/container_list.go | 112 -- server/container_portforward.go | 91 -- server/container_remove.go | 20 - server/container_start.go | 43 - server/container_stats.go | 14 - server/container_stats_list.go | 13 - server/container_status.go | 102 -- server/container_stop.go | 19 - server/container_updateruntimeconfig.go | 11 - server/image_fs_info.go | 13 - server/image_list.go | 41 - server/image_pull.go | 108 -- server/image_remove.go | 52 - server/image_status.go | 53 - server/inspect.go | 105 -- server/inspect_test.go | 235 ---- server/naming.go | 86 -- server/runtime_status.go | 41 - server/sandbox_list.go | 94 -- server/sandbox_network.go | 70 -- server/sandbox_remove.go | 98 -- server/sandbox_run.go | 615 ---------- server/sandbox_status.go | 41 - server/sandbox_stop.go | 114 -- server/seccomp/seccomp.go | 165 --- server/seccomp/seccomp_unsupported.go | 20 - server/seccomp/types.go | 93 -- server/secrets.go | 162 --- server/server.go | 423 ------- server/utils.go | 183 --- server/version.go | 27 - tutorial.md | 425 ------- 111 files changed, 75 insertions(+), 7257 deletions(-) delete mode 100644 contrib/rpm/Makefile delete mode 100644 contrib/rpm/crio.spec delete mode 100644 contrib/systemd/crio-shutdown.service delete mode 100644 contrib/systemd/crio.service delete mode 100644 contrib/test/integration/README.md delete mode 100644 contrib/test/integration/ansible.cfg delete mode 100644 contrib/test/integration/build/bats.yml delete mode 100644 contrib/test/integration/build/cri-o.yml delete mode 100644 contrib/test/integration/build/cri-tools.yml delete mode 100644 contrib/test/integration/build/kubernetes.yml delete mode 100644 contrib/test/integration/build/plugins.yml delete mode 100644 contrib/test/integration/build/runc.yml delete mode 100644 contrib/test/integration/callback_plugins/default.py delete mode 100644 contrib/test/integration/e2e.yml delete mode 100644 contrib/test/integration/golang.yml delete mode 100644 contrib/test/integration/main.yml delete mode 100644 contrib/test/integration/results.yml delete mode 100644 contrib/test/integration/system.yml delete mode 100644 contrib/test/integration/test.yml delete mode 100644 contrib/test/integration/vars.yml delete mode 100644 contrib/test/requirements.txt delete mode 100755 contrib/test/venv-ansible-playbook.sh delete mode 100644 kubernetes.md delete mode 100644 server/apparmor/aaparser.go delete mode 100644 server/apparmor/apparmor_common.go delete mode 100644 server/apparmor/apparmor_supported.go delete mode 100644 server/apparmor/apparmor_unsupported.go delete mode 100644 server/apparmor/template.go delete mode 100644 server/config.go delete mode 100644 server/container_attach.go delete mode 100644 server/container_create.go delete mode 100644 server/container_exec.go delete mode 100644 server/container_execsync.go delete mode 100644 server/container_list.go delete mode 100644 server/container_portforward.go delete mode 100644 server/container_remove.go delete mode 100644 server/container_start.go delete mode 100644 server/container_stats.go delete mode 100644 server/container_stats_list.go delete mode 100644 server/container_status.go delete mode 100644 server/container_stop.go delete mode 100644 server/container_updateruntimeconfig.go delete mode 100644 server/image_fs_info.go delete mode 100644 server/image_list.go delete mode 100644 server/image_pull.go delete mode 100644 server/image_remove.go delete mode 100644 server/image_status.go delete mode 100644 server/inspect.go delete mode 100644 server/inspect_test.go delete mode 100644 server/naming.go delete mode 100644 server/runtime_status.go delete mode 100644 server/sandbox_list.go delete mode 100644 server/sandbox_network.go delete mode 100644 server/sandbox_remove.go delete mode 100644 server/sandbox_run.go delete mode 100644 server/sandbox_status.go delete mode 100644 server/sandbox_stop.go delete mode 100644 server/seccomp/seccomp.go delete mode 100644 server/seccomp/seccomp_unsupported.go delete mode 100644 server/seccomp/types.go delete mode 100644 server/secrets.go delete mode 100644 server/server.go delete mode 100644 server/utils.go delete mode 100644 server/version.go delete mode 100644 tutorial.md (limited to 'Makefile') diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index cc549116d..c121ac416 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,4 +1,4 @@ -# Contributing to CRI-O +# Contributing to Libpod We'd love to have you join the community! Below summarizes the processes that we follow. @@ -13,7 +13,7 @@ that we follow. ## Reporting Issues Before reporting an issue, check our backlog of -[open issues](https://github.com/kubernetes-incubator/cri-o/issues) +[open issues](https://github.com/projectatomic/libpod/issues) to see if someone else has already reported it. If so, feel free to add your scenario, or additional information, to the discussion. Or simply "subscribe" to it to be notified when it is updated. @@ -120,9 +120,9 @@ IRC group on `irc.freenode.net` called `cri-o` that has been setup. For discussions around issues/bugs and features, you can use the github -[issues](https://github.com/kubernetes-incubator/cri-o/issues) +[issues](https://github.com/projectatomic/libpod/issues) and -[PRs](https://github.com/kubernetes-incubator/cri-o/pulls) +[PRs](https://github.com/projectatomic/libpod/pulls) tracking system.