mirror of
https://github.com/kubevela/kubevela.git
synced 2026-08-18 03:56:36 +00:00
Merge pull request #965 from captainroy-hy/not-depend-defref
allow traitDefinition to omit definitionRef
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Vendored
+57
@@ -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
|
||||
}
|
||||
},
|
||||
]
|
||||
}
|
||||
}]
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user