Feature 11074: Enhanced OSM declarative modelling for applications. OSM's SDK for intent manipulation

Change-Id: I6d03faa143eafcf30380b3b854c54f177dcf8f25
Signed-off-by: garciadeblas <gerardo.garciadeblas@telefonica.com>
diff --git a/docker/osm-nushell-krm-functions/operations/replace.nu b/docker/osm-nushell-krm-functions/operations/replace.nu
new file mode 100644
index 0000000..0181c40
--- /dev/null
+++ b/docker/osm-nushell-krm-functions/operations/replace.nu
@@ -0,0 +1,58 @@
+#######################################################################################
+# Copyright ETSI Contributors and Others.
+#
+# 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.
+#######################################################################################
+
+# Module with helper functions to manage the replacement of placeholder variables by the values of well-known enviroment variables.
+
+
+# Helper function to replace placeholder variables by the content of their homonym environment variables in a record received from stdin.
+export def vars [
+    environment: record   # Record with environment variables to load
+    defaults: record = {
+        FLEET_REPOS_BASE: "/repos"
+        CATALOG_REPOS_BASE: "/repos"
+        PROJECT_NAME: "osm_admin"
+    }  # Record with default values for the variables to be replaced
+]: [
+    record -> record
+] {
+    let in_record: record = $in
+
+    # Environment with default values when undefined
+    let full_environment: record = (
+        $defaults
+        | merge $environment
+    )
+
+    let variable_enumeration: string = (
+        $full_environment
+        | columns
+        | each { |col|
+            $"\${($col)}"
+        }
+        | str join ","
+    )
+
+    $in_record
+    | to yaml
+    | with-env $full_environment {
+        $in
+        | (
+            ^envsubst $variable_enumeration
+        )
+    }
+    | from yaml
+}