Skip to content
Snippets Groups Projects
Commit e47f5a5b authored by bryanl's avatar bryanl
Browse files

use new ksonnet-lib generator for creating lib


Signed-off-by: default avatarbryanl <bryanliles@gmail.com>
parent c8642bf2
No related branches found
No related tags found
No related merge requests found
package generator package generator
import ( import (
"encoding/json" "io/ioutil"
"os"
"github.com/davecgh/go-spew/spew"
"github.com/ksonnet/ksonnet-lib/ksonnet-gen/ksonnet" "github.com/ksonnet/ksonnet-lib/ksonnet-gen/ksonnet"
"github.com/ksonnet/ksonnet-lib/ksonnet-gen/kubespec"
"github.com/ksonnet/ksonnet-lib/ksonnet-gen/kubeversion"
log "github.com/sirupsen/logrus"
) )
var ( var (
// ksonnetEmitter is the function which emits the ksonnet standard library. // ksonnetEmitter is the function which emits the ksonnet standard library.
ksonnetEmitter = ksonnet.Emit ksonnetEmitter = ksonnet.GenerateLib
) )
// KsonnetLib is the ksonnet standard library for a version of swagger. // KsonnetLib is the ksonnet standard library for a version of swagger.
...@@ -29,33 +28,34 @@ type KsonnetLib struct { ...@@ -29,33 +28,34 @@ type KsonnetLib struct {
// Ksonnet generates the ksonnet standard library or returns an error if there was // Ksonnet generates the ksonnet standard library or returns an error if there was
// a problem. // a problem.
func Ksonnet(swaggerData []byte) (*KsonnetLib, error) { func Ksonnet(swaggerData []byte) (*KsonnetLib, error) {
// Deserialize the API object. f, err := ioutil.TempFile("", "")
s := kubespec.APISpec{} if err != nil {
if err := json.Unmarshal(swaggerData, &s); err != nil {
return nil, err return nil, err
} }
s.Text = swaggerData defer os.Remove(f.Name())
// Emit Jsonnet code. _, err = f.Write(swaggerData)
extensionsLibData, k8sLibData, err := ksonnetEmitter(&s, nil, nil)
if err != nil { if err != nil {
return nil, err return nil, err
} }
// Warn where the Kubernetes version is currently only supported as Beta. if err = f.Close(); err != nil {
if kubeversion.Beta(s.Info.Version) { return nil, err
log.Warnf(`! }
============================================================================================
Kubernetes version %s is currently supported as Beta; you may encounter unexpected behavior spew.Dump("---", f.Name(), ksonnetEmitter)
============================================================================================`, s.Info.Version)
lib, err := ksonnetEmitter(f.Name())
if err != nil {
return nil, err
} }
kl := &KsonnetLib{ kl := &KsonnetLib{
K: extensionsLibData, K: lib.Extensions,
K8s: k8sLibData, K8s: lib.K8s,
Swagger: swaggerData, Swagger: swaggerData,
Version: s.Info.Version, Version: lib.Version,
} }
return kl, nil return kl, nil
......
...@@ -4,7 +4,7 @@ import ( ...@@ -4,7 +4,7 @@ import (
"errors" "errors"
"testing" "testing"
"github.com/ksonnet/ksonnet-lib/ksonnet-gen/kubespec" "github.com/ksonnet/ksonnet-lib/ksonnet-gen/ksonnet"
) )
func TestKsonnet(t *testing.T) { func TestKsonnet(t *testing.T) {
...@@ -16,19 +16,22 @@ func TestKsonnet(t *testing.T) { ...@@ -16,19 +16,22 @@ func TestKsonnet(t *testing.T) {
var ( var (
ext = []byte("k") ext = []byte("k")
lib = []byte("k8s") lib = []byte("k8s")
successfulEmit = func(*kubespec.APISpec, *string, *string) ([]byte, []byte, error) { successfulEmit = func(string) (*ksonnet.Lib, error) {
return ext, lib, nil return &ksonnet.Lib{
Version: "v1.7.0",
K8s: lib,
Extensions: ext,
}, nil
} }
failureEmit = func(*kubespec.APISpec, *string, *string) ([]byte, []byte, error) { failureEmit = func(string) (*ksonnet.Lib, error) {
return nil, nil, errors.New("failure") return nil, errors.New("failure")
} }
v170swagger = []byte(`{"info":{"version":"v1.7.0"}}`) v170swagger = []byte(`{"info":{"version":"v1.7.0"}}`)
v180swagger = []byte(`{"info":{"version":"v1.8.0"}}`)
) )
cases := []struct { cases := []struct {
name string name string
emitter func(*kubespec.APISpec, *string, *string) ([]byte, []byte, error) emitter func(string) (*ksonnet.Lib, error)
swaggerData []byte swaggerData []byte
version string version string
isErr bool isErr bool
...@@ -41,6 +44,7 @@ func TestKsonnet(t *testing.T) { ...@@ -41,6 +44,7 @@ func TestKsonnet(t *testing.T) {
}, },
{ {
name: "invalid swagger", name: "invalid swagger",
emitter: failureEmit,
swaggerData: []byte(`{`), swaggerData: []byte(`{`),
isErr: true, isErr: true,
}, },
...@@ -50,16 +54,12 @@ func TestKsonnet(t *testing.T) { ...@@ -50,16 +54,12 @@ func TestKsonnet(t *testing.T) {
swaggerData: v170swagger, swaggerData: v170swagger,
isErr: true, isErr: true,
}, },
{
name: "valid beta swagger",
emitter: successfulEmit,
swaggerData: v180swagger,
version: "v1.8.0",
},
} }
for _, tc := range cases { for _, tc := range cases {
t.Run(tc.name, func(t *testing.T) { t.Run(tc.name, func(t *testing.T) {
ogKSEmitter := ksonnetEmitter
defer func() { ksonnetEmitter = ogKSEmitter }()
ksonnetEmitter = tc.emitter ksonnetEmitter = tc.emitter
kl, err := Ksonnet(tc.swaggerData) kl, err := Ksonnet(tc.swaggerData)
...@@ -70,7 +70,7 @@ func TestKsonnet(t *testing.T) { ...@@ -70,7 +70,7 @@ func TestKsonnet(t *testing.T) {
} }
} else { } else {
if err != nil { if err != nil {
t.Fatal("Ksonnet() returned unexpected error") t.Fatalf("Ksonnet() returned unexpected error: %#v", err)
} }
if got, expected := string(kl.K), string(ext); got != expected { if got, expected := string(kl.K), string(ext); got != expected {
......
...@@ -16,6 +16,7 @@ package lib ...@@ -16,6 +16,7 @@ package lib
import ( import (
"fmt" "fmt"
"io/ioutil"
"os" "os"
"testing" "testing"
...@@ -37,14 +38,6 @@ const ( ...@@ -37,14 +38,6 @@ const (
"definitions": { "definitions": {
} }
}` }`
blankK8sLib = `// AUTOGENERATED from the Kubernetes OpenAPI specification. DO NOT MODIFY.
// Kubernetes version: v1.7.0
{
local hidden = {
},
}
`
) )
var testFS = afero.NewMemMapFs() var testFS = afero.NewMemMapFs()
...@@ -74,7 +67,9 @@ func TestGenerateLibData(t *testing.T) { ...@@ -74,7 +67,9 @@ func TestGenerateLibData(t *testing.T) {
bytes, err := afero.ReadFile(testFS, string(schemaPath)) bytes, err := afero.ReadFile(testFS, string(schemaPath))
if err != nil { if err != nil {
t.Fatalf("Failed to read swagger file at '%s':\n%v", schemaPath, err) t.Fatalf("Failed to read swagger file at '%s':\n%v", schemaPath, err)
} else if actualSwagger := string(bytes); actualSwagger != blankSwaggerData { }
if actualSwagger := string(bytes); actualSwagger != blankSwaggerData {
t.Fatalf("Expected swagger file at '%s' to have value: '%s', got: '%s'", schemaPath, blankSwaggerData, actualSwagger) t.Fatalf("Expected swagger file at '%s' to have value: '%s', got: '%s'", schemaPath, blankSwaggerData, actualSwagger)
} }
...@@ -82,7 +77,14 @@ func TestGenerateLibData(t *testing.T) { ...@@ -82,7 +77,14 @@ func TestGenerateLibData(t *testing.T) {
k8sLibBytes, err := afero.ReadFile(testFS, string(k8sLibPath)) k8sLibBytes, err := afero.ReadFile(testFS, string(k8sLibPath))
if err != nil { if err != nil {
t.Fatalf("Failed to read ksonnet-lib file at '%s':\n%v", k8sLibPath, err) t.Fatalf("Failed to read ksonnet-lib file at '%s':\n%v", k8sLibPath, err)
} else if actualK8sLib := string(k8sLibBytes); actualK8sLib != blankK8sLib { }
blankK8sLib, err := ioutil.ReadFile("testdata/k8s.libsonnet")
if err != nil {
t.Fatalf("Failed to read testdata/k8s.libsonnet: %#v", err)
}
if actualK8sLib := string(k8sLibBytes); actualK8sLib != string(blankK8sLib) {
t.Fatalf("Expected swagger file at '%s' to have value: '%s', got: '%s'", k8sLibPath, blankK8sLib, actualK8sLib) t.Fatalf("Expected swagger file at '%s' to have value: '%s', got: '%s'", k8sLibPath, blankK8sLib, actualK8sLib)
} }
} }
{
"__ksonnet": {
checksum: "f942f2f2b70d842504ffa21b502ad044be92110af159342a352bf1ed4c6221e2",
kubernetesVersion: "1.7.0",
},
local hidden = {
},
}
\ No newline at end of file
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment