all:
  children:
    zuul_unreachable:
      hosts: {}
  hosts:
    debian-bookworm:
      ansible_connection: ssh
      ansible_host: 2a13:1a81:8000:3124:f816:3eff:fe6b:5bf1
      ansible_port: 22
      ansible_python_interpreter: auto
      ansible_user: zuul
      docker_namespace: osism
      docker_registry: osism.harbor.regio.digital
      nodepool:
        az: nova
        cloud: regiocloud-a-ci
        external_id: 7338cd5f-c6b0-4f49-8bad-c0f2cc4652e7
        host_id: ec4f54fa666de9bc553bc59c41683f12345b665d0b1af00d715e7318
        interface_ip: 2a13:1a81:8000:3124:f816:3eff:fe6b:5bf1
        label: debian-bookworm
        node_properties: {}
        private_ipv4: 10.128.0.102
        private_ipv6: null
        provider: regiocloud-a
        public_ipv4: 81.163.193.158
        public_ipv6: 2a13:1a81:8000:3124:f816:3eff:fe6b:5bf1
        region: null
        slot: null
      version_ceph: squid
  vars:
    docker_namespace: osism
    docker_registry: osism.harbor.regio.digital
    version_ceph: squid
    zuul:
      _inheritance_path:
      - '<Job base explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: osism/zuul-config/zuul.d/jobs.yaml@main#2>'
      - '<Job container-image-ceph-ansible-build explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: osism/container-image-ceph-ansible/.zuul.yaml@main#83>'
      - '<Job container-image-ceph-ansible-build-squid explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: osism/container-image-ceph-ansible/.zuul.yaml@main#103>'
      - '<Job container-image-ceph-ansible-build-squid explicit: None implied: None
        source: osism/container-image-ceph-ansible/.zuul.yaml@main#162>'
      ansible_version: '9'
      attempts: 1
      branch: main
      build: 3a8293bd419548a5be7c9f1046c9ade5
      build_refs:
      - branch: main
        change: '701'
        change_message: "fix: probe live monmap for mon quorum\n\n## Problem\n\nThe
          rolling-update mon quorum check (`... waiting for the ... monitor to join
          the quorum...`) fails intermittently (rc=2) on `testbed-upgrade-stable-ubuntu-24.04`,
          the only CI job that upgrades a live Ceph mon. The dominant cause is an
          **address-selection lottery**, not slow storage.\n\nceph-ansible's `roles/ceph-facts/tasks/set_monitor_address.yml`
          derives each mon's address as `all_ipv4_addresses | ips_in_ranges(public_network)
          | first`. When a host has more than one IP inside `public_network` (the
          testbed node has its fixed primary plus keepalived/kube-vip VIPs), `| first`
          is order-unstable. The address is computed at **deploy** (and baked into
          the monmap) and **recomputed** at **upgrade** time. When the two disagree
          \u2014 deploy bound `.8`, upgrade picks `.10` \u2014 the check runs `ceph
          -m .10 quorum_status` against an address where no mon listens and times
          out on every retry, despite a healthy cluster.\n\n## Fix\n\nFix the **check**,
          not the address selection. Before each probe:\n\n- Read the live monmap
          from a **stable peer** mon's admin socket \u2014 the first mon not being
          upgraded this iteration, so it is always up (`delegate_to` + `ignore_unreachable`).
          The admin socket is auth-free and network-free, so it can't be fooled by
          the address problem being fixed.\n- Select node-0's entry by name and use
          its scalar `public_addr` for `-m`.\n- On **any** failure \u2014 unreachable
          peer, non-zero rc, unparseable output, no matching entry, or empty address
          \u2014 fall back to the previously computed address, so behaviour never
          regresses.\n\nThis is **production-safe by construction**: it never changes
          a mon's address, so no monmap migration is needed (works on `.8`, `.10`,
          anything). Both the Container and Non-container probes are fixed. `set_monitor_address.yml`,
          the retry counts (`increase-mon-quorum-check-retries.patch`), and the `instrument-mon-quorum-*`
          patches are unchanged.\n\n## Testing\n\n- All `patches/stable-8.0/*.patch`
          apply cleanly in `LC_ALL=C` sort order against a fresh `stable-8.0` clone
          (the new patch sorts last among the quorum patches); the resulting `rolling_update.yml`
          parses.\n- The address-resolution + fallback pipeline was verified cluster-free
          against a monmap captured from a live reef cluster plus the failure cases
          (missing entry, malformed/empty JSON, empty `public_addr`, unreachable read)
          \u2014 all route correctly.\n- Real signal after merge + image rebuild:
          the new debug line prints the chosen probe address; the periodic `testbed-upgrade-stable-ubuntu-24.04`
          job should stop exhibiting the Variant A timeout.\n\n## Related\n\n- osism/container-image-ceph-ansible#681\n\n\U0001F916
          Generated with [Claude Code](https://claude.com/claude-code)\n"
        change_url: https://github.com/osism/container-image-ceph-ansible/pull/701
        commit_id: e176d8aabb32462004c38f2209c1822b1fdd400f
        patchset: e176d8aabb32462004c38f2209c1822b1fdd400f
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/container-image-ceph-ansible
          name: osism/container-image-ceph-ansible
          short_name: container-image-ceph-ansible
        src_dir: src/github.com/osism/container-image-ceph-ansible
        topic: null
      buildset: 0ffe65d640f24a04aeda0952c8690912
      buildset_refs:
      - branch: main
        change: '701'
        change_message: "fix: probe live monmap for mon quorum\n\n## Problem\n\nThe
          rolling-update mon quorum check (`... waiting for the ... monitor to join
          the quorum...`) fails intermittently (rc=2) on `testbed-upgrade-stable-ubuntu-24.04`,
          the only CI job that upgrades a live Ceph mon. The dominant cause is an
          **address-selection lottery**, not slow storage.\n\nceph-ansible's `roles/ceph-facts/tasks/set_monitor_address.yml`
          derives each mon's address as `all_ipv4_addresses | ips_in_ranges(public_network)
          | first`. When a host has more than one IP inside `public_network` (the
          testbed node has its fixed primary plus keepalived/kube-vip VIPs), `| first`
          is order-unstable. The address is computed at **deploy** (and baked into
          the monmap) and **recomputed** at **upgrade** time. When the two disagree
          \u2014 deploy bound `.8`, upgrade picks `.10` \u2014 the check runs `ceph
          -m .10 quorum_status` against an address where no mon listens and times
          out on every retry, despite a healthy cluster.\n\n## Fix\n\nFix the **check**,
          not the address selection. Before each probe:\n\n- Read the live monmap
          from a **stable peer** mon's admin socket \u2014 the first mon not being
          upgraded this iteration, so it is always up (`delegate_to` + `ignore_unreachable`).
          The admin socket is auth-free and network-free, so it can't be fooled by
          the address problem being fixed.\n- Select node-0's entry by name and use
          its scalar `public_addr` for `-m`.\n- On **any** failure \u2014 unreachable
          peer, non-zero rc, unparseable output, no matching entry, or empty address
          \u2014 fall back to the previously computed address, so behaviour never
          regresses.\n\nThis is **production-safe by construction**: it never changes
          a mon's address, so no monmap migration is needed (works on `.8`, `.10`,
          anything). Both the Container and Non-container probes are fixed. `set_monitor_address.yml`,
          the retry counts (`increase-mon-quorum-check-retries.patch`), and the `instrument-mon-quorum-*`
          patches are unchanged.\n\n## Testing\n\n- All `patches/stable-8.0/*.patch`
          apply cleanly in `LC_ALL=C` sort order against a fresh `stable-8.0` clone
          (the new patch sorts last among the quorum patches); the resulting `rolling_update.yml`
          parses.\n- The address-resolution + fallback pipeline was verified cluster-free
          against a monmap captured from a live reef cluster plus the failure cases
          (missing entry, malformed/empty JSON, empty `public_addr`, unreachable read)
          \u2014 all route correctly.\n- Real signal after merge + image rebuild:
          the new debug line prints the chosen probe address; the periodic `testbed-upgrade-stable-ubuntu-24.04`
          job should stop exhibiting the Variant A timeout.\n\n## Related\n\n- osism/container-image-ceph-ansible#681\n\n\U0001F916
          Generated with [Claude Code](https://claude.com/claude-code)\n"
        change_url: https://github.com/osism/container-image-ceph-ansible/pull/701
        commit_id: e176d8aabb32462004c38f2209c1822b1fdd400f
        patchset: e176d8aabb32462004c38f2209c1822b1fdd400f
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/container-image-ceph-ansible
          name: osism/container-image-ceph-ansible
          short_name: container-image-ceph-ansible
        src_dir: src/github.com/osism/container-image-ceph-ansible
        topic: null
      change: '701'
      change_message: "fix: probe live monmap for mon quorum\n\n## Problem\n\nThe
        rolling-update mon quorum check (`... waiting for the ... monitor to join
        the quorum...`) fails intermittently (rc=2) on `testbed-upgrade-stable-ubuntu-24.04`,
        the only CI job that upgrades a live Ceph mon. The dominant cause is an **address-selection
        lottery**, not slow storage.\n\nceph-ansible's `roles/ceph-facts/tasks/set_monitor_address.yml`
        derives each mon's address as `all_ipv4_addresses | ips_in_ranges(public_network)
        | first`. When a host has more than one IP inside `public_network` (the testbed
        node has its fixed primary plus keepalived/kube-vip VIPs), `| first` is order-unstable.
        The address is computed at **deploy** (and baked into the monmap) and **recomputed**
        at **upgrade** time. When the two disagree \u2014 deploy bound `.8`, upgrade
        picks `.10` \u2014 the check runs `ceph -m .10 quorum_status` against an address
        where no mon listens and times out on every retry, despite a healthy cluster.\n\n##
        Fix\n\nFix the **check**, not the address selection. Before each probe:\n\n-
        Read the live monmap from a **stable peer** mon's admin socket \u2014 the
        first mon not being upgraded this iteration, so it is always up (`delegate_to`
        + `ignore_unreachable`). The admin socket is auth-free and network-free, so
        it can't be fooled by the address problem being fixed.\n- Select node-0's
        entry by name and use its scalar `public_addr` for `-m`.\n- On **any** failure
        \u2014 unreachable peer, non-zero rc, unparseable output, no matching entry,
        or empty address \u2014 fall back to the previously computed address, so behaviour
        never regresses.\n\nThis is **production-safe by construction**: it never
        changes a mon's address, so no monmap migration is needed (works on `.8`,
        `.10`, anything). Both the Container and Non-container probes are fixed. `set_monitor_address.yml`,
        the retry counts (`increase-mon-quorum-check-retries.patch`), and the `instrument-mon-quorum-*`
        patches are unchanged.\n\n## Testing\n\n- All `patches/stable-8.0/*.patch`
        apply cleanly in `LC_ALL=C` sort order against a fresh `stable-8.0` clone
        (the new patch sorts last among the quorum patches); the resulting `rolling_update.yml`
        parses.\n- The address-resolution + fallback pipeline was verified cluster-free
        against a monmap captured from a live reef cluster plus the failure cases
        (missing entry, malformed/empty JSON, empty `public_addr`, unreachable read)
        \u2014 all route correctly.\n- Real signal after merge + image rebuild: the
        new debug line prints the chosen probe address; the periodic `testbed-upgrade-stable-ubuntu-24.04`
        job should stop exhibiting the Variant A timeout.\n\n## Related\n\n- osism/container-image-ceph-ansible#681\n\n\U0001F916
        Generated with [Claude Code](https://claude.com/claude-code)\n"
      change_url: https://github.com/osism/container-image-ceph-ansible/pull/701
      child_jobs: []
      commit_id: e176d8aabb32462004c38f2209c1822b1fdd400f
      event_id: 92ace7e0-706c-11f1-90e1-935518932da6
      executor:
        hostname: 521e9411259a
        inventory_file: /var/lib/zuul/builds/3a8293bd419548a5be7c9f1046c9ade5/ansible/inventory.yaml
        log_root: /var/lib/zuul/builds/3a8293bd419548a5be7c9f1046c9ade5/work/logs
        result_data_file: /var/lib/zuul/builds/3a8293bd419548a5be7c9f1046c9ade5/work/results.json
        src_root: /var/lib/zuul/builds/3a8293bd419548a5be7c9f1046c9ade5/work/src
        work_root: /var/lib/zuul/builds/3a8293bd419548a5be7c9f1046c9ade5/work
      include_vars: []
      items:
      - branch: main
        change: '701'
        change_message: "fix: probe live monmap for mon quorum\n\n## Problem\n\nThe
          rolling-update mon quorum check (`... waiting for the ... monitor to join
          the quorum...`) fails intermittently (rc=2) on `testbed-upgrade-stable-ubuntu-24.04`,
          the only CI job that upgrades a live Ceph mon. The dominant cause is an
          **address-selection lottery**, not slow storage.\n\nceph-ansible's `roles/ceph-facts/tasks/set_monitor_address.yml`
          derives each mon's address as `all_ipv4_addresses | ips_in_ranges(public_network)
          | first`. When a host has more than one IP inside `public_network` (the
          testbed node has its fixed primary plus keepalived/kube-vip VIPs), `| first`
          is order-unstable. The address is computed at **deploy** (and baked into
          the monmap) and **recomputed** at **upgrade** time. When the two disagree
          \u2014 deploy bound `.8`, upgrade picks `.10` \u2014 the check runs `ceph
          -m .10 quorum_status` against an address where no mon listens and times
          out on every retry, despite a healthy cluster.\n\n## Fix\n\nFix the **check**,
          not the address selection. Before each probe:\n\n- Read the live monmap
          from a **stable peer** mon's admin socket \u2014 the first mon not being
          upgraded this iteration, so it is always up (`delegate_to` + `ignore_unreachable`).
          The admin socket is auth-free and network-free, so it can't be fooled by
          the address problem being fixed.\n- Select node-0's entry by name and use
          its scalar `public_addr` for `-m`.\n- On **any** failure \u2014 unreachable
          peer, non-zero rc, unparseable output, no matching entry, or empty address
          \u2014 fall back to the previously computed address, so behaviour never
          regresses.\n\nThis is **production-safe by construction**: it never changes
          a mon's address, so no monmap migration is needed (works on `.8`, `.10`,
          anything). Both the Container and Non-container probes are fixed. `set_monitor_address.yml`,
          the retry counts (`increase-mon-quorum-check-retries.patch`), and the `instrument-mon-quorum-*`
          patches are unchanged.\n\n## Testing\n\n- All `patches/stable-8.0/*.patch`
          apply cleanly in `LC_ALL=C` sort order against a fresh `stable-8.0` clone
          (the new patch sorts last among the quorum patches); the resulting `rolling_update.yml`
          parses.\n- The address-resolution + fallback pipeline was verified cluster-free
          against a monmap captured from a live reef cluster plus the failure cases
          (missing entry, malformed/empty JSON, empty `public_addr`, unreachable read)
          \u2014 all route correctly.\n- Real signal after merge + image rebuild:
          the new debug line prints the chosen probe address; the periodic `testbed-upgrade-stable-ubuntu-24.04`
          job should stop exhibiting the Variant A timeout.\n\n## Related\n\n- osism/container-image-ceph-ansible#681\n\n\U0001F916
          Generated with [Claude Code](https://claude.com/claude-code)\n"
        change_url: https://github.com/osism/container-image-ceph-ansible/pull/701
        commit_id: e176d8aabb32462004c38f2209c1822b1fdd400f
        patchset: e176d8aabb32462004c38f2209c1822b1fdd400f
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/container-image-ceph-ansible
          name: osism/container-image-ceph-ansible
          short_name: container-image-ceph-ansible
          src_dir: src/github.com/osism/container-image-ceph-ansible
        topic: null
      job: container-image-ceph-ansible-build-squid
      jobtags: []
      max_attempts: 3
      message: Zml4OiBwcm9iZSBsaXZlIG1vbm1hcCBmb3IgbW9uIHF1b3J1bQoKIyMgUHJvYmxlbQoKVGhlIHJvbGxpbmctdXBkYXRlIG1vbiBxdW9ydW0gY2hlY2sgKGAuLi4gd2FpdGluZyBmb3IgdGhlIC4uLiBtb25pdG9yIHRvIGpvaW4gdGhlIHF1b3J1bS4uLmApIGZhaWxzIGludGVybWl0dGVudGx5IChyYz0yKSBvbiBgdGVzdGJlZC11cGdyYWRlLXN0YWJsZS11YnVudHUtMjQuMDRgLCB0aGUgb25seSBDSSBqb2IgdGhhdCB1cGdyYWRlcyBhIGxpdmUgQ2VwaCBtb24uIFRoZSBkb21pbmFudCBjYXVzZSBpcyBhbiAqKmFkZHJlc3Mtc2VsZWN0aW9uIGxvdHRlcnkqKiwgbm90IHNsb3cgc3RvcmFnZS4KCmNlcGgtYW5zaWJsZSdzIGByb2xlcy9jZXBoLWZhY3RzL3Rhc2tzL3NldF9tb25pdG9yX2FkZHJlc3MueW1sYCBkZXJpdmVzIGVhY2ggbW9uJ3MgYWRkcmVzcyBhcyBgYWxsX2lwdjRfYWRkcmVzc2VzIHwgaXBzX2luX3JhbmdlcyhwdWJsaWNfbmV0d29yaykgfCBmaXJzdGAuIFdoZW4gYSBob3N0IGhhcyBtb3JlIHRoYW4gb25lIElQIGluc2lkZSBgcHVibGljX25ldHdvcmtgICh0aGUgdGVzdGJlZCBub2RlIGhhcyBpdHMgZml4ZWQgcHJpbWFyeSBwbHVzIGtlZXBhbGl2ZWQva3ViZS12aXAgVklQcyksIGB8IGZpcnN0YCBpcyBvcmRlci11bnN0YWJsZS4gVGhlIGFkZHJlc3MgaXMgY29tcHV0ZWQgYXQgKipkZXBsb3kqKiAoYW5kIGJha2VkIGludG8gdGhlIG1vbm1hcCkgYW5kICoqcmVjb21wdXRlZCoqIGF0ICoqdXBncmFkZSoqIHRpbWUuIFdoZW4gdGhlIHR3byBkaXNhZ3JlZSDigJQgZGVwbG95IGJvdW5kIGAuOGAsIHVwZ3JhZGUgcGlja3MgYC4xMGAg4oCUIHRoZSBjaGVjayBydW5zIGBjZXBoIC1tIC4xMCBxdW9ydW1fc3RhdHVzYCBhZ2FpbnN0IGFuIGFkZHJlc3Mgd2hlcmUgbm8gbW9uIGxpc3RlbnMgYW5kIHRpbWVzIG91dCBvbiBldmVyeSByZXRyeSwgZGVzcGl0ZSBhIGhlYWx0aHkgY2x1c3Rlci4KCiMjIEZpeAoKRml4IHRoZSAqKmNoZWNrKiosIG5vdCB0aGUgYWRkcmVzcyBzZWxlY3Rpb24uIEJlZm9yZSBlYWNoIHByb2JlOgoKLSBSZWFkIHRoZSBsaXZlIG1vbm1hcCBmcm9tIGEgKipzdGFibGUgcGVlcioqIG1vbidzIGFkbWluIHNvY2tldCDigJQgdGhlIGZpcnN0IG1vbiBub3QgYmVpbmcgdXBncmFkZWQgdGhpcyBpdGVyYXRpb24sIHNvIGl0IGlzIGFsd2F5cyB1cCAoYGRlbGVnYXRlX3RvYCArIGBpZ25vcmVfdW5yZWFjaGFibGVgKS4gVGhlIGFkbWluIHNvY2tldCBpcyBhdXRoLWZyZWUgYW5kIG5ldHdvcmstZnJlZSwgc28gaXQgY2FuJ3QgYmUgZm9vbGVkIGJ5IHRoZSBhZGRyZXNzIHByb2JsZW0gYmVpbmcgZml4ZWQuCi0gU2VsZWN0IG5vZGUtMCdzIGVudHJ5IGJ5IG5hbWUgYW5kIHVzZSBpdHMgc2NhbGFyIGBwdWJsaWNfYWRkcmAgZm9yIGAtbWAuCi0gT24gKiphbnkqKiBmYWlsdXJlIOKAlCB1bnJlYWNoYWJsZSBwZWVyLCBub24temVybyByYywgdW5wYXJzZWFibGUgb3V0cHV0LCBubyBtYXRjaGluZyBlbnRyeSwgb3IgZW1wdHkgYWRkcmVzcyDigJQgZmFsbCBiYWNrIHRvIHRoZSBwcmV2aW91c2x5IGNvbXB1dGVkIGFkZHJlc3MsIHNvIGJlaGF2aW91ciBuZXZlciByZWdyZXNzZXMuCgpUaGlzIGlzICoqcHJvZHVjdGlvbi1zYWZlIGJ5IGNvbnN0cnVjdGlvbioqOiBpdCBuZXZlciBjaGFuZ2VzIGEgbW9uJ3MgYWRkcmVzcywgc28gbm8gbW9ubWFwIG1pZ3JhdGlvbiBpcyBuZWVkZWQgKHdvcmtzIG9uIGAuOGAsIGAuMTBgLCBhbnl0aGluZykuIEJvdGggdGhlIENvbnRhaW5lciBhbmQgTm9uLWNvbnRhaW5lciBwcm9iZXMgYXJlIGZpeGVkLiBgc2V0X21vbml0b3JfYWRkcmVzcy55bWxgLCB0aGUgcmV0cnkgY291bnRzIChgaW5jcmVhc2UtbW9uLXF1b3J1bS1jaGVjay1yZXRyaWVzLnBhdGNoYCksIGFuZCB0aGUgYGluc3RydW1lbnQtbW9uLXF1b3J1bS0qYCBwYXRjaGVzIGFyZSB1bmNoYW5nZWQuCgojIyBUZXN0aW5nCgotIEFsbCBgcGF0Y2hlcy9zdGFibGUtOC4wLyoucGF0Y2hgIGFwcGx5IGNsZWFubHkgaW4gYExDX0FMTD1DYCBzb3J0IG9yZGVyIGFnYWluc3QgYSBmcmVzaCBgc3RhYmxlLTguMGAgY2xvbmUgKHRoZSBuZXcgcGF0Y2ggc29ydHMgbGFzdCBhbW9uZyB0aGUgcXVvcnVtIHBhdGNoZXMpOyB0aGUgcmVzdWx0aW5nIGByb2xsaW5nX3VwZGF0ZS55bWxgIHBhcnNlcy4KLSBUaGUgYWRkcmVzcy1yZXNvbHV0aW9uICsgZmFsbGJhY2sgcGlwZWxpbmUgd2FzIHZlcmlmaWVkIGNsdXN0ZXItZnJlZSBhZ2FpbnN0IGEgbW9ubWFwIGNhcHR1cmVkIGZyb20gYSBsaXZlIHJlZWYgY2x1c3RlciBwbHVzIHRoZSBmYWlsdXJlIGNhc2VzIChtaXNzaW5nIGVudHJ5LCBtYWxmb3JtZWQvZW1wdHkgSlNPTiwgZW1wdHkgYHB1YmxpY19hZGRyYCwgdW5yZWFjaGFibGUgcmVhZCkg4oCUIGFsbCByb3V0ZSBjb3JyZWN0bHkuCi0gUmVhbCBzaWduYWwgYWZ0ZXIgbWVyZ2UgKyBpbWFnZSByZWJ1aWxkOiB0aGUgbmV3IGRlYnVnIGxpbmUgcHJpbnRzIHRoZSBjaG9zZW4gcHJvYmUgYWRkcmVzczsgdGhlIHBlcmlvZGljIGB0ZXN0YmVkLXVwZ3JhZGUtc3RhYmxlLXVidW50dS0yNC4wNGAgam9iIHNob3VsZCBzdG9wIGV4aGliaXRpbmcgdGhlIFZhcmlhbnQgQSB0aW1lb3V0LgoKIyMgUmVsYXRlZAoKLSBvc2lzbS9jb250YWluZXItaW1hZ2UtY2VwaC1hbnNpYmxlIzY4MQoK8J+kliBHZW5lcmF0ZWQgd2l0aCBbQ2xhdWRlIENvZGVdKGh0dHBzOi8vY2xhdWRlLmNvbS9jbGF1ZGUtY29kZSkK
      patchset: e176d8aabb32462004c38f2209c1822b1fdd400f
      pipeline: check
      playbook_context:
        playbook_projects:
          trusted/project_0/github.com/osism/zuul-config:
            canonical_name: github.com/osism/zuul-config
            checkout: main
            commit: 3d5c7b5973754999f7005857a00ce9168944f0f1
          trusted/project_1/github.com/osism/openinfra-zuul-jobs:
            canonical_name: github.com/osism/openinfra-zuul-jobs
            checkout: master
            commit: 038dd8b856c62af4433c8477c5cb3d0480847059
          trusted/project_2/github.com/osism/zuul-jobs:
            canonical_name: github.com/osism/zuul-jobs
            checkout: main
            commit: 0c74c57cedff2b36bb37ca68a5338d1c49991496
          untrusted/project_0/github.com/osism/container-image-ceph-ansible:
            canonical_name: github.com/osism/container-image-ceph-ansible
            checkout: main
            commit: bee28df131f9a46b2a015dde0954d86c88a99b85
          untrusted/project_1/github.com/osism/zuul-config:
            canonical_name: github.com/osism/zuul-config
            checkout: main
            commit: 3d5c7b5973754999f7005857a00ce9168944f0f1
          untrusted/project_2/github.com/osism/openinfra-zuul-jobs:
            canonical_name: github.com/osism/openinfra-zuul-jobs
            checkout: master
            commit: 038dd8b856c62af4433c8477c5cb3d0480847059
          untrusted/project_3/github.com/osism/zuul-jobs:
            canonical_name: github.com/osism/zuul-jobs
            checkout: main
            commit: 0c74c57cedff2b36bb37ca68a5338d1c49991496
        playbooks:
        - path: untrusted/project_0/github.com/osism/container-image-ceph-ansible/playbooks/build.yml
          roles:
          - checkout: main
            checkout_description: zuul branch
            link_name: ansible/playbook_0/role_1/zuul-config
            link_target: untrusted/project_1/github.com/osism/zuul-config
            role_path: ansible/playbook_0/role_1/zuul-config/roles
          - checkout: master
            checkout_description: project default branch
            link_name: ansible/playbook_0/role_2/openinfra-zuul-jobs
            link_target: untrusted/project_2/github.com/osism/openinfra-zuul-jobs
            role_path: ansible/playbook_0/role_2/openinfra-zuul-jobs/roles
          - checkout: main
            checkout_description: zuul branch
            link_name: ansible/playbook_0/role_3/zuul-jobs
            link_target: untrusted/project_3/github.com/osism/zuul-jobs
            role_path: ansible/playbook_0/role_3/zuul-jobs/roles
      post_review: false
      post_timeout: 1800
      pre_timeout: null
      project:
        canonical_hostname: github.com
        canonical_name: github.com/osism/container-image-ceph-ansible
        name: osism/container-image-ceph-ansible
        short_name: container-image-ceph-ansible
        src_dir: src/github.com/osism/container-image-ceph-ansible
      projects:
        github.com/osism/container-image-ceph-ansible:
          canonical_hostname: github.com
          canonical_name: github.com/osism/container-image-ceph-ansible
          checkout: main
          checkout_description: zuul branch
          commit: bee28df131f9a46b2a015dde0954d86c88a99b85
          name: osism/container-image-ceph-ansible
          required: false
          short_name: container-image-ceph-ansible
          src_dir: src/github.com/osism/container-image-ceph-ansible
      ref: refs/pull/701/head
      resources: {}
      tenant: osism
      timeout: 1800
      topic: null
      voting: true
