blob: eb6ab0b07aa44e931577c34103e1814bbf7b57fb [file] [log] [blame]
Joey Armstrong96158a92022-11-25 10:36:06 -05001#!/usr/bin/env groovy
Matteo Scandolo42f6e572021-01-25 15:11:34 -08002
3def call(Map config) {
Joey Armstrong96158a92022-11-25 10:36:06 -05004
5 String iam = 'vars/volthaStackDeploy.groovy'
6 println("** ${iam}: ENTER")
7
Matteo Scandolo42f6e572021-01-25 15:11:34 -08008 // note that I can't define this outside the function as there's no global scope in Groovy
9 def defaultConfig = [
Matteo Scandolo42f6e572021-01-25 15:11:34 -080010 bbsimReplica: 1,
11 infraNamespace: "infra",
12 volthaNamespace: "voltha",
13 stackName: "voltha",
Matteo Scandolo2bc660a2021-02-12 10:52:25 -080014 stackId: 1, // NOTE this is used to differentiate between BBSims across multiple stacks
Matteo Scandolo42f6e572021-01-25 15:11:34 -080015 workflow: "att",
Hardik Windlass2b164342022-02-28 03:50:48 +000016 withMacLearning: false,
Hardik Windlassc97ceae2022-05-13 10:12:55 +053017 withFttb: false,
Matteo Scandolo42f6e572021-01-25 15:11:34 -080018 extraHelmFlags: "",
Matteo Scandolofcfc60d2021-02-24 09:06:48 -080019 localCharts: false,
Matteo Scandolo529e8822021-07-21 10:20:18 -070020 onosReplica: 1,
Andrea Campanella365ea1e2021-09-28 10:50:01 +020021 adaptersToWait: 2,
Matteo Scandolo42f6e572021-01-25 15:11:34 -080022 ]
23
24 if (!config) {
25 config = [:]
26 }
27
28 def cfg = defaultConfig + config
29
Matteo Scandolofcfc60d2021-02-24 09:06:48 -080030 def volthaStackChart = "onf/voltha-stack"
Matteo Scandoloba4b6542021-06-24 12:06:07 +020031 def bbsimChart = "onf/bbsim"
Matteo Scandolofcfc60d2021-02-24 09:06:48 -080032
33 if (cfg.localCharts) {
34 volthaStackChart = "$WORKSPACE/voltha-helm-charts/voltha-stack"
Matteo Scandoloba4b6542021-06-24 12:06:07 +020035 bbsimChart = "$WORKSPACE/voltha-helm-charts/bbsim"
Matteo Scandolofcfc60d2021-02-24 09:06:48 -080036
37 sh """
38 pushd $WORKSPACE/voltha-helm-charts/voltha-stack
39 helm dep update
40 popd
41 """
42 }
43
Matteo Scandolo42f6e572021-01-25 15:11:34 -080044 println "Deploying VOLTHA Stack with the following parameters: ${cfg}."
45
46 sh """
Matteo Scandoloed1afdd2021-04-02 16:25:45 -070047 helm upgrade --install --create-namespace -n ${cfg.volthaNamespace} ${cfg.stackName} ${volthaStackChart} \
Matteo Scandolo42f6e572021-01-25 15:11:34 -080048 --set global.stack_name=${cfg.stackName} \
49 --set global.voltha_infra_name=voltha-infra \
Matteo Scandolo529e8822021-07-21 10:20:18 -070050 --set voltha.onos_classic.replicas=${cfg.onosReplica} \
Matteo Scandolo42f6e572021-01-25 15:11:34 -080051 --set global.voltha_infra_namespace=${cfg.infraNamespace} \
Matteo Scandoloed1afdd2021-04-02 16:25:45 -070052 ${cfg.extraHelmFlags}
Matteo Scandolo42f6e572021-01-25 15:11:34 -080053 """
54
55 for(int i = 0;i<cfg.bbsimReplica;i++) {
Matteo Scandolo0ce69f12021-05-04 08:44:53 -070056 // NOTE we don't need to update the tag for DT
57 script {
58 sh """
59 rm -f $WORKSPACE/bbsimCfg${cfg.stackId}${i}.yaml
60 """
61 if (cfg.workflow == "att" || cfg.workflow == "tt") {
62 def startingStag = 900
Hardik Windlass810b6cf2022-02-24 09:21:18 +000063 def serviceConfigFile = cfg.workflow
64 if (cfg.withMacLearning && cfg.workflow == 'tt') {
65 serviceConfigFile = "tt-maclearner"
66 }
67 def bbsimCfg = readYaml file: "$WORKSPACE/voltha-helm-charts/examples/${serviceConfigFile}-values.yaml"
Matteo Scandolo0ce69f12021-05-04 08:44:53 -070068 // NOTE we assume that the only service that needs a different s_tag is the first one in the list
69 bbsimCfg["servicesConfig"]["services"][0]["s_tag"] = startingStag + i
Matteo Scandoloe765ee32021-07-20 16:47:19 -070070 println "Using BBSim Service config ${bbsimCfg['servicesConfig']}"
Matteo Scandolo0ce69f12021-05-04 08:44:53 -070071 writeYaml file: "$WORKSPACE/bbsimCfg${cfg.stackId}${i}.yaml", data: bbsimCfg
72 } else {
73 // NOTE if it's DT just copy the file over
74 sh """
75 cp $WORKSPACE/voltha-helm-charts/examples/${cfg.workflow}-values.yaml $WORKSPACE/bbsimCfg${cfg.stackId}${i}.yaml
76 """
77 }
78 }
79
80 sh """
Matteo Scandoloba4b6542021-06-24 12:06:07 +020081 helm upgrade --install --create-namespace -n ${cfg.volthaNamespace} bbsim${i} ${bbsimChart} \
Matteo Scandolo0ce69f12021-05-04 08:44:53 -070082 --set olt_id="${cfg.stackId}${i}" \
83 -f $WORKSPACE/bbsimCfg${cfg.stackId}${i}.yaml \
84 ${cfg.extraHelmFlags}
85 """
Matteo Scandolo42f6e572021-01-25 15:11:34 -080086 }
87
88 println "Wait for VOLTHA Stack ${cfg.stackName} to start"
89
90 sh """
91 set +x
Joey Armstrong96158a92022-11-25 10:36:06 -050092
93 # [joey]: debug
94 kubectl get pods -n ${cfg.volthaNamespace} -l app.kubernetes.io/part-of=voltha --no-headers
95
Matteo Scandolo42f6e572021-01-25 15:11:34 -080096 voltha=\$(kubectl get pods -n ${cfg.volthaNamespace} -l app.kubernetes.io/part-of=voltha --no-headers | grep "0/" | wc -l)
97 while [[ \$voltha != 0 ]]; do
98 sleep 5
99 voltha=\$(kubectl get pods -n ${cfg.volthaNamespace} -l app.kubernetes.io/part-of=voltha --no-headers | grep "0/" | wc -l)
100 done
101 """
102
Andrea Campanella365ea1e2021-09-28 10:50:01 +0200103 waitForAdapters(cfg)
Matteo Scandolo937f4792021-09-24 11:05:52 -0700104
Matteo Scandolo42f6e572021-01-25 15:11:34 -0800105 // also make sure that the ONOS config is loaded
Andrea Campanella04b393a2021-07-22 10:48:33 +0200106 // NOTE that this is only required for VOLTHA-2.8
Matteo Scandolo42f6e572021-01-25 15:11:34 -0800107 println "Wait for ONOS Config loader to complete"
108
Andrea Campanella04b393a2021-07-22 10:48:33 +0200109 // NOTE that this is only required for VOLTHA-2.8,
Matteo Scandolo42f6e572021-01-25 15:11:34 -0800110 sh """
111 set +x
112 config=\$(kubectl get jobs.batch -n ${cfg.infraNamespace} --no-headers | grep "0/" | wc -l)
113 while [[ \$config != 0 ]]; do
114 sleep 5
115 config=\$(kubectl get jobs.batch -n ${cfg.infraNamespace} --no-headers | grep "0/" | wc -l)
116 done
117 """
Andrea Campanella04b393a2021-07-22 10:48:33 +0200118 // NOTE that this is only required for VOLTHA-2.9 onwards, to wait until the pod completed,
Matteo Scandolo937f4792021-09-24 11:05:52 -0700119 // meaning ONOS fully deployed
Andrea Campanella04b393a2021-07-22 10:48:33 +0200120 sh """
121 set +x
Andrea Campanella11832512021-07-23 10:53:19 +0200122 config=\$(kubectl get pods -l app=onos-config-loader -n ${cfg.infraNamespace} --no-headers --field-selector=status.phase=Running | grep "0/" | wc -l)
Andrea Campanella04b393a2021-07-22 10:48:33 +0200123 while [[ \$config != 0 ]]; do
124 sleep 5
Andrea Campanella11832512021-07-23 10:53:19 +0200125 config=\$(kubectl get pods -l app=onos-config-loader -n ${cfg.infraNamespace} --no-headers --field-selector=status.phase=Running | grep "0/" | wc -l)
Andrea Campanella04b393a2021-07-22 10:48:33 +0200126 done
127 """
Joey Armstrong96158a92022-11-25 10:36:06 -0500128
129 println("** ${iam}: LEAVE")
Matteo Scandolo42f6e572021-01-25 15:11:34 -0800130}