Merge pull request #965 from captainroy-hy/not-depend-defref

allow traitDefinition to omit definitionRef
This commit is contained in:
Jianbo Sun
2021-01-29 11:36:22 +08:00
committed by GitHub
4 changed files with 93 additions and 0 deletions
+15
View File
@@ -26,6 +26,11 @@ var (
Name: "routes.test",
Type: types.TypeTrait,
}
ingressCapability = types.Capability{
Name: "ingress.test",
Type: types.TypeTrait,
}
)
// TODO: chagne this into a mock UT to avoid remote call.
@@ -63,6 +68,16 @@ var _ = ginkgo.Describe("Capability", func() {
gomega.Expect(output).To(gomega.ContainSubstring(expectedSubStr2))
})
ginkgo.It("install a trait without definition reference to cluster", func() {
cli := fmt.Sprintf("vela cap add %s/%s", capabilityCenterBasic.Name, ingressCapability.Name)
output, err := e2e.Exec(cli)
gomega.Expect(err).NotTo(gomega.HaveOccurred())
expectedSubStr1 := fmt.Sprintf("Installing %s capability", ingressCapability.Type)
expectedSubStr2 := fmt.Sprintf("Successfully installed capability %s from %s", ingressCapability.Name, capabilityCenterBasic.Name)
gomega.Expect(output).To(gomega.ContainSubstring(expectedSubStr1))
gomega.Expect(output).To(gomega.ContainSubstring(expectedSubStr2))
})
ginkgo.It("list all capabilities", func() {
cli := fmt.Sprintf("vela cap ls %s", capabilityCenterBasic.Name)
output, err := e2e.Exec(cli)
+5
View File
@@ -335,6 +335,11 @@ func GetDefinitionName(dm discoverymapper.DiscoveryMapper, u *unstructured.Unstr
// GetGVKFromDefinition help get Group Version Kind from DefinitionReference
func GetGVKFromDefinition(dm discoverymapper.DiscoveryMapper, definitionRef v1alpha2.DefinitionReference) (schema.GroupVersionKind, error) {
// if given definitionRef is empty or it's a dummy definition, return an empty GVK
// NOTE currently, only TraitDefinition is allowed to omit definitionRef conditionally.
if len(definitionRef.Name) < 1 || definitionRef.Name == Dummy {
return schema.EmptyObjectKind.GroupVersionKind(), nil
}
var gvk schema.GroupVersionKind
groupResource := schema.ParseGroupResource(definitionRef.Name)
gvr := schema.GroupVersionResource{Group: groupResource.Group, Resource: groupResource.Resource, Version: definitionRef.Version}
+16
View File
@@ -792,6 +792,22 @@ func TestGetGVKFromDef(t *testing.T) {
Version: "v2",
Kind: "Abc",
}, gvk)
gvk, err = util.GetGVKFromDefinition(mapper, v1alpha2.DefinitionReference{})
assert.NoError(t, err)
assert.Equal(t, schema.GroupVersionKind{
Group: "",
Version: "",
Kind: "",
}, gvk)
gvk, err = util.GetGVKFromDefinition(mapper, v1alpha2.DefinitionReference{Name: "dummy"})
assert.NoError(t, err)
assert.Equal(t, schema.GroupVersionKind{
Group: "",
Version: "",
Kind: "",
}, gvk)
}
func TestGenTraitName(t *testing.T) {
+57
View File
@@ -0,0 +1,57 @@
apiVersion: core.oam.dev/v1alpha2
kind: TraitDefinition
metadata:
name: ingress.test
spec:
appliesToWorkloads:
- webservice
- worker
extension:
template: |
parameter: {
domain: string
http: [string]: int
}
// trait template can have multiple outputs in one trait
outputs: service: {
apiVersion: "v1"
kind: "Service"
metadata:
name: context.name
spec: {
selector:
"app.oam.dev/component": context.name
ports: [
for k, v in parameter.http {
port: v
targetPort: v
},
]
}
}
outputs: ingress: {
apiVersion: "networking.k8s.io/v1beta1"
kind: "Ingress"
metadata:
name: context.name
spec: {
rules: [{
host: parameter.domain
http: {
paths: [
for k, v in parameter.http {
path: k
backend: {
serviceName: context.name
servicePort: v
}
},
]
}
}]
}
}