all:
  children:
    zuul_unreachable:
      hosts: {}
  hosts:
    debian-bookworm:
      ansible_connection: ssh
      ansible_host: 2a13:1a81:8000:3124:f816:3eff:fee2:19b6
      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: 3e7045b5-3b73-4861-8727-31cb252596c0
        host_id: 0d3d02185f810c959252bd1d303ec55040bf5bb0b401cceef814c3a7
        interface_ip: 2a13:1a81:8000:3124:f816:3eff:fee2:19b6
        label: debian-bookworm
        node_properties: {}
        private_ipv4: 10.128.7.160
        private_ipv6: null
        provider: regiocloud-a
        public_ipv4: 81.163.193.76
        public_ipv6: 2a13:1a81:8000:3124:f816:3eff:fee2:19b6
        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: 732e123dbb874de8ac1edf44dd9f45ab
      build_refs:
      - branch: main
        change: '708'
        change_message: "ceph: retry image pull on transient errors\n\n## What\n\nAdd
          a retry to the `Pull container image` task in\n`files/playbooks/{quincy,reef,squid}/ceph-pull-image.yml`.
          The three files were\nbyte-identical before and still are.\n\n## Why\n\nFollow-up
          to the same class of failure as:\n\n- osism/ansible-collection-services#2150\n\nThe
          Ceph image comes from `ceph_docker_registry`, which defaults to `quay.io`\n(`defaults/all/099-registries.yml`
          in the release defaults). That is a\nthird-party registry OSISM does not
          control and which returns transient 5xx\nerrors, so a single bad response
          failed the task and with it the whole pull\naction.\n\nTwo things make this
          worse than the manager case: the playbook runs against\nevery host in the
          `ceph` group, so exposure scales with the number of storage\nnodes, and
          there was no retry at all.\n\n## Not the two-line diff \u2014 and why\n\nThe
          obvious change was to copy #2150 verbatim (`retries: 3` / `delay: 30`,\nno
          `until`). That would have been a **silent no-op on quincy**.\n\nThe bare-`retries`
          form relies on ansible-core falling back to an implicit\ncondition on the
          task not having failed when `until` is unset. That fallback\nwas introduced
          in 2.16:\n\n```python\n# 2.16.19 \u2014 executor/task_executor.py\nretries
          = 1                                    # default run + user retries\nif
          self._task.retries is not None:\n    retries += max(0, self._task.retries)\nelif
          self._task.until:\n    retries += 3\n...\ncond.when = self._task.until or
          [not result['failed']]\n```\n\n```python\n# 2.15.13 \u2014 executor/task_executor.py\nif
          self._task.until:                           # <-- whole block gated\n    retries
          = self._task.retries\n    ...\nelse:\n    retries = 1                                #
          <-- bare \"retries\" is a no-op\n...\ncond.when = self._task.until\n```\n\nThese
          images pin ansible-core per Ceph release in the release repo\n(`latest/ceph-*.yml`):\n\n|
          Release | `ansible_core_version` | bare `retries` effective? |\n|---|---|---|\n|
          quincy | 2.15.13 | **no** |\n| reef | 2.16.19 | yes |\n| squid | 2.16.19
          | yes |\n\nSo quincy would have kept its single attempt while looking protected.\n\nRegistering
          the result and setting `until` explicitly works on every pinned\nversion
          and keeps the three playbooks identical:\n\n```yaml\n      community.docker.docker_image:\n
          \       name: \"{{ ceph_docker_registry }}/{{ ceph_docker_image }}:{{ ceph_image_version
          }}\"\n        source: pull\n      register: result\n      until: result
          is success\n      retries: 3\n      delay: 30\n```\n\n## Verification\n\nSource
          reading is not proof, so this was measured with a probe playbook whose\ntask
          always fails, run against both pinned versions (on Python 3.11 \u2014\nansible-core
          2.15 cannot run on 3.14, `ast.Str` was removed in 3.12):\n\n| | bare `retries:
          3` | `register` + `until` |\n|---|---|---|\n| 2.15.13 (quincy) | **1 attempt,
          no retry**, `attempts` absent | 4 attempts, `attempts: 3` |\n| 2.16.19 (reef/squid)
          | 4 attempts, `attempts: 3` | 4 attempts, `attempts: 3` |\n\nLint, over
          the staged files:\n\n- `yamllint` (the repo's `.yamllint.yml`, via the `yamllint`
          Zuul job) \u2014 pass\n- `ansible-lint` with the custom OSISM rules \u2014
          `0 failure(s), 0 warning(s) in 3\n  files processed`, last profile met `production`\n\nThe
          custom `osism-attribute-order` rule only constrains `name` / `become` /\n`when`,
          so the placement of `until` / `retries` / `delay` is unconstrained.\n\n##
          Risk\n\nLow. On success the task behaves exactly as before. On failure it
          now takes up\nto 90s longer per host before failing the action.\n\n## Note
          on the sibling pull sites\n\n`ansible-collection-services` runs under ansible-core
          2.18, so the bare form in\n#2150 and in the netbox and stepca tasks is effective
          today. It is only safe\nwhile nothing runs those roles under &le;2.15, though,
          and it reads as portable\nwhen it is not. Converting those four sites to
          the explicit form would be a\nsmall separate cleanup \u2014 deliberately
          not bundled here.\n\n\U0001F916 Generated with [Claude Code](https://claude.com/claude-code)\n"
        change_url: https://github.com/osism/container-image-ceph-ansible/pull/708
        commit_id: 8016753bc7f0381bbfc695506613ae135f2d4ecb
        patchset: 8016753bc7f0381bbfc695506613ae135f2d4ecb
        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: af70dca04a894fef8309c58a84fc56c2
      buildset_refs:
      - branch: main
        change: '708'
        change_message: "ceph: retry image pull on transient errors\n\n## What\n\nAdd
          a retry to the `Pull container image` task in\n`files/playbooks/{quincy,reef,squid}/ceph-pull-image.yml`.
          The three files were\nbyte-identical before and still are.\n\n## Why\n\nFollow-up
          to the same class of failure as:\n\n- osism/ansible-collection-services#2150\n\nThe
          Ceph image comes from `ceph_docker_registry`, which defaults to `quay.io`\n(`defaults/all/099-registries.yml`
          in the release defaults). That is a\nthird-party registry OSISM does not
          control and which returns transient 5xx\nerrors, so a single bad response
          failed the task and with it the whole pull\naction.\n\nTwo things make this
          worse than the manager case: the playbook runs against\nevery host in the
          `ceph` group, so exposure scales with the number of storage\nnodes, and
          there was no retry at all.\n\n## Not the two-line diff \u2014 and why\n\nThe
          obvious change was to copy #2150 verbatim (`retries: 3` / `delay: 30`,\nno
          `until`). That would have been a **silent no-op on quincy**.\n\nThe bare-`retries`
          form relies on ansible-core falling back to an implicit\ncondition on the
          task not having failed when `until` is unset. That fallback\nwas introduced
          in 2.16:\n\n```python\n# 2.16.19 \u2014 executor/task_executor.py\nretries
          = 1                                    # default run + user retries\nif
          self._task.retries is not None:\n    retries += max(0, self._task.retries)\nelif
          self._task.until:\n    retries += 3\n...\ncond.when = self._task.until or
          [not result['failed']]\n```\n\n```python\n# 2.15.13 \u2014 executor/task_executor.py\nif
          self._task.until:                           # <-- whole block gated\n    retries
          = self._task.retries\n    ...\nelse:\n    retries = 1                                #
          <-- bare \"retries\" is a no-op\n...\ncond.when = self._task.until\n```\n\nThese
          images pin ansible-core per Ceph release in the release repo\n(`latest/ceph-*.yml`):\n\n|
          Release | `ansible_core_version` | bare `retries` effective? |\n|---|---|---|\n|
          quincy | 2.15.13 | **no** |\n| reef | 2.16.19 | yes |\n| squid | 2.16.19
          | yes |\n\nSo quincy would have kept its single attempt while looking protected.\n\nRegistering
          the result and setting `until` explicitly works on every pinned\nversion
          and keeps the three playbooks identical:\n\n```yaml\n      community.docker.docker_image:\n
          \       name: \"{{ ceph_docker_registry }}/{{ ceph_docker_image }}:{{ ceph_image_version
          }}\"\n        source: pull\n      register: result\n      until: result
          is success\n      retries: 3\n      delay: 30\n```\n\n## Verification\n\nSource
          reading is not proof, so this was measured with a probe playbook whose\ntask
          always fails, run against both pinned versions (on Python 3.11 \u2014\nansible-core
          2.15 cannot run on 3.14, `ast.Str` was removed in 3.12):\n\n| | bare `retries:
          3` | `register` + `until` |\n|---|---|---|\n| 2.15.13 (quincy) | **1 attempt,
          no retry**, `attempts` absent | 4 attempts, `attempts: 3` |\n| 2.16.19 (reef/squid)
          | 4 attempts, `attempts: 3` | 4 attempts, `attempts: 3` |\n\nLint, over
          the staged files:\n\n- `yamllint` (the repo's `.yamllint.yml`, via the `yamllint`
          Zuul job) \u2014 pass\n- `ansible-lint` with the custom OSISM rules \u2014
          `0 failure(s), 0 warning(s) in 3\n  files processed`, last profile met `production`\n\nThe
          custom `osism-attribute-order` rule only constrains `name` / `become` /\n`when`,
          so the placement of `until` / `retries` / `delay` is unconstrained.\n\n##
          Risk\n\nLow. On success the task behaves exactly as before. On failure it
          now takes up\nto 90s longer per host before failing the action.\n\n## Note
          on the sibling pull sites\n\n`ansible-collection-services` runs under ansible-core
          2.18, so the bare form in\n#2150 and in the netbox and stepca tasks is effective
          today. It is only safe\nwhile nothing runs those roles under &le;2.15, though,
          and it reads as portable\nwhen it is not. Converting those four sites to
          the explicit form would be a\nsmall separate cleanup \u2014 deliberately
          not bundled here.\n\n\U0001F916 Generated with [Claude Code](https://claude.com/claude-code)\n"
        change_url: https://github.com/osism/container-image-ceph-ansible/pull/708
        commit_id: 8016753bc7f0381bbfc695506613ae135f2d4ecb
        patchset: 8016753bc7f0381bbfc695506613ae135f2d4ecb
        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: '708'
      change_message: "ceph: retry image pull on transient errors\n\n## What\n\nAdd
        a retry to the `Pull container image` task in\n`files/playbooks/{quincy,reef,squid}/ceph-pull-image.yml`.
        The three files were\nbyte-identical before and still are.\n\n## Why\n\nFollow-up
        to the same class of failure as:\n\n- osism/ansible-collection-services#2150\n\nThe
        Ceph image comes from `ceph_docker_registry`, which defaults to `quay.io`\n(`defaults/all/099-registries.yml`
        in the release defaults). That is a\nthird-party registry OSISM does not control
        and which returns transient 5xx\nerrors, so a single bad response failed the
        task and with it the whole pull\naction.\n\nTwo things make this worse than
        the manager case: the playbook runs against\nevery host in the `ceph` group,
        so exposure scales with the number of storage\nnodes, and there was no retry
        at all.\n\n## Not the two-line diff \u2014 and why\n\nThe obvious change was
        to copy #2150 verbatim (`retries: 3` / `delay: 30`,\nno `until`). That would
        have been a **silent no-op on quincy**.\n\nThe bare-`retries` form relies
        on ansible-core falling back to an implicit\ncondition on the task not having
        failed when `until` is unset. That fallback\nwas introduced in 2.16:\n\n```python\n#
        2.16.19 \u2014 executor/task_executor.py\nretries = 1                                    #
        default run + user retries\nif self._task.retries is not None:\n    retries
        += max(0, self._task.retries)\nelif self._task.until:\n    retries += 3\n...\ncond.when
        = self._task.until or [not result['failed']]\n```\n\n```python\n# 2.15.13
        \u2014 executor/task_executor.py\nif self._task.until:                           #
        <-- whole block gated\n    retries = self._task.retries\n    ...\nelse:\n
        \   retries = 1                                # <-- bare \"retries\" is a
        no-op\n...\ncond.when = self._task.until\n```\n\nThese images pin ansible-core
        per Ceph release in the release repo\n(`latest/ceph-*.yml`):\n\n| Release
        | `ansible_core_version` | bare `retries` effective? |\n|---|---|---|\n| quincy
        | 2.15.13 | **no** |\n| reef | 2.16.19 | yes |\n| squid | 2.16.19 | yes |\n\nSo
        quincy would have kept its single attempt while looking protected.\n\nRegistering
        the result and setting `until` explicitly works on every pinned\nversion and
        keeps the three playbooks identical:\n\n```yaml\n      community.docker.docker_image:\n
        \       name: \"{{ ceph_docker_registry }}/{{ ceph_docker_image }}:{{ ceph_image_version
        }}\"\n        source: pull\n      register: result\n      until: result is
        success\n      retries: 3\n      delay: 30\n```\n\n## Verification\n\nSource
        reading is not proof, so this was measured with a probe playbook whose\ntask
        always fails, run against both pinned versions (on Python 3.11 \u2014\nansible-core
        2.15 cannot run on 3.14, `ast.Str` was removed in 3.12):\n\n| | bare `retries:
        3` | `register` + `until` |\n|---|---|---|\n| 2.15.13 (quincy) | **1 attempt,
        no retry**, `attempts` absent | 4 attempts, `attempts: 3` |\n| 2.16.19 (reef/squid)
        | 4 attempts, `attempts: 3` | 4 attempts, `attempts: 3` |\n\nLint, over the
        staged files:\n\n- `yamllint` (the repo's `.yamllint.yml`, via the `yamllint`
        Zuul job) \u2014 pass\n- `ansible-lint` with the custom OSISM rules \u2014
        `0 failure(s), 0 warning(s) in 3\n  files processed`, last profile met `production`\n\nThe
        custom `osism-attribute-order` rule only constrains `name` / `become` /\n`when`,
        so the placement of `until` / `retries` / `delay` is unconstrained.\n\n##
        Risk\n\nLow. On success the task behaves exactly as before. On failure it
        now takes up\nto 90s longer per host before failing the action.\n\n## Note
        on the sibling pull sites\n\n`ansible-collection-services` runs under ansible-core
        2.18, so the bare form in\n#2150 and in the netbox and stepca tasks is effective
        today. It is only safe\nwhile nothing runs those roles under &le;2.15, though,
        and it reads as portable\nwhen it is not. Converting those four sites to the
        explicit form would be a\nsmall separate cleanup \u2014 deliberately not bundled
        here.\n\n\U0001F916 Generated with [Claude Code](https://claude.com/claude-code)\n"
      change_url: https://github.com/osism/container-image-ceph-ansible/pull/708
      child_jobs: []
      commit_id: 8016753bc7f0381bbfc695506613ae135f2d4ecb
      event_id: 31e052b0-8c16-11f1-985a-9b767d3608f6
      executor:
        hostname: 521e9411259a
        inventory_file: /var/lib/zuul/builds/732e123dbb874de8ac1edf44dd9f45ab/ansible/inventory.yaml
        log_root: /var/lib/zuul/builds/732e123dbb874de8ac1edf44dd9f45ab/work/logs
        result_data_file: /var/lib/zuul/builds/732e123dbb874de8ac1edf44dd9f45ab/work/results.json
        src_root: /var/lib/zuul/builds/732e123dbb874de8ac1edf44dd9f45ab/work/src
        work_root: /var/lib/zuul/builds/732e123dbb874de8ac1edf44dd9f45ab/work
      include_vars: []
      items:
      - branch: main
        change: '708'
        change_message: "ceph: retry image pull on transient errors\n\n## What\n\nAdd
          a retry to the `Pull container image` task in\n`files/playbooks/{quincy,reef,squid}/ceph-pull-image.yml`.
          The three files were\nbyte-identical before and still are.\n\n## Why\n\nFollow-up
          to the same class of failure as:\n\n- osism/ansible-collection-services#2150\n\nThe
          Ceph image comes from `ceph_docker_registry`, which defaults to `quay.io`\n(`defaults/all/099-registries.yml`
          in the release defaults). That is a\nthird-party registry OSISM does not
          control and which returns transient 5xx\nerrors, so a single bad response
          failed the task and with it the whole pull\naction.\n\nTwo things make this
          worse than the manager case: the playbook runs against\nevery host in the
          `ceph` group, so exposure scales with the number of storage\nnodes, and
          there was no retry at all.\n\n## Not the two-line diff \u2014 and why\n\nThe
          obvious change was to copy #2150 verbatim (`retries: 3` / `delay: 30`,\nno
          `until`). That would have been a **silent no-op on quincy**.\n\nThe bare-`retries`
          form relies on ansible-core falling back to an implicit\ncondition on the
          task not having failed when `until` is unset. That fallback\nwas introduced
          in 2.16:\n\n```python\n# 2.16.19 \u2014 executor/task_executor.py\nretries
          = 1                                    # default run + user retries\nif
          self._task.retries is not None:\n    retries += max(0, self._task.retries)\nelif
          self._task.until:\n    retries += 3\n...\ncond.when = self._task.until or
          [not result['failed']]\n```\n\n```python\n# 2.15.13 \u2014 executor/task_executor.py\nif
          self._task.until:                           # <-- whole block gated\n    retries
          = self._task.retries\n    ...\nelse:\n    retries = 1                                #
          <-- bare \"retries\" is a no-op\n...\ncond.when = self._task.until\n```\n\nThese
          images pin ansible-core per Ceph release in the release repo\n(`latest/ceph-*.yml`):\n\n|
          Release | `ansible_core_version` | bare `retries` effective? |\n|---|---|---|\n|
          quincy | 2.15.13 | **no** |\n| reef | 2.16.19 | yes |\n| squid | 2.16.19
          | yes |\n\nSo quincy would have kept its single attempt while looking protected.\n\nRegistering
          the result and setting `until` explicitly works on every pinned\nversion
          and keeps the three playbooks identical:\n\n```yaml\n      community.docker.docker_image:\n
          \       name: \"{{ ceph_docker_registry }}/{{ ceph_docker_image }}:{{ ceph_image_version
          }}\"\n        source: pull\n      register: result\n      until: result
          is success\n      retries: 3\n      delay: 30\n```\n\n## Verification\n\nSource
          reading is not proof, so this was measured with a probe playbook whose\ntask
          always fails, run against both pinned versions (on Python 3.11 \u2014\nansible-core
          2.15 cannot run on 3.14, `ast.Str` was removed in 3.12):\n\n| | bare `retries:
          3` | `register` + `until` |\n|---|---|---|\n| 2.15.13 (quincy) | **1 attempt,
          no retry**, `attempts` absent | 4 attempts, `attempts: 3` |\n| 2.16.19 (reef/squid)
          | 4 attempts, `attempts: 3` | 4 attempts, `attempts: 3` |\n\nLint, over
          the staged files:\n\n- `yamllint` (the repo's `.yamllint.yml`, via the `yamllint`
          Zuul job) \u2014 pass\n- `ansible-lint` with the custom OSISM rules \u2014
          `0 failure(s), 0 warning(s) in 3\n  files processed`, last profile met `production`\n\nThe
          custom `osism-attribute-order` rule only constrains `name` / `become` /\n`when`,
          so the placement of `until` / `retries` / `delay` is unconstrained.\n\n##
          Risk\n\nLow. On success the task behaves exactly as before. On failure it
          now takes up\nto 90s longer per host before failing the action.\n\n## Note
          on the sibling pull sites\n\n`ansible-collection-services` runs under ansible-core
          2.18, so the bare form in\n#2150 and in the netbox and stepca tasks is effective
          today. It is only safe\nwhile nothing runs those roles under &le;2.15, though,
          and it reads as portable\nwhen it is not. Converting those four sites to
          the explicit form would be a\nsmall separate cleanup \u2014 deliberately
          not bundled here.\n\n\U0001F916 Generated with [Claude Code](https://claude.com/claude-code)\n"
        change_url: https://github.com/osism/container-image-ceph-ansible/pull/708
        commit_id: 8016753bc7f0381bbfc695506613ae135f2d4ecb
        patchset: 8016753bc7f0381bbfc695506613ae135f2d4ecb
        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: Y2VwaDogcmV0cnkgaW1hZ2UgcHVsbCBvbiB0cmFuc2llbnQgZXJyb3JzCgojIyBXaGF0CgpBZGQgYSByZXRyeSB0byB0aGUgYFB1bGwgY29udGFpbmVyIGltYWdlYCB0YXNrIGluCmBmaWxlcy9wbGF5Ym9va3Mve3F1aW5jeSxyZWVmLHNxdWlkfS9jZXBoLXB1bGwtaW1hZ2UueW1sYC4gVGhlIHRocmVlIGZpbGVzIHdlcmUKYnl0ZS1pZGVudGljYWwgYmVmb3JlIGFuZCBzdGlsbCBhcmUuCgojIyBXaHkKCkZvbGxvdy11cCB0byB0aGUgc2FtZSBjbGFzcyBvZiBmYWlsdXJlIGFzOgoKLSBvc2lzbS9hbnNpYmxlLWNvbGxlY3Rpb24tc2VydmljZXMjMjE1MAoKVGhlIENlcGggaW1hZ2UgY29tZXMgZnJvbSBgY2VwaF9kb2NrZXJfcmVnaXN0cnlgLCB3aGljaCBkZWZhdWx0cyB0byBgcXVheS5pb2AKKGBkZWZhdWx0cy9hbGwvMDk5LXJlZ2lzdHJpZXMueW1sYCBpbiB0aGUgcmVsZWFzZSBkZWZhdWx0cykuIFRoYXQgaXMgYQp0aGlyZC1wYXJ0eSByZWdpc3RyeSBPU0lTTSBkb2VzIG5vdCBjb250cm9sIGFuZCB3aGljaCByZXR1cm5zIHRyYW5zaWVudCA1eHgKZXJyb3JzLCBzbyBhIHNpbmdsZSBiYWQgcmVzcG9uc2UgZmFpbGVkIHRoZSB0YXNrIGFuZCB3aXRoIGl0IHRoZSB3aG9sZSBwdWxsCmFjdGlvbi4KClR3byB0aGluZ3MgbWFrZSB0aGlzIHdvcnNlIHRoYW4gdGhlIG1hbmFnZXIgY2FzZTogdGhlIHBsYXlib29rIHJ1bnMgYWdhaW5zdApldmVyeSBob3N0IGluIHRoZSBgY2VwaGAgZ3JvdXAsIHNvIGV4cG9zdXJlIHNjYWxlcyB3aXRoIHRoZSBudW1iZXIgb2Ygc3RvcmFnZQpub2RlcywgYW5kIHRoZXJlIHdhcyBubyByZXRyeSBhdCBhbGwuCgojIyBOb3QgdGhlIHR3by1saW5lIGRpZmYg4oCUIGFuZCB3aHkKClRoZSBvYnZpb3VzIGNoYW5nZSB3YXMgdG8gY29weSAjMjE1MCB2ZXJiYXRpbSAoYHJldHJpZXM6IDNgIC8gYGRlbGF5OiAzMGAsCm5vIGB1bnRpbGApLiBUaGF0IHdvdWxkIGhhdmUgYmVlbiBhICoqc2lsZW50IG5vLW9wIG9uIHF1aW5jeSoqLgoKVGhlIGJhcmUtYHJldHJpZXNgIGZvcm0gcmVsaWVzIG9uIGFuc2libGUtY29yZSBmYWxsaW5nIGJhY2sgdG8gYW4gaW1wbGljaXQKY29uZGl0aW9uIG9uIHRoZSB0YXNrIG5vdCBoYXZpbmcgZmFpbGVkIHdoZW4gYHVudGlsYCBpcyB1bnNldC4gVGhhdCBmYWxsYmFjawp3YXMgaW50cm9kdWNlZCBpbiAyLjE2OgoKYGBgcHl0aG9uCiMgMi4xNi4xOSDigJQgZXhlY3V0b3IvdGFza19leGVjdXRvci5weQpyZXRyaWVzID0gMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZGVmYXVsdCBydW4gKyB1c2VyIHJldHJpZXMKaWYgc2VsZi5fdGFzay5yZXRyaWVzIGlzIG5vdCBOb25lOgogICAgcmV0cmllcyArPSBtYXgoMCwgc2VsZi5fdGFzay5yZXRyaWVzKQplbGlmIHNlbGYuX3Rhc2sudW50aWw6CiAgICByZXRyaWVzICs9IDMKLi4uCmNvbmQud2hlbiA9IHNlbGYuX3Rhc2sudW50aWwgb3IgW25vdCByZXN1bHRbJ2ZhaWxlZCddXQpgYGAKCmBgYHB5dGhvbgojIDIuMTUuMTMg4oCUIGV4ZWN1dG9yL3Rhc2tfZXhlY3V0b3IucHkKaWYgc2VsZi5fdGFzay51bnRpbDogICAgICAgICAgICAgICAgICAgICAgICAgICAjIDwtLSB3aG9sZSBibG9jayBnYXRlZAogICAgcmV0cmllcyA9IHNlbGYuX3Rhc2sucmV0cmllcwogICAgLi4uCmVsc2U6CiAgICByZXRyaWVzID0gMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyA8LS0gYmFyZSAicmV0cmllcyIgaXMgYSBuby1vcAouLi4KY29uZC53aGVuID0gc2VsZi5fdGFzay51bnRpbApgYGAKClRoZXNlIGltYWdlcyBwaW4gYW5zaWJsZS1jb3JlIHBlciBDZXBoIHJlbGVhc2UgaW4gdGhlIHJlbGVhc2UgcmVwbwooYGxhdGVzdC9jZXBoLSoueW1sYCk6Cgp8IFJlbGVhc2UgfCBgYW5zaWJsZV9jb3JlX3ZlcnNpb25gIHwgYmFyZSBgcmV0cmllc2AgZWZmZWN0aXZlPyB8CnwtLS18LS0tfC0tLXwKfCBxdWluY3kgfCAyLjE1LjEzIHwgKipubyoqIHwKfCByZWVmIHwgMi4xNi4xOSB8IHllcyB8Cnwgc3F1aWQgfCAyLjE2LjE5IHwgeWVzIHwKClNvIHF1aW5jeSB3b3VsZCBoYXZlIGtlcHQgaXRzIHNpbmdsZSBhdHRlbXB0IHdoaWxlIGxvb2tpbmcgcHJvdGVjdGVkLgoKUmVnaXN0ZXJpbmcgdGhlIHJlc3VsdCBhbmQgc2V0dGluZyBgdW50aWxgIGV4cGxpY2l0bHkgd29ya3Mgb24gZXZlcnkgcGlubmVkCnZlcnNpb24gYW5kIGtlZXBzIHRoZSB0aHJlZSBwbGF5Ym9va3MgaWRlbnRpY2FsOgoKYGBgeWFtbAogICAgICBjb21tdW5pdHkuZG9ja2VyLmRvY2tlcl9pbWFnZToKICAgICAgICBuYW1lOiAie3sgY2VwaF9kb2NrZXJfcmVnaXN0cnkgfX0ve3sgY2VwaF9kb2NrZXJfaW1hZ2UgfX06e3sgY2VwaF9pbWFnZV92ZXJzaW9uIH19IgogICAgICAgIHNvdXJjZTogcHVsbAogICAgICByZWdpc3RlcjogcmVzdWx0CiAgICAgIHVudGlsOiByZXN1bHQgaXMgc3VjY2VzcwogICAgICByZXRyaWVzOiAzCiAgICAgIGRlbGF5OiAzMApgYGAKCiMjIFZlcmlmaWNhdGlvbgoKU291cmNlIHJlYWRpbmcgaXMgbm90IHByb29mLCBzbyB0aGlzIHdhcyBtZWFzdXJlZCB3aXRoIGEgcHJvYmUgcGxheWJvb2sgd2hvc2UKdGFzayBhbHdheXMgZmFpbHMsIHJ1biBhZ2FpbnN0IGJvdGggcGlubmVkIHZlcnNpb25zIChvbiBQeXRob24gMy4xMSDigJQKYW5zaWJsZS1jb3JlIDIuMTUgY2Fubm90IHJ1biBvbiAzLjE0LCBgYXN0LlN0cmAgd2FzIHJlbW92ZWQgaW4gMy4xMik6Cgp8IHwgYmFyZSBgcmV0cmllczogM2AgfCBgcmVnaXN0ZXJgICsgYHVudGlsYCB8CnwtLS18LS0tfC0tLXwKfCAyLjE1LjEzIChxdWluY3kpIHwgKioxIGF0dGVtcHQsIG5vIHJldHJ5KiosIGBhdHRlbXB0c2AgYWJzZW50IHwgNCBhdHRlbXB0cywgYGF0dGVtcHRzOiAzYCB8CnwgMi4xNi4xOSAocmVlZi9zcXVpZCkgfCA0IGF0dGVtcHRzLCBgYXR0ZW1wdHM6IDNgIHwgNCBhdHRlbXB0cywgYGF0dGVtcHRzOiAzYCB8CgpMaW50LCBvdmVyIHRoZSBzdGFnZWQgZmlsZXM6CgotIGB5YW1sbGludGAgKHRoZSByZXBvJ3MgYC55YW1sbGludC55bWxgLCB2aWEgdGhlIGB5YW1sbGludGAgWnV1bCBqb2IpIOKAlCBwYXNzCi0gYGFuc2libGUtbGludGAgd2l0aCB0aGUgY3VzdG9tIE9TSVNNIHJ1bGVzIOKAlCBgMCBmYWlsdXJlKHMpLCAwIHdhcm5pbmcocykgaW4gMwogIGZpbGVzIHByb2Nlc3NlZGAsIGxhc3QgcHJvZmlsZSBtZXQgYHByb2R1Y3Rpb25gCgpUaGUgY3VzdG9tIGBvc2lzbS1hdHRyaWJ1dGUtb3JkZXJgIHJ1bGUgb25seSBjb25zdHJhaW5zIGBuYW1lYCAvIGBiZWNvbWVgIC8KYHdoZW5gLCBzbyB0aGUgcGxhY2VtZW50IG9mIGB1bnRpbGAgLyBgcmV0cmllc2AgLyBgZGVsYXlgIGlzIHVuY29uc3RyYWluZWQuCgojIyBSaXNrCgpMb3cuIE9uIHN1Y2Nlc3MgdGhlIHRhc2sgYmVoYXZlcyBleGFjdGx5IGFzIGJlZm9yZS4gT24gZmFpbHVyZSBpdCBub3cgdGFrZXMgdXAKdG8gOTBzIGxvbmdlciBwZXIgaG9zdCBiZWZvcmUgZmFpbGluZyB0aGUgYWN0aW9uLgoKIyMgTm90ZSBvbiB0aGUgc2libGluZyBwdWxsIHNpdGVzCgpgYW5zaWJsZS1jb2xsZWN0aW9uLXNlcnZpY2VzYCBydW5zIHVuZGVyIGFuc2libGUtY29yZSAyLjE4LCBzbyB0aGUgYmFyZSBmb3JtIGluCiMyMTUwIGFuZCBpbiB0aGUgbmV0Ym94IGFuZCBzdGVwY2EgdGFza3MgaXMgZWZmZWN0aXZlIHRvZGF5LiBJdCBpcyBvbmx5IHNhZmUKd2hpbGUgbm90aGluZyBydW5zIHRob3NlIHJvbGVzIHVuZGVyICZsZTsyLjE1LCB0aG91Z2gsIGFuZCBpdCByZWFkcyBhcyBwb3J0YWJsZQp3aGVuIGl0IGlzIG5vdC4gQ29udmVydGluZyB0aG9zZSBmb3VyIHNpdGVzIHRvIHRoZSBleHBsaWNpdCBmb3JtIHdvdWxkIGJlIGEKc21hbGwgc2VwYXJhdGUgY2xlYW51cCDigJQgZGVsaWJlcmF0ZWx5IG5vdCBidW5kbGVkIGhlcmUuCgrwn6SWIEdlbmVyYXRlZCB3aXRoIFtDbGF1ZGUgQ29kZV0oaHR0cHM6Ly9jbGF1ZGUuY29tL2NsYXVkZS1jb2RlKQo=
      patchset: 8016753bc7f0381bbfc695506613ae135f2d4ecb
      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: dcb06ea8a3ad422cc9d98b376216617b2daa6a02
          untrusted/project_0/github.com/osism/container-image-ceph-ansible:
            canonical_name: github.com/osism/container-image-ceph-ansible
            checkout: main
            commit: 5b34bd6f2ad12a5f985e6afabc49fcdeb7f156ad
          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
          untrusted/project_3/github.com/osism/zuul-jobs:
            canonical_name: github.com/osism/zuul-jobs
            checkout: main
            commit: dcb06ea8a3ad422cc9d98b376216617b2daa6a02
        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: 5b34bd6f2ad12a5f985e6afabc49fcdeb7f156ad
          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/708/head
      resources: {}
      tenant: osism
      timeout: 1800
      topic: null
      voting: true
