all:
  children:
    zuul_unreachable:
      hosts: {}
  hosts:
    debian-bookworm:
      ansible_connection: ssh
      ansible_host: 2a13:1a81:8000:3124:f816:3eff:fee3:d9f9
      ansible_port: 22
      ansible_python_interpreter: auto
      ansible_user: zuul
      nodepool:
        az: nova
        cloud: regiocloud-a-ci
        external_id: e0a2aca8-3679-4c26-95fa-7c4b11f67e8d
        host_id: 4667d18e0398acd2fb730ad41ba32e35789c4ac8cd4c0875d25b316b
        interface_ip: 2a13:1a81:8000:3124:f816:3eff:fee3:d9f9
        label: debian-bookworm
        node_properties: {}
        private_ipv4: 10.128.0.100
        private_ipv6: null
        provider: regiocloud-a
        public_ipv4: 81.163.192.195
        public_ipv6: 2a13:1a81:8000:3124:f816:3eff:fee3:d9f9
        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: 31564e26b3404a4f8770e370b014e619
      build_refs:
      - branch: main
        change: '2218'
        change_message: "Add unit tests for osism/tasks/conductor/{config,netbox}\n\nCovers
          the conductor's setup/lookup layer:\r\n\r\n- get_configuration (config.py):
          empty file \u2192 {} with warning; enable_ironic falsy/truthy strings parametrised;
          missing ironic_parameters logs error and returns config as-is; image_source,
          deploy_kernel and deploy_ramdisk each cover name \u2192 UUID resolution,
          UUID and URL pass-through, unresolved keeps original with warning, and section-present-without-key
          no-op; cleaning_network and provisioning_network resolved via network_get
          with unresolved-keeps- original branch; empty ironic_parameters; full end-to-end
          resolution across all five fields; verifies the config path is /etc/conductor.yml.\r\n\r\n-
          get_nb_device_query_list_ironic (netbox.py): all supported pass- through
          filters (site, region, site_group, tag, status); location and rack name
          \u2192 ID resolution and key rename; combined location+rack in one element;
          empty list; YAMLError, non-list payload, string and null elements, unsupported
          filter key, and unresolved location/rack all raise with a logged error.\r\n\r\n-
          get_nb_device_query_list_sonic (netbox.py): delegation parity test against
          the SONIC setting plus YAMLError and ValueError smoke tests.\r\n\r\n- get_device_oob_ip
          (netbox.py): oob_ip field used directly without NetBox calls; fallback to
          mgmt-only interface lookup; non-mgmt interfaces skipped; first mgmt without
          IPs falls through to second; no mgmt interfaces, no interfaces at all, mgmt
          without IPs, and blank address strings all return None; IPv6 with prefix;
          malformed address caught as warning; both NetBox filter calls failing return
          None with warning; verifies keyword-argument shape (device_id and assigned_object_id);
          device without an oob_ip attribute falls back; first assigned address wins
          on multiple IPs.\r\n\r\nCloses #2206\r\n\r\nAI-assisted: Claude Code"
        change_url: https://github.com/osism/python-osism/pull/2218
        commit_id: df9d55f78d09f7ae33bebeb6f31b57ce0d686a10
        patchset: df9d55f78d09f7ae33bebeb6f31b57ce0d686a10
        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: 4fec05298413476fb1263ba9a8b6fdfe
      buildset_refs:
      - branch: main
        change: '2218'
        change_message: "Add unit tests for osism/tasks/conductor/{config,netbox}\n\nCovers
          the conductor's setup/lookup layer:\r\n\r\n- get_configuration (config.py):
          empty file \u2192 {} with warning; enable_ironic falsy/truthy strings parametrised;
          missing ironic_parameters logs error and returns config as-is; image_source,
          deploy_kernel and deploy_ramdisk each cover name \u2192 UUID resolution,
          UUID and URL pass-through, unresolved keeps original with warning, and section-present-without-key
          no-op; cleaning_network and provisioning_network resolved via network_get
          with unresolved-keeps- original branch; empty ironic_parameters; full end-to-end
          resolution across all five fields; verifies the config path is /etc/conductor.yml.\r\n\r\n-
          get_nb_device_query_list_ironic (netbox.py): all supported pass- through
          filters (site, region, site_group, tag, status); location and rack name
          \u2192 ID resolution and key rename; combined location+rack in one element;
          empty list; YAMLError, non-list payload, string and null elements, unsupported
          filter key, and unresolved location/rack all raise with a logged error.\r\n\r\n-
          get_nb_device_query_list_sonic (netbox.py): delegation parity test against
          the SONIC setting plus YAMLError and ValueError smoke tests.\r\n\r\n- get_device_oob_ip
          (netbox.py): oob_ip field used directly without NetBox calls; fallback to
          mgmt-only interface lookup; non-mgmt interfaces skipped; first mgmt without
          IPs falls through to second; no mgmt interfaces, no interfaces at all, mgmt
          without IPs, and blank address strings all return None; IPv6 with prefix;
          malformed address caught as warning; both NetBox filter calls failing return
          None with warning; verifies keyword-argument shape (device_id and assigned_object_id);
          device without an oob_ip attribute falls back; first assigned address wins
          on multiple IPs.\r\n\r\nCloses #2206\r\n\r\nAI-assisted: Claude Code"
        change_url: https://github.com/osism/python-osism/pull/2218
        commit_id: df9d55f78d09f7ae33bebeb6f31b57ce0d686a10
        patchset: df9d55f78d09f7ae33bebeb6f31b57ce0d686a10
        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: '2218'
      change_message: "Add unit tests for osism/tasks/conductor/{config,netbox}\n\nCovers
        the conductor's setup/lookup layer:\r\n\r\n- get_configuration (config.py):
        empty file \u2192 {} with warning; enable_ironic falsy/truthy strings parametrised;
        missing ironic_parameters logs error and returns config as-is; image_source,
        deploy_kernel and deploy_ramdisk each cover name \u2192 UUID resolution, UUID
        and URL pass-through, unresolved keeps original with warning, and section-present-without-key
        no-op; cleaning_network and provisioning_network resolved via network_get
        with unresolved-keeps- original branch; empty ironic_parameters; full end-to-end
        resolution across all five fields; verifies the config path is /etc/conductor.yml.\r\n\r\n-
        get_nb_device_query_list_ironic (netbox.py): all supported pass- through filters
        (site, region, site_group, tag, status); location and rack name \u2192 ID
        resolution and key rename; combined location+rack in one element; empty list;
        YAMLError, non-list payload, string and null elements, unsupported filter
        key, and unresolved location/rack all raise with a logged error.\r\n\r\n-
        get_nb_device_query_list_sonic (netbox.py): delegation parity test against
        the SONIC setting plus YAMLError and ValueError smoke tests.\r\n\r\n- get_device_oob_ip
        (netbox.py): oob_ip field used directly without NetBox calls; fallback to
        mgmt-only interface lookup; non-mgmt interfaces skipped; first mgmt without
        IPs falls through to second; no mgmt interfaces, no interfaces at all, mgmt
        without IPs, and blank address strings all return None; IPv6 with prefix;
        malformed address caught as warning; both NetBox filter calls failing return
        None with warning; verifies keyword-argument shape (device_id and assigned_object_id);
        device without an oob_ip attribute falls back; first assigned address wins
        on multiple IPs.\r\n\r\nCloses #2206\r\n\r\nAI-assisted: Claude Code"
      change_url: https://github.com/osism/python-osism/pull/2218
      child_jobs: []
      commit_id: df9d55f78d09f7ae33bebeb6f31b57ce0d686a10
      event_id: 227f79b0-4281-11f1-8c96-795c40695aec
      executor:
        hostname: 521e9411259a
        inventory_file: /var/lib/zuul/builds/31564e26b3404a4f8770e370b014e619/ansible/inventory.yaml
        log_root: /var/lib/zuul/builds/31564e26b3404a4f8770e370b014e619/work/logs
        result_data_file: /var/lib/zuul/builds/31564e26b3404a4f8770e370b014e619/work/results.json
        src_root: /var/lib/zuul/builds/31564e26b3404a4f8770e370b014e619/work/src
        work_root: /var/lib/zuul/builds/31564e26b3404a4f8770e370b014e619/work
      include_vars: []
      items:
      - branch: main
        change: '2218'
        change_message: "Add unit tests for osism/tasks/conductor/{config,netbox}\n\nCovers
          the conductor's setup/lookup layer:\r\n\r\n- get_configuration (config.py):
          empty file \u2192 {} with warning; enable_ironic falsy/truthy strings parametrised;
          missing ironic_parameters logs error and returns config as-is; image_source,
          deploy_kernel and deploy_ramdisk each cover name \u2192 UUID resolution,
          UUID and URL pass-through, unresolved keeps original with warning, and section-present-without-key
          no-op; cleaning_network and provisioning_network resolved via network_get
          with unresolved-keeps- original branch; empty ironic_parameters; full end-to-end
          resolution across all five fields; verifies the config path is /etc/conductor.yml.\r\n\r\n-
          get_nb_device_query_list_ironic (netbox.py): all supported pass- through
          filters (site, region, site_group, tag, status); location and rack name
          \u2192 ID resolution and key rename; combined location+rack in one element;
          empty list; YAMLError, non-list payload, string and null elements, unsupported
          filter key, and unresolved location/rack all raise with a logged error.\r\n\r\n-
          get_nb_device_query_list_sonic (netbox.py): delegation parity test against
          the SONIC setting plus YAMLError and ValueError smoke tests.\r\n\r\n- get_device_oob_ip
          (netbox.py): oob_ip field used directly without NetBox calls; fallback to
          mgmt-only interface lookup; non-mgmt interfaces skipped; first mgmt without
          IPs falls through to second; no mgmt interfaces, no interfaces at all, mgmt
          without IPs, and blank address strings all return None; IPv6 with prefix;
          malformed address caught as warning; both NetBox filter calls failing return
          None with warning; verifies keyword-argument shape (device_id and assigned_object_id);
          device without an oob_ip attribute falls back; first assigned address wins
          on multiple IPs.\r\n\r\nCloses #2206\r\n\r\nAI-assisted: Claude Code"
        change_url: https://github.com/osism/python-osism/pull/2218
        commit_id: df9d55f78d09f7ae33bebeb6f31b57ce0d686a10
        patchset: df9d55f78d09f7ae33bebeb6f31b57ce0d686a10
        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: QWRkIHVuaXQgdGVzdHMgZm9yIG9zaXNtL3Rhc2tzL2NvbmR1Y3Rvci97Y29uZmlnLG5ldGJveH0KCkNvdmVycyB0aGUgY29uZHVjdG9yJ3Mgc2V0dXAvbG9va3VwIGxheWVyOg0KDQotIGdldF9jb25maWd1cmF0aW9uIChjb25maWcucHkpOiBlbXB0eSBmaWxlIOKGkiB7fSB3aXRoIHdhcm5pbmc7IGVuYWJsZV9pcm9uaWMgZmFsc3kvdHJ1dGh5IHN0cmluZ3MgcGFyYW1ldHJpc2VkOyBtaXNzaW5nIGlyb25pY19wYXJhbWV0ZXJzIGxvZ3MgZXJyb3IgYW5kIHJldHVybnMgY29uZmlnIGFzLWlzOyBpbWFnZV9zb3VyY2UsIGRlcGxveV9rZXJuZWwgYW5kIGRlcGxveV9yYW1kaXNrIGVhY2ggY292ZXIgbmFtZSDihpIgVVVJRCByZXNvbHV0aW9uLCBVVUlEIGFuZCBVUkwgcGFzcy10aHJvdWdoLCB1bnJlc29sdmVkIGtlZXBzIG9yaWdpbmFsIHdpdGggd2FybmluZywgYW5kIHNlY3Rpb24tcHJlc2VudC13aXRob3V0LWtleSBuby1vcDsgY2xlYW5pbmdfbmV0d29yayBhbmQgcHJvdmlzaW9uaW5nX25ldHdvcmsgcmVzb2x2ZWQgdmlhIG5ldHdvcmtfZ2V0IHdpdGggdW5yZXNvbHZlZC1rZWVwcy0gb3JpZ2luYWwgYnJhbmNoOyBlbXB0eSBpcm9uaWNfcGFyYW1ldGVyczsgZnVsbCBlbmQtdG8tZW5kIHJlc29sdXRpb24gYWNyb3NzIGFsbCBmaXZlIGZpZWxkczsgdmVyaWZpZXMgdGhlIGNvbmZpZyBwYXRoIGlzIC9ldGMvY29uZHVjdG9yLnltbC4NCg0KLSBnZXRfbmJfZGV2aWNlX3F1ZXJ5X2xpc3RfaXJvbmljIChuZXRib3gucHkpOiBhbGwgc3VwcG9ydGVkIHBhc3MtIHRocm91Z2ggZmlsdGVycyAoc2l0ZSwgcmVnaW9uLCBzaXRlX2dyb3VwLCB0YWcsIHN0YXR1cyk7IGxvY2F0aW9uIGFuZCByYWNrIG5hbWUg4oaSIElEIHJlc29sdXRpb24gYW5kIGtleSByZW5hbWU7IGNvbWJpbmVkIGxvY2F0aW9uK3JhY2sgaW4gb25lIGVsZW1lbnQ7IGVtcHR5IGxpc3Q7IFlBTUxFcnJvciwgbm9uLWxpc3QgcGF5bG9hZCwgc3RyaW5nIGFuZCBudWxsIGVsZW1lbnRzLCB1bnN1cHBvcnRlZCBmaWx0ZXIga2V5LCBhbmQgdW5yZXNvbHZlZCBsb2NhdGlvbi9yYWNrIGFsbCByYWlzZSB3aXRoIGEgbG9nZ2VkIGVycm9yLg0KDQotIGdldF9uYl9kZXZpY2VfcXVlcnlfbGlzdF9zb25pYyAobmV0Ym94LnB5KTogZGVsZWdhdGlvbiBwYXJpdHkgdGVzdCBhZ2FpbnN0IHRoZSBTT05JQyBzZXR0aW5nIHBsdXMgWUFNTEVycm9yIGFuZCBWYWx1ZUVycm9yIHNtb2tlIHRlc3RzLg0KDQotIGdldF9kZXZpY2Vfb29iX2lwIChuZXRib3gucHkpOiBvb2JfaXAgZmllbGQgdXNlZCBkaXJlY3RseSB3aXRob3V0IE5ldEJveCBjYWxsczsgZmFsbGJhY2sgdG8gbWdtdC1vbmx5IGludGVyZmFjZSBsb29rdXA7IG5vbi1tZ210IGludGVyZmFjZXMgc2tpcHBlZDsgZmlyc3QgbWdtdCB3aXRob3V0IElQcyBmYWxscyB0aHJvdWdoIHRvIHNlY29uZDsgbm8gbWdtdCBpbnRlcmZhY2VzLCBubyBpbnRlcmZhY2VzIGF0IGFsbCwgbWdtdCB3aXRob3V0IElQcywgYW5kIGJsYW5rIGFkZHJlc3Mgc3RyaW5ncyBhbGwgcmV0dXJuIE5vbmU7IElQdjYgd2l0aCBwcmVmaXg7IG1hbGZvcm1lZCBhZGRyZXNzIGNhdWdodCBhcyB3YXJuaW5nOyBib3RoIE5ldEJveCBmaWx0ZXIgY2FsbHMgZmFpbGluZyByZXR1cm4gTm9uZSB3aXRoIHdhcm5pbmc7IHZlcmlmaWVzIGtleXdvcmQtYXJndW1lbnQgc2hhcGUgKGRldmljZV9pZCBhbmQgYXNzaWduZWRfb2JqZWN0X2lkKTsgZGV2aWNlIHdpdGhvdXQgYW4gb29iX2lwIGF0dHJpYnV0ZSBmYWxscyBiYWNrOyBmaXJzdCBhc3NpZ25lZCBhZGRyZXNzIHdpbnMgb24gbXVsdGlwbGUgSVBzLg0KDQpDbG9zZXMgIzIyMDYNCg0KQUktYXNzaXN0ZWQ6IENsYXVkZSBDb2Rl
      patchset: df9d55f78d09f7ae33bebeb6f31b57ce0d686a10
      pipeline: check
      playbook_context:
        playbook_projects:
          trusted/project_0/github.com/osism/zuul-config:
            canonical_name: github.com/osism/zuul-config
            checkout: main
            commit: 69987497b92a6fd27b27eac0fffd3d2d5411103c
          trusted/project_1/github.com/osism/openinfra-zuul-jobs:
            canonical_name: github.com/osism/openinfra-zuul-jobs
            checkout: master
            commit: 397240f42127868e42e86e6aeb120c2cb092d117
          untrusted/project_0/github.com/osism/zuul-jobs:
            canonical_name: github.com/osism/zuul-jobs
            checkout: main
            commit: 8ad17ed1be1f63229e054fab94af45f2511a98ea
          untrusted/project_1/github.com/osism/zuul-config:
            canonical_name: github.com/osism/zuul-config
            checkout: main
            commit: 69987497b92a6fd27b27eac0fffd3d2d5411103c
          untrusted/project_2/github.com/osism/openinfra-zuul-jobs:
            canonical_name: github.com/osism/openinfra-zuul-jobs
            checkout: master
            commit: 397240f42127868e42e86e6aeb120c2cb092d117
        playbooks:
        - path: untrusted/project_0/github.com/osism/zuul-jobs/playbooks/python-black/run.yml
          roles:
          - checkout: main
            checkout_description: playbook branch
            link_name: ansible/playbook_0/role_0/zuul-jobs
            link_target: untrusted/project_0/github.com/osism/zuul-jobs
            role_path: ansible/playbook_0/role_0/zuul-jobs/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
      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: 1e5af8975d4813b68bb84cc65ea5c63df0802b47
          name: osism/python-osism
          required: false
          short_name: python-osism
          src_dir: src/github.com/osism/python-osism
      ref: refs/pull/2218/head
      resources: {}
      tenant: osism
      timeout: 1800
      topic: null
      voting: true
