{"id":4674,"date":"2026-09-21T07:00:58","date_gmt":"2026-09-21T01:30:58","guid":{"rendered":"https:\/\/cpanelfree.com\/blog\/building-an-autonomous-linux-patch-management-pipeline-with-uyuni-and-spacewalk\/"},"modified":"2026-09-21T07:00:58","modified_gmt":"2026-09-21T01:30:58","slug":"building-an-autonomous-linux-patch-management-pipeline-with-uyuni-and-spacewalk","status":"publish","type":"post","link":"https:\/\/cpanelfree.com\/blog\/building-an-autonomous-linux-patch-management-pipeline-with-uyuni-and-spacewalk\/","title":{"rendered":"Building an Autonomous Linux Patch Management Pipeline with Uyuni and Spacewalk"},"content":{"rendered":"<p>Managing heterogeneous Linux environments across enterprise distributions often degrades into fragmented patch cadences, vulnerability backlogs, and costly configuration drift. High-throughput cloud infrastructures powered by platforms like <a href=\"https:\/\/cpanelfree.com\">CpanelFree<\/a> demand an orchestration engine capable of real-time event-driven compliance, granular errata synchronization, and phased rollouts without operational downtime. Transitioning from legacy architectures like Spacewalk to modern Uyuni architectures leverages Salt-driven message buses to turn reactive security operations into a resilient, autonomous pipeline.<\/p>\n<p><!-- more --><\/p>\n<h2>What Is Uyuni Linux Patch Management Automation?<\/h2>\n<div style=\"background:#1e293b;border-left:4px solid #10b981;padding:16px 20px;margin:24px 0;border-radius:0 8px 8px 0;color:#e2e8f0\">\n<strong style=\"color:#10b981\">Direct Answer:<\/strong> Uyuni Linux patch management automation is an open-source systems management platform that utilizes Salt to orchestrate automated package updates, errata auditing, and configuration states across multi-distribution Linux fleets. It replaces legacy polling with real-time, event-driven ZeroMQ messaging, enabling autonomous vulnerability remediation, scheduled reboot workflows, and immutable compliance verification at enterprise scale.\n<\/div>\n<h2>The Architectural Evolution: From Spacewalk to Modern Uyuni<\/h2>\n<p>For over a decade, Spacewalk served as the open-source upstream foundation for Red Hat Satellite 5. While groundbreaking in its era, Spacewalk was architected around a centralized Apache\/Tomcat core utilizing heavy relational databases (Oracle or PostgreSQL) and an XML-RPC polling protocol executed via <code>rhnsd<\/code>. Under this legacy polling model, managed client nodes queried the central server at arbitrary intervals (typically every 1 to 4 hours) to check for queued actions, package updates, or hardware profile refreshes.<\/p>\n<p>In high-density cloud environments and modern microservice clusters, this architecture exhibited critical bottlenecks:<\/p>\n<ul>\n<li><strong>High Dispatch Latency:<\/strong> Critical zero-day security errata had to wait until the client&#8217;s next scheduled polling window, resulting in significant exposure windows unless manual SSH loops or fragile <code>osad<\/code> jabber daemons were triggered.<\/li>\n<li><strong>Resource Inefficiency:<\/strong> Thousands of instances polling simultaneously generated severe database lock contention and CPU thrashing on the centralized Spacewalk node.<\/li>\n<li><strong>Rigid Distribution Silos:<\/strong> Spacewalk was tightly coupled to RPM-based ecosystems (RHEL, CentOS, Fedora), making multi-distribution support (Debian, Ubuntu, openSUSE, SUSE Linux Enterprise, Rocky Linux, AlmaLinux) clunky and error-prone.<\/li>\n<\/ul>\n<p>Uyuni emerged as the evolution of Spacewalk, spearheaded by SUSE as the upstream engine for SUSE Manager. Uyuni completely re-engineered the communication fabric by replacing XML-RPC and jabber with <strong>Salt (SaltStack)<\/strong>. Managed systems run the lightweight <code>salt-minion<\/code>, maintaining persistent, encrypted ZeroMQ communication channels (ports 4505 and 4506) to the Uyuni server. This allows patch deployment, configuration enforcement, and CVE vulnerability scanning to execute in parallel across tens of thousands of nodes in seconds.<\/p>\n<h2>Architectural Comparison: Legacy Spacewalk vs. Modern Uyuni<\/h2>\n<p>The transition to an event-driven architecture fundamentally reshapes how system updates, compliance checks, and inventory audits are performed across distributed infrastructure:<\/p>\n<table style=\"width:100%;border-collapse:collapse;margin:24px 0;background:#1e293b;color:#e2e8f0;font-size:14px;border-radius:8px;overflow:hidden\">\n<thead style=\"background:#0f172a;color:#38bdf8\">\n<tr>\n<th style=\"padding:12px 16px;border-bottom:2px solid #334155;text-align:left\">Feature \/ Metric<\/th>\n<th style=\"padding:12px 16px;border-bottom:2px solid #334155;text-align:left\">Legacy Spacewalk (XML-RPC)<\/th>\n<th style=\"padding:12px 16px;border-bottom:2px solid #334155;text-align:left\">Modern Uyuni (Salt \/ ZeroMQ)<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"padding:12px 16px;border-bottom:1px solid #334155\">Communication Protocol<\/td>\n<td style=\"padding:12px 16px;border-bottom:1px solid #334155\">HTTP\/HTTPS XML-RPC (Polling via <code>rhnsd<\/code>)<\/td>\n<td style=\"padding:12px 16px;border-bottom:1px solid #334155;color:#10b981;font-weight:600\">ZeroMQ \/ WebSockets (Real-time Event Bus)<\/td>\n<\/tr>\n<tr>\n<td style=\"padding:12px 16px;border-bottom:1px solid #334155\">Dispatch Latency (1,000 nodes)<\/td>\n<td style=\"padding:12px 16px;border-bottom:1px solid #334155\">15 to 240 minutes (Depends on polling interval)<\/td>\n<td style=\"padding:12px 16px;border-bottom:1px solid #334155;color:#10b981;font-weight:600\">&lt; 3.5 seconds (Instant broadcast)<\/td>\n<\/tr>\n<tr>\n<td style=\"padding:12px 16px;border-bottom:1px solid #334155\">Distribution Support<\/td>\n<td style=\"padding:12px 16px;border-bottom:1px solid #334155\">Primarily RPM (RHEL, CentOS, Fedora)<\/td>\n<td style=\"padding:12px 16px;border-bottom:1px solid #334155;color:#10b981;font-weight:600\">Universal (RHEL, Alma, Rocky, Debian, Ubuntu, SLES, openSUSE)<\/td>\n<\/tr>\n<tr>\n<td style=\"padding:12px 16px;border-bottom:1px solid #334155\">CVE &amp; Errata Mapping<\/td>\n<td style=\"padding:12px 16px;border-bottom:1px solid #334155\">Basic RPM errata metadata parsing<\/td>\n<td style=\"padding:12px 16px;border-bottom:1px solid #334155;color:#10b981;font-weight:600\">Automated CVE audit engine with OVAL and live CVSS scoring<\/td>\n<\/tr>\n<tr>\n<td style=\"padding:12px 16px;border-bottom:1px solid #334155\">Configuration Enforcement<\/td>\n<td style=\"padding:12px 16px;border-bottom:1px solid #334155\">Static configuration file deployment<\/td>\n<td style=\"padding:12px 16px;border-bottom:1px solid #334155;color:#10b981;font-weight:600\">Full Salt State SLS pipelines with formula catalogs<\/td>\n<\/tr>\n<tr>\n<td style=\"padding:12px 16px;border-bottom:1px solid #334155\">Scalability &amp; Proxy Caching<\/td>\n<td style=\"padding:12px 16px;border-bottom:1px solid #334155\">Squid-based Spacewalk Proxy<\/td>\n<td style=\"padding:12px 16px;border-bottom:1px solid #334155;color:#10b981;font-weight:600\">Containerized Uyuni Proxy with TCP broker &amp; HTTP caching<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div style=\"background:#1e293b;border-left:4px solid #38bdf8;padding:16px 20px;margin:24px 0;border-radius:0 8px 8px 0;color:#e2e8f0\">\n<strong style=\"color:#38bdf8\">Architecture Note:<\/strong> Uyuni&#8217;s use of Salt formulas allows infrastructure architects to bundle patch execution with mandatory pre-flight checks (e.g. verifying remaining disk capacity in <code>\/boot<\/code> and <code>\/var<\/code>) and post-flight verification (checking daemon health via systemd), ensuring a broken dependency never leaves a server in an unbootable state.\n<\/div>\n<h2>Building the Phased Autonomous Pipeline: Deployment Rings<\/h2>\n<p>Achieving zero-touch, autonomous patching requires more than simply running <code>dnf update<\/code> or <code>apt-get upgrade<\/code> on a cron schedule. Enterprise stability requires an autonomous promotion pipeline using <strong>Content Lifecycle Management (CLM)<\/strong>. In Uyuni, CLM allows administrators to snapshot repositories into immutable software channels and promote them across staged deployment rings.<\/p>\n<p>The standard autonomous pipeline utilizes four discrete rings:<\/p>\n<ol>\n<li><strong>Ring 0 (Development \/ Sandbox):<\/strong> Repositories are synchronized nightly from upstream vendors. Patches are automatically applied to non-critical development instances immediately. Synthetic integration tests validate core service runtime.<\/li>\n<li><strong>Ring 1 (Staging \/ Quality Assurance):<\/strong> After 48 hours without regressions in Ring 0, CLM filters and snapshots are promoted to Ring 1. Full regression tests, load testing, and database migration validations execute.<\/li>\n<li><strong>Ring 2 (Canary Fleet):<\/strong> The snapshot is promoted to 5-10% of production infrastructure. Real user traffic validates that no memory leaks, CPU anomalies, or API breaking changes occur under production load.<\/li>\n<li><strong>Ring 3 (Broad Production Rollout):<\/strong> After 72 hours of stable canary telemetry, the CLM snapshot is deployed across the remaining 90-95% of production systems using rolling maintenance windows with automated reboot orchestration.<\/li>\n<\/ol>\n<h2>Production Kernel &amp; Network Tuning for Uyuni Servers<\/h2>\n<p>When orchestrating thousands of Salt minions over ZeroMQ, default Linux networking and file descriptor limits will cause connection drops, worker starvation, and failed state returns. Apply the following hardened production sysctl tuning configuration on your Uyuni server node:<\/p>\n<pre><code style=\"background:#0f172a;color:#38bdf8;padding:16px;border-radius:8px;display:block;font-family:monospace;font-size:13px;line-height:1.6\"># \/etc\/sysctl.d\/99-uyuni-performance.conf\n# Enterprise Network &amp; Virtual Memory Tuning for Uyuni Salt Master Nodes\n\n# Maximize system-wide file descriptor allocations\nfs.file-max = 2097152\nfs.nr_open = 2097152\n\n# Expand TCP connection backlog and socket listen queues\nnet.core.somaxconn = 65535\nnet.core.netdev_max_backlog = 16384\nnet.ipv4.tcp_max_syn_backlog = 16384\n\n# Optimize TCP buffer memory limits for high minion concurrency\nnet.ipv4.tcp_rmem = 4096 87380 16777216\nnet.ipv4.tcp_wmem = 4096 65536 16777216\nnet.core.rmem_max = 16777216\nnet.core.wmem_max = 16777216\n\n# Enable TCP BBR congestion control for geographically dispersed minions\nnet.core.default_qdisc = fq\nnet.ipv4.tcp_congestion_control = bbr\n\n# Prevent ephemeral port exhaustion during mass state dispatches\nnet.ipv4.ip_local_port_range = 10240 65535\nnet.ipv4.tcp_tw_reuse = 1\nnet.ipv4.tcp_fin_timeout = 15\n\n# Virtual memory management: Minimize swapping while maintaining page cache\nvm.swappiness = 10\nvm.dirty_background_ratio = 5\nvm.dirty_ratio = 10\nvm.vfs_cache_pressure = 50\n<\/code><\/pre>\n<p>After creating the configuration, activate the settings immediately without rebooting:<\/p>\n<pre><code style=\"background:#0f172a;color:#38bdf8;padding:16px;border-radius:8px;display:block;font-family:monospace;font-size:13px;line-height:1.6\">sudo sysctl --system<\/code><\/pre>\n<h2>High-Throughput Salt Master Tuning for Uyuni<\/h2>\n<p>Uyuni relies on Salt&#8217;s request-reply and publish-subscribe sockets to coordinate minion tasks. Under heavy fleets, the Salt Master&#8217;s worker threads must be tuned to prevent thread pool exhaustion and high job latency. Create the following tuning profile:<\/p>\n<pre><code style=\"background:#0f172a;color:#38bdf8;padding:16px;border-radius:8px;display:block;font-family:monospace;font-size:13px;line-height:1.6\"># \/etc\/salt\/master.d\/tuning.conf\n# High-Concurrency Salt Master Tuning for Uyuni Infrastructure\n\n# Worker threads: Set to (2 * CPU Cores), minimum 8, capped at 64\nworker_threads: 16\n\n# ZeroMQ High Water Marks to prevent message loss during bulk dispatches\npub_hwm: 50000\nmax_open_files: 100000\n\n# Minion presence and ping interval configuration\ngather_job_timeout: 15\ntimeout: 30\npresence_events: True\n\n# Concurrency batching for automated states\nbatch_safe: True\nbatch_delay: 2\n\n# Cache and event bus optimization\nevent_publisher_workers: 4\nsock_pool_size: 10\nipc_mode: ipc\n<\/code><\/pre>\n<h2>Autonomous Patch Orchestration: Production Salt State<\/h2>\n<p>To automate patching without human intervention, deploy a parameterized Salt State (SLS) that verifies available disk space, synchronizes repository caches, applies security errata, audits processes requiring restarts, and issues controlled reboots. Save the following state definition:<\/p>\n<pre><code style=\"background:#0f172a;color:#38bdf8;padding:16px;border-radius:8px;display:block;font-family:monospace;font-size:13px;line-height:1.6\"># \/srv\/salt\/patching\/autonomous_pipeline.sls\n# Fully Autonomous Security Errata and Patching Pipeline\n\n{% set min_boot_free_mb = 150 %}\n{% set min_root_free_mb = 2048 %}\n\ncheck_storage_capacity:\n  cmd.run:\n    - name: |\n        boot_free=$(df -m \/boot --output=avail | tail -n1 | tr -d ' ')\n        root_free=$(df -m \/ --output=avail | tail -n1 | tr -d ' ')\n        if [ \"$boot_free\" -lt {{ min_boot_free_mb }} ]; then\n          echo \"ERROR: \/boot free space ($boot_free MB) is below safe threshold {{ min_boot_free_mb }} MB\" &gt;&amp;2\n          exit 1\n        fi\n        if [ \"$root_free\" -lt {{ min_root_free_mb }} ]; then\n          echo \"ERROR: \/ free space ($root_free MB) is below safe threshold {{ min_root_free_mb }} MB\" &gt;&amp;2\n          exit 1\n        fi\n    - unless: test ! -d \/boot\n\nrefresh_software_repositories:\n  pkg.uptodate:\n    - refresh: True\n    - require:\n      - cmd: check_storage_capacity\n\napply_security_errata:\n  cmd.run:\n    {% if grains['os_family'] == 'RedHat' %}\n    - name: dnf update-minimal --security -y\n    {% elif grains['os_family'] == 'Debian' %}\n    - name: unattended-upgrade -d\n    {% elif grains['os_family'] == 'Suse' %}\n    - name: zypper --non-interactive patch --category security\n    {% endif %}\n    - require:\n      - pkg: refresh_software_repositories\n\naudit_reboot_required:\n  cmd.run:\n    - name: |\n        if [ -f \/var\/run\/reboot-required ] || needs-restarting -r 2&gt;\/dev\/null || zypper ps -s 2&gt;\/dev\/null; then\n          echo \"REBOOT_REQUIRED\"\n        else\n          echo \"CLEAN\"\n        fi\n    - require:\n      - cmd: apply_security_errata\n<\/code><\/pre>\n<div style=\"background:#1e293b;border-left:4px solid #38bdf8;padding:16px 20px;margin:24px 0;border-radius:0 8px 8px 0;color:#e2e8f0\">\n<strong style=\"color:#38bdf8\">Operational Best Practice:<\/strong> Combine Uyuni&#8217;s Action Chains with reboot policies. Rather than restarting all servers simultaneously, schedule batches using Salt&#8217;s <code>batch: 10%<\/code> parameter. This ensures your front-end load balancers retain quorum while worker nodes cycle through kernel updates.\n<\/div>\n<h2>Production Automated Execution via Systemd Timers<\/h2>\n<p>While Uyuni provides a web-based scheduling UI, enterprise pipelines often integrate directly with systemd timers on controller nodes to drive autonomous headless execution. Deploy the following systemd service and timer pair to trigger scheduled patching windows:<\/p>\n<pre><code style=\"background:#0f172a;color:#38bdf8;padding:16px;border-radius:8px;display:block;font-family:monospace;font-size:13px;line-height:1.6\"># \/etc\/systemd\/system\/uyuni-patch-pipeline.service\n[Unit]\nDescription=Autonomous Uyuni Security Patch Pipeline\nAfter=network.target salt-master.service\nWants=network-online.target\n\n[Service]\nType=oneshot\nUser=root\nWorkingDirectory=\/srv\/salt\nExecStart=\/usr\/bin\/salt -G 'lifecycle_ring:canary' state.apply patching.autonomous_pipeline batch=10%\nStandardOutput=journal+console\nStandardError=journal+console\nTimeoutStartSec=1800\n\n[Install]\nWantedBy=multi-user.target\n<\/code><\/pre>\n<p>And the matching systemd timer for controlled maintenance window execution:<\/p>\n<pre><code style=\"background:#0f172a;color:#38bdf8;padding:16px;border-radius:8px;display:block;font-family:monospace;font-size:13px;line-height:1.6\"># \/etc\/systemd\/system\/uyuni-patch-pipeline.timer\n[Unit]\nDescription=Trigger Autonomous Patch Pipeline Weekly During Maintenance Window\n\n[Timer]\n# Execute weekly on Sunday morning at 03:00 UTC\nOnCalendar=Sun *-*-* 03:00:00 UTC\nRandomizedDelaySec=600\nPersistent=true\n\n[Install]\nWantedBy=timers.target\n<\/code><\/pre>\n<p>Enable and start the timer:<\/p>\n<pre><code style=\"background:#0f172a;color:#38bdf8;padding:16px;border-radius:8px;display:block;font-family:monospace;font-size:13px;line-height:1.6\">sudo systemctl daemon-reload\nsudo systemctl enable --now uyuni-patch-pipeline.timer<\/code><\/pre>\n<h2>Frequently Asked Questions<\/h2>\n<details style=\"background:#1e293b;border:1px solid #334155;border-radius:8px;padding:14px;margin-bottom:12px\">\n<summary style=\"cursor:pointer;font-weight:600;color:#38bdf8\">How does Uyuni handle air-gapped or disconnected Linux environments?<\/summary>\n<p style=\"margin-top:10px;color:#cbd5e1\">Uyuni natively supports disconnected deployments through its <code>spacewalk-sync-repo<\/code> and <code>mgr-sync<\/code> utilities. An external synchronization node downloads repository metadata, RPM\/DEB packages, and errata definitions from upstream vendors. The data is exported to ISO or encrypted physical storage, mounted to the air-gapped Uyuni server, and imported directly into local software channels without internet connectivity.<\/p>\n<\/details>\n<details style=\"background:#1e293b;border:1px solid #334155;border-radius:8px;padding:14px;margin-bottom:12px\">\n<summary style=\"cursor:pointer;font-weight:600;color:#38bdf8\">Can Uyuni manage mixed distributions like Rocky Linux, Ubuntu, and openSUSE simultaneously?<\/summary>\n<p style=\"margin-top:10px;color:#cbd5e1\">Yes. Unlike legacy Spacewalk, Uyuni&#8217;s Salt foundation abstracts package managers. It natively interfaces with <code>dnf\/rpm<\/code> on Red Hat derivatives, <code>apt\/dpkg<\/code> on Debian and Ubuntu, and <code>zypper\/libzypp<\/code> on SUSE systems. You can execute uniform security audits, CVE scans, and patch rollouts across heterogeneous distributions using identical Salt state commands.<\/p>\n<\/details>\n<details style=\"background:#1e293b;border:1px solid #334155;border-radius:8px;padding:14px;margin-bottom:12px\">\n<summary style=\"cursor:pointer;font-weight:600;color:#38bdf8\">How do I verify if a server requires a reboot without forcing unnecessary downtime?<\/summary>\n<p style=\"margin-top:10px;color:#cbd5e1\">Uyuni automatically leverages distribution-specific inspection tools. On Red Hat and derivatives, it invokes <code>needs-restarting -r<\/code> (part of yum-utils\/dnf-utils). On Debian and Ubuntu, it inspects <code>\/var\/run\/reboot-required<\/code>. On SUSE systems, it utilizes <code>zypper ps -s<\/code>. If only non-kernel services were updated, Uyuni can restart only the affected daemons, avoiding physical host reboots.<\/p>\n<\/details>\n<details style=\"background:#1e293b;border:1px solid #334155;border-radius:8px;padding:14px;margin-bottom:12px\">\n<summary style=\"cursor:pointer;font-weight:600;color:#38bdf8\">What is the difference between Uyuni and commercial SUSE Manager?<\/summary>\n<p style=\"margin-top:10px;color:#cbd5e1\">Uyuni is the upstream, community-driven open-source project, containing the latest features, broader distribution support, and community contributions. SUSE Manager is the commercially supported enterprise product built upon stable Uyuni codebases, featuring enterprise SLAs, commercial certifications, and vendor patch guarantees.<\/p>\n<\/details>\n<div style=\"background:linear-gradient(135deg, #0f172a 0%, #1e293b 100%);border:1px solid #334155;border-radius:12px;padding:32px;margin:40px 0;text-align:center\">\n<h3 style=\"color:#ffffff;margin-top:0;font-size:22px\">Ready to Deploy High-Performance Infrastructure?<\/h3>\n<p style=\"color:#cbd5e1;font-size:16px;line-height:1.6;max-width:680px;margin:12px auto 24px auto\">Experience blazing-fast NVMe storage, unmetered bandwidth, and enterprise LiteSpeed caching on CpanelFree.<\/p>\n<p>  <a href=\"https:\/\/cpanelfree.com\" style=\"background:#38bdf8;color:#0f172a;font-weight:700;padding:12px 28px;border-radius:6px;text-decoration:none;display:inline-block;font-size:15px\">Get Started with Free Cloud Hosting &rarr;<\/a>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Automate enterprise Linux patching across hybrid fleets with Uyuni and Salt. Eliminate manual toil, configuration drift, and CVE exposure at scale.<\/p>\n","protected":false},"author":1,"featured_media":4673,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[57,177,87,175,101],"class_list":["post-4674","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-web-hosting-news","tag-almalinux","tag-databases-performance","tag-devops","tag-networking-devops","tag-sysadmin"],"_links":{"self":[{"href":"https:\/\/cpanelfree.com\/blog\/wp-json\/wp\/v2\/posts\/4674","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cpanelfree.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cpanelfree.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cpanelfree.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/cpanelfree.com\/blog\/wp-json\/wp\/v2\/comments?post=4674"}],"version-history":[{"count":0,"href":"https:\/\/cpanelfree.com\/blog\/wp-json\/wp\/v2\/posts\/4674\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cpanelfree.com\/blog\/wp-json\/wp\/v2\/media\/4673"}],"wp:attachment":[{"href":"https:\/\/cpanelfree.com\/blog\/wp-json\/wp\/v2\/media?parent=4674"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cpanelfree.com\/blog\/wp-json\/wp\/v2\/categories?post=4674"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cpanelfree.com\/blog\/wp-json\/wp\/v2\/tags?post=4674"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}