Skip to content

bug(deploy): update-node.yml publishes the SLM frontend but never renders that node's nginx site config #15649

Description

@mrveiss

Found while implementing #15610.

What

playbooks/update-node.yml publishes the SLM frontend to a target node (it includes roles/_shared/tasks/build_publish_slm_frontend.yml) and maps autobot-slm-frontend to the nginx service in role_service_map, so the node it deploys to does serve that bundle. It never renders or re-renders any nginx site config.

Of the four SLM-frontend entry points, only two put the site config on the host:

Entry point Publishes the bundle Renders the site config
roles/slm_manager/tasks/main.yml yes yes (tasks/nginx_site.yml)
playbooks/update-all-nodes.yml yes yes, as of #15610
playbooks/provision-fleet-roles.yml yes yes, for the co-located case (#3012)
playbooks/update-node.yml yes no

Why it matters

Any change to the served path reaches an update-node.yml target only when one of the other three plays next runs against it. #15610 is exactly such a change: the target publishes a new bundle onto current while its nginx keeps opening whatever the last provision aimed it at. The deploy reports green and the UI does not move — the silent-staleness shape #1607 and #15462 both cost time on.

The reason this is filed rather than fixed inside #15610: update-node.yml deploys to an arbitrary target node, and rendering roles/slm_manager/templates/autobot-slm.conf.j2 there needs the whole slm_manager variable set. Rendering it with defaults on a host that is not the SLM manager would write a wrong config, which is a bigger outage than the staleness it fixes. It needs its own design pass.

Acceptance criteria

  • Determine which component actually owns the nginx site config on an update-node.yml target that serves autobot-slm-frontend, with evidence from the play, not assumption
  • Either that play re-renders the site config from the same template the role uses, or it is established with evidence that no target it deploys to serves the SLM bundle and the role_service_map entry is corrected to say so
  • The served-path guard added by bug(deploy): the SLM frontend promotion is two renames, so the served directory briefly does not exist #15610 (repo_tests/slm_frontend_atomic_publish_15610_test.py) is extended to assert whichever of the two conclusions holds, so it cannot regress silently

Activity

  1. mrveiss commented on Sep 4, 2026

    @mrveiss
    OwnerAuthor

    Already delivered by PR #15654 (merged 450ac0a3), which closed #15610.

    playbooks/update-node.yml now includes slm_manager with tasks_from: nginx_site.yml, guarded on 'autobot-slm-frontend' in deploy_roles — verified in base.

    This issue was filed while implementing #15610, correctly identifying that only two of the four entry points rendered the site config. Review of #15654 caught the same gap independently and fixed it in that PR rather than deferring, because it was not a tidy-up: the served path had moved to current and every already-provisioned node still had an nginx config naming dist/, so update-node.yml would have published a fully-verified bundle to a path nginx never opened — silently, because every check inside the publish task passes.

    All four entry points now both publish and render:

    update-all-nodes.yml       publishes=True  renders_site=True
    update-node.yml            publishes=True  renders_site=True
    slm_manager/tasks/main.yml publishes=True  renders_site=True
    provision-fleet-roles.yml  publishes=True  renders_site=True
    

    The include uses tasks_from rather than a copied template task, for the reason the sibling call site already records: a second copy drifts.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions