From 02da34bb45c494aeb507dd96241bddddef2df07b Mon Sep 17 00:00:00 2001 From: Suraj Narwade Date: Tue, 14 Nov 2017 15:38:51 +0530 Subject: [PATCH] Kompose will read input from stdin Resolves issue #870 for example, ``` $ cat docker-compose.yaml | kompose convert -f - INFO Kubernetes file "frontend-service.yaml" created INFO Kubernetes file "redis-master-service.yaml" created INFO Kubernetes file "redis-slave-service.yaml" created INFO Kubernetes file "frontend-deployment.yaml" created INFO Kubernetes file "redis-master-deployment.yaml" created INFO Kubernetes file "redis-slave-deployment.yaml" created ``` Added integration test for the same. ` --- .travis.yml | 1 + Makefile | 2 + pkg/loader/compose/compose.go | 17 +++++++-- script/test/cmd/cmd_test.go | 30 +++++++++++++++ script/test/fixtures/stdin/output.yml | 53 +++++++++++++++++++++++++++ script/test_k8s/kubernetes.sh | 7 ++++ 6 files changed, 106 insertions(+), 4 deletions(-) create mode 100644 script/test/cmd/cmd_test.go create mode 100644 script/test/fixtures/stdin/output.yml diff --git a/.travis.yml b/.travis.yml index 96be9d65a..42e94319c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -24,6 +24,7 @@ install: - script/test/cmd/fix_detached_head.sh script: + - make bin - make test # Only cross-compile once - if [ "$CROSS_COMPILE" == "yes" ]; then make cross; fi diff --git a/Makefile b/Makefile index a0c0d430e..d9756102d 100644 --- a/Makefile +++ b/Makefile @@ -65,6 +65,8 @@ test-openshift: .PHONY: test-cmd test-cmd: ./script/test/cmd/tests.sh + go test -v github.com/kubernetes/kompose/script/test/cmd + # run all validation tests .PHONY: validate diff --git a/pkg/loader/compose/compose.go b/pkg/loader/compose/compose.go index f868aec7e..73225140f 100644 --- a/pkg/loader/compose/compose.go +++ b/pkg/loader/compose/compose.go @@ -24,6 +24,9 @@ import ( yaml "gopkg.in/yaml.v2" + "bufio" + "os" + "github.com/docker/libcompose/project" "github.com/fatih/structs" "github.com/kubernetes/kompose/pkg/kobject" @@ -199,10 +202,16 @@ func getVersionFromFile(file string) (string, error) { Version string `json:"version"` // This affects YAML as well } var version ComposeVersion - - loadedFile, err := ioutil.ReadFile(file) - if err != nil { - return "", err + var loadedFile []byte + var err error + if file == "-" { + data := bufio.NewScanner(os.Stdin) + loadedFile = data.Bytes() + } else { + loadedFile, err = ioutil.ReadFile(file) + if err != nil { + return "", err + } } err = yaml.Unmarshal(loadedFile, &version) diff --git a/script/test/cmd/cmd_test.go b/script/test/cmd/cmd_test.go new file mode 100644 index 000000000..df37906e1 --- /dev/null +++ b/script/test/cmd/cmd_test.go @@ -0,0 +1,30 @@ +package cmd + +import ( + "bytes" + "fmt" + "io/ioutil" + "os" + "os/exec" + "testing" +) + +var Fixtures = os.ExpandEnv("$GOPATH/src/github.com/kubernetes/kompose/script/test/fixtures/") +var ProjectPath = "$GOPATH/src/github.com/kubernetes/kompose/" +var BinaryLocation = os.ExpandEnv(ProjectPath + "kompose") + +func Test_stdin(t *testing.T) { + + kjson := `{"version": "2","services": {"redis": {"image": "redis:3.0","ports": ["6379"]}}}` + cmdStr := fmt.Sprintf("%s convert --stdout -f - <