From ed313598fc6781b5817b1ded0f52766656c8f319 Mon Sep 17 00:00:00 2001 From: Sergiy Gladkyy Date: Mon, 9 Mar 2026 18:42:00 +0100 Subject: [PATCH 1/2] RDK-48642: Moving DeviceProvisioning configuration URLs to the product layers Reason for change: DeviceProvisioning configuration is Test Procedure: described in the ticket Implements: recipe changes Risks: No Source: COMCAST License: Apache-2.0 Upstream-Status: Pending Signed-off-by: Sergiy Gladkyy --- classes/socprovisioning-config.bbclass | 58 ++++++++++++++++++++++++++ conf/include/image-classes.inc | 3 ++ 2 files changed, 61 insertions(+) create mode 100644 classes/socprovisioning-config.bbclass diff --git a/classes/socprovisioning-config.bbclass b/classes/socprovisioning-config.bbclass new file mode 100644 index 0000000..e22d61c --- /dev/null +++ b/classes/socprovisioning-config.bbclass @@ -0,0 +1,58 @@ +# Stamps /etc/rfcdefaults/socprovisioning.ini with product-layer values +# at image assembly time (ROOTFS_POSTPROCESS_COMMAND). +# +# Field values should be configured in product layers via BitBake variables: +# SocProvisioningActivation, SocProvisioningRenewal, +# SocProvisioningNameSpaceUri, SocProvisioningNameSpacePrefix, +# SocProvisioningAuthMessage, SocProvisioningdisableCredentialsPrefetchCaching, +# SocProvisioningbackoffIntervalMax + +python create_socprovisioning_config() { + import os + + fields = { + "SocProvisioning.Activation": d.getVar("SocProvisioningActivation"), + "SocProvisioning.Renewal": d.getVar("SocProvisioningRenewal"), + "SocProvisioning.NameSpaceUri": d.getVar("SocProvisioningNameSpaceUri"), + "SocProvisioning.NameSpacePrefix": d.getVar("SocProvisioningNameSpacePrefix"), + "SocProvisioning.AuthMessage": d.getVar("SocProvisioningAuthMessage"), + "SocProvisioning.disableCredentialsPrefetchCaching": + d.getVar("SocProvisioningdisableCredentialsPrefetchCaching"), + "SocProvisioning.backoffIntervalMax": + d.getVar("SocProvisioningbackoffIntervalMax"), + } + + # Only proceed if at least one URL is defined + has_urls = any(fields.get(k) for k in [ + "SocProvisioning.Activation", "SocProvisioning.Renewal"]) + if not has_urls: + bb.note("No SocProvisioning URLs defined in product layer - " + "device will use middleware defaults") + return + + rootfs = d.getVar("IMAGE_ROOTFS") + ini_path = os.path.join(rootfs, "etc", "rfcdefaults", "socprovisioning.ini") + + if not os.path.exists(ini_path): + bb.warn("socprovisioning.ini not found at %s - skipping" % ini_path) + return + + # Read existing INI, replace values where product layer defines them + with open(ini_path, "r", encoding="utf-8") as f: + lines = f.readlines() + + with open(ini_path, "w", encoding="utf-8") as f: + for line in lines: + replaced = False + for field, value in fields.items(): + prefix = "Device.DeviceInfo.X_RDKCENTRAL-COM_RFC.%s=" % field + if value and line.startswith(prefix): + f.write("%s%s\n" % (prefix, value)) + replaced = True + break + if not replaced: + f.write(line) + os.chmod(ini_path, 0o644) +} +create_socprovisioning_config[vardepsexclude] += "DATETIME" +ROOTFS_POSTPROCESS_COMMAND += 'create_socprovisioning_config; ' diff --git a/conf/include/image-classes.inc b/conf/include/image-classes.inc index 8c983e0..99f8183 100644 --- a/conf/include/image-classes.inc +++ b/conf/include/image-classes.inc @@ -22,3 +22,6 @@ IMAGE_CLASSES += "ttsconfig" # /etc/mediarite/mediarite-product.cfg IMAGE_CLASSES += "mediariteproductconfig" + +# /etc/rfcdefaults/socprovisioning.ini +IMAGE_CLASSES += "socprovisioning-config" From b8564b49d419c96d0da1fb5a9c144cdc97c294e1 Mon Sep 17 00:00:00 2001 From: Sergiy Gladkyy Date: Thu, 9 Apr 2026 22:06:40 +0200 Subject: [PATCH 2/2] Apply suggestion from @Copilot Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- classes/socprovisioning-config.bbclass | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/classes/socprovisioning-config.bbclass b/classes/socprovisioning-config.bbclass index e22d61c..03ccdd1 100644 --- a/classes/socprovisioning-config.bbclass +++ b/classes/socprovisioning-config.bbclass @@ -54,5 +54,13 @@ python create_socprovisioning_config() { f.write(line) os.chmod(ini_path, 0o644) } -create_socprovisioning_config[vardepsexclude] += "DATETIME" +do_rootfs[vardeps] += " \ + SocProvisioningActivation \ + SocProvisioningRenewal \ + SocProvisioningNameSpaceUri \ + SocProvisioningNameSpacePrefix \ + SocProvisioningAuthMessage \ + SocProvisioningdisableCredentialsPrefetchCaching \ + SocProvisioningbackoffIntervalMax \ +" ROOTFS_POSTPROCESS_COMMAND += 'create_socprovisioning_config; '