all:
  children:
    zuul_unreachable:
      hosts: {}
  hosts:
    debian-bookworm:
      ansible_connection: ssh
      ansible_host: 2a13:1a81:8000:3124:f816:3eff:fe44:f875
      ansible_port: 22
      ansible_python_interpreter: auto
      ansible_user: zuul
      nodepool:
        az: nova
        cloud: regiocloud-a-ci
        external_id: 23bd7753-d63a-4e20-9d07-a7940649dda2
        host_id: 5afd8fc909abddfe2ce3a956a91bbe56629648b7209fd0acfa541862
        interface_ip: 2a13:1a81:8000:3124:f816:3eff:fe44:f875
        label: debian-bookworm
        node_properties: {}
        private_ipv4: 10.128.7.137
        private_ipv6: null
        provider: regiocloud-a
        public_ipv4: 81.163.192.40
        public_ipv6: 2a13:1a81:8000:3124:f816:3eff:fe44:f875
        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#143>'
      ansible_version: '9'
      attempts: 1
      branch: main
      build: e8cc1cce9faa46648aeb8c563e2fe94c
      build_refs:
      - branch: main
        change: '2486'
        change_message: "Add unit tests for hardware CLI commands\n\nCloses #2364\n\nAdds
          unit tests for the hardware-related CLI command modules, following the mocking
          patterns established in #2193 (no Celery broker, no real cloud/NetBox access):\n\n##
          New test modules\n\n- `tests/unit/commands/test_redfish.py`: column name
          normalization, per-resource-type column mappings, column filtering (case-insensitive
          selection, unknown-column warning), JSON data filtering, table rendering,
          and all `take_action` output paths (JSON full/filtered/empty, table dispatch
          per resource type, unknown resource type, no result). Verifies the task
          lock is consulted before the Celery task is dispatched.\n- `tests/unit/commands/test_stress.py`:
          default command construction of the openstack-simple-stress wrapper, boolean
          flag and custom value propagation, return code passthrough, `FileNotFoundError`/generic
          error handling, setup failure guard, and cleanup in all paths.\n\n## Extended
          test modules\n\n- `tests/unit/commands/test_baremetal.py`: `_apply_metalbox_vars`,
          a parametrized cloud-setup failure guard over all commands of the module,
          `BaremetalList` (sorting, `n/a` power state, query flags, NetBox device-role
          column, cleanup on error), `BaremetalDeploy` (provision-state decision matrix,
          `instance_info` refresh, validation failure, NetBox `local_context_data`
          incl. `cf_inventory_hostname` fallback, netplan/FRR parameters, Supermicro
          boot device, RAID deploy steps, config-drive failure, `--all` loop resilience
          \u2014 playbook content is asserted by parsing the actual `playbook.yml`
          handed to `configdrive.pack`), `BaremetalDump` (Ironic and NetBox sources),
          `BaremetalUndeploy` (state matrix, SSH known_hosts cleanup), `BaremetalPing`
          (`_ping_host` output parsing incl. macOS/Linux variants, device discovery/filtering,
          summary), `BaremetalBurnIn` (clean/service step construction, manage flow,
          active-node confirmation), `BaremetalClean` (RAID step prepending, manage
          flow), the provide/maintenance/power wrappers, and `BaremetalDelete` (port-before-node
          ordering, NetBox state clearing on primary and secondary instances, failure
          resilience).\n- `tests/unit/commands/test_server.py`: `ServerMigrate` (defaults,
          `--target`/`--force`, prompt handling, wait loop, `--no-wait`, PAUSED),
          `ServerList` (domain/project/user happy paths, domain-name fallback, age-based
          BUILD/ERROR reporting), and `ServerClean` (build timeout handling, prompt
          handling, ERROR servers, cleanup in `finally`).\n\nNo existing test cases
          were duplicated; `flake8` and `black` pass locally.\n\n\U0001F916 Generated
          with [Claude Code](https://claude.com/claude-code)\n\nhttps://claude.ai/code/session_01MRk7qVcmoKuk74USmgY8Mm"
        change_url: https://github.com/osism/python-osism/pull/2486
        commit_id: 0f13f0860d8c5183ed95f88791f95a47799ab17a
        patchset: 0f13f0860d8c5183ed95f88791f95a47799ab17a
        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: 24d98e5955e646b9b1d174ac2cb58465
      buildset_refs:
      - branch: main
        change: '2486'
        change_message: "Add unit tests for hardware CLI commands\n\nCloses #2364\n\nAdds
          unit tests for the hardware-related CLI command modules, following the mocking
          patterns established in #2193 (no Celery broker, no real cloud/NetBox access):\n\n##
          New test modules\n\n- `tests/unit/commands/test_redfish.py`: column name
          normalization, per-resource-type column mappings, column filtering (case-insensitive
          selection, unknown-column warning), JSON data filtering, table rendering,
          and all `take_action` output paths (JSON full/filtered/empty, table dispatch
          per resource type, unknown resource type, no result). Verifies the task
          lock is consulted before the Celery task is dispatched.\n- `tests/unit/commands/test_stress.py`:
          default command construction of the openstack-simple-stress wrapper, boolean
          flag and custom value propagation, return code passthrough, `FileNotFoundError`/generic
          error handling, setup failure guard, and cleanup in all paths.\n\n## Extended
          test modules\n\n- `tests/unit/commands/test_baremetal.py`: `_apply_metalbox_vars`,
          a parametrized cloud-setup failure guard over all commands of the module,
          `BaremetalList` (sorting, `n/a` power state, query flags, NetBox device-role
          column, cleanup on error), `BaremetalDeploy` (provision-state decision matrix,
          `instance_info` refresh, validation failure, NetBox `local_context_data`
          incl. `cf_inventory_hostname` fallback, netplan/FRR parameters, Supermicro
          boot device, RAID deploy steps, config-drive failure, `--all` loop resilience
          \u2014 playbook content is asserted by parsing the actual `playbook.yml`
          handed to `configdrive.pack`), `BaremetalDump` (Ironic and NetBox sources),
          `BaremetalUndeploy` (state matrix, SSH known_hosts cleanup), `BaremetalPing`
          (`_ping_host` output parsing incl. macOS/Linux variants, device discovery/filtering,
          summary), `BaremetalBurnIn` (clean/service step construction, manage flow,
          active-node confirmation), `BaremetalClean` (RAID step prepending, manage
          flow), the provide/maintenance/power wrappers, and `BaremetalDelete` (port-before-node
          ordering, NetBox state clearing on primary and secondary instances, failure
          resilience).\n- `tests/unit/commands/test_server.py`: `ServerMigrate` (defaults,
          `--target`/`--force`, prompt handling, wait loop, `--no-wait`, PAUSED),
          `ServerList` (domain/project/user happy paths, domain-name fallback, age-based
          BUILD/ERROR reporting), and `ServerClean` (build timeout handling, prompt
          handling, ERROR servers, cleanup in `finally`).\n\nNo existing test cases
          were duplicated; `flake8` and `black` pass locally.\n\n\U0001F916 Generated
          with [Claude Code](https://claude.com/claude-code)\n\nhttps://claude.ai/code/session_01MRk7qVcmoKuk74USmgY8Mm"
        change_url: https://github.com/osism/python-osism/pull/2486
        commit_id: 0f13f0860d8c5183ed95f88791f95a47799ab17a
        patchset: 0f13f0860d8c5183ed95f88791f95a47799ab17a
        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: '2486'
      change_message: "Add unit tests for hardware CLI commands\n\nCloses #2364\n\nAdds
        unit tests for the hardware-related CLI command modules, following the mocking
        patterns established in #2193 (no Celery broker, no real cloud/NetBox access):\n\n##
        New test modules\n\n- `tests/unit/commands/test_redfish.py`: column name normalization,
        per-resource-type column mappings, column filtering (case-insensitive selection,
        unknown-column warning), JSON data filtering, table rendering, and all `take_action`
        output paths (JSON full/filtered/empty, table dispatch per resource type,
        unknown resource type, no result). Verifies the task lock is consulted before
        the Celery task is dispatched.\n- `tests/unit/commands/test_stress.py`: default
        command construction of the openstack-simple-stress wrapper, boolean flag
        and custom value propagation, return code passthrough, `FileNotFoundError`/generic
        error handling, setup failure guard, and cleanup in all paths.\n\n## Extended
        test modules\n\n- `tests/unit/commands/test_baremetal.py`: `_apply_metalbox_vars`,
        a parametrized cloud-setup failure guard over all commands of the module,
        `BaremetalList` (sorting, `n/a` power state, query flags, NetBox device-role
        column, cleanup on error), `BaremetalDeploy` (provision-state decision matrix,
        `instance_info` refresh, validation failure, NetBox `local_context_data` incl.
        `cf_inventory_hostname` fallback, netplan/FRR parameters, Supermicro boot
        device, RAID deploy steps, config-drive failure, `--all` loop resilience \u2014
        playbook content is asserted by parsing the actual `playbook.yml` handed to
        `configdrive.pack`), `BaremetalDump` (Ironic and NetBox sources), `BaremetalUndeploy`
        (state matrix, SSH known_hosts cleanup), `BaremetalPing` (`_ping_host` output
        parsing incl. macOS/Linux variants, device discovery/filtering, summary),
        `BaremetalBurnIn` (clean/service step construction, manage flow, active-node
        confirmation), `BaremetalClean` (RAID step prepending, manage flow), the provide/maintenance/power
        wrappers, and `BaremetalDelete` (port-before-node ordering, NetBox state clearing
        on primary and secondary instances, failure resilience).\n- `tests/unit/commands/test_server.py`:
        `ServerMigrate` (defaults, `--target`/`--force`, prompt handling, wait loop,
        `--no-wait`, PAUSED), `ServerList` (domain/project/user happy paths, domain-name
        fallback, age-based BUILD/ERROR reporting), and `ServerClean` (build timeout
        handling, prompt handling, ERROR servers, cleanup in `finally`).\n\nNo existing
        test cases were duplicated; `flake8` and `black` pass locally.\n\n\U0001F916
        Generated with [Claude Code](https://claude.com/claude-code)\n\nhttps://claude.ai/code/session_01MRk7qVcmoKuk74USmgY8Mm"
      change_url: https://github.com/osism/python-osism/pull/2486
      child_jobs: []
      commit_id: 0f13f0860d8c5183ed95f88791f95a47799ab17a
      event_id: 769bdb10-8674-11f1-9462-51749e392c61
      executor:
        hostname: 521e9411259a
        inventory_file: /var/lib/zuul/builds/e8cc1cce9faa46648aeb8c563e2fe94c/ansible/inventory.yaml
        log_root: /var/lib/zuul/builds/e8cc1cce9faa46648aeb8c563e2fe94c/work/logs
        result_data_file: /var/lib/zuul/builds/e8cc1cce9faa46648aeb8c563e2fe94c/work/results.json
        src_root: /var/lib/zuul/builds/e8cc1cce9faa46648aeb8c563e2fe94c/work/src
        work_root: /var/lib/zuul/builds/e8cc1cce9faa46648aeb8c563e2fe94c/work
      include_vars: []
      items:
      - branch: main
        change: '2486'
        change_message: "Add unit tests for hardware CLI commands\n\nCloses #2364\n\nAdds
          unit tests for the hardware-related CLI command modules, following the mocking
          patterns established in #2193 (no Celery broker, no real cloud/NetBox access):\n\n##
          New test modules\n\n- `tests/unit/commands/test_redfish.py`: column name
          normalization, per-resource-type column mappings, column filtering (case-insensitive
          selection, unknown-column warning), JSON data filtering, table rendering,
          and all `take_action` output paths (JSON full/filtered/empty, table dispatch
          per resource type, unknown resource type, no result). Verifies the task
          lock is consulted before the Celery task is dispatched.\n- `tests/unit/commands/test_stress.py`:
          default command construction of the openstack-simple-stress wrapper, boolean
          flag and custom value propagation, return code passthrough, `FileNotFoundError`/generic
          error handling, setup failure guard, and cleanup in all paths.\n\n## Extended
          test modules\n\n- `tests/unit/commands/test_baremetal.py`: `_apply_metalbox_vars`,
          a parametrized cloud-setup failure guard over all commands of the module,
          `BaremetalList` (sorting, `n/a` power state, query flags, NetBox device-role
          column, cleanup on error), `BaremetalDeploy` (provision-state decision matrix,
          `instance_info` refresh, validation failure, NetBox `local_context_data`
          incl. `cf_inventory_hostname` fallback, netplan/FRR parameters, Supermicro
          boot device, RAID deploy steps, config-drive failure, `--all` loop resilience
          \u2014 playbook content is asserted by parsing the actual `playbook.yml`
          handed to `configdrive.pack`), `BaremetalDump` (Ironic and NetBox sources),
          `BaremetalUndeploy` (state matrix, SSH known_hosts cleanup), `BaremetalPing`
          (`_ping_host` output parsing incl. macOS/Linux variants, device discovery/filtering,
          summary), `BaremetalBurnIn` (clean/service step construction, manage flow,
          active-node confirmation), `BaremetalClean` (RAID step prepending, manage
          flow), the provide/maintenance/power wrappers, and `BaremetalDelete` (port-before-node
          ordering, NetBox state clearing on primary and secondary instances, failure
          resilience).\n- `tests/unit/commands/test_server.py`: `ServerMigrate` (defaults,
          `--target`/`--force`, prompt handling, wait loop, `--no-wait`, PAUSED),
          `ServerList` (domain/project/user happy paths, domain-name fallback, age-based
          BUILD/ERROR reporting), and `ServerClean` (build timeout handling, prompt
          handling, ERROR servers, cleanup in `finally`).\n\nNo existing test cases
          were duplicated; `flake8` and `black` pass locally.\n\n\U0001F916 Generated
          with [Claude Code](https://claude.com/claude-code)\n\nhttps://claude.ai/code/session_01MRk7qVcmoKuk74USmgY8Mm"
        change_url: https://github.com/osism/python-osism/pull/2486
        commit_id: 0f13f0860d8c5183ed95f88791f95a47799ab17a
        patchset: 0f13f0860d8c5183ed95f88791f95a47799ab17a
        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: QWRkIHVuaXQgdGVzdHMgZm9yIGhhcmR3YXJlIENMSSBjb21tYW5kcwoKQ2xvc2VzICMyMzY0CgpBZGRzIHVuaXQgdGVzdHMgZm9yIHRoZSBoYXJkd2FyZS1yZWxhdGVkIENMSSBjb21tYW5kIG1vZHVsZXMsIGZvbGxvd2luZyB0aGUgbW9ja2luZyBwYXR0ZXJucyBlc3RhYmxpc2hlZCBpbiAjMjE5MyAobm8gQ2VsZXJ5IGJyb2tlciwgbm8gcmVhbCBjbG91ZC9OZXRCb3ggYWNjZXNzKToKCiMjIE5ldyB0ZXN0IG1vZHVsZXMKCi0gYHRlc3RzL3VuaXQvY29tbWFuZHMvdGVzdF9yZWRmaXNoLnB5YDogY29sdW1uIG5hbWUgbm9ybWFsaXphdGlvbiwgcGVyLXJlc291cmNlLXR5cGUgY29sdW1uIG1hcHBpbmdzLCBjb2x1bW4gZmlsdGVyaW5nIChjYXNlLWluc2Vuc2l0aXZlIHNlbGVjdGlvbiwgdW5rbm93bi1jb2x1bW4gd2FybmluZyksIEpTT04gZGF0YSBmaWx0ZXJpbmcsIHRhYmxlIHJlbmRlcmluZywgYW5kIGFsbCBgdGFrZV9hY3Rpb25gIG91dHB1dCBwYXRocyAoSlNPTiBmdWxsL2ZpbHRlcmVkL2VtcHR5LCB0YWJsZSBkaXNwYXRjaCBwZXIgcmVzb3VyY2UgdHlwZSwgdW5rbm93biByZXNvdXJjZSB0eXBlLCBubyByZXN1bHQpLiBWZXJpZmllcyB0aGUgdGFzayBsb2NrIGlzIGNvbnN1bHRlZCBiZWZvcmUgdGhlIENlbGVyeSB0YXNrIGlzIGRpc3BhdGNoZWQuCi0gYHRlc3RzL3VuaXQvY29tbWFuZHMvdGVzdF9zdHJlc3MucHlgOiBkZWZhdWx0IGNvbW1hbmQgY29uc3RydWN0aW9uIG9mIHRoZSBvcGVuc3RhY2stc2ltcGxlLXN0cmVzcyB3cmFwcGVyLCBib29sZWFuIGZsYWcgYW5kIGN1c3RvbSB2YWx1ZSBwcm9wYWdhdGlvbiwgcmV0dXJuIGNvZGUgcGFzc3Rocm91Z2gsIGBGaWxlTm90Rm91bmRFcnJvcmAvZ2VuZXJpYyBlcnJvciBoYW5kbGluZywgc2V0dXAgZmFpbHVyZSBndWFyZCwgYW5kIGNsZWFudXAgaW4gYWxsIHBhdGhzLgoKIyMgRXh0ZW5kZWQgdGVzdCBtb2R1bGVzCgotIGB0ZXN0cy91bml0L2NvbW1hbmRzL3Rlc3RfYmFyZW1ldGFsLnB5YDogYF9hcHBseV9tZXRhbGJveF92YXJzYCwgYSBwYXJhbWV0cml6ZWQgY2xvdWQtc2V0dXAgZmFpbHVyZSBndWFyZCBvdmVyIGFsbCBjb21tYW5kcyBvZiB0aGUgbW9kdWxlLCBgQmFyZW1ldGFsTGlzdGAgKHNvcnRpbmcsIGBuL2FgIHBvd2VyIHN0YXRlLCBxdWVyeSBmbGFncywgTmV0Qm94IGRldmljZS1yb2xlIGNvbHVtbiwgY2xlYW51cCBvbiBlcnJvciksIGBCYXJlbWV0YWxEZXBsb3lgIChwcm92aXNpb24tc3RhdGUgZGVjaXNpb24gbWF0cml4LCBgaW5zdGFuY2VfaW5mb2AgcmVmcmVzaCwgdmFsaWRhdGlvbiBmYWlsdXJlLCBOZXRCb3ggYGxvY2FsX2NvbnRleHRfZGF0YWAgaW5jbC4gYGNmX2ludmVudG9yeV9ob3N0bmFtZWAgZmFsbGJhY2ssIG5ldHBsYW4vRlJSIHBhcmFtZXRlcnMsIFN1cGVybWljcm8gYm9vdCBkZXZpY2UsIFJBSUQgZGVwbG95IHN0ZXBzLCBjb25maWctZHJpdmUgZmFpbHVyZSwgYC0tYWxsYCBsb29wIHJlc2lsaWVuY2Ug4oCUIHBsYXlib29rIGNvbnRlbnQgaXMgYXNzZXJ0ZWQgYnkgcGFyc2luZyB0aGUgYWN0dWFsIGBwbGF5Ym9vay55bWxgIGhhbmRlZCB0byBgY29uZmlnZHJpdmUucGFja2ApLCBgQmFyZW1ldGFsRHVtcGAgKElyb25pYyBhbmQgTmV0Qm94IHNvdXJjZXMpLCBgQmFyZW1ldGFsVW5kZXBsb3lgIChzdGF0ZSBtYXRyaXgsIFNTSCBrbm93bl9ob3N0cyBjbGVhbnVwKSwgYEJhcmVtZXRhbFBpbmdgIChgX3BpbmdfaG9zdGAgb3V0cHV0IHBhcnNpbmcgaW5jbC4gbWFjT1MvTGludXggdmFyaWFudHMsIGRldmljZSBkaXNjb3ZlcnkvZmlsdGVyaW5nLCBzdW1tYXJ5KSwgYEJhcmVtZXRhbEJ1cm5JbmAgKGNsZWFuL3NlcnZpY2Ugc3RlcCBjb25zdHJ1Y3Rpb24sIG1hbmFnZSBmbG93LCBhY3RpdmUtbm9kZSBjb25maXJtYXRpb24pLCBgQmFyZW1ldGFsQ2xlYW5gIChSQUlEIHN0ZXAgcHJlcGVuZGluZywgbWFuYWdlIGZsb3cpLCB0aGUgcHJvdmlkZS9tYWludGVuYW5jZS9wb3dlciB3cmFwcGVycywgYW5kIGBCYXJlbWV0YWxEZWxldGVgIChwb3J0LWJlZm9yZS1ub2RlIG9yZGVyaW5nLCBOZXRCb3ggc3RhdGUgY2xlYXJpbmcgb24gcHJpbWFyeSBhbmQgc2Vjb25kYXJ5IGluc3RhbmNlcywgZmFpbHVyZSByZXNpbGllbmNlKS4KLSBgdGVzdHMvdW5pdC9jb21tYW5kcy90ZXN0X3NlcnZlci5weWA6IGBTZXJ2ZXJNaWdyYXRlYCAoZGVmYXVsdHMsIGAtLXRhcmdldGAvYC0tZm9yY2VgLCBwcm9tcHQgaGFuZGxpbmcsIHdhaXQgbG9vcCwgYC0tbm8td2FpdGAsIFBBVVNFRCksIGBTZXJ2ZXJMaXN0YCAoZG9tYWluL3Byb2plY3QvdXNlciBoYXBweSBwYXRocywgZG9tYWluLW5hbWUgZmFsbGJhY2ssIGFnZS1iYXNlZCBCVUlMRC9FUlJPUiByZXBvcnRpbmcpLCBhbmQgYFNlcnZlckNsZWFuYCAoYnVpbGQgdGltZW91dCBoYW5kbGluZywgcHJvbXB0IGhhbmRsaW5nLCBFUlJPUiBzZXJ2ZXJzLCBjbGVhbnVwIGluIGBmaW5hbGx5YCkuCgpObyBleGlzdGluZyB0ZXN0IGNhc2VzIHdlcmUgZHVwbGljYXRlZDsgYGZsYWtlOGAgYW5kIGBibGFja2AgcGFzcyBsb2NhbGx5LgoK8J+kliBHZW5lcmF0ZWQgd2l0aCBbQ2xhdWRlIENvZGVdKGh0dHBzOi8vY2xhdWRlLmNvbS9jbGF1ZGUtY29kZSkKCmh0dHBzOi8vY2xhdWRlLmFpL2NvZGUvc2Vzc2lvbl8wMU1SazdxVmNtb0t1azc0VVNtZ1k4TW0=
      patchset: 0f13f0860d8c5183ed95f88791f95a47799ab17a
      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/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: 1800
      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: 68cf32b01a6f2400ef22e67f0524ac104bb9983e
          name: osism/python-osism
          required: false
          short_name: python-osism
          src_dir: src/github.com/osism/python-osism
      ref: refs/pull/2486/head
      resources: {}
      tenant: osism
      timeout: 1800
      topic: null
      voting: true
