blob: bb3b1be83a8b274ccb13cd4d56c38cdce6291034 [file] [log] [blame]
Joey Armstrong96158a92022-11-25 10:36:06 -05001#!/usr/bin/env groovy
Joey Armstrong7987c112022-12-05 12:42:43 -05002// -----------------------------------------------------------------------
Joey Armstrongaf679da2023-01-31 14:22:41 -05003// Copyright 2021-2023 Open Networking Foundation (ONF) and the ONF Contributors
4//
5// Licensed under the Apache License, Version 2.0 (the "License");
6// you may not use this file except in compliance with the License.
7// You may obtain a copy of the License at
8//
9// http://www.apache.org/licenses/LICENSE-2.0
10//
11// Unless required by applicable law or agreed to in writing, software
12// distributed under the License is distributed on an "AS IS" BASIS,
13// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14// See the License for the specific language governing permissions and
15// limitations under the License.
16// -----------------------------------------------------------------------
17
18// -----------------------------------------------------------------------
Joey Armstrong7987c112022-12-05 12:42:43 -050019// -----------------------------------------------------------------------
20def getIam(String func)
21{
22 // Cannot rely on a stack trace due to jenkins manipulation
23 String src = 'vars/volthaStackDeploy.groovy'
24 String iam = [src, func].join('::')
25 return iam
26}
Matteo Scandolo42f6e572021-01-25 15:11:34 -080027
Joey Armstrong7987c112022-12-05 12:42:43 -050028// -----------------------------------------------------------------------
29// -----------------------------------------------------------------------
30def process(Map config)
31{
Matteo Scandolo42f6e572021-01-25 15:11:34 -080032 // note that I can't define this outside the function as there's no global scope in Groovy
33 def defaultConfig = [
Matteo Scandolo42f6e572021-01-25 15:11:34 -080034 bbsimReplica: 1,
35 infraNamespace: "infra",
36 volthaNamespace: "voltha",
37 stackName: "voltha",
Matteo Scandolo2bc660a2021-02-12 10:52:25 -080038 stackId: 1, // NOTE this is used to differentiate between BBSims across multiple stacks
Matteo Scandolo42f6e572021-01-25 15:11:34 -080039 workflow: "att",
Hardik Windlass2b164342022-02-28 03:50:48 +000040 withMacLearning: false,
Hardik Windlassc97ceae2022-05-13 10:12:55 +053041 withFttb: false,
Matteo Scandolo42f6e572021-01-25 15:11:34 -080042 extraHelmFlags: "",
Matteo Scandolofcfc60d2021-02-24 09:06:48 -080043 localCharts: false,
Matteo Scandolo529e8822021-07-21 10:20:18 -070044 onosReplica: 1,
Andrea Campanella365ea1e2021-09-28 10:50:01 +020045 adaptersToWait: 2,
Matteo Scandolo42f6e572021-01-25 15:11:34 -080046 ]
47
Matteo Scandolo42f6e572021-01-25 15:11:34 -080048 def cfg = defaultConfig + config
49
Matteo Scandolofcfc60d2021-02-24 09:06:48 -080050 def volthaStackChart = "onf/voltha-stack"
Matteo Scandoloba4b6542021-06-24 12:06:07 +020051 def bbsimChart = "onf/bbsim"
Matteo Scandolofcfc60d2021-02-24 09:06:48 -080052
53 if (cfg.localCharts) {
54 volthaStackChart = "$WORKSPACE/voltha-helm-charts/voltha-stack"
Matteo Scandoloba4b6542021-06-24 12:06:07 +020055 bbsimChart = "$WORKSPACE/voltha-helm-charts/bbsim"
Matteo Scandolofcfc60d2021-02-24 09:06:48 -080056
57 sh """
58 pushd $WORKSPACE/voltha-helm-charts/voltha-stack
59 helm dep update
60 popd
61 """
62 }
63
Matteo Scandolo42f6e572021-01-25 15:11:34 -080064 println "Deploying VOLTHA Stack with the following parameters: ${cfg}."
65
66 sh """
Matteo Scandoloed1afdd2021-04-02 16:25:45 -070067 helm upgrade --install --create-namespace -n ${cfg.volthaNamespace} ${cfg.stackName} ${volthaStackChart} \
Matteo Scandolo42f6e572021-01-25 15:11:34 -080068 --set global.stack_name=${cfg.stackName} \
69 --set global.voltha_infra_name=voltha-infra \
Matteo Scandolo529e8822021-07-21 10:20:18 -070070 --set voltha.onos_classic.replicas=${cfg.onosReplica} \
Matteo Scandolo42f6e572021-01-25 15:11:34 -080071 --set global.voltha_infra_namespace=${cfg.infraNamespace} \
Matteo Scandoloed1afdd2021-04-02 16:25:45 -070072 ${cfg.extraHelmFlags}
Matteo Scandolo42f6e572021-01-25 15:11:34 -080073 """
74
75 for(int i = 0;i<cfg.bbsimReplica;i++) {
Matteo Scandolo0ce69f12021-05-04 08:44:53 -070076 // NOTE we don't need to update the tag for DT
77 script {
78 sh """
79 rm -f $WORKSPACE/bbsimCfg${cfg.stackId}${i}.yaml
80 """
81 if (cfg.workflow == "att" || cfg.workflow == "tt") {
82 def startingStag = 900
Hardik Windlass810b6cf2022-02-24 09:21:18 +000083 def serviceConfigFile = cfg.workflow
84 if (cfg.withMacLearning && cfg.workflow == 'tt') {
85 serviceConfigFile = "tt-maclearner"
86 }
87 def bbsimCfg = readYaml file: "$WORKSPACE/voltha-helm-charts/examples/${serviceConfigFile}-values.yaml"
Matteo Scandolo0ce69f12021-05-04 08:44:53 -070088 // NOTE we assume that the only service that needs a different s_tag is the first one in the list
89 bbsimCfg["servicesConfig"]["services"][0]["s_tag"] = startingStag + i
Matteo Scandoloe765ee32021-07-20 16:47:19 -070090 println "Using BBSim Service config ${bbsimCfg['servicesConfig']}"
Matteo Scandolo0ce69f12021-05-04 08:44:53 -070091 writeYaml file: "$WORKSPACE/bbsimCfg${cfg.stackId}${i}.yaml", data: bbsimCfg
92 } else {
93 // NOTE if it's DT just copy the file over
94 sh """
95 cp $WORKSPACE/voltha-helm-charts/examples/${cfg.workflow}-values.yaml $WORKSPACE/bbsimCfg${cfg.stackId}${i}.yaml
96 """
97 }
98 }
99
100 sh """
Matteo Scandoloba4b6542021-06-24 12:06:07 +0200101 helm upgrade --install --create-namespace -n ${cfg.volthaNamespace} bbsim${i} ${bbsimChart} \
Matteo Scandolo0ce69f12021-05-04 08:44:53 -0700102 --set olt_id="${cfg.stackId}${i}" \
103 -f $WORKSPACE/bbsimCfg${cfg.stackId}${i}.yaml \
104 ${cfg.extraHelmFlags}
105 """
Matteo Scandolo42f6e572021-01-25 15:11:34 -0800106 }
107
108 println "Wait for VOLTHA Stack ${cfg.stackName} to start"
109
110 sh """
111 set +x
Joey Armstrong96158a92022-11-25 10:36:06 -0500112
113 # [joey]: debug
114 kubectl get pods -n ${cfg.volthaNamespace} -l app.kubernetes.io/part-of=voltha --no-headers
115
Matteo Scandolo42f6e572021-01-25 15:11:34 -0800116 voltha=\$(kubectl get pods -n ${cfg.volthaNamespace} -l app.kubernetes.io/part-of=voltha --no-headers | grep "0/" | wc -l)
117 while [[ \$voltha != 0 ]]; do
118 sleep 5
119 voltha=\$(kubectl get pods -n ${cfg.volthaNamespace} -l app.kubernetes.io/part-of=voltha --no-headers | grep "0/" | wc -l)
120 done
121 """
122
Andrea Campanella365ea1e2021-09-28 10:50:01 +0200123 waitForAdapters(cfg)
Matteo Scandolo937f4792021-09-24 11:05:52 -0700124
Matteo Scandolo42f6e572021-01-25 15:11:34 -0800125 // also make sure that the ONOS config is loaded
Andrea Campanella04b393a2021-07-22 10:48:33 +0200126 // NOTE that this is only required for VOLTHA-2.8
Matteo Scandolo42f6e572021-01-25 15:11:34 -0800127 println "Wait for ONOS Config loader to complete"
128
Andrea Campanella04b393a2021-07-22 10:48:33 +0200129 // NOTE that this is only required for VOLTHA-2.8,
Joey Armstrong7adbfb02023-01-24 17:02:37 -0500130 // [TODO]: Release cleanup
Matteo Scandolo42f6e572021-01-25 15:11:34 -0800131 sh """
132 set +x
133 config=\$(kubectl get jobs.batch -n ${cfg.infraNamespace} --no-headers | grep "0/" | wc -l)
134 while [[ \$config != 0 ]]; do
135 sleep 5
136 config=\$(kubectl get jobs.batch -n ${cfg.infraNamespace} --no-headers | grep "0/" | wc -l)
137 done
138 """
Joey Armstrong7adbfb02023-01-24 17:02:37 -0500139
Andrea Campanella04b393a2021-07-22 10:48:33 +0200140 // NOTE that this is only required for VOLTHA-2.9 onwards, to wait until the pod completed,
Matteo Scandolo937f4792021-09-24 11:05:52 -0700141 // meaning ONOS fully deployed
Andrea Campanella04b393a2021-07-22 10:48:33 +0200142 sh """
143 set +x
Andrea Campanella11832512021-07-23 10:53:19 +0200144 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 +0200145 while [[ \$config != 0 ]]; do
146 sleep 5
Andrea Campanella11832512021-07-23 10:53:19 +0200147 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 +0200148 done
149 """
Joey Armstrong96158a92022-11-25 10:36:06 -0500150
Joey Armstrong7987c112022-12-05 12:42:43 -0500151 return
Matteo Scandolo42f6e572021-01-25 15:11:34 -0800152}
Joey Armstrong7987c112022-12-05 12:42:43 -0500153
154// -----------------------------------------------------------------------
155// -----------------------------------------------------------------------
156def call(Map config)
157{
158 String iam = getIam('main')
159 println("** ${iam}: ENTER")
160
161 if (!config) {
162 config = [:]
163 }
164
165 try
166 {
167 process(config)
168 }
169 catch (Exception err)
170 {
171 println("** ${iam}: EXCEPTION ${err}")
Joey Armstrong8a3c13b2022-12-06 09:27:44 -0500172 // Cannot re-throw ATM: too many potential shell errors.
173 // throw err
Joey Armstrong7987c112022-12-05 12:42:43 -0500174 }
175 finally
176 {
177 println("** ${iam}: LEAVE")
178 }
179 return
180}
181
182// [EOF]