blob: a43bc7040e28fe8961d4b848d76f5b214c94d065 [file] [log] [blame]
Gopinath Taget22383d92018-08-22 12:28:52 -07001---
2# Copyright 2017-present Open Networking Foundation
3#
4# Licensed under the Apache License, Version 2.0 (the "License");
5# you may not use this file except in compliance with the License.
6# You may obtain a copy of the License at
7#
8# http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15
16# NOTE: ABOUT LICENSE: From Gopi - The K8S YAML resource section in this file are copied from
17# Intel's resources that were provided to ONF. We need to clarify what licensing terms are imposed
18# for these K8S resources
19
20tosca_definitions_version: tosca_simple_yaml_1_0
21
22description: Make a Virtual EPC service
23
24imports:
25 - custom_types/vepcservice.yaml
26 - custom_types/vepcserviceinstance.yaml
27 - custom_types/kubernetesresourceinstance.yaml
28 - custom_types/kubernetesservice.yaml
29 - custom_types/vepcresourceinstancelink.yaml
30
31
32topology_template:
33 node_templates:
34 service#vepcervice:
35 type: tosca.nodes.VEpcService
36 properties:
37 name: vepcservice
38 must-exist: true
39
40 service#kubernetes:
41 type: tosca.nodes.KubernetesService
42 properties:
43 name: kubernetes
44 must-exist: true
45
46 vepcserviceinstance:
47 type: tosca.nodes.VEpcServiceInstance
48 properties:
49 name: "EPC for Compute"
50 requirements:
51 - owner:
52 node: service#vepcservice
53 relationship: tosca.relationships.BelongsToOne
54
55 kubernetesresourceinstance_ngic_configmap:
56 type: tosca.nodes.KubernetesResourceInstance
57 properties:
58 name: "NGIC Config Map"
59 resource_definition: |
60 apiVersion: v1
61 data:
62 adc_rules.cfg: |
63 #Format -
64 #[ IP | IP Prefix | domain ] DROP? Sponsor-ID Service-ID Rate-Group? [Tariff-Group Tariff-Time]?
65 # Note: it is possible that ADC rules have conflicts & in that case rules are applied by line number...
66 # Rules defined first have a higher priority, unless DROP is specified (i.e. multiple rules for the same IP
67 # When specifying DROP with an IP address, use a prefix of 32 to prevent DNS results from overwriting rule
68
69 13.1.1.111 Example Internet Zero-Rate
70 13.1.1.112/24 Example Management Zero-Rate
71 13.1.1.113 Example Provisioning Zero-Rate
72 www.example.gov Example Internet Zero-Rate
73 www.drop_example.com DROP Example CIPA
74 cp_config.cfg: |
75 SGW_S11_IP=$(hostname)
76 SGW_S1U_IP=$(netstat -ie | grep -A1 s1u-net | tail -1 | awk '{print $2}' | tr -d addr:)
77 MGMT_INFO="-s ${SGW_S11_IP} -m ${MME_S11_IP} -w ${SGW_S1U_IP}"
78 APN_INFO="-i ${IP_POOL_IP} -p ${IP_POOL_MASK} -a ${APN}"
79 TEID_INFO="-t ${S11_TEID_POOL_START} -e ${S11_TEID_POOL_STOP} -u ${S1U_TEID_POOL_START} -o ${S1U_TEID_POOL_STOP}"
80 APP_ARGS="${MGMT_INFO} ${APN_INFO} ${TEID_INFO}"
81
82 CORES="-c $(taskset -p $$ | awk '{print $NF}')"
83 MEMORY="-n4 --no-huge -m 4096 --file-prefix cp"
84 DEVICES="--no-pci"
85 EAL_ARGS="${CORES} ${MEMORY} ${DEVICES}"
86 dp_config.cfg: |
87 CORES="-c $(taskset -p $$ | awk '{print $NF}')"
88 MEMORY="-n4 --no-huge -m 8192 --file-prefix cp"
89
90 SGW_S1U_IP=$(netstat -ie | grep -A1 s1u-net | tail -1 | awk '{print $2}' | tr -d addr:)
91 SGW_SGI_IP=$(netstat -ie | grep -A1 sgi-net | tail -1 | awk '{print $2}' | tr -d addr:)
92 S1U_MAC=$( netstat -ie | grep -B1 $SGW_S1U_IP | head -n1 | awk '{print $5}' )
93 SGI_MAC=$( netstat -ie | grep -B1 $SGW_SGI_IP | head -n1 | awk '{print $5}' )
94 DEVICES="--no-pci --vdev eth_af_packet0,iface=s1u-net --vdev eth_af_packet1,iface=sgi-net"
95
96 EAL_ARGS="${CORES} ${MEMORY} ${DEVICES}"
97
98 S1U="--s1u_ip ${SGW_S1U_IP} --s1u_mac ${S1U_MAC}"
99 SGI="--sgi_ip ${SGW_SGI_IP} --sgi_mac ${SGI_MAC} --sgi_gw_ip ${RTR_SGI_IP} --sgi_mask ${SGI_MASK}"
100 WORKERS="--num_workers 1"
101 MISC="--log 1"
102
103 APP_ARGS="${S1U} ${SGI} ${WORKERS} ${MISC}"
104 interface.cfg: "; Copyright (c) 2017 Intel Corporation\n;\n; Licensed under the
105 Apache License, Version 2.0 (the \"License\");\n; you may not use this file except
106 in compliance with the License.\n; You may obtain a copy of the License at\n;\n;
107 \ http://www.apache.org/licenses/LICENSE-2.0\n;\n; Unless required by applicable
108 law or agreed to in writing, software\n; distributed under the License is distributed
109 on an \"AS IS\" BASIS,\n; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
110 express or implied.\n; See the License for the specific language governing permissions
111 and\n; limitations under the License.\n\n[0]\ndp_comm_ip = 127.0.0.1\ndp_comm_port
112 = 20\ncp_comm_ip = 127.0.0.1\ncp_comm_port = 21\n"
113 static_pcc.cfg: |+
114 [GLOBAL]
115 NUM_PACKET_FILTERS = 1
116
117 ;default filter - must be first for now (until DP doesn't install any filters)
118 [PACKET_FILTER_0]
119 RATING_GROUP = 9
120 ;Max Bit Rate (MBR) unit= bps
121 MBR = 512000
122
123 [PACKET_FILTER_1]
124 RATING_GROUP = 5
125 MBR = 1000000
126 DIRECTION = bidirectional
127 PRECEDENCE = 255
128 IPV4_REMOTE = 13.1.0.0
129 IPV4_REMOTE_MASK = 255.255.0.0
130 PROTOCOL = 17
131 REMOTE_LOW_LIMIT_PORT = 5060
132 REMOTE_HIGH_LIMIT_PORT = 5060
133
134 [PACKET_FILTER_2]
135 RATING_GROUP = 1
136 MBR = 2000000
137 DIRECTION = bidirectional
138 PRECEDENCE = 255
139 IPV4_REMOTE = 13.1.0.0
140 IPV4_REMOTE_MASK = 255.255.0.0
141 PROTOCOL = 17
142 LOCAL_LOW_LIMIT_PORT = 17000
143 LOCAL_HIGH_LIMIT_PORT = 17010
144
145 [PACKET_FILTER_3]
146 RATING_GROUP = 7
147 MBR = 4000000
148 DIRECTION = bidirectional
149 PRECEDENCE = 255
150 IPV4_REMOTE = 13.1.0.0
151 IPV4_REMOTE_MASK = 255.255.0.0
152 PROTOCOL = 17
153 LOCAL_LOW_LIMIT_PORT = 8000
154 LOCAL_HIGH_LIMIT_PORT = 8080
155
156 kind: ConfigMap
157 metadata:
158 name: ngic-config
159
160 requirements:
161 - owner:
162 node: service#kubernetes
163 relationship: tosca.relationships.BelongsToOne
164
165 kubernetesresourceinstance_mme_service:
166 type: tosca.nodes.KubernetesResourceInstance
167 properties:
168 name: "MME Service"
169 resource_definition: |
170 apiVersion: v1
171 kind: Service
172 metadata:
173 name: mme
174 spec:
175 selector:
176 app: mme
177 clusterIP: None
178 ports:
179 - name: s11
180 port: 2123
181 protocol: UDP
182 - name: s1ap
183 port: 36412
184 protocol: TCP
185 - name: s6a
186 port: 3868
187 protocol: TCP
188
189 requirements:
190 - owner:
191 node: service#kubernetes
192 relationship: tosca.relationships.BelongsToOne
193
194 kubernetesresourceinstance_mme_statefulset:
195 type: tosca.nodes.KubernetesResourceInstance
196 properties:
197 name: "MME StatefulSet"
198 resource_definition: |
199 apiVersion: apps/v1
200 kind: StatefulSet
201 metadata:
202 name: mme
203 labels:
204 app: mme
205 spec:
206 replicas: 1
207 selector:
208 matchLabels:
209 app: mme
210 serviceName: "mme"
211 template:
212 metadata:
213 labels:
214 app: mme
215 spec:
216 terminationGracePeriodSeconds: 1
217 initContainers:
218 - name: init-mme
219 image: "ngick8stesting/c3po-mmeinit"
220 command: [ "sh", "-c"]
221 securityContext:
222 capabilities:
223 add:
224 - NET_ADMIN
225 args:
226 - iptables -A OUTPUT -p sctp --sport 36412 --chunk-types any ABORT -j DROP;
227 until nslookup hss-0.hss.default.svc.cluster.local;
228 do echo waiting for hss; sleep 2; done;
229 containers:
230 - name: mme
231 image: "ngick8stesting/c3po-mme:5e2eaf6"
232 imagePullPolicy: Always
233 env:
234 - name: SGW_S11_IP
235 value: ngic-0.ngic.default.svc.cluster.local
236 - name: MME_ETH0_IP
237 valueFrom:
238 fieldRef:
239 fieldPath: status.podIP
240 - name: ENB_S1AP_IP
241 value: 10.1.11.3
242 - name: CONNECT_PEER
243 value: hss-0.hss.default.svc.cluster.local
244 - name: VAR_HSS_REALM
245 value: hss.default.svc.cluster.local
246 - name: HSS_S6A_IP
247 value: hss-0.hss.default.svc.cluster.local
248 - name: HSS_PORT
249 value: "3868"
250
251 stdin: true
252 tty: true
253 #command: [ "sleep", "3600"]
254 #volumeMounts:
255 #- name: config-volume
256 # mountPath: /opt/ngic/config
257 #- name: scripts-volume
258 # mountPath: /opt/ngic/scripts
259 #- name: hugepage
260 # mountPath: /dev/hugepages
261 resources:
262 limits:
263 cpu: 3
264 memory: 1Gi
265 #volumes:
266 # - name: config-volume
267 # configMap:
268 # name: ngic-config
269 # - name: scripts-volume
270 # secret:
271 # secretName: ngic-scripts
272 # defaultMode: 511
273 # - name: hugepage
274 # emptyDir:
275 # medium: HugePages
276
277 requirements:
278 - owner:
279 node: service#kubernetes
280 relationship: tosca.relationships.BelongsToOne
281
282 kubernetesresourceinstance_hss_service:
283 type: tosca.nodes.KubernetesResourceInstance
284 properties:
285 name: "HSS Service"
286 resource_definition: |
287 apiVersion: v1
288 kind: Service
289 metadata:
290 name: hss
291 spec:
292 selector:
293 app: hss
294 clusterIP: None
295 ports:
296 - name: s6a
297 port: 3868
298 protocol: TCP
299
300 requirements:
301 - owner:
302 node: service#kubernetes
303 relationship: tosca.relationships.BelongsToOne
304
305 kubernetesresourceinstance_hss_statefulset:
306 type: tosca.nodes.KubernetesResourceInstance
307 properties:
308 name: "HSS StatefulSet"
309 resource_definition: |
310 apiVersion: apps/v1
311 kind: StatefulSet
312 metadata:
313 name: hss
314 labels:
315 app: hss
316 spec:
317 replicas: 1
318 selector:
319 matchLabels:
320 app: hss
321 serviceName: "hss"
322 template:
323 metadata:
324 labels:
325 app: hss
326 spec:
327 terminationGracePeriodSeconds: 1
328 initContainers:
329 - name: init-db
330 image: "ngick8stesting/c3po-cassandra:5e2eaf6"
331 command: [ "bash", "-xc"]
332 args:
333 - until nslookup cassandra; do echo waiting for cassandra; sleep 2; done;
334 cqlsh --file /scripts/oai_db.cql cassandra;
335 /scripts/data_provisioning_users.sh 208014567891200 1122334455 apn1 465B5CE8B199B49FAA5F0A2EE238A6BC 100 cassandra mme-0.mme.default.svc.cluster.local mme.default.svc.cluster.local;
336 /scripts/data_provisioning_mme.sh 1 19136246000 mme-0.mme.default.svc.cluster.local mme.default.svc.cluster.local 1 cassandra;
337 /scripts/data_provisioning_mme.sh 1 19136246000 smsrouter.test3gpp.net test3gpp.net 0 cassandra;
338 containers:
339 - name: hss
340 image: "ngick8stesting/c3po-hss:5e2eaf6"
341 imagePullPolicy: Always
342 env:
343 - name: CASSANDRA_ADDR
344 value: cassandra
345 - name: MME_ADDR
346 value: mme-0.mme.default.svc.cluster.local
347 #command: [ "sleep", "3600"]
348 resources:
349 limits:
350 cpu: 3
351 memory: 1Gi
352
353 requirements:
354 - owner:
355 node: service#kubernetes
356 relationship: tosca.relationships.BelongsToOne
357
358 kubernetesresourceinstance_hssdb_service:
359 type: tosca.nodes.KubernetesResourceInstance
360 properties:
361 name: "HSS Cassandra Service"
362 resource_definition: |
363 apiVersion: v1
364 kind: Service
365 metadata:
366 labels:
367 app: cassandra
368 name: cassandra
369 spec:
370 clusterIP: None
371 ports:
372 - port: 9042
373 selector:
374 app: cassandra
375
376 requirements:
377 - owner:
378 node: service#kubernetes
379 relationship: tosca.relationships.BelongsToOne
380
381 kubernetesresourceinstance_hssdb_statefulset:
382 type: tosca.nodes.KubernetesResourceInstance
383 properties:
384 name: "HSS Cassandra StatefulSet"
385 resource_definition: |
386 apiVersion: "apps/v1"
387 kind: StatefulSet
388 metadata:
389 name: cassandra
390 labels:
391 app: cassandra
392 spec:
393 serviceName: cassandra
394 replicas: 1 # 3
395 selector:
396 matchLabels:
397 app: cassandra
398 template:
399 metadata:
400 labels:
401 app: cassandra
402 spec:
403 terminationGracePeriodSeconds: 1
404 containers:
405 - name: cassandra
406 image: ngick8stesting/c3po-cassandra:5e2eaf6
407 imagePullPolicy: Always
408 ports:
409 - containerPort: 7000
410 name: intra-node
411 - containerPort: 7001
412 name: tls-intra-node
413 - containerPort: 7199
414 name: jmx
415 - containerPort: 9042
416 name: cql
417 resources:
418 limits:
419 cpu: "3"
420 memory: 4Gi
421 # Probably Cassandra:3.x?
422 #securityContext:
423 # capabilities:
424 # add:
425 # - IPC_LOCK
426 # Later
427 #lifecycle:
428 # preStop:
429 # exec:
430 # command:
431 # - /bin/sh
432 # - -c
433 # - nodetool drain
434 env:
435 # Performance optimizations
436 - name: MAX_HEAP_SIZE
437 value: 512M
438 - name: HEAP_NEWSIZE
439 value: 100M
440 - name: CASSANDRA_SEEDS
441 value: "cassandra-0.cassandra.default.svc.cluster.local"
442 - name: CASSANDRA_CLUSTER_NAME
443 value: "HSS Cluster"
444 - name: CASSANDRA_RPC_ADDRESS
445 valueFrom:
446 fieldRef:
447 fieldPath: status.podIP
448 - name: CASSANDRA_ENDPOINT_SNITCH
449 value: "GossipingPropertyFileSnitch"
450 readinessProbe:
451 exec:
452 command: ["/bin/bash", "-c", "nodetool status -r | awk -v h=$(hostname) '$2==h {exit ($1==\"UN\" ? 0 : -1)}'"]
453 initialDelaySeconds: 15
454 timeoutSeconds: 5
455 # volumeMounts:
456 # - name: cassandra-data
457 # mountPath: /var/lib/cassandra
458 # volumeClaimTemplates:
459 # - metadata:
460 # name: cassandra-data
461 # spec:
462 # accessModes: [ "ReadWriteOnce" ]
463 # resources:
464 # requests:
465 # storage: 1Gi
466
467 requirements:
468 - owner:
469 node: service#kubernetes
470 relationship: tosca.relationships.BelongsToOne
471
472 kubernetesresourceinstance_spgwcu_service:
473 type: tosca.nodes.KubernetesResourceInstance
474 properties:
475 name: "SPGW Control and User Service"
476 resource_definition: |
477 apiVersion: v1
478 kind: Service
479 metadata:
480 name: ngic
481 spec:
482 selector:
483 app: ngic
484 clusterIP: None
485 ports:
486 - name: s11
487 port: 2123
488 protocol: UDP
489
490 requirements:
491 - owner:
492 node: service#kubernetes
493 relationship: tosca.relationships.BelongsToOne
494
495 kubernetesresourceinstance_spgwcu_statefulset:
496 type: tosca.nodes.KubernetesResourceInstance
497 properties:
498 name: "SPGW Control and User StatefulSet"
499 resource_definition: |
500 apiVersion: apps/v1
501 kind: StatefulSet
502 metadata:
503 name: ngic
504 labels:
505 app: ngic
506 spec:
507 replicas: 1
508 selector:
509 matchLabels:
510 app: ngic
511 serviceName: "ngic"
512 template:
513 metadata:
514 labels:
515 app: ngic
516 annotations:
517 kubernetes.v1.cni.cncf.io/networks: '[
518 { "name": "s1u-net", "interfaceRequest": "s1u-net" },
519 { "name": "sgi-net", "interfaceRequest": "sgi-net" }
520 ]'
521 spec:
522 initContainers:
523 - name: init-iptables
524 image: "ngick8stesting/c3po-mmeinit"
525 command: [ "sh", "-c"]
526 securityContext:
527 capabilities:
528 add:
529 - NET_ADMIN
530 args:
531 - iptables -I OUTPUT -p icmp --icmp-type destination-unreachable -j DROP;
532 terminationGracePeriodSeconds: 1
533 containers:
534 - name: ngic-cp
535 image: "ngick8stesting/ngic-cp:d9b315c"
536 stdin: true
537 command: [ "bash", "-cx", ". /opt/ngic/config/cp_config.cfg; ./ngic_controlplane $EAL_ARGS -- $APP_ARGS"]
538 #command: ["sleep", "3600"]
539 tty: true
540 env:
541 - name: MME_S11_IP
542 value: mme-0.mme.default.svc.cluster.local
543 #- name: SGW_S1U_IP # for now,this will be in our own pod
544 # value: "5.5.5.5"
545 - name: APN
546 value: apn1
547 - name: IP_POOL_IP
548 value: "16.0.0.0"
549 - name: IP_POOL_MASK
550 value: "255.240.0.0"
551 - name: S11_TEID_POOL_START
552 value: "00100000"
553 - name: S11_TEID_POOL_STOP
554 value: "001fffff"
555 - name: S1U_TEID_POOL_START
556 value: "00100000"
557 - name: S1U_TEID_POOL_STOP
558 value: "001fffff"
559 volumeMounts:
560 - name: config-volume
561 mountPath: /opt/ngic/config
562 #- name: hugepage
563 # mountPath: /dev/hugepages
564 resources:
565 limits:
566 #hugepages-2Mi: 4Gi
567 cpu: 3
568 memory: 4Gi
569 - name: ngic-dp
570 image: "ngiccorddemo/ngic-dp:k8s-bm"
571 stdin: true
572 tty: true
573 env:
574 - name: RTR_SGI_IP
575 value: "13.1.1.110"
576 - name: SGI_MASK
577 value: "255.255.255.0"
578 command: [ "bash", "-cx", ". /opt/ngic/config/dp_config.cfg ; ./ngic_dataplane $EAL_ARGS -- $APP_ARGS"]
579 #command: ["sleep", "3600"]
580 volumeMounts:
581 - name: config-volume
582 mountPath: /opt/ngic/config
583 #- name: hugepage
584 # mountPath: /dev/hugepages
585 resources:
586 limits:
587 #hugepages-1Gi: 8Gi
588 cpu: 8
589 memory: 8Gi #200Mi
590 intel.com/sriov: '2'
591 securityContext:
592 privileged: true
593 capabilities:
594 add:
595 - NET_ADMIN
596 - IPC_LOCK
597 volumes:
598 - name: config-volume
599 configMap:
600 name: ngic-config
601 #- name: hugepage
602 # emptyDir:
603 # medium: HugePages
604
605 requirements:
606 - owner:
607 node: service#kubernetes
608 relationship: tosca.relationships.BelongsToOne
609
610 vepcresourceinstancelink_ngic_configmap:
611 type: tosca.nodes.VEpcResourceInstanceLink
612 properties:
613 name: "NGIC ConfigMap Resource Link"
614
615 requirements:
616 - resource_instance:
617 node: kubernetesresourceinstance_ngic_configmap
618 relationship: tosca.relationships.BelongsToOne
619 - vepc_service_instance:
620 node: vepcserviceinstance
621 relationship: tosca.relationships.BelongsToOne
622
623 vepcresourceinstancelink_mme_service:
624 type: tosca.nodes.VEpcResourceInstanceLink
625 properties:
626 name: "MME Service Resource Link"
627
628 requirements:
629 - resource_instance:
630 node: kubernetesresourceinstance_mme_service
631 relationship: tosca.relationships.BelongsToOne
632 - vepc_service_instance:
633 node: vepcserviceinstance
634 relationship: tosca.relationships.BelongsToOne
635
636 vepcresourceinstancelink_mme_statefulset:
637 type: tosca.nodes.VEpcResourceInstanceLink
638 properties:
639 name: "MME StatefulSet Resource Link"
640
641 requirements:
642 - resource_instance:
643 node: kubernetesresourceinstance_mme_statefulset
644 relationship: tosca.relationships.BelongsToOne
645 - vepc_service_instance:
646 node: vepcserviceinstance
647 relationship: tosca.relationships.BelongsToOne
648
649 vepcresourceinstancelink_hss_service:
650 type: tosca.nodes.VEpcResourceInstanceLink
651 properties:
652 name: "HSS Service Resource Link"
653
654 requirements:
655 - resource_instance:
656 node: kubernetesresourceinstance_hss_service
657 relationship: tosca.relationships.BelongsToOne
658 - vepc_service_instance:
659 node: vepcserviceinstance
660 relationship: tosca.relationships.BelongsToOne
661
662 vepcresourceinstancelink_hss_statefulset:
663 type: tosca.nodes.VEpcResourceInstanceLink
664 properties:
665 name: "HSS StatefulSet Resource Link"
666
667 requirements:
668 - resource_instance:
669 node: kubernetesresourceinstance_hss_statefulset
670 relationship: tosca.relationships.BelongsToOne
671 - vepc_service_instance:
672 node: vepcserviceinstance
673 relationship: tosca.relationships.BelongsToOne
674
675 vepcresourceinstancelink_hssdb_service:
676 type: tosca.nodes.VEpcResourceInstanceLink
677 properties:
678 name: "HSS Cassandra Service Resource Link"
679
680 requirements:
681 - resource_instance:
682 node: kubernetesresourceinstance_hssdb_service
683 relationship: tosca.relationships.BelongsToOne
684 - vepc_service_instance:
685 node: vepcserviceinstance
686 relationship: tosca.relationships.BelongsToOne
687
688 vepcresourceinstancelink_hssdb_statefulset:
689 type: tosca.nodes.VEpcResourceInstanceLink
690 properties:
691 name: "HSS Cassandra StatefulSet Resource Link"
692
693 requirements:
694 - resource_instance:
695 node: kubernetesresourceinstance_hssdb_statefulset
696 relationship: tosca.relationships.BelongsToOne
697 - vepc_service_instance:
698 node: vepcserviceinstance
699 relationship: tosca.relationships.BelongsToOne
700
701 vepcresourceinstancelink_spgwcu_service:
702 type: tosca.nodes.VEpcResourceInstanceLink
703 properties:
704 name: "SPGW Contol and User Service Resource Link"
705
706 requirements:
707 - resource_instance:
708 node: kubernetesresourceinstance_spgwcu_service
709 relationship: tosca.relationships.BelongsToOne
710 - vepc_service_instance:
711 node: vepcserviceinstance
712 relationship: tosca.relationships.BelongsToOne
713
714 vepcresourceinstancelink_spgwcu_statefulset:
715 type: tosca.nodes.VEpcResourceInstanceLink
716 properties:
717 name: "HS SPGW Control and User StatefulSet Resource Link"
718
719 requirements:
720 - resource_instance:
721 node: kubernetesresourceinstance_spgwcu_statefulset
722 relationship: tosca.relationships.BelongsToOne
723 - vepc_service_instance:
724 node: vepcserviceinstance
725 relationship: tosca.relationships.BelongsToOne