all:
  children:
    zuul_unreachable:
      hosts: {}
  hosts:
    debian-bookworm:
      ansible_connection: ssh
      ansible_host: 2a13:1a81:8000:3124:f816:3eff:fe5e:9f43
      ansible_port: 22
      ansible_python_interpreter: auto
      ansible_user: zuul
      nodepool:
        az: nova
        cloud: regiocloud-a-ci
        external_id: c0243961-a035-4ada-ad3c-431b82bb9197
        host_id: 5afd8fc909abddfe2ce3a956a91bbe56629648b7209fd0acfa541862
        interface_ip: 2a13:1a81:8000:3124:f816:3eff:fe5e:9f43
        label: debian-bookworm
        node_properties: {}
        private_ipv4: 10.128.0.108
        private_ipv6: null
        provider: regiocloud-a
        public_ipv4: 81.163.193.150
        public_ipv6: 2a13:1a81:8000:3124:f816:3eff:fe5e:9f43
        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 flake8 explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: osism/zuul-jobs/.zuul.yaml@main#32>'
      - '<Job flake8 explicit: None implied: None source: osism/openstack-image-manager/.zuul.yaml@main#16>'
      ansible_version: '9'
      attempts: 1
      branch: main
      build: e4e34c69f4b2488eaea65a1e5e434472
      build_refs:
      - branch: main
        change: '1255'
        change_message: "Clean up and refactor contrib/update.py\n\n## What\n\nRefactors
          `contrib/update.py` (the scheduled image-definition updater) in three commits:\n\n1.
          **Remove the dead mirror path + fix `--dry-run`.** `update.py` carried its
          own MinIO upload (`mirror_image`) that broke in the Oct 2025 object-store
          migration \u2014 the default bucket name `osism/openstack-images` contains
          a `/` and is rejected by the minio client \u2014 and duplicated what `contrib/mirror.py`
          already does. It only ran in the non-`--dry-run` path, which CI never exercises,
          so it sat broken for months. Removed it; `mirror.py` remains the sole uploader.
          `--dry-run` now honestly means \"compute but do not write the YAML\" (previously
          it rewrote the file regardless), and the scheduled workflow drops the flag
          so it still opens update PRs.\n\n2. **Add a golden characterization test**
          covering all six upstream parsing variants (AlmaLinux plain, CentOS 7 /
          Stream BSD + dated-filename, Rocky BSD, Ubuntu/Debian directory-listing),
          so the refactor is provably behaviour-preserving.\n\n3. **Refactor discovery
          into pluggable handlers.** Replace the per-`shortname` `if/elif` checksum-parsing
          branches with `MirrorDirHandler` / `DirListingHandler`, selected by a `distro
          \u2192 handler` registry plus a `shortname \u2192 config` table. Adding
          a new major becomes a config line instead of a code branch. Adds explicit
          request timeouts.\n\n## Testing\n\n- `tox -e test -- test/unit` \u2014 golden
          + `--dry-run` write-contract tests pass; parity confirmed against live upstream.\n-
          flake8 / black clean.\n\n## Notes\n\nNo change to the values `update.py`
          produces \u2014 the golden test pins that. This is groundwork for adding
          current distro majors; follow-up branches build on it.\n\n\U0001F916 Generated
          with [Claude Code](https://claude.com/claude-code)"
        change_url: https://github.com/osism/openstack-image-manager/pull/1255
        commit_id: 130675aed0f38460bc2c201fb0970a8a7b24b9a2
        patchset: 130675aed0f38460bc2c201fb0970a8a7b24b9a2
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/openstack-image-manager
          name: osism/openstack-image-manager
          short_name: openstack-image-manager
        src_dir: src/github.com/osism/openstack-image-manager
        topic: null
      buildset: 574319566b9a4b698021634f7f459309
      buildset_refs:
      - branch: main
        change: '1255'
        change_message: "Clean up and refactor contrib/update.py\n\n## What\n\nRefactors
          `contrib/update.py` (the scheduled image-definition updater) in three commits:\n\n1.
          **Remove the dead mirror path + fix `--dry-run`.** `update.py` carried its
          own MinIO upload (`mirror_image`) that broke in the Oct 2025 object-store
          migration \u2014 the default bucket name `osism/openstack-images` contains
          a `/` and is rejected by the minio client \u2014 and duplicated what `contrib/mirror.py`
          already does. It only ran in the non-`--dry-run` path, which CI never exercises,
          so it sat broken for months. Removed it; `mirror.py` remains the sole uploader.
          `--dry-run` now honestly means \"compute but do not write the YAML\" (previously
          it rewrote the file regardless), and the scheduled workflow drops the flag
          so it still opens update PRs.\n\n2. **Add a golden characterization test**
          covering all six upstream parsing variants (AlmaLinux plain, CentOS 7 /
          Stream BSD + dated-filename, Rocky BSD, Ubuntu/Debian directory-listing),
          so the refactor is provably behaviour-preserving.\n\n3. **Refactor discovery
          into pluggable handlers.** Replace the per-`shortname` `if/elif` checksum-parsing
          branches with `MirrorDirHandler` / `DirListingHandler`, selected by a `distro
          \u2192 handler` registry plus a `shortname \u2192 config` table. Adding
          a new major becomes a config line instead of a code branch. Adds explicit
          request timeouts.\n\n## Testing\n\n- `tox -e test -- test/unit` \u2014 golden
          + `--dry-run` write-contract tests pass; parity confirmed against live upstream.\n-
          flake8 / black clean.\n\n## Notes\n\nNo change to the values `update.py`
          produces \u2014 the golden test pins that. This is groundwork for adding
          current distro majors; follow-up branches build on it.\n\n\U0001F916 Generated
          with [Claude Code](https://claude.com/claude-code)"
        change_url: https://github.com/osism/openstack-image-manager/pull/1255
        commit_id: 130675aed0f38460bc2c201fb0970a8a7b24b9a2
        patchset: 130675aed0f38460bc2c201fb0970a8a7b24b9a2
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/openstack-image-manager
          name: osism/openstack-image-manager
          short_name: openstack-image-manager
        src_dir: src/github.com/osism/openstack-image-manager
        topic: null
      change: '1255'
      change_message: "Clean up and refactor contrib/update.py\n\n## What\n\nRefactors
        `contrib/update.py` (the scheduled image-definition updater) in three commits:\n\n1.
        **Remove the dead mirror path + fix `--dry-run`.** `update.py` carried its
        own MinIO upload (`mirror_image`) that broke in the Oct 2025 object-store
        migration \u2014 the default bucket name `osism/openstack-images` contains
        a `/` and is rejected by the minio client \u2014 and duplicated what `contrib/mirror.py`
        already does. It only ran in the non-`--dry-run` path, which CI never exercises,
        so it sat broken for months. Removed it; `mirror.py` remains the sole uploader.
        `--dry-run` now honestly means \"compute but do not write the YAML\" (previously
        it rewrote the file regardless), and the scheduled workflow drops the flag
        so it still opens update PRs.\n\n2. **Add a golden characterization test**
        covering all six upstream parsing variants (AlmaLinux plain, CentOS 7 / Stream
        BSD + dated-filename, Rocky BSD, Ubuntu/Debian directory-listing), so the
        refactor is provably behaviour-preserving.\n\n3. **Refactor discovery into
        pluggable handlers.** Replace the per-`shortname` `if/elif` checksum-parsing
        branches with `MirrorDirHandler` / `DirListingHandler`, selected by a `distro
        \u2192 handler` registry plus a `shortname \u2192 config` table. Adding a
        new major becomes a config line instead of a code branch. Adds explicit request
        timeouts.\n\n## Testing\n\n- `tox -e test -- test/unit` \u2014 golden + `--dry-run`
        write-contract tests pass; parity confirmed against live upstream.\n- flake8
        / black clean.\n\n## Notes\n\nNo change to the values `update.py` produces
        \u2014 the golden test pins that. This is groundwork for adding current distro
        majors; follow-up branches build on it.\n\n\U0001F916 Generated with [Claude
        Code](https://claude.com/claude-code)"
      change_url: https://github.com/osism/openstack-image-manager/pull/1255
      child_jobs: []
      commit_id: 130675aed0f38460bc2c201fb0970a8a7b24b9a2
      event_id: 068b4980-8414-11f1-9cd1-295fb6811784
      executor:
        hostname: 521e9411259a
        inventory_file: /var/lib/zuul/builds/e4e34c69f4b2488eaea65a1e5e434472/ansible/inventory.yaml
        log_root: /var/lib/zuul/builds/e4e34c69f4b2488eaea65a1e5e434472/work/logs
        result_data_file: /var/lib/zuul/builds/e4e34c69f4b2488eaea65a1e5e434472/work/results.json
        src_root: /var/lib/zuul/builds/e4e34c69f4b2488eaea65a1e5e434472/work/src
        work_root: /var/lib/zuul/builds/e4e34c69f4b2488eaea65a1e5e434472/work
      include_vars: []
      items:
      - branch: main
        change: '1255'
        change_message: "Clean up and refactor contrib/update.py\n\n## What\n\nRefactors
          `contrib/update.py` (the scheduled image-definition updater) in three commits:\n\n1.
          **Remove the dead mirror path + fix `--dry-run`.** `update.py` carried its
          own MinIO upload (`mirror_image`) that broke in the Oct 2025 object-store
          migration \u2014 the default bucket name `osism/openstack-images` contains
          a `/` and is rejected by the minio client \u2014 and duplicated what `contrib/mirror.py`
          already does. It only ran in the non-`--dry-run` path, which CI never exercises,
          so it sat broken for months. Removed it; `mirror.py` remains the sole uploader.
          `--dry-run` now honestly means \"compute but do not write the YAML\" (previously
          it rewrote the file regardless), and the scheduled workflow drops the flag
          so it still opens update PRs.\n\n2. **Add a golden characterization test**
          covering all six upstream parsing variants (AlmaLinux plain, CentOS 7 /
          Stream BSD + dated-filename, Rocky BSD, Ubuntu/Debian directory-listing),
          so the refactor is provably behaviour-preserving.\n\n3. **Refactor discovery
          into pluggable handlers.** Replace the per-`shortname` `if/elif` checksum-parsing
          branches with `MirrorDirHandler` / `DirListingHandler`, selected by a `distro
          \u2192 handler` registry plus a `shortname \u2192 config` table. Adding
          a new major becomes a config line instead of a code branch. Adds explicit
          request timeouts.\n\n## Testing\n\n- `tox -e test -- test/unit` \u2014 golden
          + `--dry-run` write-contract tests pass; parity confirmed against live upstream.\n-
          flake8 / black clean.\n\n## Notes\n\nNo change to the values `update.py`
          produces \u2014 the golden test pins that. This is groundwork for adding
          current distro majors; follow-up branches build on it.\n\n\U0001F916 Generated
          with [Claude Code](https://claude.com/claude-code)"
        change_url: https://github.com/osism/openstack-image-manager/pull/1255
        commit_id: 130675aed0f38460bc2c201fb0970a8a7b24b9a2
        patchset: 130675aed0f38460bc2c201fb0970a8a7b24b9a2
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/openstack-image-manager
          name: osism/openstack-image-manager
          short_name: openstack-image-manager
          src_dir: src/github.com/osism/openstack-image-manager
        topic: null
      job: flake8
      jobtags: []
      max_attempts: 3
      message: Q2xlYW4gdXAgYW5kIHJlZmFjdG9yIGNvbnRyaWIvdXBkYXRlLnB5CgojIyBXaGF0CgpSZWZhY3RvcnMgYGNvbnRyaWIvdXBkYXRlLnB5YCAodGhlIHNjaGVkdWxlZCBpbWFnZS1kZWZpbml0aW9uIHVwZGF0ZXIpIGluIHRocmVlIGNvbW1pdHM6CgoxLiAqKlJlbW92ZSB0aGUgZGVhZCBtaXJyb3IgcGF0aCArIGZpeCBgLS1kcnktcnVuYC4qKiBgdXBkYXRlLnB5YCBjYXJyaWVkIGl0cyBvd24gTWluSU8gdXBsb2FkIChgbWlycm9yX2ltYWdlYCkgdGhhdCBicm9rZSBpbiB0aGUgT2N0IDIwMjUgb2JqZWN0LXN0b3JlIG1pZ3JhdGlvbiDigJQgdGhlIGRlZmF1bHQgYnVja2V0IG5hbWUgYG9zaXNtL29wZW5zdGFjay1pbWFnZXNgIGNvbnRhaW5zIGEgYC9gIGFuZCBpcyByZWplY3RlZCBieSB0aGUgbWluaW8gY2xpZW50IOKAlCBhbmQgZHVwbGljYXRlZCB3aGF0IGBjb250cmliL21pcnJvci5weWAgYWxyZWFkeSBkb2VzLiBJdCBvbmx5IHJhbiBpbiB0aGUgbm9uLWAtLWRyeS1ydW5gIHBhdGgsIHdoaWNoIENJIG5ldmVyIGV4ZXJjaXNlcywgc28gaXQgc2F0IGJyb2tlbiBmb3IgbW9udGhzLiBSZW1vdmVkIGl0OyBgbWlycm9yLnB5YCByZW1haW5zIHRoZSBzb2xlIHVwbG9hZGVyLiBgLS1kcnktcnVuYCBub3cgaG9uZXN0bHkgbWVhbnMgImNvbXB1dGUgYnV0IGRvIG5vdCB3cml0ZSB0aGUgWUFNTCIgKHByZXZpb3VzbHkgaXQgcmV3cm90ZSB0aGUgZmlsZSByZWdhcmRsZXNzKSwgYW5kIHRoZSBzY2hlZHVsZWQgd29ya2Zsb3cgZHJvcHMgdGhlIGZsYWcgc28gaXQgc3RpbGwgb3BlbnMgdXBkYXRlIFBScy4KCjIuICoqQWRkIGEgZ29sZGVuIGNoYXJhY3Rlcml6YXRpb24gdGVzdCoqIGNvdmVyaW5nIGFsbCBzaXggdXBzdHJlYW0gcGFyc2luZyB2YXJpYW50cyAoQWxtYUxpbnV4IHBsYWluLCBDZW50T1MgNyAvIFN0cmVhbSBCU0QgKyBkYXRlZC1maWxlbmFtZSwgUm9ja3kgQlNELCBVYnVudHUvRGViaWFuIGRpcmVjdG9yeS1saXN0aW5nKSwgc28gdGhlIHJlZmFjdG9yIGlzIHByb3ZhYmx5IGJlaGF2aW91ci1wcmVzZXJ2aW5nLgoKMy4gKipSZWZhY3RvciBkaXNjb3ZlcnkgaW50byBwbHVnZ2FibGUgaGFuZGxlcnMuKiogUmVwbGFjZSB0aGUgcGVyLWBzaG9ydG5hbWVgIGBpZi9lbGlmYCBjaGVja3N1bS1wYXJzaW5nIGJyYW5jaGVzIHdpdGggYE1pcnJvckRpckhhbmRsZXJgIC8gYERpckxpc3RpbmdIYW5kbGVyYCwgc2VsZWN0ZWQgYnkgYSBgZGlzdHJvIOKGkiBoYW5kbGVyYCByZWdpc3RyeSBwbHVzIGEgYHNob3J0bmFtZSDihpIgY29uZmlnYCB0YWJsZS4gQWRkaW5nIGEgbmV3IG1ham9yIGJlY29tZXMgYSBjb25maWcgbGluZSBpbnN0ZWFkIG9mIGEgY29kZSBicmFuY2guIEFkZHMgZXhwbGljaXQgcmVxdWVzdCB0aW1lb3V0cy4KCiMjIFRlc3RpbmcKCi0gYHRveCAtZSB0ZXN0IC0tIHRlc3QvdW5pdGAg4oCUIGdvbGRlbiArIGAtLWRyeS1ydW5gIHdyaXRlLWNvbnRyYWN0IHRlc3RzIHBhc3M7IHBhcml0eSBjb25maXJtZWQgYWdhaW5zdCBsaXZlIHVwc3RyZWFtLgotIGZsYWtlOCAvIGJsYWNrIGNsZWFuLgoKIyMgTm90ZXMKCk5vIGNoYW5nZSB0byB0aGUgdmFsdWVzIGB1cGRhdGUucHlgIHByb2R1Y2VzIOKAlCB0aGUgZ29sZGVuIHRlc3QgcGlucyB0aGF0LiBUaGlzIGlzIGdyb3VuZHdvcmsgZm9yIGFkZGluZyBjdXJyZW50IGRpc3RybyBtYWpvcnM7IGZvbGxvdy11cCBicmFuY2hlcyBidWlsZCBvbiBpdC4KCvCfpJYgR2VuZXJhdGVkIHdpdGggW0NsYXVkZSBDb2RlXShodHRwczovL2NsYXVkZS5jb20vY2xhdWRlLWNvZGUp
      patchset: 130675aed0f38460bc2c201fb0970a8a7b24b9a2
      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/flake8/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: 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/openstack-image-manager
        name: osism/openstack-image-manager
        short_name: openstack-image-manager
        src_dir: src/github.com/osism/openstack-image-manager
      projects:
        github.com/osism/openstack-image-manager:
          canonical_hostname: github.com
          canonical_name: github.com/osism/openstack-image-manager
          checkout: main
          checkout_description: zuul branch
          commit: 123f38134a4afd9b9590b60b179664a08714afbc
          name: osism/openstack-image-manager
          required: false
          short_name: openstack-image-manager
          src_dir: src/github.com/osism/openstack-image-manager
      ref: refs/pull/1255/head
      resources: {}
      tenant: osism
      timeout: 1800
      topic: null
      voting: true
