mirror of
https://github.com/kubevela/kubevela.git
synced 2026-08-27 16:17:34 +00:00
Feat: add export service (#4841)
Signed-off-by: Somefive <yd219913@alibaba-inc.com> Signed-off-by: Somefive <yd219913@alibaba-inc.com>
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
# Code generated by KubeVela templates. DO NOT EDIT. Please edit the original cue file.
|
||||
# Definition source cue file: vela-templates/definitions/internal/export-service.cue
|
||||
apiVersion: core.oam.dev/v1beta1
|
||||
kind: WorkflowStepDefinition
|
||||
metadata:
|
||||
annotations:
|
||||
definition.oam.dev/description: Export service to clusters specified by topology.
|
||||
name: export-service
|
||||
namespace: {{ include "systemDefinitionNamespace" . }}
|
||||
spec:
|
||||
schematic:
|
||||
cue:
|
||||
template: |
|
||||
import (
|
||||
"vela/op"
|
||||
)
|
||||
|
||||
meta: {
|
||||
name: *context.name | string
|
||||
namespace: *context.namespace | string
|
||||
if parameter.name != _|_ {
|
||||
name: parameter.name
|
||||
}
|
||||
if parameter.namespace != _|_ {
|
||||
namespace: parameter.namespace
|
||||
}
|
||||
}
|
||||
objects: [{
|
||||
apiVersion: "v1"
|
||||
kind: "Service"
|
||||
metadata: meta
|
||||
spec: {
|
||||
type: "ClusterIP"
|
||||
ports: [{
|
||||
protocol: "TCP"
|
||||
port: parameter.port
|
||||
targetPort: parameter.targetPort
|
||||
}]
|
||||
}
|
||||
}, {
|
||||
apiVersion: "v1"
|
||||
kind: "Endpoints"
|
||||
metadata: meta
|
||||
subsets: [{
|
||||
addresses: [{ip: parameter.ip}]
|
||||
ports: [{port: parameter.targetPort}]
|
||||
}]
|
||||
}] @step(1)
|
||||
getPlacements: op.#GetPlacementsFromTopologyPolicies & {
|
||||
policies: *[] | [...string]
|
||||
if parameter.topology != _|_ {
|
||||
policies: [parameter.topology]
|
||||
}
|
||||
} @step(2)
|
||||
apply: op.#Steps & {
|
||||
for p in getPlacements.placements {
|
||||
for o in objects {
|
||||
"\(p.cluster)-\(o.kind)": op.#Apply & {
|
||||
value: o
|
||||
cluster: p.cluster
|
||||
}
|
||||
}
|
||||
}
|
||||
} @step(3)
|
||||
parameter: {
|
||||
// +usage=Specify the name of the export destination
|
||||
name?: string
|
||||
// +usage=Specify the namespace of the export destination
|
||||
namespace?: string
|
||||
// +usage=Specify the ip to be export
|
||||
ip: string
|
||||
// +usage=Specify the port to be used in service
|
||||
port: int
|
||||
// +usage=Specify the port to be export
|
||||
targetPort: int
|
||||
// +usage=Specify the topology to export
|
||||
topology?: string
|
||||
}
|
||||
|
||||
@@ -0,0 +1,79 @@
|
||||
# Code generated by KubeVela templates. DO NOT EDIT. Please edit the original cue file.
|
||||
# Definition source cue file: vela-templates/definitions/internal/export-service.cue
|
||||
apiVersion: core.oam.dev/v1beta1
|
||||
kind: WorkflowStepDefinition
|
||||
metadata:
|
||||
annotations:
|
||||
definition.oam.dev/description: Export service to clusters specified by topology.
|
||||
name: export-service
|
||||
namespace: {{ include "systemDefinitionNamespace" . }}
|
||||
spec:
|
||||
schematic:
|
||||
cue:
|
||||
template: |
|
||||
import (
|
||||
"vela/op"
|
||||
)
|
||||
|
||||
meta: {
|
||||
name: *context.name | string
|
||||
namespace: *context.namespace | string
|
||||
if parameter.name != _|_ {
|
||||
name: parameter.name
|
||||
}
|
||||
if parameter.namespace != _|_ {
|
||||
namespace: parameter.namespace
|
||||
}
|
||||
}
|
||||
objects: [{
|
||||
apiVersion: "v1"
|
||||
kind: "Service"
|
||||
metadata: meta
|
||||
spec: {
|
||||
type: "ClusterIP"
|
||||
ports: [{
|
||||
protocol: "TCP"
|
||||
port: parameter.port
|
||||
targetPort: parameter.targetPort
|
||||
}]
|
||||
}
|
||||
}, {
|
||||
apiVersion: "v1"
|
||||
kind: "Endpoints"
|
||||
metadata: meta
|
||||
subsets: [{
|
||||
addresses: [{ip: parameter.ip}]
|
||||
ports: [{port: parameter.targetPort}]
|
||||
}]
|
||||
}] @step(1)
|
||||
getPlacements: op.#GetPlacementsFromTopologyPolicies & {
|
||||
policies: *[] | [...string]
|
||||
if parameter.topology != _|_ {
|
||||
policies: [parameter.topology]
|
||||
}
|
||||
} @step(2)
|
||||
apply: op.#Steps & {
|
||||
for p in getPlacements.placements {
|
||||
for o in objects {
|
||||
"\(p.cluster)-\(o.kind)": op.#Apply & {
|
||||
value: o
|
||||
cluster: p.cluster
|
||||
}
|
||||
}
|
||||
}
|
||||
} @step(3)
|
||||
parameter: {
|
||||
// +usage=Specify the name of the export destination
|
||||
name?: string
|
||||
// +usage=Specify the namespace of the export destination
|
||||
namespace?: string
|
||||
// +usage=Specify the ip to be export
|
||||
ip: string
|
||||
// +usage=Specify the port to be used in service
|
||||
port: int
|
||||
// +usage=Specify the port to be export
|
||||
targetPort: int
|
||||
// +usage=Specify the topology to export
|
||||
topology?: string
|
||||
}
|
||||
|
||||
@@ -0,0 +1,53 @@
|
||||
```yaml
|
||||
apiVersion: core.oam.dev/v1beta1
|
||||
kind: Application
|
||||
metadata:
|
||||
name: app-collect-service-endpoint-and-export
|
||||
spec:
|
||||
components:
|
||||
- type: webservice
|
||||
name: busybox
|
||||
properties:
|
||||
image: busybox
|
||||
imagePullPolicy: IfNotPresent
|
||||
cmd:
|
||||
- sleep
|
||||
- '1000000'
|
||||
traits:
|
||||
- type: expose
|
||||
properties:
|
||||
port: [8080]
|
||||
type: LoadBalancer
|
||||
policies:
|
||||
- type: topology
|
||||
name: local
|
||||
properties:
|
||||
clusters: ["local"]
|
||||
- type: topology
|
||||
name: worker
|
||||
properties:
|
||||
clusters: ["cluster-worker"]
|
||||
workflow:
|
||||
steps:
|
||||
- type: deploy
|
||||
name: deploy
|
||||
properties:
|
||||
policies: ["local"]
|
||||
- type: collect-service-endpoints
|
||||
name: collect-service-endpoints
|
||||
outputs:
|
||||
- name: host
|
||||
valueFrom: value.endpoint.host
|
||||
- name: port
|
||||
valueFrom: value.endpoint.port
|
||||
- type: export-service
|
||||
name: export-service
|
||||
properties:
|
||||
name: busybox
|
||||
topology: worker
|
||||
inputs:
|
||||
- from: host
|
||||
parameterKey: ip
|
||||
- from: port
|
||||
parameterKey: port
|
||||
```
|
||||
@@ -0,0 +1,76 @@
|
||||
import (
|
||||
"vela/op"
|
||||
)
|
||||
|
||||
"export-service": {
|
||||
type: "workflow-step"
|
||||
annotations: {}
|
||||
labels: {}
|
||||
description: "Export service to clusters specified by topology."
|
||||
}
|
||||
template: {
|
||||
meta: {
|
||||
name: *context.name | string
|
||||
namespace: *context.namespace | string
|
||||
if parameter.name != _|_ {
|
||||
name: parameter.name
|
||||
}
|
||||
if parameter.namespace != _|_ {
|
||||
namespace: parameter.namespace
|
||||
}
|
||||
}
|
||||
objects: [{
|
||||
apiVersion: "v1"
|
||||
kind: "Service"
|
||||
metadata: meta
|
||||
spec: {
|
||||
type: "ClusterIP"
|
||||
ports: [{
|
||||
protocol: "TCP"
|
||||
port: parameter.port
|
||||
targetPort: parameter.targetPort
|
||||
}]
|
||||
}
|
||||
}, {
|
||||
apiVersion: "v1"
|
||||
kind: "Endpoints"
|
||||
metadata: meta
|
||||
subsets: [{
|
||||
addresses: [{ip: parameter.ip}]
|
||||
ports: [{port: parameter.targetPort}]
|
||||
}]
|
||||
}] @step(1)
|
||||
|
||||
getPlacements: op.#GetPlacementsFromTopologyPolicies & {
|
||||
policies: *[] | [...string]
|
||||
if parameter.topology != _|_ {
|
||||
policies: [parameter.topology]
|
||||
}
|
||||
} @step(2)
|
||||
|
||||
apply: op.#Steps & {
|
||||
for p in getPlacements.placements {
|
||||
for o in objects {
|
||||
"\(p.cluster)-\(o.kind)": op.#Apply & {
|
||||
value: o
|
||||
cluster: p.cluster
|
||||
}
|
||||
}
|
||||
}
|
||||
} @step(3)
|
||||
|
||||
parameter: {
|
||||
// +usage=Specify the name of the export destination
|
||||
name?: string
|
||||
// +usage=Specify the namespace of the export destination
|
||||
namespace?: string
|
||||
// +usage=Specify the ip to be export
|
||||
ip: string
|
||||
// +usage=Specify the port to be used in service
|
||||
port: int
|
||||
// +usage=Specify the port to be export
|
||||
targetPort: int
|
||||
// +usage=Specify the topology to export
|
||||
topology?: string
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user