all:
  children:
    zuul_unreachable:
      hosts: {}
  hosts:
    debian-bookworm:
      ansible_connection: ssh
      ansible_host: 2a13:1a81:8000:3124:f816:3eff:feed:3632
      ansible_port: 22
      ansible_python_interpreter: auto
      ansible_user: zuul
      nodepool:
        az: nova
        cloud: regiocloud-a-ci
        external_id: 8c43e79d-dc73-44d8-864a-4b8ead267cca
        host_id: 5afd8fc909abddfe2ce3a956a91bbe56629648b7209fd0acfa541862
        interface_ip: 2a13:1a81:8000:3124:f816:3eff:feed:3632
        label: debian-bookworm
        node_properties: {}
        private_ipv4: 10.128.0.99
        private_ipv6: null
        provider: regiocloud-a
        public_ipv4: 81.163.193.17
        public_ipv6: 2a13:1a81:8000:3124:f816:3eff:feed:3632
        region: null
        slot: null
      tox_environment:
        NOSE_HTML_OUT_FILE: nose_results.html
        NOSE_WITH_HTML_OUTPUT: 1
        NOSE_WITH_XUNIT: 1
      tox_envlist: drift-test
  vars:
    tox_environment:
      NOSE_HTML_OUT_FILE: nose_results.html
      NOSE_WITH_HTML_OUTPUT: 1
      NOSE_WITH_XUNIT: 1
    tox_envlist: drift-test
    zuul:
      _inheritance_path:
      - '<Job base explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: osism/zuul-config/zuul.d/jobs.yaml@main#2>'
      - '<Job unittests explicit: None implied: {MatchAny:{ImpliedBranchMatcher:master}}
        source: osism/openinfra-zuul-jobs/zuul.d/general-jobs.yaml@master#9>'
      - '<Job tox explicit: None implied: {MatchAny:{ImpliedBranchMatcher:master}}
        source: osism/openinfra-zuul-jobs/zuul.d/python-jobs.yaml@master#1>'
      - '<Job release-tox-drift-test explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: osism/release/.zuul.yaml@main#2>'
      - '<Job release-tox-drift-test explicit: None implied: None source: osism/release/.zuul.yaml@main#14>'
      ansible_version: '9'
      attempts: 1
      branch: main
      build: 3138299a84454679a196e4602aeeb38d
      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/.\n\n## How
          it works\n\n1. Diffs `<version>/base.yml` against the previous release (autodetected)\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)\n3. Derives the recurring \"images have
          been rebuilt\" bullets deterministically from `docker_images.kolla` (never
          model-generated)\n4. Lets Claude (claude-sonnet-5, xhigh) write an operator-focused
          body in the style of osism-9.md\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\n\n## Deterministic sanitizing\n\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.\n\n## Notes\n\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.\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.\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).\n\n\U0001F916 Generated with [Claude
          Code](https://claude.com/claude-code)\n\nhttps://claude.ai/code/session_01M9Lo7vyUxggEKvgBYXQdW3"
        change_url: https://github.com/osism/release/pull/2609
        commit_id: 08f0ba57c14626f7a7c19d29a41f41474c9c4014
        patchset: 08f0ba57c14626f7a7c19d29a41f41474c9c4014
        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: af6c2e643c684401afb3db30d431ca86
      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/.\n\n## How
          it works\n\n1. Diffs `<version>/base.yml` against the previous release (autodetected)\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)\n3. Derives the recurring \"images have
          been rebuilt\" bullets deterministically from `docker_images.kolla` (never
          model-generated)\n4. Lets Claude (claude-sonnet-5, xhigh) write an operator-focused
          body in the style of osism-9.md\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\n\n## Deterministic sanitizing\n\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.\n\n## Notes\n\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.\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.\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).\n\n\U0001F916 Generated with [Claude
          Code](https://claude.com/claude-code)\n\nhttps://claude.ai/code/session_01M9Lo7vyUxggEKvgBYXQdW3"
        change_url: https://github.com/osism/release/pull/2609
        commit_id: 08f0ba57c14626f7a7c19d29a41f41474c9c4014
        patchset: 08f0ba57c14626f7a7c19d29a41f41474c9c4014
        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/.\n\n## How
        it works\n\n1. Diffs `<version>/base.yml` against the previous release (autodetected)\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)\n3. Derives the recurring \"images have been
        rebuilt\" bullets deterministically from `docker_images.kolla` (never model-generated)\n4.
        Lets Claude (claude-sonnet-5, xhigh) write an operator-focused body in the
        style of osism-9.md\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\n\n## Deterministic sanitizing\n\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.\n\n## Notes\n\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.\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.\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).\n\n\U0001F916
        Generated with [Claude Code](https://claude.com/claude-code)\n\nhttps://claude.ai/code/session_01M9Lo7vyUxggEKvgBYXQdW3"
      change_url: https://github.com/osism/release/pull/2609
      child_jobs: []
      commit_id: 08f0ba57c14626f7a7c19d29a41f41474c9c4014
      event_id: 8b361a70-852c-11f1-812b-43836a4f6a56
      executor:
        hostname: 521e9411259a
        inventory_file: /var/lib/zuul/builds/3138299a84454679a196e4602aeeb38d/ansible/inventory.yaml
        log_root: /var/lib/zuul/builds/3138299a84454679a196e4602aeeb38d/work/logs
        result_data_file: /var/lib/zuul/builds/3138299a84454679a196e4602aeeb38d/work/results.json
        src_root: /var/lib/zuul/builds/3138299a84454679a196e4602aeeb38d/work/src
        work_root: /var/lib/zuul/builds/3138299a84454679a196e4602aeeb38d/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/.\n\n## How
          it works\n\n1. Diffs `<version>/base.yml` against the previous release (autodetected)\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)\n3. Derives the recurring \"images have
          been rebuilt\" bullets deterministically from `docker_images.kolla` (never
          model-generated)\n4. Lets Claude (claude-sonnet-5, xhigh) write an operator-focused
          body in the style of osism-9.md\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\n\n## Deterministic sanitizing\n\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.\n\n## Notes\n\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.\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.\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).\n\n\U0001F916 Generated with [Claude
          Code](https://claude.com/claude-code)\n\nhttps://claude.ai/code/session_01M9Lo7vyUxggEKvgBYXQdW3"
        change_url: https://github.com/osism/release/pull/2609
        commit_id: 08f0ba57c14626f7a7c19d29a41f41474c9c4014
        patchset: 08f0ba57c14626f7a7c19d29a41f41474c9c4014
        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: release-tox-drift-test
      jobtags: []
      max_attempts: 3
      message: cmVsZWFzZSBub3RlczogYWRkIHBlci1yZWxlYXNlIGdlbmVyYXRvciBmb3Igb3Npc20uZ2l0aHViLmlvCgpBZGRzIGBzY3JpcHRzL2dlbmVyYXRlLXJlbGVhc2UtY2hhbmdlbG9nLnNoYCAodW50aWwgbm93IG9ubHkgcmVmZXJlbmNlZCBpbiB0aGUgUkVBRE1FKSB0byBnZW5lcmF0ZSB0aGUgcmVsZWFzZSBub3RlcyBzZWN0aW9uIGZvciBhIGZvbGxvdy11cCByZWxlYXNlIChlLmcuIDEwLjEuMCkgYXMgcHVibGlzaGVkIGF0IGh0dHBzOi8vb3Npc20udGVjaC9kb2NzL3JlbGVhc2Utbm90ZXMvLgoKIyMgSG93IGl0IHdvcmtzCgoxLiBEaWZmcyBgPHZlcnNpb24+L2Jhc2UueW1sYCBhZ2FpbnN0IHRoZSBwcmV2aW91cyByZWxlYXNlIChhdXRvZGV0ZWN0ZWQpCjIuIEZldGNoZXMgdGhlIENIQU5HRUxPRy5tZCBzZWN0aW9ucyBvZiBhbGwgY2hhbmdlZCBPU0lTTSBjb21wb25lbnRzIGZvciBleGFjdGx5IHRoZSB2ZXJzaW9uIHJhbmdlIG9mIHRoZSByZWxlYXNlIChtYXBwaW5nOiBgZXRjL2NoYW5nZWxvZy1yZXBvc2l0b3JpZXMueW1sYCDigJQgaW50ZW50aW9uYWxseSBzZXBhcmF0ZSBmcm9tIGBldGMvaW1hZ2VzLnltbGAsIHdoaWNoIG1hcHMgdG8gcmVnaXN0cnkgcGF0aHMsIG5vdCBzb3VyY2UgcmVwb3NpdG9yaWVzKQozLiBEZXJpdmVzIHRoZSByZWN1cnJpbmcgImltYWdlcyBoYXZlIGJlZW4gcmVidWlsdCIgYnVsbGV0cyBkZXRlcm1pbmlzdGljYWxseSBmcm9tIGBkb2NrZXJfaW1hZ2VzLmtvbGxhYCAobmV2ZXIgbW9kZWwtZ2VuZXJhdGVkKQo0LiBMZXRzIENsYXVkZSAoY2xhdWRlLXNvbm5ldC01LCB4aGlnaCkgd3JpdGUgYW4gb3BlcmF0b3ItZm9jdXNlZCBib2R5IGluIHRoZSBzdHlsZSBvZiBvc2lzbS05Lm1kCjUuIEluc2VydHMgdGhlIHNlY3Rpb24gaW50byBgZG9jcy9yZWxlYXNlLW5vdGVzL29zaXNtLTxtYWpvcj4ubWRgIG9mIG9zaXNtL29zaXNtLmdpdGh1Yi5pbzogYC0tc2l0ZS1kaXJgIHBhdGNoZXMgYW4gZXhpc3RpbmcgY2hlY2tvdXQsIGAtLWNvbW1pdGAvYC0tcHJgIGNsb25lIGFuZCBvcGVuIGEgcHVsbCByZXF1ZXN0IHRoZXJlOyB3aXRob3V0IHRoZXNlIG9wdGlvbnMgb25seSBhIGxvY2FsIGZpbGUgaXMgd3JpdHRlbiBmb3IgcmV2aWV3CgojIyBEZXRlcm1pbmlzdGljIHNhbml0aXppbmcKClRoZSBtb2RlbCBvdXRwdXQgaXMgbmV2ZXIgdHJ1c3RlZCBhcy1pcyAoYHNyYy9yZWxlYXNlLW5vdGVzLnB5IHNhbml0aXplYCk6IGFuIG91dGVyIGBgYG1hcmtkb3duIGZlbmNlIGlzIHVud3JhcHBlZCBhbmQgZXZlcnl0aGluZyBhZnRlciBpdHMgY2xvc2VyIGRyb3BwZWQsIHByZWFtYmxlIGFuZCBkdXBsaWNhdGUgcmVsZWFzZSBoZWFkaW5ncyBhcmUgc3RyaXBwZWQsIGgxL2gyIGhlYWRpbmdzIGFyZSBkZW1vdGVkIHRvIGgzIHNvIHRoZSBnZW5lcmF0ZWQgYm9keSBjYW4gbmV2ZXIgb3ZlcndyaXRlIG90aGVyIHJlbGVhc2Ugc2VjdGlvbnMsIGFuZCB0aGUgc2NyaXB0IGFib3J0cyBpZiBubyBgIyMjIGAgc3Vic2VjdGlvbiByZW1haW5zLiBJbiB0aGUgZmlyc3QgZW5kLXRvLWVuZCB0ZXN0IHJ1biB0aGUgbW9kZWwgd3JhcHBlZCBpdHMgd2hvbGUgb3V0cHV0IGluIGEgY29kZSBmZW5jZSBhbmQgYXBwZW5kZWQgbWV0YS1jb21tZW50YXJ5IOKAlCB0aGUgZ3VhcmRzIGNhdWdodCBpdC4KCiMjIE5vdGVzCgotIEluc2VydGlvbiByZXF1aXJlcyB0aGUgdGFyZ2V0IHBhZ2UgdG8gZm9sbG93IHRoZSBvc2lzbS05Lm1kIGxheW91dCAocmVsZWFzZSBzZWN0aW9ucyBsaWtlIGAjIyA5LjUuMCAoMjAyNTExMzApYCwgbmV3ZXN0IGZpcnN0LCBsaW5rZWQgcmVsZWFzZSB0YWJsZSk7IGBpbnNlcnRgIGZhaWxzIHdpdGggYSBoaW50IG90aGVyd2lzZS4gb3Npc20tMTAubWQgbmVlZHMgYSBvbmUtdGltZSByZXN0cnVjdHVyZSBiZWZvcmUgZmlyc3QgdXNlLgotIFRoZSBjb21wb25lbnQgQ0hBTkdFTE9HcyBhcmUgdGhlIGNvbnRlbnQgc291cmNlOiBydW4gYGdlbmVyYXRlLWNoYW5nZWxvZy1pbnB1dC5zaCAtLWF1dG9gIGluIHRoZSBjb21wb25lbnQgcmVwb3NpdG9yaWVzIGZpcnN0IHNvIHRoZWlyIENIQU5HRUxPRy5tZCBmaWxlcyBjb3ZlciB0aGUgbmV3IGNvbXBvbmVudCB2ZXJzaW9ucy4KLSBUZXN0ZWQgZW5kLXRvLWVuZCBmb3IgMTAuMS4wIChpbnB1dCBnZW5lcmF0aW9uLCBDbGF1ZGUgcnVuLCBzYW5pdGl6aW5nLCBpbnNlcnRpb24gaW50byBhIHJlc3RydWN0dXJlZCBjb3B5IG9mIG9zaXNtLTEwLm1kLCBkdXBsaWNhdGUvdW5yZXN0cnVjdHVyZWQgZXJyb3IgcGF0aHMpLgoK8J+kliBHZW5lcmF0ZWQgd2l0aCBbQ2xhdWRlIENvZGVdKGh0dHBzOi8vY2xhdWRlLmNvbS9jbGF1ZGUtY29kZSkKCmh0dHBzOi8vY2xhdWRlLmFpL2NvZGUvc2Vzc2lvbl8wMU05TG83dnlVeGdnRUt2Z0JZWFFkVzM=
      patchset: 08f0ba57c14626f7a7c19d29a41f41474c9c4014
      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/openinfra-zuul-jobs:
            canonical_name: github.com/osism/openinfra-zuul-jobs
            checkout: master
            commit: 242732586e2cba04d04867d3e302888c766bc231
          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/zuul-jobs:
            canonical_name: github.com/osism/zuul-jobs
            checkout: main
            commit: 1d71e58c93442038e695a5d883d57a603182c7ae
        playbooks:
        - path: untrusted/project_0/github.com/osism/openinfra-zuul-jobs/playbooks/tox/run.yaml
          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: playbook branch
            link_name: ansible/playbook_0/role_1/openinfra-zuul-jobs
            link_target: untrusted/project_0/github.com/osism/openinfra-zuul-jobs
            role_path: ansible/playbook_0/role_1/openinfra-zuul-jobs/roles
          - checkout: main
            checkout_description: zuul branch
            link_name: ansible/playbook_0/role_2/zuul-jobs
            link_target: untrusted/project_2/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: 9ee685e6ad03c69de6bc46f63b6174da2aac05cf
          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
