all:
  children:
    zuul_unreachable:
      hosts: {}
  hosts:
    debian-bookworm:
      ansible_connection: ssh
      ansible_host: 2a13:1a81:8000:3124:f816:3eff:fe21:6008
      ansible_port: 22
      ansible_python_interpreter: auto
      ansible_user: zuul
      nodepool:
        az: nova
        cloud: regiocloud-a-ci
        external_id: e4434fb6-41eb-4a2e-a444-7afc0504d325
        host_id: 4667d18e0398acd2fb730ad41ba32e35789c4ac8cd4c0875d25b316b
        interface_ip: 2a13:1a81:8000:3124:f816:3eff:fe21:6008
        label: debian-bookworm
        node_properties: {}
        private_ipv4: 10.128.0.107
        private_ipv6: null
        provider: regiocloud-a
        public_ipv4: 81.163.193.5
        public_ipv6: 2a13:1a81:8000:3124:f816:3eff:fe21:6008
        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 python-black explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: osism/zuul-jobs/.zuul.yaml@main#54>'
      - '<Job python-black explicit: None implied: None source: osism/python-osism/.zuul.yaml@main#138>'
      ansible_version: '9'
      attempts: 1
      branch: main
      build: 1e880325a4264f3db866070e936c1ab3
      build_refs:
      - branch: main
        change: '2341'
        change_message: "Add unit tests for conductor redfish module\n\nImplements
          #2225.\n\nAdds `tests/unit/tasks/conductor/test_redfish.py`, covering every\nfunction
          in `osism/tasks/conductor/redfish.py`. Part of Tier 3 (#2199).\n\n## Change
          set (single commit)\n\n`Add unit tests for conductor redfish module` \u2014
          a new test module that\nmirrors the conventions already used in `tests/unit/tasks/conductor/`\n(SPDX
          header, the shared `loguru_logs` fixture from `tests/conftest.py`,\na local
          `_has_log` helper, `MagicMock`/`patch`, section separators).\n\n### What
          is covered\n\n- **`_normalize_redfish_data`** (pure function, built from
          inline dicts):\n  `None` removal, `dict`/`list` \u2192 `json.dumps`, `bool`
          \u2192 `\"true\"`/\n  `\"false\"`, `int`/`float` \u2192 `str(...)`, plain
          `str` pass-through, empty\n  dict, and a mixed input combining all of the
          above.\n- **`get_resources`**: parametrized delegation to `_get_ethernet_interfaces`,\n
          \ `_get_network_adapters`, `_get_network_device_functions` (asserting the\n
          \ other two helpers are not called), plus the unsupported-resource-type\n
          \ branch that returns `[]` and logs a warning.\n- **`_get_ethernet_interfaces`**:
          no connection, top-level exception,\n  system without the `ethernet_interfaces`
          attribute, `ethernet_interfaces\n  = None`, two systems \xD7 two interfaces
          (4 normalized entries), full\n  optional-attribute exposure, `mac_address=None`
          stripping, and\n  per-interface exception isolation.\n- **`_get_network_adapters`**:
          no connection, top-level exception, chassis\n  without `network_adapters`,
          two normalized adapter entries, and\n  per-adapter exception isolation.\n-
          **`_get_network_device_functions`**: no connection, top-level exception,\n
          \ adapter missing `network_device_functions` (adapter-level `except`, then\n
          \ processing continues with the next adapter), per-device-function\n  exception
          isolation, MAC extraction from `device_func.ethernet`, missing\n  `ethernet`
          (MACs stripped by normalization), and `adapter_id`/\n  `adapter_name` correlation
          on every entry.\n\n### Mocking notes\n\nThe Redfish connection chain (`get_system_collection()`
          /\n`get_chassis_collection()` \u2192 `get_members()` \u2192 members) is
          faked with\n`MagicMock`. `del mock.attr` drives the `hasattr(...)` is-`False`
          cases.\n\nThe per-item `except` branches log `member.identity`, so the failing\nmember
          must keep `identity` readable while a *different* attribute raises.\nA `MagicMock`
          cannot raise on attribute *read* without leaking the\ndescriptor to every
          other mock, so a small explicit `_RaisesOn` shim is\nused for those cases
          (its `__getattr__` raises on one named attribute and\nreturns `AttributeError`
          \u2014 i.e. `getattr(..., None)` default \u2014 for the\nrest). This is
          a deliberate, minor divergence from the issue's\n\"`MagicMock` is sufficient\"
          hint; the observable behaviour the issue\nspecifies (item skipped, warning
          logged, others still returned) is\nunchanged.\n\n## Verification\n\n- `black
          --check` \u2014 clean.\n- `flake8` \u2014 clean.\n- `pytest` / coverage:
          not run locally (project convention is to let the\n  `python-osism-unit-tests`
          Zuul job run the suite on the PR). Line\n  coverage of the target module
          was reviewed by hand and every line is\n  exercised; please rely on the
          CI job for the 100 % figure.\n\n\U0001F916 Generated with [Claude Code](https://claude.com/claude-code)"
        change_url: https://github.com/osism/python-osism/pull/2341
        commit_id: 70c0bce549c76a8e71be2ccc4388d57f01a3e8f4
        patchset: 70c0bce549c76a8e71be2ccc4388d57f01a3e8f4
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/python-osism
          name: osism/python-osism
          short_name: python-osism
        src_dir: src/github.com/osism/python-osism
        topic: null
      buildset: ab1803e9db944968961ea8749c4dc247
      buildset_refs:
      - branch: main
        change: '2341'
        change_message: "Add unit tests for conductor redfish module\n\nImplements
          #2225.\n\nAdds `tests/unit/tasks/conductor/test_redfish.py`, covering every\nfunction
          in `osism/tasks/conductor/redfish.py`. Part of Tier 3 (#2199).\n\n## Change
          set (single commit)\n\n`Add unit tests for conductor redfish module` \u2014
          a new test module that\nmirrors the conventions already used in `tests/unit/tasks/conductor/`\n(SPDX
          header, the shared `loguru_logs` fixture from `tests/conftest.py`,\na local
          `_has_log` helper, `MagicMock`/`patch`, section separators).\n\n### What
          is covered\n\n- **`_normalize_redfish_data`** (pure function, built from
          inline dicts):\n  `None` removal, `dict`/`list` \u2192 `json.dumps`, `bool`
          \u2192 `\"true\"`/\n  `\"false\"`, `int`/`float` \u2192 `str(...)`, plain
          `str` pass-through, empty\n  dict, and a mixed input combining all of the
          above.\n- **`get_resources`**: parametrized delegation to `_get_ethernet_interfaces`,\n
          \ `_get_network_adapters`, `_get_network_device_functions` (asserting the\n
          \ other two helpers are not called), plus the unsupported-resource-type\n
          \ branch that returns `[]` and logs a warning.\n- **`_get_ethernet_interfaces`**:
          no connection, top-level exception,\n  system without the `ethernet_interfaces`
          attribute, `ethernet_interfaces\n  = None`, two systems \xD7 two interfaces
          (4 normalized entries), full\n  optional-attribute exposure, `mac_address=None`
          stripping, and\n  per-interface exception isolation.\n- **`_get_network_adapters`**:
          no connection, top-level exception, chassis\n  without `network_adapters`,
          two normalized adapter entries, and\n  per-adapter exception isolation.\n-
          **`_get_network_device_functions`**: no connection, top-level exception,\n
          \ adapter missing `network_device_functions` (adapter-level `except`, then\n
          \ processing continues with the next adapter), per-device-function\n  exception
          isolation, MAC extraction from `device_func.ethernet`, missing\n  `ethernet`
          (MACs stripped by normalization), and `adapter_id`/\n  `adapter_name` correlation
          on every entry.\n\n### Mocking notes\n\nThe Redfish connection chain (`get_system_collection()`
          /\n`get_chassis_collection()` \u2192 `get_members()` \u2192 members) is
          faked with\n`MagicMock`. `del mock.attr` drives the `hasattr(...)` is-`False`
          cases.\n\nThe per-item `except` branches log `member.identity`, so the failing\nmember
          must keep `identity` readable while a *different* attribute raises.\nA `MagicMock`
          cannot raise on attribute *read* without leaking the\ndescriptor to every
          other mock, so a small explicit `_RaisesOn` shim is\nused for those cases
          (its `__getattr__` raises on one named attribute and\nreturns `AttributeError`
          \u2014 i.e. `getattr(..., None)` default \u2014 for the\nrest). This is
          a deliberate, minor divergence from the issue's\n\"`MagicMock` is sufficient\"
          hint; the observable behaviour the issue\nspecifies (item skipped, warning
          logged, others still returned) is\nunchanged.\n\n## Verification\n\n- `black
          --check` \u2014 clean.\n- `flake8` \u2014 clean.\n- `pytest` / coverage:
          not run locally (project convention is to let the\n  `python-osism-unit-tests`
          Zuul job run the suite on the PR). Line\n  coverage of the target module
          was reviewed by hand and every line is\n  exercised; please rely on the
          CI job for the 100 % figure.\n\n\U0001F916 Generated with [Claude Code](https://claude.com/claude-code)"
        change_url: https://github.com/osism/python-osism/pull/2341
        commit_id: 70c0bce549c76a8e71be2ccc4388d57f01a3e8f4
        patchset: 70c0bce549c76a8e71be2ccc4388d57f01a3e8f4
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/python-osism
          name: osism/python-osism
          short_name: python-osism
        src_dir: src/github.com/osism/python-osism
        topic: null
      change: '2341'
      change_message: "Add unit tests for conductor redfish module\n\nImplements #2225.\n\nAdds
        `tests/unit/tasks/conductor/test_redfish.py`, covering every\nfunction in
        `osism/tasks/conductor/redfish.py`. Part of Tier 3 (#2199).\n\n## Change set
        (single commit)\n\n`Add unit tests for conductor redfish module` \u2014 a
        new test module that\nmirrors the conventions already used in `tests/unit/tasks/conductor/`\n(SPDX
        header, the shared `loguru_logs` fixture from `tests/conftest.py`,\na local
        `_has_log` helper, `MagicMock`/`patch`, section separators).\n\n### What is
        covered\n\n- **`_normalize_redfish_data`** (pure function, built from inline
        dicts):\n  `None` removal, `dict`/`list` \u2192 `json.dumps`, `bool` \u2192
        `\"true\"`/\n  `\"false\"`, `int`/`float` \u2192 `str(...)`, plain `str` pass-through,
        empty\n  dict, and a mixed input combining all of the above.\n- **`get_resources`**:
        parametrized delegation to `_get_ethernet_interfaces`,\n  `_get_network_adapters`,
        `_get_network_device_functions` (asserting the\n  other two helpers are not
        called), plus the unsupported-resource-type\n  branch that returns `[]` and
        logs a warning.\n- **`_get_ethernet_interfaces`**: no connection, top-level
        exception,\n  system without the `ethernet_interfaces` attribute, `ethernet_interfaces\n
        \ = None`, two systems \xD7 two interfaces (4 normalized entries), full\n
        \ optional-attribute exposure, `mac_address=None` stripping, and\n  per-interface
        exception isolation.\n- **`_get_network_adapters`**: no connection, top-level
        exception, chassis\n  without `network_adapters`, two normalized adapter entries,
        and\n  per-adapter exception isolation.\n- **`_get_network_device_functions`**:
        no connection, top-level exception,\n  adapter missing `network_device_functions`
        (adapter-level `except`, then\n  processing continues with the next adapter),
        per-device-function\n  exception isolation, MAC extraction from `device_func.ethernet`,
        missing\n  `ethernet` (MACs stripped by normalization), and `adapter_id`/\n
        \ `adapter_name` correlation on every entry.\n\n### Mocking notes\n\nThe Redfish
        connection chain (`get_system_collection()` /\n`get_chassis_collection()`
        \u2192 `get_members()` \u2192 members) is faked with\n`MagicMock`. `del mock.attr`
        drives the `hasattr(...)` is-`False` cases.\n\nThe per-item `except` branches
        log `member.identity`, so the failing\nmember must keep `identity` readable
        while a *different* attribute raises.\nA `MagicMock` cannot raise on attribute
        *read* without leaking the\ndescriptor to every other mock, so a small explicit
        `_RaisesOn` shim is\nused for those cases (its `__getattr__` raises on one
        named attribute and\nreturns `AttributeError` \u2014 i.e. `getattr(..., None)`
        default \u2014 for the\nrest). This is a deliberate, minor divergence from
        the issue's\n\"`MagicMock` is sufficient\" hint; the observable behaviour
        the issue\nspecifies (item skipped, warning logged, others still returned)
        is\nunchanged.\n\n## Verification\n\n- `black --check` \u2014 clean.\n- `flake8`
        \u2014 clean.\n- `pytest` / coverage: not run locally (project convention
        is to let the\n  `python-osism-unit-tests` Zuul job run the suite on the PR).
        Line\n  coverage of the target module was reviewed by hand and every line
        is\n  exercised; please rely on the CI job for the 100 % figure.\n\n\U0001F916
        Generated with [Claude Code](https://claude.com/claude-code)"
      change_url: https://github.com/osism/python-osism/pull/2341
      child_jobs: []
      commit_id: 70c0bce549c76a8e71be2ccc4388d57f01a3e8f4
      event_id: 5fc64130-650b-11f1-8629-d5fba8b40d73
      executor:
        hostname: 521e9411259a
        inventory_file: /var/lib/zuul/builds/1e880325a4264f3db866070e936c1ab3/ansible/inventory.yaml
        log_root: /var/lib/zuul/builds/1e880325a4264f3db866070e936c1ab3/work/logs
        result_data_file: /var/lib/zuul/builds/1e880325a4264f3db866070e936c1ab3/work/results.json
        src_root: /var/lib/zuul/builds/1e880325a4264f3db866070e936c1ab3/work/src
        work_root: /var/lib/zuul/builds/1e880325a4264f3db866070e936c1ab3/work
      include_vars: []
      items:
      - branch: main
        change: '2341'
        change_message: "Add unit tests for conductor redfish module\n\nImplements
          #2225.\n\nAdds `tests/unit/tasks/conductor/test_redfish.py`, covering every\nfunction
          in `osism/tasks/conductor/redfish.py`. Part of Tier 3 (#2199).\n\n## Change
          set (single commit)\n\n`Add unit tests for conductor redfish module` \u2014
          a new test module that\nmirrors the conventions already used in `tests/unit/tasks/conductor/`\n(SPDX
          header, the shared `loguru_logs` fixture from `tests/conftest.py`,\na local
          `_has_log` helper, `MagicMock`/`patch`, section separators).\n\n### What
          is covered\n\n- **`_normalize_redfish_data`** (pure function, built from
          inline dicts):\n  `None` removal, `dict`/`list` \u2192 `json.dumps`, `bool`
          \u2192 `\"true\"`/\n  `\"false\"`, `int`/`float` \u2192 `str(...)`, plain
          `str` pass-through, empty\n  dict, and a mixed input combining all of the
          above.\n- **`get_resources`**: parametrized delegation to `_get_ethernet_interfaces`,\n
          \ `_get_network_adapters`, `_get_network_device_functions` (asserting the\n
          \ other two helpers are not called), plus the unsupported-resource-type\n
          \ branch that returns `[]` and logs a warning.\n- **`_get_ethernet_interfaces`**:
          no connection, top-level exception,\n  system without the `ethernet_interfaces`
          attribute, `ethernet_interfaces\n  = None`, two systems \xD7 two interfaces
          (4 normalized entries), full\n  optional-attribute exposure, `mac_address=None`
          stripping, and\n  per-interface exception isolation.\n- **`_get_network_adapters`**:
          no connection, top-level exception, chassis\n  without `network_adapters`,
          two normalized adapter entries, and\n  per-adapter exception isolation.\n-
          **`_get_network_device_functions`**: no connection, top-level exception,\n
          \ adapter missing `network_device_functions` (adapter-level `except`, then\n
          \ processing continues with the next adapter), per-device-function\n  exception
          isolation, MAC extraction from `device_func.ethernet`, missing\n  `ethernet`
          (MACs stripped by normalization), and `adapter_id`/\n  `adapter_name` correlation
          on every entry.\n\n### Mocking notes\n\nThe Redfish connection chain (`get_system_collection()`
          /\n`get_chassis_collection()` \u2192 `get_members()` \u2192 members) is
          faked with\n`MagicMock`. `del mock.attr` drives the `hasattr(...)` is-`False`
          cases.\n\nThe per-item `except` branches log `member.identity`, so the failing\nmember
          must keep `identity` readable while a *different* attribute raises.\nA `MagicMock`
          cannot raise on attribute *read* without leaking the\ndescriptor to every
          other mock, so a small explicit `_RaisesOn` shim is\nused for those cases
          (its `__getattr__` raises on one named attribute and\nreturns `AttributeError`
          \u2014 i.e. `getattr(..., None)` default \u2014 for the\nrest). This is
          a deliberate, minor divergence from the issue's\n\"`MagicMock` is sufficient\"
          hint; the observable behaviour the issue\nspecifies (item skipped, warning
          logged, others still returned) is\nunchanged.\n\n## Verification\n\n- `black
          --check` \u2014 clean.\n- `flake8` \u2014 clean.\n- `pytest` / coverage:
          not run locally (project convention is to let the\n  `python-osism-unit-tests`
          Zuul job run the suite on the PR). Line\n  coverage of the target module
          was reviewed by hand and every line is\n  exercised; please rely on the
          CI job for the 100 % figure.\n\n\U0001F916 Generated with [Claude Code](https://claude.com/claude-code)"
        change_url: https://github.com/osism/python-osism/pull/2341
        commit_id: 70c0bce549c76a8e71be2ccc4388d57f01a3e8f4
        patchset: 70c0bce549c76a8e71be2ccc4388d57f01a3e8f4
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/python-osism
          name: osism/python-osism
          short_name: python-osism
          src_dir: src/github.com/osism/python-osism
        topic: null
      job: python-black
      jobtags: []
      max_attempts: 3
      message: QWRkIHVuaXQgdGVzdHMgZm9yIGNvbmR1Y3RvciByZWRmaXNoIG1vZHVsZQoKSW1wbGVtZW50cyAjMjIyNS4KCkFkZHMgYHRlc3RzL3VuaXQvdGFza3MvY29uZHVjdG9yL3Rlc3RfcmVkZmlzaC5weWAsIGNvdmVyaW5nIGV2ZXJ5CmZ1bmN0aW9uIGluIGBvc2lzbS90YXNrcy9jb25kdWN0b3IvcmVkZmlzaC5weWAuIFBhcnQgb2YgVGllciAzICgjMjE5OSkuCgojIyBDaGFuZ2Ugc2V0IChzaW5nbGUgY29tbWl0KQoKYEFkZCB1bml0IHRlc3RzIGZvciBjb25kdWN0b3IgcmVkZmlzaCBtb2R1bGVgIOKAlCBhIG5ldyB0ZXN0IG1vZHVsZSB0aGF0Cm1pcnJvcnMgdGhlIGNvbnZlbnRpb25zIGFscmVhZHkgdXNlZCBpbiBgdGVzdHMvdW5pdC90YXNrcy9jb25kdWN0b3IvYAooU1BEWCBoZWFkZXIsIHRoZSBzaGFyZWQgYGxvZ3VydV9sb2dzYCBmaXh0dXJlIGZyb20gYHRlc3RzL2NvbmZ0ZXN0LnB5YCwKYSBsb2NhbCBgX2hhc19sb2dgIGhlbHBlciwgYE1hZ2ljTW9ja2AvYHBhdGNoYCwgc2VjdGlvbiBzZXBhcmF0b3JzKS4KCiMjIyBXaGF0IGlzIGNvdmVyZWQKCi0gKipgX25vcm1hbGl6ZV9yZWRmaXNoX2RhdGFgKiogKHB1cmUgZnVuY3Rpb24sIGJ1aWx0IGZyb20gaW5saW5lIGRpY3RzKToKICBgTm9uZWAgcmVtb3ZhbCwgYGRpY3RgL2BsaXN0YCDihpIgYGpzb24uZHVtcHNgLCBgYm9vbGAg4oaSIGAidHJ1ZSJgLwogIGAiZmFsc2UiYCwgYGludGAvYGZsb2F0YCDihpIgYHN0ciguLi4pYCwgcGxhaW4gYHN0cmAgcGFzcy10aHJvdWdoLCBlbXB0eQogIGRpY3QsIGFuZCBhIG1peGVkIGlucHV0IGNvbWJpbmluZyBhbGwgb2YgdGhlIGFib3ZlLgotICoqYGdldF9yZXNvdXJjZXNgKio6IHBhcmFtZXRyaXplZCBkZWxlZ2F0aW9uIHRvIGBfZ2V0X2V0aGVybmV0X2ludGVyZmFjZXNgLAogIGBfZ2V0X25ldHdvcmtfYWRhcHRlcnNgLCBgX2dldF9uZXR3b3JrX2RldmljZV9mdW5jdGlvbnNgIChhc3NlcnRpbmcgdGhlCiAgb3RoZXIgdHdvIGhlbHBlcnMgYXJlIG5vdCBjYWxsZWQpLCBwbHVzIHRoZSB1bnN1cHBvcnRlZC1yZXNvdXJjZS10eXBlCiAgYnJhbmNoIHRoYXQgcmV0dXJucyBgW11gIGFuZCBsb2dzIGEgd2FybmluZy4KLSAqKmBfZ2V0X2V0aGVybmV0X2ludGVyZmFjZXNgKio6IG5vIGNvbm5lY3Rpb24sIHRvcC1sZXZlbCBleGNlcHRpb24sCiAgc3lzdGVtIHdpdGhvdXQgdGhlIGBldGhlcm5ldF9pbnRlcmZhY2VzYCBhdHRyaWJ1dGUsIGBldGhlcm5ldF9pbnRlcmZhY2VzCiAgPSBOb25lYCwgdHdvIHN5c3RlbXMgw5cgdHdvIGludGVyZmFjZXMgKDQgbm9ybWFsaXplZCBlbnRyaWVzKSwgZnVsbAogIG9wdGlvbmFsLWF0dHJpYnV0ZSBleHBvc3VyZSwgYG1hY19hZGRyZXNzPU5vbmVgIHN0cmlwcGluZywgYW5kCiAgcGVyLWludGVyZmFjZSBleGNlcHRpb24gaXNvbGF0aW9uLgotICoqYF9nZXRfbmV0d29ya19hZGFwdGVyc2AqKjogbm8gY29ubmVjdGlvbiwgdG9wLWxldmVsIGV4Y2VwdGlvbiwgY2hhc3NpcwogIHdpdGhvdXQgYG5ldHdvcmtfYWRhcHRlcnNgLCB0d28gbm9ybWFsaXplZCBhZGFwdGVyIGVudHJpZXMsIGFuZAogIHBlci1hZGFwdGVyIGV4Y2VwdGlvbiBpc29sYXRpb24uCi0gKipgX2dldF9uZXR3b3JrX2RldmljZV9mdW5jdGlvbnNgKio6IG5vIGNvbm5lY3Rpb24sIHRvcC1sZXZlbCBleGNlcHRpb24sCiAgYWRhcHRlciBtaXNzaW5nIGBuZXR3b3JrX2RldmljZV9mdW5jdGlvbnNgIChhZGFwdGVyLWxldmVsIGBleGNlcHRgLCB0aGVuCiAgcHJvY2Vzc2luZyBjb250aW51ZXMgd2l0aCB0aGUgbmV4dCBhZGFwdGVyKSwgcGVyLWRldmljZS1mdW5jdGlvbgogIGV4Y2VwdGlvbiBpc29sYXRpb24sIE1BQyBleHRyYWN0aW9uIGZyb20gYGRldmljZV9mdW5jLmV0aGVybmV0YCwgbWlzc2luZwogIGBldGhlcm5ldGAgKE1BQ3Mgc3RyaXBwZWQgYnkgbm9ybWFsaXphdGlvbiksIGFuZCBgYWRhcHRlcl9pZGAvCiAgYGFkYXB0ZXJfbmFtZWAgY29ycmVsYXRpb24gb24gZXZlcnkgZW50cnkuCgojIyMgTW9ja2luZyBub3RlcwoKVGhlIFJlZGZpc2ggY29ubmVjdGlvbiBjaGFpbiAoYGdldF9zeXN0ZW1fY29sbGVjdGlvbigpYCAvCmBnZXRfY2hhc3Npc19jb2xsZWN0aW9uKClgIOKGkiBgZ2V0X21lbWJlcnMoKWAg4oaSIG1lbWJlcnMpIGlzIGZha2VkIHdpdGgKYE1hZ2ljTW9ja2AuIGBkZWwgbW9jay5hdHRyYCBkcml2ZXMgdGhlIGBoYXNhdHRyKC4uLilgIGlzLWBGYWxzZWAgY2FzZXMuCgpUaGUgcGVyLWl0ZW0gYGV4Y2VwdGAgYnJhbmNoZXMgbG9nIGBtZW1iZXIuaWRlbnRpdHlgLCBzbyB0aGUgZmFpbGluZwptZW1iZXIgbXVzdCBrZWVwIGBpZGVudGl0eWAgcmVhZGFibGUgd2hpbGUgYSAqZGlmZmVyZW50KiBhdHRyaWJ1dGUgcmFpc2VzLgpBIGBNYWdpY01vY2tgIGNhbm5vdCByYWlzZSBvbiBhdHRyaWJ1dGUgKnJlYWQqIHdpdGhvdXQgbGVha2luZyB0aGUKZGVzY3JpcHRvciB0byBldmVyeSBvdGhlciBtb2NrLCBzbyBhIHNtYWxsIGV4cGxpY2l0IGBfUmFpc2VzT25gIHNoaW0gaXMKdXNlZCBmb3IgdGhvc2UgY2FzZXMgKGl0cyBgX19nZXRhdHRyX19gIHJhaXNlcyBvbiBvbmUgbmFtZWQgYXR0cmlidXRlIGFuZApyZXR1cm5zIGBBdHRyaWJ1dGVFcnJvcmAg4oCUIGkuZS4gYGdldGF0dHIoLi4uLCBOb25lKWAgZGVmYXVsdCDigJQgZm9yIHRoZQpyZXN0KS4gVGhpcyBpcyBhIGRlbGliZXJhdGUsIG1pbm9yIGRpdmVyZ2VuY2UgZnJvbSB0aGUgaXNzdWUncwoiYE1hZ2ljTW9ja2AgaXMgc3VmZmljaWVudCIgaGludDsgdGhlIG9ic2VydmFibGUgYmVoYXZpb3VyIHRoZSBpc3N1ZQpzcGVjaWZpZXMgKGl0ZW0gc2tpcHBlZCwgd2FybmluZyBsb2dnZWQsIG90aGVycyBzdGlsbCByZXR1cm5lZCkgaXMKdW5jaGFuZ2VkLgoKIyMgVmVyaWZpY2F0aW9uCgotIGBibGFjayAtLWNoZWNrYCDigJQgY2xlYW4uCi0gYGZsYWtlOGAg4oCUIGNsZWFuLgotIGBweXRlc3RgIC8gY292ZXJhZ2U6IG5vdCBydW4gbG9jYWxseSAocHJvamVjdCBjb252ZW50aW9uIGlzIHRvIGxldCB0aGUKICBgcHl0aG9uLW9zaXNtLXVuaXQtdGVzdHNgIFp1dWwgam9iIHJ1biB0aGUgc3VpdGUgb24gdGhlIFBSKS4gTGluZQogIGNvdmVyYWdlIG9mIHRoZSB0YXJnZXQgbW9kdWxlIHdhcyByZXZpZXdlZCBieSBoYW5kIGFuZCBldmVyeSBsaW5lIGlzCiAgZXhlcmNpc2VkOyBwbGVhc2UgcmVseSBvbiB0aGUgQ0kgam9iIGZvciB0aGUgMTAwICUgZmlndXJlLgoK8J+kliBHZW5lcmF0ZWQgd2l0aCBbQ2xhdWRlIENvZGVdKGh0dHBzOi8vY2xhdWRlLmNvbS9jbGF1ZGUtY29kZSk=
      patchset: 70c0bce549c76a8e71be2ccc4388d57f01a3e8f4
      pipeline: check
      playbook_context:
        playbook_projects:
          trusted/project_0/github.com/osism/zuul-config:
            canonical_name: github.com/osism/zuul-config
            checkout: main
            commit: 688445d15ac2c497396b682f69c57ccd484f5f25
          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/zuul-jobs:
            canonical_name: github.com/osism/zuul-jobs
            checkout: main
            commit: 0c74c57cedff2b36bb37ca68a5338d1c49991496
          untrusted/project_1/github.com/osism/zuul-config:
            canonical_name: github.com/osism/zuul-config
            checkout: main
            commit: 688445d15ac2c497396b682f69c57ccd484f5f25
          untrusted/project_2/github.com/osism/openinfra-zuul-jobs:
            canonical_name: github.com/osism/openinfra-zuul-jobs
            checkout: master
            commit: 038dd8b856c62af4433c8477c5cb3d0480847059
        playbooks:
        - path: untrusted/project_0/github.com/osism/zuul-jobs/playbooks/python-black/run.yml
          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: null
      pre_timeout: null
      project:
        canonical_hostname: github.com
        canonical_name: github.com/osism/python-osism
        name: osism/python-osism
        short_name: python-osism
        src_dir: src/github.com/osism/python-osism
      projects:
        github.com/osism/python-osism:
          canonical_hostname: github.com
          canonical_name: github.com/osism/python-osism
          checkout: main
          checkout_description: zuul branch
          commit: 2ea11d2fad6ce4752a48db1e1e648019cf4835bd
          name: osism/python-osism
          required: false
          short_name: python-osism
          src_dir: src/github.com/osism/python-osism
      ref: refs/pull/2341/head
      resources: {}
      tenant: osism
      timeout: 1800
      topic: null
      voting: true
