diff --git a/jjb/pipeline/voltha/playground/voltha-tt-physical-functional-tests.groovy b/jjb/pipeline/voltha/playground/voltha-tt-physical-functional-tests.groovy
index 7e8b5d9..569cf1d 100644
--- a/jjb/pipeline/voltha/playground/voltha-tt-physical-functional-tests.groovy
+++ b/jjb/pipeline/voltha/playground/voltha-tt-physical-functional-tests.groovy
@@ -69,19 +69,12 @@
 
 	// -----------------------------------------------------------------------
 	// -----------------------------------------------------------------------
-	stage('IAM')
-	{
-	    String iam = getIam('main')
-            println("** ${iam}: ENTER")
-            println("** ${iam}: LEAVE")
-	}
-
-	// -----------------------------------------------------------------------
-	// -----------------------------------------------------------------------
 	stage('Clone voltha-system-tests')
 	{
 	    steps
 	    {
+		iam(this) { enter = true }
+
 		step([$class: 'WsCleanup'])
 		checkout([
 		    $class: 'GitSCM',
@@ -110,6 +103,8 @@
               exit 1  # verify fail
             fi
             """)
+
+		iam(this) { leave = true }
 		} // step
 	    } // steps
 	} // stage
diff --git a/makefiles/lint/groovy/README.md b/makefiles/lint/groovy/README.md
new file mode 100644
index 0000000..aa9b41a
--- /dev/null
+++ b/makefiles/lint/groovy/README.md
@@ -0,0 +1,13 @@
+# lint: groovy source
+
+# Invoke the linting tool
+% make lint-groovy
+
+# Alt checking: groovy interpreter
+
+Odd syntax errors can be detected by the groovy interpreter.
+
+% groovy path/to/{source}.groovy
+
+jjb/ pipeline scripts will eventually due to syntax problems but groovy can
+still detect problems like mismatched quotes, invalid op tokens, etc.
diff --git a/makefiles/lint/groovy/urls b/makefiles/lint/groovy/urls
new file mode 100644
index 0000000..aa5c5eb
--- /dev/null
+++ b/makefiles/lint/groovy/urls
@@ -0,0 +1,8 @@
+# -*- makefile -*-
+
+# Config file and exclusions
+https://www.npmjs.com/package/npm-groovy-lint#Configuration
+
+https://github.com/nvuillam/npm-groovy-lint
+
+# [EOF]
diff --git a/vars/iam.groovy b/vars/iam.groovy
new file mode 100644
index 0000000..0a340b6
--- /dev/null
+++ b/vars/iam.groovy
@@ -0,0 +1,148 @@
+#!/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.
+// -----------------------------------------------------------------------
+// % npm-groovy-lint vars/iam.groovy
+// -----------------------------------------------------------------------
+
+// -----------------------------------------------------------------------
+// -----------------------------------------------------------------------
+String getIam(String func)
+{
+    // Cannot rely on a stack trace due to jenkins manipulation
+    // Report who and where caller came from.
+    String src = [
+        'repo:ci-management',
+        'vars',
+        'iam',
+    ].join('/')
+
+    String iam = [src, func].join('::')
+    return(iam)
+}
+
+// -----------------------------------------------------------------------
+// Intent: Display future enhancement list.
+// -----------------------------------------------------------------------
+void todo()
+{
+    String iam = getIam('todo')
+
+    println("""
+[TODO: $iam]
+ o Pass jenkins parameters so todo() function can be conditionally called.
+ o Add call parameters to:
+   - Specify {ENTER,LEAVE} strings for logging.
+   - Set methods for caller to specify an alternate getIam() path.
+""")
+
+    return
+}
+
+// -----------------------------------------------------------------------
+// Intent: Placeholder in case future enhancements are needed
+// -----------------------------------------------------------------------
+Boolean process(Map config)
+{
+    String iam = getIam('process')
+
+    Boolean leave = false
+
+    // Identify caller with a banner for logging
+    if (config.containsKey('enter')) {
+        println("** ${iam}: ENTER")
+    }
+    else if (config.containsKey('leave')) {
+	leave = true
+    }
+    else
+    {
+        println("** ${iam}: HELLO")
+    }
+ 
+    // Display future enhancement list
+    if (config.containsKey('todo')) {
+        todo()
+    }
+
+    // Maintain a sane logging enclosure block
+    if (leave)
+    {
+        println("** ${iam}: LEAVE")
+    }
+    
+    return(true)
+}
+
+// -----------------------------------------------------------------------
+// Intent: Debug method for jenkins jobs identifying caller for logging.
+// -----------------------------------------------------------------------
+// Given:
+//   self    jenkins environment pointer 'this'
+//   config  groovy closure used to pass key/value pairs into argv
+//     enter    Display "** {iam} ENTER"
+//     leave    Display "** {iam} LEAVE"
+//     todo     Display future enhancement list
+// -----------------------------------------------------------------------
+// Usage:
+//   o called from a jenkins {pipeline,stage,script} block.
+//   o iam(this)
+//     {
+//         foo  = bar    // paramter foo is...
+//         tans = fans
+//     }
+// -----------------------------------------------------------------------
+Boolean call(def self, Map config)
+{
+    String iam = getIam('main')
+
+    argv = argv ?: [:] // {ternary,elvis} operator
+    println("** ${iam}: argv=${argv}")
+
+    Boolean ranToCompletion = false
+    try
+    {
+        // [WIP] type(self) needed to quiet lint complaint.
+        // npm-groovy-lint:  def for method parameter type should not be used  NoDef
+        print(" ** $iam: Type of self variable is =" + self.getClass())
+        // if (! self instanceof jenkins_object) { throw }
+
+        if (process(argv))
+        {
+            ranToCompletion = true
+        }
+    }
+    /* groovylint-disable*/ /* yuck! */
+    catch (Exception err)
+    /* groovylint-enable */
+    {
+        println("** ${iam}: EXCEPTION ${err}")
+        throw err
+    }
+    finally
+    {
+        println("** ${iam}: LEAVE")
+    }
+
+    if (!ranToCompletion)
+    {
+        throw new Exception("ERROR ${iam}: Detected incomplete script run")
+    }
+
+    return(true)
+}
+
+// [EOF]
+
