all:
  children:
    zuul_unreachable:
      hosts: {}
  hosts:
    debian-bookworm:
      ansible_connection: ssh
      ansible_host: 2a13:1a81:8000:3124:f816:3eff:fee0:1a85
      ansible_port: 22
      ansible_python_interpreter: auto
      ansible_user: zuul
      nodepool:
        az: nova
        cloud: regiocloud-a-ci
        external_id: 305d825d-f4b3-4ddf-8b52-773a03f0e8ef
        host_id: df70f2a3f3d0c26428f22685cfc722ebc48099d99e7332c39e017195
        interface_ip: 2a13:1a81:8000:3124:f816:3eff:fee0:1a85
        label: debian-bookworm
        node_properties: {}
        private_ipv4: 10.128.7.78
        private_ipv6: null
        provider: regiocloud-a
        public_ipv4: 81.163.192.206
        public_ipv6: 2a13:1a81:8000:3124:f816:3eff:fee0:1a85
        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 hadolint explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: osism/zuul-jobs/.zuul.yaml@main#37>'
      - '<Job hadolint explicit: None implied: None source: osism/container-images/.zuul.yaml@main#2>'
      ansible_version: '9'
      attempts: 1
      branch: main
      build: efd9feaefc12499ea4ecd8b0f1c67ec1
      build_refs:
      - branch: main
        change: '952'
        change_message: "tempest: install netcat for reachability probes\n\n## What\n\nFix
          false UDP port-forwarding reachability failures in the tempest image, caused
          by a missing `nc`/`ncat` binary rather than any OVN/product bug.\n\nTwo
          commits:\n\n- `tempest/Containerfile` \u2014 add `netcat-openbsd` (provides
          `nc`) to the persistent apt-get install list. This is the actual fix.\n-
          `tempest/files/patches/0004-scenario-nc-client-missing-nc-error.patch` \u2014
          defence-in-depth: make `neutron_tempest_plugin` `nc_client()` raise a clear
          error on exit 127 instead of returning empty stdout.\n\n## Why\n\nThe image
          shipped neither `nc` nor `ncat`. `neutron_tempest_plugin.scenario.base.nc_client()`
          builds its local connectivity probe as `echo ... | nc ...`; with no netcat
          binary the command exits 127 (`/bin/sh: nc: not found`). `shell.execute(check=False)`
          discards that status and returns empty stdout, which the caller reads as
          \"port not reachable\" and retries to a misleading timeout.\n\nThis turned
          healthy data-plane behaviour into false failures:\n\n- `PortForwardingTestJSON.test_port_forwarding_editing_and_deleting_udp_rule`\n-
          `PortForwardingTestJSON.test_port_forwarding_to_2_servers`\n\nBoth drive
          their reachability checks locally from the tempest host, so every probe
          failed before sending a packet.\n\n## Validation\n\n- Live repro on cloudpod
          confirmed OVN forward and reverse UDP NAT work correctly for fresh and edited
          rules; guest listeners bound successfully (34 stacked listeners accumulated
          over retries).\n- Installing only `netcat-openbsd` into a throwaway copy
          of the stock `registry.osism.tech/osism/tempest:latest` image made both
          tests pass unchanged (86.3s and 143.8s), with no change to tbng/kolla-ansible/OVN.\n-
          Patch 0004 generated from the pinned `neutron-tempest-plugin` 3.2.0 source
          and validated as the build applies it: `patch -p1 --forward --dry-run` applies
          clean, `ast.parse` on the result is valid, and re-apply is correctly detected
          as already-applied (self-expiry gating works).\n\n## Notes\n\n- `Dockerfile`
          is a symlink to `Containerfile`, so the single edit covers both.\n- `netcat-openbsd`
          is deliberately outside the `build-essential`/`patch` group that the cleanup
          step removes, so the binary survives into the final image.\n- Patch 0004
          is self-expiring per OSISM P5: once neutron-tempest-plugin fixes this upstream
          and the pin bumps past it, the patch stops applying, the build fails, and
          the file must be deleted.\n- The definitive proof is a CI image build; the
          validation above used a throwaway image with the same package.\n\n\U0001F916
          Generated with [Claude Code](https://claude.com/claude-code)"
        change_url: https://github.com/osism/container-images/pull/952
        commit_id: fe6519c884867d762ac4a93e96a8b995ca8e3f0c
        patchset: fe6519c884867d762ac4a93e96a8b995ca8e3f0c
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/container-images
          name: osism/container-images
          short_name: container-images
        src_dir: src/github.com/osism/container-images
        topic: null
      buildset: 8c36e5a3d1f2416b835cd1a5fd1dd5d1
      buildset_refs:
      - branch: main
        change: '952'
        change_message: "tempest: install netcat for reachability probes\n\n## What\n\nFix
          false UDP port-forwarding reachability failures in the tempest image, caused
          by a missing `nc`/`ncat` binary rather than any OVN/product bug.\n\nTwo
          commits:\n\n- `tempest/Containerfile` \u2014 add `netcat-openbsd` (provides
          `nc`) to the persistent apt-get install list. This is the actual fix.\n-
          `tempest/files/patches/0004-scenario-nc-client-missing-nc-error.patch` \u2014
          defence-in-depth: make `neutron_tempest_plugin` `nc_client()` raise a clear
          error on exit 127 instead of returning empty stdout.\n\n## Why\n\nThe image
          shipped neither `nc` nor `ncat`. `neutron_tempest_plugin.scenario.base.nc_client()`
          builds its local connectivity probe as `echo ... | nc ...`; with no netcat
          binary the command exits 127 (`/bin/sh: nc: not found`). `shell.execute(check=False)`
          discards that status and returns empty stdout, which the caller reads as
          \"port not reachable\" and retries to a misleading timeout.\n\nThis turned
          healthy data-plane behaviour into false failures:\n\n- `PortForwardingTestJSON.test_port_forwarding_editing_and_deleting_udp_rule`\n-
          `PortForwardingTestJSON.test_port_forwarding_to_2_servers`\n\nBoth drive
          their reachability checks locally from the tempest host, so every probe
          failed before sending a packet.\n\n## Validation\n\n- Live repro on cloudpod
          confirmed OVN forward and reverse UDP NAT work correctly for fresh and edited
          rules; guest listeners bound successfully (34 stacked listeners accumulated
          over retries).\n- Installing only `netcat-openbsd` into a throwaway copy
          of the stock `registry.osism.tech/osism/tempest:latest` image made both
          tests pass unchanged (86.3s and 143.8s), with no change to tbng/kolla-ansible/OVN.\n-
          Patch 0004 generated from the pinned `neutron-tempest-plugin` 3.2.0 source
          and validated as the build applies it: `patch -p1 --forward --dry-run` applies
          clean, `ast.parse` on the result is valid, and re-apply is correctly detected
          as already-applied (self-expiry gating works).\n\n## Notes\n\n- `Dockerfile`
          is a symlink to `Containerfile`, so the single edit covers both.\n- `netcat-openbsd`
          is deliberately outside the `build-essential`/`patch` group that the cleanup
          step removes, so the binary survives into the final image.\n- Patch 0004
          is self-expiring per OSISM P5: once neutron-tempest-plugin fixes this upstream
          and the pin bumps past it, the patch stops applying, the build fails, and
          the file must be deleted.\n- The definitive proof is a CI image build; the
          validation above used a throwaway image with the same package.\n\n\U0001F916
          Generated with [Claude Code](https://claude.com/claude-code)"
        change_url: https://github.com/osism/container-images/pull/952
        commit_id: fe6519c884867d762ac4a93e96a8b995ca8e3f0c
        patchset: fe6519c884867d762ac4a93e96a8b995ca8e3f0c
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/container-images
          name: osism/container-images
          short_name: container-images
        src_dir: src/github.com/osism/container-images
        topic: null
      change: '952'
      change_message: "tempest: install netcat for reachability probes\n\n## What\n\nFix
        false UDP port-forwarding reachability failures in the tempest image, caused
        by a missing `nc`/`ncat` binary rather than any OVN/product bug.\n\nTwo commits:\n\n-
        `tempest/Containerfile` \u2014 add `netcat-openbsd` (provides `nc`) to the
        persistent apt-get install list. This is the actual fix.\n- `tempest/files/patches/0004-scenario-nc-client-missing-nc-error.patch`
        \u2014 defence-in-depth: make `neutron_tempest_plugin` `nc_client()` raise
        a clear error on exit 127 instead of returning empty stdout.\n\n## Why\n\nThe
        image shipped neither `nc` nor `ncat`. `neutron_tempest_plugin.scenario.base.nc_client()`
        builds its local connectivity probe as `echo ... | nc ...`; with no netcat
        binary the command exits 127 (`/bin/sh: nc: not found`). `shell.execute(check=False)`
        discards that status and returns empty stdout, which the caller reads as \"port
        not reachable\" and retries to a misleading timeout.\n\nThis turned healthy
        data-plane behaviour into false failures:\n\n- `PortForwardingTestJSON.test_port_forwarding_editing_and_deleting_udp_rule`\n-
        `PortForwardingTestJSON.test_port_forwarding_to_2_servers`\n\nBoth drive their
        reachability checks locally from the tempest host, so every probe failed before
        sending a packet.\n\n## Validation\n\n- Live repro on cloudpod confirmed OVN
        forward and reverse UDP NAT work correctly for fresh and edited rules; guest
        listeners bound successfully (34 stacked listeners accumulated over retries).\n-
        Installing only `netcat-openbsd` into a throwaway copy of the stock `registry.osism.tech/osism/tempest:latest`
        image made both tests pass unchanged (86.3s and 143.8s), with no change to
        tbng/kolla-ansible/OVN.\n- Patch 0004 generated from the pinned `neutron-tempest-plugin`
        3.2.0 source and validated as the build applies it: `patch -p1 --forward --dry-run`
        applies clean, `ast.parse` on the result is valid, and re-apply is correctly
        detected as already-applied (self-expiry gating works).\n\n## Notes\n\n- `Dockerfile`
        is a symlink to `Containerfile`, so the single edit covers both.\n- `netcat-openbsd`
        is deliberately outside the `build-essential`/`patch` group that the cleanup
        step removes, so the binary survives into the final image.\n- Patch 0004 is
        self-expiring per OSISM P5: once neutron-tempest-plugin fixes this upstream
        and the pin bumps past it, the patch stops applying, the build fails, and
        the file must be deleted.\n- The definitive proof is a CI image build; the
        validation above used a throwaway image with the same package.\n\n\U0001F916
        Generated with [Claude Code](https://claude.com/claude-code)"
      change_url: https://github.com/osism/container-images/pull/952
      child_jobs: []
      commit_id: fe6519c884867d762ac4a93e96a8b995ca8e3f0c
      event_id: cb6ae580-82e8-11f1-9cfa-26d01bc27140
      executor:
        hostname: 521e9411259a
        inventory_file: /var/lib/zuul/builds/efd9feaefc12499ea4ecd8b0f1c67ec1/ansible/inventory.yaml
        log_root: /var/lib/zuul/builds/efd9feaefc12499ea4ecd8b0f1c67ec1/work/logs
        result_data_file: /var/lib/zuul/builds/efd9feaefc12499ea4ecd8b0f1c67ec1/work/results.json
        src_root: /var/lib/zuul/builds/efd9feaefc12499ea4ecd8b0f1c67ec1/work/src
        work_root: /var/lib/zuul/builds/efd9feaefc12499ea4ecd8b0f1c67ec1/work
      include_vars: []
      items:
      - branch: main
        change: '952'
        change_message: "tempest: install netcat for reachability probes\n\n## What\n\nFix
          false UDP port-forwarding reachability failures in the tempest image, caused
          by a missing `nc`/`ncat` binary rather than any OVN/product bug.\n\nTwo
          commits:\n\n- `tempest/Containerfile` \u2014 add `netcat-openbsd` (provides
          `nc`) to the persistent apt-get install list. This is the actual fix.\n-
          `tempest/files/patches/0004-scenario-nc-client-missing-nc-error.patch` \u2014
          defence-in-depth: make `neutron_tempest_plugin` `nc_client()` raise a clear
          error on exit 127 instead of returning empty stdout.\n\n## Why\n\nThe image
          shipped neither `nc` nor `ncat`. `neutron_tempest_plugin.scenario.base.nc_client()`
          builds its local connectivity probe as `echo ... | nc ...`; with no netcat
          binary the command exits 127 (`/bin/sh: nc: not found`). `shell.execute(check=False)`
          discards that status and returns empty stdout, which the caller reads as
          \"port not reachable\" and retries to a misleading timeout.\n\nThis turned
          healthy data-plane behaviour into false failures:\n\n- `PortForwardingTestJSON.test_port_forwarding_editing_and_deleting_udp_rule`\n-
          `PortForwardingTestJSON.test_port_forwarding_to_2_servers`\n\nBoth drive
          their reachability checks locally from the tempest host, so every probe
          failed before sending a packet.\n\n## Validation\n\n- Live repro on cloudpod
          confirmed OVN forward and reverse UDP NAT work correctly for fresh and edited
          rules; guest listeners bound successfully (34 stacked listeners accumulated
          over retries).\n- Installing only `netcat-openbsd` into a throwaway copy
          of the stock `registry.osism.tech/osism/tempest:latest` image made both
          tests pass unchanged (86.3s and 143.8s), with no change to tbng/kolla-ansible/OVN.\n-
          Patch 0004 generated from the pinned `neutron-tempest-plugin` 3.2.0 source
          and validated as the build applies it: `patch -p1 --forward --dry-run` applies
          clean, `ast.parse` on the result is valid, and re-apply is correctly detected
          as already-applied (self-expiry gating works).\n\n## Notes\n\n- `Dockerfile`
          is a symlink to `Containerfile`, so the single edit covers both.\n- `netcat-openbsd`
          is deliberately outside the `build-essential`/`patch` group that the cleanup
          step removes, so the binary survives into the final image.\n- Patch 0004
          is self-expiring per OSISM P5: once neutron-tempest-plugin fixes this upstream
          and the pin bumps past it, the patch stops applying, the build fails, and
          the file must be deleted.\n- The definitive proof is a CI image build; the
          validation above used a throwaway image with the same package.\n\n\U0001F916
          Generated with [Claude Code](https://claude.com/claude-code)"
        change_url: https://github.com/osism/container-images/pull/952
        commit_id: fe6519c884867d762ac4a93e96a8b995ca8e3f0c
        patchset: fe6519c884867d762ac4a93e96a8b995ca8e3f0c
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/container-images
          name: osism/container-images
          short_name: container-images
          src_dir: src/github.com/osism/container-images
        topic: null
      job: hadolint
      jobtags: []
      max_attempts: 3
      message: dGVtcGVzdDogaW5zdGFsbCBuZXRjYXQgZm9yIHJlYWNoYWJpbGl0eSBwcm9iZXMKCiMjIFdoYXQKCkZpeCBmYWxzZSBVRFAgcG9ydC1mb3J3YXJkaW5nIHJlYWNoYWJpbGl0eSBmYWlsdXJlcyBpbiB0aGUgdGVtcGVzdCBpbWFnZSwgY2F1c2VkIGJ5IGEgbWlzc2luZyBgbmNgL2BuY2F0YCBiaW5hcnkgcmF0aGVyIHRoYW4gYW55IE9WTi9wcm9kdWN0IGJ1Zy4KClR3byBjb21taXRzOgoKLSBgdGVtcGVzdC9Db250YWluZXJmaWxlYCDigJQgYWRkIGBuZXRjYXQtb3BlbmJzZGAgKHByb3ZpZGVzIGBuY2ApIHRvIHRoZSBwZXJzaXN0ZW50IGFwdC1nZXQgaW5zdGFsbCBsaXN0LiBUaGlzIGlzIHRoZSBhY3R1YWwgZml4LgotIGB0ZW1wZXN0L2ZpbGVzL3BhdGNoZXMvMDAwNC1zY2VuYXJpby1uYy1jbGllbnQtbWlzc2luZy1uYy1lcnJvci5wYXRjaGAg4oCUIGRlZmVuY2UtaW4tZGVwdGg6IG1ha2UgYG5ldXRyb25fdGVtcGVzdF9wbHVnaW5gIGBuY19jbGllbnQoKWAgcmFpc2UgYSBjbGVhciBlcnJvciBvbiBleGl0IDEyNyBpbnN0ZWFkIG9mIHJldHVybmluZyBlbXB0eSBzdGRvdXQuCgojIyBXaHkKClRoZSBpbWFnZSBzaGlwcGVkIG5laXRoZXIgYG5jYCBub3IgYG5jYXRgLiBgbmV1dHJvbl90ZW1wZXN0X3BsdWdpbi5zY2VuYXJpby5iYXNlLm5jX2NsaWVudCgpYCBidWlsZHMgaXRzIGxvY2FsIGNvbm5lY3Rpdml0eSBwcm9iZSBhcyBgZWNobyAuLi4gfCBuYyAuLi5gOyB3aXRoIG5vIG5ldGNhdCBiaW5hcnkgdGhlIGNvbW1hbmQgZXhpdHMgMTI3IChgL2Jpbi9zaDogbmM6IG5vdCBmb3VuZGApLiBgc2hlbGwuZXhlY3V0ZShjaGVjaz1GYWxzZSlgIGRpc2NhcmRzIHRoYXQgc3RhdHVzIGFuZCByZXR1cm5zIGVtcHR5IHN0ZG91dCwgd2hpY2ggdGhlIGNhbGxlciByZWFkcyBhcyAicG9ydCBub3QgcmVhY2hhYmxlIiBhbmQgcmV0cmllcyB0byBhIG1pc2xlYWRpbmcgdGltZW91dC4KClRoaXMgdHVybmVkIGhlYWx0aHkgZGF0YS1wbGFuZSBiZWhhdmlvdXIgaW50byBmYWxzZSBmYWlsdXJlczoKCi0gYFBvcnRGb3J3YXJkaW5nVGVzdEpTT04udGVzdF9wb3J0X2ZvcndhcmRpbmdfZWRpdGluZ19hbmRfZGVsZXRpbmdfdWRwX3J1bGVgCi0gYFBvcnRGb3J3YXJkaW5nVGVzdEpTT04udGVzdF9wb3J0X2ZvcndhcmRpbmdfdG9fMl9zZXJ2ZXJzYAoKQm90aCBkcml2ZSB0aGVpciByZWFjaGFiaWxpdHkgY2hlY2tzIGxvY2FsbHkgZnJvbSB0aGUgdGVtcGVzdCBob3N0LCBzbyBldmVyeSBwcm9iZSBmYWlsZWQgYmVmb3JlIHNlbmRpbmcgYSBwYWNrZXQuCgojIyBWYWxpZGF0aW9uCgotIExpdmUgcmVwcm8gb24gY2xvdWRwb2QgY29uZmlybWVkIE9WTiBmb3J3YXJkIGFuZCByZXZlcnNlIFVEUCBOQVQgd29yayBjb3JyZWN0bHkgZm9yIGZyZXNoIGFuZCBlZGl0ZWQgcnVsZXM7IGd1ZXN0IGxpc3RlbmVycyBib3VuZCBzdWNjZXNzZnVsbHkgKDM0IHN0YWNrZWQgbGlzdGVuZXJzIGFjY3VtdWxhdGVkIG92ZXIgcmV0cmllcykuCi0gSW5zdGFsbGluZyBvbmx5IGBuZXRjYXQtb3BlbmJzZGAgaW50byBhIHRocm93YXdheSBjb3B5IG9mIHRoZSBzdG9jayBgcmVnaXN0cnkub3Npc20udGVjaC9vc2lzbS90ZW1wZXN0OmxhdGVzdGAgaW1hZ2UgbWFkZSBib3RoIHRlc3RzIHBhc3MgdW5jaGFuZ2VkICg4Ni4zcyBhbmQgMTQzLjhzKSwgd2l0aCBubyBjaGFuZ2UgdG8gdGJuZy9rb2xsYS1hbnNpYmxlL09WTi4KLSBQYXRjaCAwMDA0IGdlbmVyYXRlZCBmcm9tIHRoZSBwaW5uZWQgYG5ldXRyb24tdGVtcGVzdC1wbHVnaW5gIDMuMi4wIHNvdXJjZSBhbmQgdmFsaWRhdGVkIGFzIHRoZSBidWlsZCBhcHBsaWVzIGl0OiBgcGF0Y2ggLXAxIC0tZm9yd2FyZCAtLWRyeS1ydW5gIGFwcGxpZXMgY2xlYW4sIGBhc3QucGFyc2VgIG9uIHRoZSByZXN1bHQgaXMgdmFsaWQsIGFuZCByZS1hcHBseSBpcyBjb3JyZWN0bHkgZGV0ZWN0ZWQgYXMgYWxyZWFkeS1hcHBsaWVkIChzZWxmLWV4cGlyeSBnYXRpbmcgd29ya3MpLgoKIyMgTm90ZXMKCi0gYERvY2tlcmZpbGVgIGlzIGEgc3ltbGluayB0byBgQ29udGFpbmVyZmlsZWAsIHNvIHRoZSBzaW5nbGUgZWRpdCBjb3ZlcnMgYm90aC4KLSBgbmV0Y2F0LW9wZW5ic2RgIGlzIGRlbGliZXJhdGVseSBvdXRzaWRlIHRoZSBgYnVpbGQtZXNzZW50aWFsYC9gcGF0Y2hgIGdyb3VwIHRoYXQgdGhlIGNsZWFudXAgc3RlcCByZW1vdmVzLCBzbyB0aGUgYmluYXJ5IHN1cnZpdmVzIGludG8gdGhlIGZpbmFsIGltYWdlLgotIFBhdGNoIDAwMDQgaXMgc2VsZi1leHBpcmluZyBwZXIgT1NJU00gUDU6IG9uY2UgbmV1dHJvbi10ZW1wZXN0LXBsdWdpbiBmaXhlcyB0aGlzIHVwc3RyZWFtIGFuZCB0aGUgcGluIGJ1bXBzIHBhc3QgaXQsIHRoZSBwYXRjaCBzdG9wcyBhcHBseWluZywgdGhlIGJ1aWxkIGZhaWxzLCBhbmQgdGhlIGZpbGUgbXVzdCBiZSBkZWxldGVkLgotIFRoZSBkZWZpbml0aXZlIHByb29mIGlzIGEgQ0kgaW1hZ2UgYnVpbGQ7IHRoZSB2YWxpZGF0aW9uIGFib3ZlIHVzZWQgYSB0aHJvd2F3YXkgaW1hZ2Ugd2l0aCB0aGUgc2FtZSBwYWNrYWdlLgoK8J+kliBHZW5lcmF0ZWQgd2l0aCBbQ2xhdWRlIENvZGVdKGh0dHBzOi8vY2xhdWRlLmNvbS9jbGF1ZGUtY29kZSk=
      patchset: fe6519c884867d762ac4a93e96a8b995ca8e3f0c
      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/hadolint/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/container-images
        name: osism/container-images
        short_name: container-images
        src_dir: src/github.com/osism/container-images
      projects:
        github.com/osism/container-images:
          canonical_hostname: github.com
          canonical_name: github.com/osism/container-images
          checkout: main
          checkout_description: zuul branch
          commit: 504a5d53f1840af09da0bcd9e57e6ce2978ec041
          name: osism/container-images
          required: false
          short_name: container-images
          src_dir: src/github.com/osism/container-images
      ref: refs/pull/952/head
      resources: {}
      tenant: osism
      timeout: 1800
      topic: null
      voting: true
