[VOL-5170] - Test debugging openolt-adapter-sanity-test-voltha
vars/createKubernetesCluster.groovy
vars/volthaStackDeploy.groovy
vars/waitForAdapters.groovy
-----------------------------------
o npm-groovy-lint cleanups
o Correct indentation
o emacs untabify (tabs to spaces)
o Split long shell commands into distinct sh() blocks.
o Add sh() attribute 'label' so logged commands are self-documenting.
o Added more banners to label logged output.
vars/volthaStackDeploy.groovy
-----------------------------
o remove set +x from sh() commands to add log output.
o re-enable thrown excpetions for process(). This may generate
duplicate stack traces but at least we see all errors.
vars/pgrep_port_forward.groovy
------------------------------
o Convenience script, refactor pgrep/pkill logic into a reusable library
to avoid inlining copy & paste port-forward setup/teardown logic.
o Shell command must be hardcoded (YUCK!). Groovy Strings are type
GString with no native cast to java.lang.string for sh("$cmd") calls.
String casting works at times due to def/object type but exceptions
are thrown when incorrect so use a known/reliable value for now.
jjb/verify/voltha-openolt-adapter.yaml
--------------------------------------
o Jobgen did not run last attempt, include a config file to force it.
Change-Id: I70843625d6a0ae510594a764697e9e0405dfe64b
diff --git a/vars/pgrep_port_forward.groovy b/vars/pgrep_port_forward.groovy
new file mode 100644
index 0000000..68c5e5a
--- /dev/null
+++ b/vars/pgrep_port_forward.groovy
@@ -0,0 +1,123 @@
+#!/usr/bin/env groovy
+// -----------------------------------------------------------------------
+// Copyright 2023 Open Networking Foundation (ONF) and the ONF Contributors
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+// -----------------------------------------------------------------------
+// Install the voltctl command by branch name "voltha-xx"
+// -----------------------------------------------------------------------
+
+// -----------------------------------------------------------------------
+// -----------------------------------------------------------------------
+String getIam(String func) {
+ // Cannot rely on a stack trace due to jenkins manipulation
+ String src = 'vars/pgrep_proc.groovy'
+ String iam = [src, func].join('::')
+ return iam
+}
+
+// -----------------------------------------------------------------------
+// Intent: Log progress message
+// -----------------------------------------------------------------------
+void enter(String name) {
+ // Announce ourselves for log usability
+ String iam = getIam(name)
+ println("${iam}: ENTER")
+ return
+}
+
+// -----------------------------------------------------------------------
+// Intent: Log progress message
+// -----------------------------------------------------------------------
+void leave(String name) {
+ // Announce ourselves for log usability
+ String iam = getIam(name)
+ println("${iam}: LEAVE")
+ return
+}
+
+// -----------------------------------------------------------------------
+// -----------------------------------------------------------------------
+Boolean process(String proc, Map args) {
+ Boolean ans = true
+ String iam = getIam('process')
+
+ String cmd = [
+ 'pgrep',
+ '--uid', '$(id -u)', // no stray signals
+ '--list-full',
+ '--full', // hmmm: conditional use (?)
+ "'${proc}",
+ ]
+
+ print("""
+** -----------------------------------------------------------------------
+** Running: $cmd
+** -----------------------------------------------------------------------
+""")
+
+ sh(
+ label : 'pgrep_proc', // jenkins usability: label log entry 'step'
+ // script : ${cmd}.toString(),
+
+ // Cannot derefence cmd AMT. Value stored as a grovy String/GString.
+ // No native support for cast to java.lang.String, some objects can
+ // but logic is prone to exception so (YUCK!) hardcode for now.
+
+ script : """
+pgrep --uid \$(uid -u) --list-full --full 'port-forw'
+""",
+ )
+ return(ans)
+}
+
+// -----------------------------------------------------------------------
+// Install: Display a list of port-forwarding processes.
+// -----------------------------------------------------------------------
+// groovylint-disable-next-line None, UnusedMethodParameter
+Boolean call\
+(
+ String proc, // name of process or arguments to terminate
+ Map args=[:],
+ Boolean filler = true // Groovy, why special case list comma handling (?)
+) {
+ Boolean ans = true
+
+ try {
+ enter('main')
+ process(proc, args)
+ }
+ catch (Exception err) { // groovylint-disable-line CatchException
+ ans = false
+ println("** ${iam}: EXCEPTION ${err}")
+ throw err
+ }
+ finally {
+ enter('main')
+ }
+
+ return(ans)
+}
+
+// [SEE ALSO]
+// -----------------------------------------------------------------------
+// o String cmd = [ ... ].join('') -- GString cannot cast to java.String
+// o https://stackoverflow.com/questions/60304068/artifactory-in-jenkins-pipeline-org-codehaus-groovy-runtime-gstringimpl-cannot
+// -----------------------------------------------------------------------
+// [TODO] - Combine pkill_proc and pgrep_proc
+// - Usage: do_proc(pkill=true, pgrep=true, args='proc-forward', cmd='kubectl'
+// o When kill == grep == true: display procs, terminate, recheck: fatal if procs detected
+// o cmd && args (or command containing args) (or list of patterns passed)
+// - pass arg --full to match entire command line.
+// -----------------------------------------------------------------------
+// [EOF]