all:
  children:
    zuul_unreachable:
      hosts: {}
  hosts:
    debian-bookworm:
      ansible_connection: ssh
      ansible_host: 2a13:1a81:8000:3124:f816:3eff:fe05:9bf9
      ansible_port: 22
      ansible_python_interpreter: auto
      ansible_user: zuul
      nodepool:
        az: nova
        cloud: regiocloud-a-ci
        external_id: 64dcfd5b-4a66-43ae-93d3-ae9423bac49d
        host_id: 5afd8fc909abddfe2ce3a956a91bbe56629648b7209fd0acfa541862
        interface_ip: 2a13:1a81:8000:3124:f816:3eff:fe05:9bf9
        label: debian-bookworm
        node_properties: {}
        private_ipv4: 10.128.7.48
        private_ipv6: null
        provider: regiocloud-a
        public_ipv4: 81.163.192.63
        public_ipv6: 2a13:1a81:8000:3124:f816:3eff:fe05:9bf9
        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 ansible-lint explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: osism/zuul-jobs/.zuul.yaml@main#7>'
      - '<Job ansible-lint explicit: None implied: None source: osism/testbed/.zuul.yaml@main#325>'
      ansible_version: '9'
      attempts: 1
      branch: main
      build: b9b0fa9529834e0c8919e9b05ef7476d
      build_refs:
      - branch: main
        change: '2929'
        change_message: "deploy: capture cloud state on manager ssh fail\n\n## What\n\nAdds
          read-only cloud-side diagnostics to the manager bring-up **rescue**\nblock
          in `playbooks/deploy.yml`. When manager bring-up fails, the rescue path\nnow
          captures and prints, using the build's own `OS_CLOUD` credentials:\n\n-
          `openstack floating ip show <manager address>` \u2014 its `port_id` shows\n
          \ whether the floating IP is associated to the expected manager port\n  (control-plane)
          vs a correct association that is mis-routed at L2 (stale\n  ARP/conntrack).\n-
          `openstack server/port/floating ip list` \u2014 leftover or unexpected\n
          \ resources in the shared project (e.g. leaked managers).\n- a live `ssh-keyscan
          \u2026 | ssh-keygen -lf` fingerprint of the manager address\n  \u2014 which
          host actually answered, to compare against the captured\n  serial-console
          host keys.\n\nAll tasks are read-only and best-effort (`changed_when`/`failed_when:
          false`),\nrun **only** in the rescue path (no overhead on a passing deploy),
          and need no\nCI credential access \u2014 the evidence lands in the job log.\n\n##
          Why (motivation, not scope)\n\nA recurring failure: the ssh probe *\"Wait
          until ssh public key authentication\nto the manager works\"* aborts with
          `REMOTE HOST IDENTIFICATION HAS CHANGED`.\nLog analysis of two occurrences
          shows the manager booted **once** with a\nstable key and the floating IP
          reached it correctly early in the probe, yet\nthe **same** floating IP reached
          a **different** host by the time the probe\ngave up \u2014 the FIP is re-routed
          mid-build to a host that is not the manager\nthis build booted. Neither
          a stale `known_hosts` entry nor the purge in the\nearlier fix explains that:\n\n-
          #2928\n\n**We would rather collect more decisive data before attempting
          another fix.**\nThe earlier attempt addressed the wrong layer, and guessing
          again risks doing\nthe same. The single most decisive datum is the floating
          IP's `port_id` at\nfailure time (control-plane mis-association vs L2 mis-routing);
          these\ndiagnostics exist to capture it \u2014 and related state \u2014 from
          the next\noccurrence, so any follow-up fix targets the layer that is actually
          at fault.\nThey are general enough to keep long-term.\n\n## Occurrences
          (Zuul)\n\n- 2026-07-12 `testbed-deploy-next-in-a-nutshell-with-tempest-ubuntu-24.04`:\n
          \ https://zuul.services.osism.tech/t/osism/build/af7b9a8f7bf54b7582e4274744a781c4\n-
          2026-07-15 `testbed-update-stable-current-ubuntu-24.04`:\n  https://zuul.services.osism.tech/t/osism/build/2e71da7b41e045b4840a261450ba030c\n\nBoth
          ran on orchestrator `zuul-testbed04`.\n\n\U0001F916 Generated with [Claude
          Code](https://claude.com/claude-code)\n"
        change_url: https://github.com/osism/testbed/pull/2929
        commit_id: 36dda1888d4e275a1cd17fdab0fc80cbacc5abac
        patchset: 36dda1888d4e275a1cd17fdab0fc80cbacc5abac
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/testbed
          name: osism/testbed
          short_name: testbed
        src_dir: src/github.com/osism/testbed
        topic: null
      buildset: 631a6ffa611d40f88ec2569c7c4a0385
      buildset_refs:
      - branch: main
        change: '2929'
        change_message: "deploy: capture cloud state on manager ssh fail\n\n## What\n\nAdds
          read-only cloud-side diagnostics to the manager bring-up **rescue**\nblock
          in `playbooks/deploy.yml`. When manager bring-up fails, the rescue path\nnow
          captures and prints, using the build's own `OS_CLOUD` credentials:\n\n-
          `openstack floating ip show <manager address>` \u2014 its `port_id` shows\n
          \ whether the floating IP is associated to the expected manager port\n  (control-plane)
          vs a correct association that is mis-routed at L2 (stale\n  ARP/conntrack).\n-
          `openstack server/port/floating ip list` \u2014 leftover or unexpected\n
          \ resources in the shared project (e.g. leaked managers).\n- a live `ssh-keyscan
          \u2026 | ssh-keygen -lf` fingerprint of the manager address\n  \u2014 which
          host actually answered, to compare against the captured\n  serial-console
          host keys.\n\nAll tasks are read-only and best-effort (`changed_when`/`failed_when:
          false`),\nrun **only** in the rescue path (no overhead on a passing deploy),
          and need no\nCI credential access \u2014 the evidence lands in the job log.\n\n##
          Why (motivation, not scope)\n\nA recurring failure: the ssh probe *\"Wait
          until ssh public key authentication\nto the manager works\"* aborts with
          `REMOTE HOST IDENTIFICATION HAS CHANGED`.\nLog analysis of two occurrences
          shows the manager booted **once** with a\nstable key and the floating IP
          reached it correctly early in the probe, yet\nthe **same** floating IP reached
          a **different** host by the time the probe\ngave up \u2014 the FIP is re-routed
          mid-build to a host that is not the manager\nthis build booted. Neither
          a stale `known_hosts` entry nor the purge in the\nearlier fix explains that:\n\n-
          #2928\n\n**We would rather collect more decisive data before attempting
          another fix.**\nThe earlier attempt addressed the wrong layer, and guessing
          again risks doing\nthe same. The single most decisive datum is the floating
          IP's `port_id` at\nfailure time (control-plane mis-association vs L2 mis-routing);
          these\ndiagnostics exist to capture it \u2014 and related state \u2014 from
          the next\noccurrence, so any follow-up fix targets the layer that is actually
          at fault.\nThey are general enough to keep long-term.\n\n## Occurrences
          (Zuul)\n\n- 2026-07-12 `testbed-deploy-next-in-a-nutshell-with-tempest-ubuntu-24.04`:\n
          \ https://zuul.services.osism.tech/t/osism/build/af7b9a8f7bf54b7582e4274744a781c4\n-
          2026-07-15 `testbed-update-stable-current-ubuntu-24.04`:\n  https://zuul.services.osism.tech/t/osism/build/2e71da7b41e045b4840a261450ba030c\n\nBoth
          ran on orchestrator `zuul-testbed04`.\n\n\U0001F916 Generated with [Claude
          Code](https://claude.com/claude-code)\n"
        change_url: https://github.com/osism/testbed/pull/2929
        commit_id: 36dda1888d4e275a1cd17fdab0fc80cbacc5abac
        patchset: 36dda1888d4e275a1cd17fdab0fc80cbacc5abac
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/testbed
          name: osism/testbed
          short_name: testbed
        src_dir: src/github.com/osism/testbed
        topic: null
      change: '2929'
      change_message: "deploy: capture cloud state on manager ssh fail\n\n## What\n\nAdds
        read-only cloud-side diagnostics to the manager bring-up **rescue**\nblock
        in `playbooks/deploy.yml`. When manager bring-up fails, the rescue path\nnow
        captures and prints, using the build's own `OS_CLOUD` credentials:\n\n- `openstack
        floating ip show <manager address>` \u2014 its `port_id` shows\n  whether
        the floating IP is associated to the expected manager port\n  (control-plane)
        vs a correct association that is mis-routed at L2 (stale\n  ARP/conntrack).\n-
        `openstack server/port/floating ip list` \u2014 leftover or unexpected\n  resources
        in the shared project (e.g. leaked managers).\n- a live `ssh-keyscan \u2026
        | ssh-keygen -lf` fingerprint of the manager address\n  \u2014 which host
        actually answered, to compare against the captured\n  serial-console host
        keys.\n\nAll tasks are read-only and best-effort (`changed_when`/`failed_when:
        false`),\nrun **only** in the rescue path (no overhead on a passing deploy),
        and need no\nCI credential access \u2014 the evidence lands in the job log.\n\n##
        Why (motivation, not scope)\n\nA recurring failure: the ssh probe *\"Wait
        until ssh public key authentication\nto the manager works\"* aborts with `REMOTE
        HOST IDENTIFICATION HAS CHANGED`.\nLog analysis of two occurrences shows the
        manager booted **once** with a\nstable key and the floating IP reached it
        correctly early in the probe, yet\nthe **same** floating IP reached a **different**
        host by the time the probe\ngave up \u2014 the FIP is re-routed mid-build
        to a host that is not the manager\nthis build booted. Neither a stale `known_hosts`
        entry nor the purge in the\nearlier fix explains that:\n\n- #2928\n\n**We
        would rather collect more decisive data before attempting another fix.**\nThe
        earlier attempt addressed the wrong layer, and guessing again risks doing\nthe
        same. The single most decisive datum is the floating IP's `port_id` at\nfailure
        time (control-plane mis-association vs L2 mis-routing); these\ndiagnostics
        exist to capture it \u2014 and related state \u2014 from the next\noccurrence,
        so any follow-up fix targets the layer that is actually at fault.\nThey are
        general enough to keep long-term.\n\n## Occurrences (Zuul)\n\n- 2026-07-12
        `testbed-deploy-next-in-a-nutshell-with-tempest-ubuntu-24.04`:\n  https://zuul.services.osism.tech/t/osism/build/af7b9a8f7bf54b7582e4274744a781c4\n-
        2026-07-15 `testbed-update-stable-current-ubuntu-24.04`:\n  https://zuul.services.osism.tech/t/osism/build/2e71da7b41e045b4840a261450ba030c\n\nBoth
        ran on orchestrator `zuul-testbed04`.\n\n\U0001F916 Generated with [Claude
        Code](https://claude.com/claude-code)\n"
      change_url: https://github.com/osism/testbed/pull/2929
      child_jobs: []
      commit_id: 36dda1888d4e275a1cd17fdab0fc80cbacc5abac
      event_id: bc8097e0-8027-11f1-9a22-5604ddcd4379
      executor:
        hostname: 521e9411259a
        inventory_file: /var/lib/zuul/builds/b9b0fa9529834e0c8919e9b05ef7476d/ansible/inventory.yaml
        log_root: /var/lib/zuul/builds/b9b0fa9529834e0c8919e9b05ef7476d/work/logs
        result_data_file: /var/lib/zuul/builds/b9b0fa9529834e0c8919e9b05ef7476d/work/results.json
        src_root: /var/lib/zuul/builds/b9b0fa9529834e0c8919e9b05ef7476d/work/src
        work_root: /var/lib/zuul/builds/b9b0fa9529834e0c8919e9b05ef7476d/work
      include_vars: []
      items:
      - branch: main
        change: '2929'
        change_message: "deploy: capture cloud state on manager ssh fail\n\n## What\n\nAdds
          read-only cloud-side diagnostics to the manager bring-up **rescue**\nblock
          in `playbooks/deploy.yml`. When manager bring-up fails, the rescue path\nnow
          captures and prints, using the build's own `OS_CLOUD` credentials:\n\n-
          `openstack floating ip show <manager address>` \u2014 its `port_id` shows\n
          \ whether the floating IP is associated to the expected manager port\n  (control-plane)
          vs a correct association that is mis-routed at L2 (stale\n  ARP/conntrack).\n-
          `openstack server/port/floating ip list` \u2014 leftover or unexpected\n
          \ resources in the shared project (e.g. leaked managers).\n- a live `ssh-keyscan
          \u2026 | ssh-keygen -lf` fingerprint of the manager address\n  \u2014 which
          host actually answered, to compare against the captured\n  serial-console
          host keys.\n\nAll tasks are read-only and best-effort (`changed_when`/`failed_when:
          false`),\nrun **only** in the rescue path (no overhead on a passing deploy),
          and need no\nCI credential access \u2014 the evidence lands in the job log.\n\n##
          Why (motivation, not scope)\n\nA recurring failure: the ssh probe *\"Wait
          until ssh public key authentication\nto the manager works\"* aborts with
          `REMOTE HOST IDENTIFICATION HAS CHANGED`.\nLog analysis of two occurrences
          shows the manager booted **once** with a\nstable key and the floating IP
          reached it correctly early in the probe, yet\nthe **same** floating IP reached
          a **different** host by the time the probe\ngave up \u2014 the FIP is re-routed
          mid-build to a host that is not the manager\nthis build booted. Neither
          a stale `known_hosts` entry nor the purge in the\nearlier fix explains that:\n\n-
          #2928\n\n**We would rather collect more decisive data before attempting
          another fix.**\nThe earlier attempt addressed the wrong layer, and guessing
          again risks doing\nthe same. The single most decisive datum is the floating
          IP's `port_id` at\nfailure time (control-plane mis-association vs L2 mis-routing);
          these\ndiagnostics exist to capture it \u2014 and related state \u2014 from
          the next\noccurrence, so any follow-up fix targets the layer that is actually
          at fault.\nThey are general enough to keep long-term.\n\n## Occurrences
          (Zuul)\n\n- 2026-07-12 `testbed-deploy-next-in-a-nutshell-with-tempest-ubuntu-24.04`:\n
          \ https://zuul.services.osism.tech/t/osism/build/af7b9a8f7bf54b7582e4274744a781c4\n-
          2026-07-15 `testbed-update-stable-current-ubuntu-24.04`:\n  https://zuul.services.osism.tech/t/osism/build/2e71da7b41e045b4840a261450ba030c\n\nBoth
          ran on orchestrator `zuul-testbed04`.\n\n\U0001F916 Generated with [Claude
          Code](https://claude.com/claude-code)\n"
        change_url: https://github.com/osism/testbed/pull/2929
        commit_id: 36dda1888d4e275a1cd17fdab0fc80cbacc5abac
        patchset: 36dda1888d4e275a1cd17fdab0fc80cbacc5abac
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/testbed
          name: osism/testbed
          short_name: testbed
          src_dir: src/github.com/osism/testbed
        topic: null
      job: ansible-lint
      jobtags: []
      max_attempts: 3
      message: ZGVwbG95OiBjYXB0dXJlIGNsb3VkIHN0YXRlIG9uIG1hbmFnZXIgc3NoIGZhaWwKCiMjIFdoYXQKCkFkZHMgcmVhZC1vbmx5IGNsb3VkLXNpZGUgZGlhZ25vc3RpY3MgdG8gdGhlIG1hbmFnZXIgYnJpbmctdXAgKipyZXNjdWUqKgpibG9jayBpbiBgcGxheWJvb2tzL2RlcGxveS55bWxgLiBXaGVuIG1hbmFnZXIgYnJpbmctdXAgZmFpbHMsIHRoZSByZXNjdWUgcGF0aApub3cgY2FwdHVyZXMgYW5kIHByaW50cywgdXNpbmcgdGhlIGJ1aWxkJ3Mgb3duIGBPU19DTE9VRGAgY3JlZGVudGlhbHM6CgotIGBvcGVuc3RhY2sgZmxvYXRpbmcgaXAgc2hvdyA8bWFuYWdlciBhZGRyZXNzPmAg4oCUIGl0cyBgcG9ydF9pZGAgc2hvd3MKICB3aGV0aGVyIHRoZSBmbG9hdGluZyBJUCBpcyBhc3NvY2lhdGVkIHRvIHRoZSBleHBlY3RlZCBtYW5hZ2VyIHBvcnQKICAoY29udHJvbC1wbGFuZSkgdnMgYSBjb3JyZWN0IGFzc29jaWF0aW9uIHRoYXQgaXMgbWlzLXJvdXRlZCBhdCBMMiAoc3RhbGUKICBBUlAvY29ubnRyYWNrKS4KLSBgb3BlbnN0YWNrIHNlcnZlci9wb3J0L2Zsb2F0aW5nIGlwIGxpc3RgIOKAlCBsZWZ0b3ZlciBvciB1bmV4cGVjdGVkCiAgcmVzb3VyY2VzIGluIHRoZSBzaGFyZWQgcHJvamVjdCAoZS5nLiBsZWFrZWQgbWFuYWdlcnMpLgotIGEgbGl2ZSBgc3NoLWtleXNjYW4g4oCmIHwgc3NoLWtleWdlbiAtbGZgIGZpbmdlcnByaW50IG9mIHRoZSBtYW5hZ2VyIGFkZHJlc3MKICDigJQgd2hpY2ggaG9zdCBhY3R1YWxseSBhbnN3ZXJlZCwgdG8gY29tcGFyZSBhZ2FpbnN0IHRoZSBjYXB0dXJlZAogIHNlcmlhbC1jb25zb2xlIGhvc3Qga2V5cy4KCkFsbCB0YXNrcyBhcmUgcmVhZC1vbmx5IGFuZCBiZXN0LWVmZm9ydCAoYGNoYW5nZWRfd2hlbmAvYGZhaWxlZF93aGVuOiBmYWxzZWApLApydW4gKipvbmx5KiogaW4gdGhlIHJlc2N1ZSBwYXRoIChubyBvdmVyaGVhZCBvbiBhIHBhc3NpbmcgZGVwbG95KSwgYW5kIG5lZWQgbm8KQ0kgY3JlZGVudGlhbCBhY2Nlc3Mg4oCUIHRoZSBldmlkZW5jZSBsYW5kcyBpbiB0aGUgam9iIGxvZy4KCiMjIFdoeSAobW90aXZhdGlvbiwgbm90IHNjb3BlKQoKQSByZWN1cnJpbmcgZmFpbHVyZTogdGhlIHNzaCBwcm9iZSAqIldhaXQgdW50aWwgc3NoIHB1YmxpYyBrZXkgYXV0aGVudGljYXRpb24KdG8gdGhlIG1hbmFnZXIgd29ya3MiKiBhYm9ydHMgd2l0aCBgUkVNT1RFIEhPU1QgSURFTlRJRklDQVRJT04gSEFTIENIQU5HRURgLgpMb2cgYW5hbHlzaXMgb2YgdHdvIG9jY3VycmVuY2VzIHNob3dzIHRoZSBtYW5hZ2VyIGJvb3RlZCAqKm9uY2UqKiB3aXRoIGEKc3RhYmxlIGtleSBhbmQgdGhlIGZsb2F0aW5nIElQIHJlYWNoZWQgaXQgY29ycmVjdGx5IGVhcmx5IGluIHRoZSBwcm9iZSwgeWV0CnRoZSAqKnNhbWUqKiBmbG9hdGluZyBJUCByZWFjaGVkIGEgKipkaWZmZXJlbnQqKiBob3N0IGJ5IHRoZSB0aW1lIHRoZSBwcm9iZQpnYXZlIHVwIOKAlCB0aGUgRklQIGlzIHJlLXJvdXRlZCBtaWQtYnVpbGQgdG8gYSBob3N0IHRoYXQgaXMgbm90IHRoZSBtYW5hZ2VyCnRoaXMgYnVpbGQgYm9vdGVkLiBOZWl0aGVyIGEgc3RhbGUgYGtub3duX2hvc3RzYCBlbnRyeSBub3IgdGhlIHB1cmdlIGluIHRoZQplYXJsaWVyIGZpeCBleHBsYWlucyB0aGF0OgoKLSAjMjkyOAoKKipXZSB3b3VsZCByYXRoZXIgY29sbGVjdCBtb3JlIGRlY2lzaXZlIGRhdGEgYmVmb3JlIGF0dGVtcHRpbmcgYW5vdGhlciBmaXguKioKVGhlIGVhcmxpZXIgYXR0ZW1wdCBhZGRyZXNzZWQgdGhlIHdyb25nIGxheWVyLCBhbmQgZ3Vlc3NpbmcgYWdhaW4gcmlza3MgZG9pbmcKdGhlIHNhbWUuIFRoZSBzaW5nbGUgbW9zdCBkZWNpc2l2ZSBkYXR1bSBpcyB0aGUgZmxvYXRpbmcgSVAncyBgcG9ydF9pZGAgYXQKZmFpbHVyZSB0aW1lIChjb250cm9sLXBsYW5lIG1pcy1hc3NvY2lhdGlvbiB2cyBMMiBtaXMtcm91dGluZyk7IHRoZXNlCmRpYWdub3N0aWNzIGV4aXN0IHRvIGNhcHR1cmUgaXQg4oCUIGFuZCByZWxhdGVkIHN0YXRlIOKAlCBmcm9tIHRoZSBuZXh0Cm9jY3VycmVuY2UsIHNvIGFueSBmb2xsb3ctdXAgZml4IHRhcmdldHMgdGhlIGxheWVyIHRoYXQgaXMgYWN0dWFsbHkgYXQgZmF1bHQuClRoZXkgYXJlIGdlbmVyYWwgZW5vdWdoIHRvIGtlZXAgbG9uZy10ZXJtLgoKIyMgT2NjdXJyZW5jZXMgKFp1dWwpCgotIDIwMjYtMDctMTIgYHRlc3RiZWQtZGVwbG95LW5leHQtaW4tYS1udXRzaGVsbC13aXRoLXRlbXBlc3QtdWJ1bnR1LTI0LjA0YDoKICBodHRwczovL3p1dWwuc2VydmljZXMub3Npc20udGVjaC90L29zaXNtL2J1aWxkL2FmN2I5YThmN2JmNTRiNzU4MmU0Mjc0NzQ0YTc4MWM0Ci0gMjAyNi0wNy0xNSBgdGVzdGJlZC11cGRhdGUtc3RhYmxlLWN1cnJlbnQtdWJ1bnR1LTI0LjA0YDoKICBodHRwczovL3p1dWwuc2VydmljZXMub3Npc20udGVjaC90L29zaXNtL2J1aWxkLzJlNzFkYTdiNDFlMDQ1YjQ4NDBhMjYxNDUwYmEwMzBjCgpCb3RoIHJhbiBvbiBvcmNoZXN0cmF0b3IgYHp1dWwtdGVzdGJlZDA0YC4KCvCfpJYgR2VuZXJhdGVkIHdpdGggW0NsYXVkZSBDb2RlXShodHRwczovL2NsYXVkZS5jb20vY2xhdWRlLWNvZGUpCg==
      patchset: 36dda1888d4e275a1cd17fdab0fc80cbacc5abac
      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/ansible-lint/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/testbed
        name: osism/testbed
        short_name: testbed
        src_dir: src/github.com/osism/testbed
      projects:
        github.com/osism/testbed:
          canonical_hostname: github.com
          canonical_name: github.com/osism/testbed
          checkout: main
          checkout_description: zuul branch
          commit: 848ddc1dbe7f93a11d6efb78e9384872d2fd4650
          name: osism/testbed
          required: false
          short_name: testbed
          src_dir: src/github.com/osism/testbed
      ref: refs/pull/2929/head
      resources: {}
      tenant: osism
      timeout: 1800
      topic: null
      voting: true
