all:
  children:
    zuul_unreachable:
      hosts: {}
  hosts:
    debian-bookworm:
      ansible_connection: ssh
      ansible_host: 2a13:1a81:8000:3124:f816:3eff:fe60:137
      ansible_port: 22
      ansible_python_interpreter: auto
      ansible_user: zuul
      nodepool:
        az: nova
        cloud: regiocloud-a-ci
        external_id: 97cf2cdc-e023-4c89-b546-2577d2cf5ce4
        host_id: df70f2a3f3d0c26428f22685cfc722ebc48099d99e7332c39e017195
        interface_ip: 2a13:1a81:8000:3124:f816:3eff:fe60:137
        label: debian-bookworm
        node_properties: {}
        private_ipv4: 10.128.7.159
        private_ipv6: null
        provider: regiocloud-a
        public_ipv4: 81.163.192.141
        public_ipv6: 2a13:1a81:8000:3124:f816:3eff:fe60:137
        region: null
        slot: null
  vars:
    zuul:
      _inheritance_path:
      - '<Job base explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: osism/zuul-config/zuul.d/jobs.yaml@main#2>'
      - '<Job python-black explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: osism/zuul-jobs/.zuul.yaml@main#54>'
      - '<Job python-black explicit: None implied: None source: osism/release/.zuul.yaml@main#14>'
      ansible_version: '9'
      attempts: 1
      branch: main
      build: 4742a25109e64d538f69e5f1685da852
      build_refs:
      - branch: main
        change: '2609'
        change_message: "release notes: add per-release generator for osism.github.io\n\nAdds
          `scripts/generate-release-changelog.sh` (until now only referenced in the
          README) to generate the release notes section for a follow-up release (e.g.
          10.1.0) as published at https://osism.tech/docs/release-notes/.\r\n\r\n##
          How it works\r\n\r\n1. Diffs `<version>/base.yml` against the previous release
          (autodetected)\r\n2. Fetches the CHANGELOG.md sections of all changed OSISM
          components for exactly the version range of the release (mapping: `etc/changelog-repositories.yml`
          \u2014 intentionally separate from `etc/images.yml`, which maps to registry
          paths, not source repositories)\r\n3. Derives the recurring \"images have
          been rebuilt\" bullets deterministically from `docker_images.kolla` (never
          model-generated)\r\n4. Lets Claude (claude-sonnet-5, xhigh) write an operator-focused
          body in the style of osism-9.md\r\n5. Inserts the section into `docs/release-notes/osism-<major>.md`
          of osism/osism.github.io: `--site-dir` patches an existing checkout, `--commit`/`--pr`
          clone and open a pull request there; without these options only a local
          file is written for review\r\n\r\n## Deterministic sanitizing\r\n\r\nThe
          model output is never trusted as-is (`src/release-notes.py sanitize`): an
          outer ```markdown fence is unwrapped and everything after its closer dropped,
          preamble and duplicate release headings are stripped, h1/h2 headings are
          demoted to h3 so the generated body can never overwrite other release sections,
          and the script aborts if no `### ` subsection remains. In the first end-to-end
          test run the model wrapped its whole output in a code fence and appended
          meta-commentary \u2014 the guards caught it.\r\n\r\n## Notes\r\n\r\n- Insertion
          requires the target page to follow the osism-9.md layout (release sections
          like `## 9.5.0 (20251130)`, newest first, linked release table); `insert`
          fails with a hint otherwise. osism-10.md needs a one-time restructure before
          first use.\r\n- The component CHANGELOGs are the content source: run `generate-changelog-input.sh
          --auto` in the component repositories first so their CHANGELOG.md files
          cover the new component versions.\r\n- Tested end-to-end for 10.1.0 (input
          generation, Claude run, sanitizing, insertion into a restructured copy of
          osism-10.md, duplicate/unrestructured error paths).\r\n\r\n\U0001F916 Generated
          with [Claude Code](https://claude.com/claude-code)"
        change_url: https://github.com/osism/release/pull/2609
        commit_id: 736e003e4595633a43e74ac01c9b4f93f6ed042d
        patchset: 736e003e4595633a43e74ac01c9b4f93f6ed042d
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/release
          name: osism/release
          short_name: release
        src_dir: src/github.com/osism/release
        topic: null
      buildset: 6a5427d02fe4492da6ff7449e849e147
      buildset_refs:
      - branch: main
        change: '2609'
        change_message: "release notes: add per-release generator for osism.github.io\n\nAdds
          `scripts/generate-release-changelog.sh` (until now only referenced in the
          README) to generate the release notes section for a follow-up release (e.g.
          10.1.0) as published at https://osism.tech/docs/release-notes/.\r\n\r\n##
          How it works\r\n\r\n1. Diffs `<version>/base.yml` against the previous release
          (autodetected)\r\n2. Fetches the CHANGELOG.md sections of all changed OSISM
          components for exactly the version range of the release (mapping: `etc/changelog-repositories.yml`
          \u2014 intentionally separate from `etc/images.yml`, which maps to registry
          paths, not source repositories)\r\n3. Derives the recurring \"images have
          been rebuilt\" bullets deterministically from `docker_images.kolla` (never
          model-generated)\r\n4. Lets Claude (claude-sonnet-5, xhigh) write an operator-focused
          body in the style of osism-9.md\r\n5. Inserts the section into `docs/release-notes/osism-<major>.md`
          of osism/osism.github.io: `--site-dir` patches an existing checkout, `--commit`/`--pr`
          clone and open a pull request there; without these options only a local
          file is written for review\r\n\r\n## Deterministic sanitizing\r\n\r\nThe
          model output is never trusted as-is (`src/release-notes.py sanitize`): an
          outer ```markdown fence is unwrapped and everything after its closer dropped,
          preamble and duplicate release headings are stripped, h1/h2 headings are
          demoted to h3 so the generated body can never overwrite other release sections,
          and the script aborts if no `### ` subsection remains. In the first end-to-end
          test run the model wrapped its whole output in a code fence and appended
          meta-commentary \u2014 the guards caught it.\r\n\r\n## Notes\r\n\r\n- Insertion
          requires the target page to follow the osism-9.md layout (release sections
          like `## 9.5.0 (20251130)`, newest first, linked release table); `insert`
          fails with a hint otherwise. osism-10.md needs a one-time restructure before
          first use.\r\n- The component CHANGELOGs are the content source: run `generate-changelog-input.sh
          --auto` in the component repositories first so their CHANGELOG.md files
          cover the new component versions.\r\n- Tested end-to-end for 10.1.0 (input
          generation, Claude run, sanitizing, insertion into a restructured copy of
          osism-10.md, duplicate/unrestructured error paths).\r\n\r\n\U0001F916 Generated
          with [Claude Code](https://claude.com/claude-code)"
        change_url: https://github.com/osism/release/pull/2609
        commit_id: 736e003e4595633a43e74ac01c9b4f93f6ed042d
        patchset: 736e003e4595633a43e74ac01c9b4f93f6ed042d
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/release
          name: osism/release
          short_name: release
        src_dir: src/github.com/osism/release
        topic: null
      change: '2609'
      change_message: "release notes: add per-release generator for osism.github.io\n\nAdds
        `scripts/generate-release-changelog.sh` (until now only referenced in the
        README) to generate the release notes section for a follow-up release (e.g.
        10.1.0) as published at https://osism.tech/docs/release-notes/.\r\n\r\n##
        How it works\r\n\r\n1. Diffs `<version>/base.yml` against the previous release
        (autodetected)\r\n2. Fetches the CHANGELOG.md sections of all changed OSISM
        components for exactly the version range of the release (mapping: `etc/changelog-repositories.yml`
        \u2014 intentionally separate from `etc/images.yml`, which maps to registry
        paths, not source repositories)\r\n3. Derives the recurring \"images have
        been rebuilt\" bullets deterministically from `docker_images.kolla` (never
        model-generated)\r\n4. Lets Claude (claude-sonnet-5, xhigh) write an operator-focused
        body in the style of osism-9.md\r\n5. Inserts the section into `docs/release-notes/osism-<major>.md`
        of osism/osism.github.io: `--site-dir` patches an existing checkout, `--commit`/`--pr`
        clone and open a pull request there; without these options only a local file
        is written for review\r\n\r\n## Deterministic sanitizing\r\n\r\nThe model
        output is never trusted as-is (`src/release-notes.py sanitize`): an outer
        ```markdown fence is unwrapped and everything after its closer dropped, preamble
        and duplicate release headings are stripped, h1/h2 headings are demoted to
        h3 so the generated body can never overwrite other release sections, and the
        script aborts if no `### ` subsection remains. In the first end-to-end test
        run the model wrapped its whole output in a code fence and appended meta-commentary
        \u2014 the guards caught it.\r\n\r\n## Notes\r\n\r\n- Insertion requires the
        target page to follow the osism-9.md layout (release sections like `## 9.5.0
        (20251130)`, newest first, linked release table); `insert` fails with a hint
        otherwise. osism-10.md needs a one-time restructure before first use.\r\n-
        The component CHANGELOGs are the content source: run `generate-changelog-input.sh
        --auto` in the component repositories first so their CHANGELOG.md files cover
        the new component versions.\r\n- Tested end-to-end for 10.1.0 (input generation,
        Claude run, sanitizing, insertion into a restructured copy of osism-10.md,
        duplicate/unrestructured error paths).\r\n\r\n\U0001F916 Generated with [Claude
        Code](https://claude.com/claude-code)"
      change_url: https://github.com/osism/release/pull/2609
      child_jobs: []
      commit_id: 736e003e4595633a43e74ac01c9b4f93f6ed042d
      event_id: ad1554d0-8545-11f1-89c8-0a55047abcb6
      executor:
        hostname: 521e9411259a
        inventory_file: /var/lib/zuul/builds/4742a25109e64d538f69e5f1685da852/ansible/inventory.yaml
        log_root: /var/lib/zuul/builds/4742a25109e64d538f69e5f1685da852/work/logs
        result_data_file: /var/lib/zuul/builds/4742a25109e64d538f69e5f1685da852/work/results.json
        src_root: /var/lib/zuul/builds/4742a25109e64d538f69e5f1685da852/work/src
        work_root: /var/lib/zuul/builds/4742a25109e64d538f69e5f1685da852/work
      include_vars: []
      items:
      - branch: main
        change: '2609'
        change_message: "release notes: add per-release generator for osism.github.io\n\nAdds
          `scripts/generate-release-changelog.sh` (until now only referenced in the
          README) to generate the release notes section for a follow-up release (e.g.
          10.1.0) as published at https://osism.tech/docs/release-notes/.\r\n\r\n##
          How it works\r\n\r\n1. Diffs `<version>/base.yml` against the previous release
          (autodetected)\r\n2. Fetches the CHANGELOG.md sections of all changed OSISM
          components for exactly the version range of the release (mapping: `etc/changelog-repositories.yml`
          \u2014 intentionally separate from `etc/images.yml`, which maps to registry
          paths, not source repositories)\r\n3. Derives the recurring \"images have
          been rebuilt\" bullets deterministically from `docker_images.kolla` (never
          model-generated)\r\n4. Lets Claude (claude-sonnet-5, xhigh) write an operator-focused
          body in the style of osism-9.md\r\n5. Inserts the section into `docs/release-notes/osism-<major>.md`
          of osism/osism.github.io: `--site-dir` patches an existing checkout, `--commit`/`--pr`
          clone and open a pull request there; without these options only a local
          file is written for review\r\n\r\n## Deterministic sanitizing\r\n\r\nThe
          model output is never trusted as-is (`src/release-notes.py sanitize`): an
          outer ```markdown fence is unwrapped and everything after its closer dropped,
          preamble and duplicate release headings are stripped, h1/h2 headings are
          demoted to h3 so the generated body can never overwrite other release sections,
          and the script aborts if no `### ` subsection remains. In the first end-to-end
          test run the model wrapped its whole output in a code fence and appended
          meta-commentary \u2014 the guards caught it.\r\n\r\n## Notes\r\n\r\n- Insertion
          requires the target page to follow the osism-9.md layout (release sections
          like `## 9.5.0 (20251130)`, newest first, linked release table); `insert`
          fails with a hint otherwise. osism-10.md needs a one-time restructure before
          first use.\r\n- The component CHANGELOGs are the content source: run `generate-changelog-input.sh
          --auto` in the component repositories first so their CHANGELOG.md files
          cover the new component versions.\r\n- Tested end-to-end for 10.1.0 (input
          generation, Claude run, sanitizing, insertion into a restructured copy of
          osism-10.md, duplicate/unrestructured error paths).\r\n\r\n\U0001F916 Generated
          with [Claude Code](https://claude.com/claude-code)"
        change_url: https://github.com/osism/release/pull/2609
        commit_id: 736e003e4595633a43e74ac01c9b4f93f6ed042d
        patchset: 736e003e4595633a43e74ac01c9b4f93f6ed042d
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/release
          name: osism/release
          short_name: release
          src_dir: src/github.com/osism/release
        topic: null
      job: python-black
      jobtags: []
      max_attempts: 3
      message: cmVsZWFzZSBub3RlczogYWRkIHBlci1yZWxlYXNlIGdlbmVyYXRvciBmb3Igb3Npc20uZ2l0aHViLmlvCgpBZGRzIGBzY3JpcHRzL2dlbmVyYXRlLXJlbGVhc2UtY2hhbmdlbG9nLnNoYCAodW50aWwgbm93IG9ubHkgcmVmZXJlbmNlZCBpbiB0aGUgUkVBRE1FKSB0byBnZW5lcmF0ZSB0aGUgcmVsZWFzZSBub3RlcyBzZWN0aW9uIGZvciBhIGZvbGxvdy11cCByZWxlYXNlIChlLmcuIDEwLjEuMCkgYXMgcHVibGlzaGVkIGF0IGh0dHBzOi8vb3Npc20udGVjaC9kb2NzL3JlbGVhc2Utbm90ZXMvLg0KDQojIyBIb3cgaXQgd29ya3MNCg0KMS4gRGlmZnMgYDx2ZXJzaW9uPi9iYXNlLnltbGAgYWdhaW5zdCB0aGUgcHJldmlvdXMgcmVsZWFzZSAoYXV0b2RldGVjdGVkKQ0KMi4gRmV0Y2hlcyB0aGUgQ0hBTkdFTE9HLm1kIHNlY3Rpb25zIG9mIGFsbCBjaGFuZ2VkIE9TSVNNIGNvbXBvbmVudHMgZm9yIGV4YWN0bHkgdGhlIHZlcnNpb24gcmFuZ2Ugb2YgdGhlIHJlbGVhc2UgKG1hcHBpbmc6IGBldGMvY2hhbmdlbG9nLXJlcG9zaXRvcmllcy55bWxgIOKAlCBpbnRlbnRpb25hbGx5IHNlcGFyYXRlIGZyb20gYGV0Yy9pbWFnZXMueW1sYCwgd2hpY2ggbWFwcyB0byByZWdpc3RyeSBwYXRocywgbm90IHNvdXJjZSByZXBvc2l0b3JpZXMpDQozLiBEZXJpdmVzIHRoZSByZWN1cnJpbmcgImltYWdlcyBoYXZlIGJlZW4gcmVidWlsdCIgYnVsbGV0cyBkZXRlcm1pbmlzdGljYWxseSBmcm9tIGBkb2NrZXJfaW1hZ2VzLmtvbGxhYCAobmV2ZXIgbW9kZWwtZ2VuZXJhdGVkKQ0KNC4gTGV0cyBDbGF1ZGUgKGNsYXVkZS1zb25uZXQtNSwgeGhpZ2gpIHdyaXRlIGFuIG9wZXJhdG9yLWZvY3VzZWQgYm9keSBpbiB0aGUgc3R5bGUgb2Ygb3Npc20tOS5tZA0KNS4gSW5zZXJ0cyB0aGUgc2VjdGlvbiBpbnRvIGBkb2NzL3JlbGVhc2Utbm90ZXMvb3Npc20tPG1ham9yPi5tZGAgb2Ygb3Npc20vb3Npc20uZ2l0aHViLmlvOiBgLS1zaXRlLWRpcmAgcGF0Y2hlcyBhbiBleGlzdGluZyBjaGVja291dCwgYC0tY29tbWl0YC9gLS1wcmAgY2xvbmUgYW5kIG9wZW4gYSBwdWxsIHJlcXVlc3QgdGhlcmU7IHdpdGhvdXQgdGhlc2Ugb3B0aW9ucyBvbmx5IGEgbG9jYWwgZmlsZSBpcyB3cml0dGVuIGZvciByZXZpZXcNCg0KIyMgRGV0ZXJtaW5pc3RpYyBzYW5pdGl6aW5nDQoNClRoZSBtb2RlbCBvdXRwdXQgaXMgbmV2ZXIgdHJ1c3RlZCBhcy1pcyAoYHNyYy9yZWxlYXNlLW5vdGVzLnB5IHNhbml0aXplYCk6IGFuIG91dGVyIGBgYG1hcmtkb3duIGZlbmNlIGlzIHVud3JhcHBlZCBhbmQgZXZlcnl0aGluZyBhZnRlciBpdHMgY2xvc2VyIGRyb3BwZWQsIHByZWFtYmxlIGFuZCBkdXBsaWNhdGUgcmVsZWFzZSBoZWFkaW5ncyBhcmUgc3RyaXBwZWQsIGgxL2gyIGhlYWRpbmdzIGFyZSBkZW1vdGVkIHRvIGgzIHNvIHRoZSBnZW5lcmF0ZWQgYm9keSBjYW4gbmV2ZXIgb3ZlcndyaXRlIG90aGVyIHJlbGVhc2Ugc2VjdGlvbnMsIGFuZCB0aGUgc2NyaXB0IGFib3J0cyBpZiBubyBgIyMjIGAgc3Vic2VjdGlvbiByZW1haW5zLiBJbiB0aGUgZmlyc3QgZW5kLXRvLWVuZCB0ZXN0IHJ1biB0aGUgbW9kZWwgd3JhcHBlZCBpdHMgd2hvbGUgb3V0cHV0IGluIGEgY29kZSBmZW5jZSBhbmQgYXBwZW5kZWQgbWV0YS1jb21tZW50YXJ5IOKAlCB0aGUgZ3VhcmRzIGNhdWdodCBpdC4NCg0KIyMgTm90ZXMNCg0KLSBJbnNlcnRpb24gcmVxdWlyZXMgdGhlIHRhcmdldCBwYWdlIHRvIGZvbGxvdyB0aGUgb3Npc20tOS5tZCBsYXlvdXQgKHJlbGVhc2Ugc2VjdGlvbnMgbGlrZSBgIyMgOS41LjAgKDIwMjUxMTMwKWAsIG5ld2VzdCBmaXJzdCwgbGlua2VkIHJlbGVhc2UgdGFibGUpOyBgaW5zZXJ0YCBmYWlscyB3aXRoIGEgaGludCBvdGhlcndpc2UuIG9zaXNtLTEwLm1kIG5lZWRzIGEgb25lLXRpbWUgcmVzdHJ1Y3R1cmUgYmVmb3JlIGZpcnN0IHVzZS4NCi0gVGhlIGNvbXBvbmVudCBDSEFOR0VMT0dzIGFyZSB0aGUgY29udGVudCBzb3VyY2U6IHJ1biBgZ2VuZXJhdGUtY2hhbmdlbG9nLWlucHV0LnNoIC0tYXV0b2AgaW4gdGhlIGNvbXBvbmVudCByZXBvc2l0b3JpZXMgZmlyc3Qgc28gdGhlaXIgQ0hBTkdFTE9HLm1kIGZpbGVzIGNvdmVyIHRoZSBuZXcgY29tcG9uZW50IHZlcnNpb25zLg0KLSBUZXN0ZWQgZW5kLXRvLWVuZCBmb3IgMTAuMS4wIChpbnB1dCBnZW5lcmF0aW9uLCBDbGF1ZGUgcnVuLCBzYW5pdGl6aW5nLCBpbnNlcnRpb24gaW50byBhIHJlc3RydWN0dXJlZCBjb3B5IG9mIG9zaXNtLTEwLm1kLCBkdXBsaWNhdGUvdW5yZXN0cnVjdHVyZWQgZXJyb3IgcGF0aHMpLg0KDQrwn6SWIEdlbmVyYXRlZCB3aXRoIFtDbGF1ZGUgQ29kZV0oaHR0cHM6Ly9jbGF1ZGUuY29tL2NsYXVkZS1jb2RlKQ==
      patchset: 736e003e4595633a43e74ac01c9b4f93f6ed042d
      pipeline: check
      playbook_context:
        playbook_projects:
          trusted/project_0/github.com/osism/zuul-config:
            canonical_name: github.com/osism/zuul-config
            checkout: main
            commit: 71b711c422c10c242a8f785dc6d41ed9d12e9cd3
          trusted/project_1/github.com/osism/openinfra-zuul-jobs:
            canonical_name: github.com/osism/openinfra-zuul-jobs
            checkout: master
            commit: 242732586e2cba04d04867d3e302888c766bc231
          trusted/project_2/github.com/osism/zuul-jobs:
            canonical_name: github.com/osism/zuul-jobs
            checkout: main
            commit: 1d71e58c93442038e695a5d883d57a603182c7ae
          untrusted/project_0/github.com/osism/zuul-jobs:
            canonical_name: github.com/osism/zuul-jobs
            checkout: main
            commit: 1d71e58c93442038e695a5d883d57a603182c7ae
          untrusted/project_1/github.com/osism/zuul-config:
            canonical_name: github.com/osism/zuul-config
            checkout: main
            commit: 71b711c422c10c242a8f785dc6d41ed9d12e9cd3
          untrusted/project_2/github.com/osism/openinfra-zuul-jobs:
            canonical_name: github.com/osism/openinfra-zuul-jobs
            checkout: master
            commit: 242732586e2cba04d04867d3e302888c766bc231
        playbooks:
        - path: untrusted/project_0/github.com/osism/zuul-jobs/playbooks/python-black/run.yml
          roles:
          - checkout: main
            checkout_description: zuul branch
            link_name: ansible/playbook_0/role_0/zuul-config
            link_target: untrusted/project_1/github.com/osism/zuul-config
            role_path: ansible/playbook_0/role_0/zuul-config/roles
          - checkout: master
            checkout_description: project default branch
            link_name: ansible/playbook_0/role_1/openinfra-zuul-jobs
            link_target: untrusted/project_2/github.com/osism/openinfra-zuul-jobs
            role_path: ansible/playbook_0/role_1/openinfra-zuul-jobs/roles
          - checkout: main
            checkout_description: playbook branch
            link_name: ansible/playbook_0/role_2/zuul-jobs
            link_target: untrusted/project_0/github.com/osism/zuul-jobs
            role_path: ansible/playbook_0/role_2/zuul-jobs/roles
      post_review: false
      post_timeout: 1800
      pre_timeout: null
      project:
        canonical_hostname: github.com
        canonical_name: github.com/osism/release
        name: osism/release
        short_name: release
        src_dir: src/github.com/osism/release
      projects:
        github.com/osism/release:
          canonical_hostname: github.com
          canonical_name: github.com/osism/release
          checkout: main
          checkout_description: zuul branch
          commit: b7878a543527579351b0269e32ac4f339f772b61
          name: osism/release
          required: false
          short_name: release
          src_dir: src/github.com/osism/release
      ref: refs/pull/2609/head
      resources: {}
      tenant: osism
      timeout: 1800
      topic: null
      voting: true
