all:
  children:
    zuul_unreachable:
      hosts: {}
  hosts:
    debian-bookworm:
      ansible_connection: ssh
      ansible_host: 2a13:1a81:8000:3124:f816:3eff:fe84:a765
      ansible_port: 22
      ansible_python_interpreter: auto
      ansible_user: zuul
      nodepool:
        az: nova
        cloud: regiocloud-a-ci
        external_id: b34619c7-568f-4f89-8ab5-21d52f29ad29
        host_id: 4667d18e0398acd2fb730ad41ba32e35789c4ac8cd4c0875d25b316b
        interface_ip: 2a13:1a81:8000:3124:f816:3eff:fe84:a765
        label: debian-bookworm
        node_properties: {}
        private_ipv4: 10.128.0.103
        private_ipv6: null
        provider: regiocloud-a
        public_ipv4: 81.163.192.249
        public_ipv6: 2a13:1a81:8000:3124:f816:3eff:fe84:a765
        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 hadolint explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: osism/zuul-jobs/.zuul.yaml@main#37>'
      - '<Job hadolint explicit: None implied: None source: osism/python-osism/.zuul.yaml@main#138>'
      ansible_version: '9'
      attempts: 1
      branch: main
      build: 775de705ce184a2cbcd68db5ac982bda
      build_refs:
      - branch: main
        change: '2246'
        change_message: "Add unit tests for SONiC config_generator port/interface
          helpers\n\nCovers the port / interface / portchannel / breakout helpers
          in osism/tasks/conductor/sonic/config_generator.py:\n\n- _add_port_configurations:
          natural sort, master-port skip, admin_status, NetBox speed override (explicit
          vs derived, kbps\u2192Mbps), breakout speed (NetBox + brkout_mode fallback),
          index propagation from master, default port_data shape, valid_speeds branches,
          and the post-loop _add_missing_breakout_ports / _add_tagged_vlans_to_ports
          invocations.\n- _get_breakout_port_valid_speeds: known speeds and falsy
          inputs.\n- _calculate_breakout_port_lane: 4-lane and 8-lane breakouts, range
          syntax, single-lane master, unexpected counts, out-of-bounds and regex no-match
          fallbacks.\n- _add_missing_breakout_ports: skip-existing, NetBox speed kbps\u2192Mbps
          conversion, brkout_mode fallback (incl. default), admin state, master index
          copy, valid_speeds override, alias kwargs.\n- _add_tagged_vlans_to_ports:
          numeric VLAN ID sort, untagged ignored, unknown NetBox name skipped, port
          absent from PORT silently skipped.\n- _add_interface_configurations: IPv4
          base + suffixed entry, IPv6 link-local fallback, port-channel-member skip,
          disconnected skip, missing netbox_interfaces entry.\n- _get_transfer_role_ipv4_addresses:
          happy path, dedup per interface, IPv6 ignored, mgmt/virtual filtered, invalid
          prefix and IP swallowed, IP without assigned_object_id, unknown id, top-level
          exception.\n- _has_direct_ipv4_address, _has_transfer_role_ipv4, _is_untagged_vlan_member:
          happy path and empty-input early returns.\n- _add_portchannel_configuration:
          populated and empty cases.\n\nAlso fixes a kbps\u2192Mbps conversion bug
          in _add_missing_breakout_ports (flagged in review): the helper previously
          wrote the raw NetBox kbps value, while _add_port_configurations divides
          by 1000. With realistic NetBox units (e.g. 25 G = 25 000 000 kbps) this
          would emit \"25000000\" instead of \"25000\". The conversion is now consistent
          across both code paths, and the test exercises realistic units.\n\nCloses
          #2222\n\nAI-assisted: Claude Code"
        change_url: https://github.com/osism/python-osism/pull/2246
        commit_id: 589cd02801e75dbc18a46cae52b7ccd8a9d9c557
        patchset: 589cd02801e75dbc18a46cae52b7ccd8a9d9c557
        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: a6905d777a75406f9db75f080941c660
      buildset_refs:
      - branch: main
        change: '2246'
        change_message: "Add unit tests for SONiC config_generator port/interface
          helpers\n\nCovers the port / interface / portchannel / breakout helpers
          in osism/tasks/conductor/sonic/config_generator.py:\n\n- _add_port_configurations:
          natural sort, master-port skip, admin_status, NetBox speed override (explicit
          vs derived, kbps\u2192Mbps), breakout speed (NetBox + brkout_mode fallback),
          index propagation from master, default port_data shape, valid_speeds branches,
          and the post-loop _add_missing_breakout_ports / _add_tagged_vlans_to_ports
          invocations.\n- _get_breakout_port_valid_speeds: known speeds and falsy
          inputs.\n- _calculate_breakout_port_lane: 4-lane and 8-lane breakouts, range
          syntax, single-lane master, unexpected counts, out-of-bounds and regex no-match
          fallbacks.\n- _add_missing_breakout_ports: skip-existing, NetBox speed kbps\u2192Mbps
          conversion, brkout_mode fallback (incl. default), admin state, master index
          copy, valid_speeds override, alias kwargs.\n- _add_tagged_vlans_to_ports:
          numeric VLAN ID sort, untagged ignored, unknown NetBox name skipped, port
          absent from PORT silently skipped.\n- _add_interface_configurations: IPv4
          base + suffixed entry, IPv6 link-local fallback, port-channel-member skip,
          disconnected skip, missing netbox_interfaces entry.\n- _get_transfer_role_ipv4_addresses:
          happy path, dedup per interface, IPv6 ignored, mgmt/virtual filtered, invalid
          prefix and IP swallowed, IP without assigned_object_id, unknown id, top-level
          exception.\n- _has_direct_ipv4_address, _has_transfer_role_ipv4, _is_untagged_vlan_member:
          happy path and empty-input early returns.\n- _add_portchannel_configuration:
          populated and empty cases.\n\nAlso fixes a kbps\u2192Mbps conversion bug
          in _add_missing_breakout_ports (flagged in review): the helper previously
          wrote the raw NetBox kbps value, while _add_port_configurations divides
          by 1000. With realistic NetBox units (e.g. 25 G = 25 000 000 kbps) this
          would emit \"25000000\" instead of \"25000\". The conversion is now consistent
          across both code paths, and the test exercises realistic units.\n\nCloses
          #2222\n\nAI-assisted: Claude Code"
        change_url: https://github.com/osism/python-osism/pull/2246
        commit_id: 589cd02801e75dbc18a46cae52b7ccd8a9d9c557
        patchset: 589cd02801e75dbc18a46cae52b7ccd8a9d9c557
        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: '2246'
      change_message: "Add unit tests for SONiC config_generator port/interface helpers\n\nCovers
        the port / interface / portchannel / breakout helpers in osism/tasks/conductor/sonic/config_generator.py:\n\n-
        _add_port_configurations: natural sort, master-port skip, admin_status, NetBox
        speed override (explicit vs derived, kbps\u2192Mbps), breakout speed (NetBox
        + brkout_mode fallback), index propagation from master, default port_data
        shape, valid_speeds branches, and the post-loop _add_missing_breakout_ports
        / _add_tagged_vlans_to_ports invocations.\n- _get_breakout_port_valid_speeds:
        known speeds and falsy inputs.\n- _calculate_breakout_port_lane: 4-lane and
        8-lane breakouts, range syntax, single-lane master, unexpected counts, out-of-bounds
        and regex no-match fallbacks.\n- _add_missing_breakout_ports: skip-existing,
        NetBox speed kbps\u2192Mbps conversion, brkout_mode fallback (incl. default),
        admin state, master index copy, valid_speeds override, alias kwargs.\n- _add_tagged_vlans_to_ports:
        numeric VLAN ID sort, untagged ignored, unknown NetBox name skipped, port
        absent from PORT silently skipped.\n- _add_interface_configurations: IPv4
        base + suffixed entry, IPv6 link-local fallback, port-channel-member skip,
        disconnected skip, missing netbox_interfaces entry.\n- _get_transfer_role_ipv4_addresses:
        happy path, dedup per interface, IPv6 ignored, mgmt/virtual filtered, invalid
        prefix and IP swallowed, IP without assigned_object_id, unknown id, top-level
        exception.\n- _has_direct_ipv4_address, _has_transfer_role_ipv4, _is_untagged_vlan_member:
        happy path and empty-input early returns.\n- _add_portchannel_configuration:
        populated and empty cases.\n\nAlso fixes a kbps\u2192Mbps conversion bug in
        _add_missing_breakout_ports (flagged in review): the helper previously wrote
        the raw NetBox kbps value, while _add_port_configurations divides by 1000.
        With realistic NetBox units (e.g. 25 G = 25 000 000 kbps) this would emit
        \"25000000\" instead of \"25000\". The conversion is now consistent across
        both code paths, and the test exercises realistic units.\n\nCloses #2222\n\nAI-assisted:
        Claude Code"
      change_url: https://github.com/osism/python-osism/pull/2246
      child_jobs: []
      commit_id: 589cd02801e75dbc18a46cae52b7ccd8a9d9c557
      event_id: 05499d60-46ed-11f1-8d5b-ee21f6c05bcc
      executor:
        hostname: 521e9411259a
        inventory_file: /var/lib/zuul/builds/775de705ce184a2cbcd68db5ac982bda/ansible/inventory.yaml
        log_root: /var/lib/zuul/builds/775de705ce184a2cbcd68db5ac982bda/work/logs
        result_data_file: /var/lib/zuul/builds/775de705ce184a2cbcd68db5ac982bda/work/results.json
        src_root: /var/lib/zuul/builds/775de705ce184a2cbcd68db5ac982bda/work/src
        work_root: /var/lib/zuul/builds/775de705ce184a2cbcd68db5ac982bda/work
      include_vars: []
      items:
      - branch: main
        change: '2246'
        change_message: "Add unit tests for SONiC config_generator port/interface
          helpers\n\nCovers the port / interface / portchannel / breakout helpers
          in osism/tasks/conductor/sonic/config_generator.py:\n\n- _add_port_configurations:
          natural sort, master-port skip, admin_status, NetBox speed override (explicit
          vs derived, kbps\u2192Mbps), breakout speed (NetBox + brkout_mode fallback),
          index propagation from master, default port_data shape, valid_speeds branches,
          and the post-loop _add_missing_breakout_ports / _add_tagged_vlans_to_ports
          invocations.\n- _get_breakout_port_valid_speeds: known speeds and falsy
          inputs.\n- _calculate_breakout_port_lane: 4-lane and 8-lane breakouts, range
          syntax, single-lane master, unexpected counts, out-of-bounds and regex no-match
          fallbacks.\n- _add_missing_breakout_ports: skip-existing, NetBox speed kbps\u2192Mbps
          conversion, brkout_mode fallback (incl. default), admin state, master index
          copy, valid_speeds override, alias kwargs.\n- _add_tagged_vlans_to_ports:
          numeric VLAN ID sort, untagged ignored, unknown NetBox name skipped, port
          absent from PORT silently skipped.\n- _add_interface_configurations: IPv4
          base + suffixed entry, IPv6 link-local fallback, port-channel-member skip,
          disconnected skip, missing netbox_interfaces entry.\n- _get_transfer_role_ipv4_addresses:
          happy path, dedup per interface, IPv6 ignored, mgmt/virtual filtered, invalid
          prefix and IP swallowed, IP without assigned_object_id, unknown id, top-level
          exception.\n- _has_direct_ipv4_address, _has_transfer_role_ipv4, _is_untagged_vlan_member:
          happy path and empty-input early returns.\n- _add_portchannel_configuration:
          populated and empty cases.\n\nAlso fixes a kbps\u2192Mbps conversion bug
          in _add_missing_breakout_ports (flagged in review): the helper previously
          wrote the raw NetBox kbps value, while _add_port_configurations divides
          by 1000. With realistic NetBox units (e.g. 25 G = 25 000 000 kbps) this
          would emit \"25000000\" instead of \"25000\". The conversion is now consistent
          across both code paths, and the test exercises realistic units.\n\nCloses
          #2222\n\nAI-assisted: Claude Code"
        change_url: https://github.com/osism/python-osism/pull/2246
        commit_id: 589cd02801e75dbc18a46cae52b7ccd8a9d9c557
        patchset: 589cd02801e75dbc18a46cae52b7ccd8a9d9c557
        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: hadolint
      jobtags: []
      max_attempts: 3
      message: QWRkIHVuaXQgdGVzdHMgZm9yIFNPTmlDIGNvbmZpZ19nZW5lcmF0b3IgcG9ydC9pbnRlcmZhY2UgaGVscGVycwoKQ292ZXJzIHRoZSBwb3J0IC8gaW50ZXJmYWNlIC8gcG9ydGNoYW5uZWwgLyBicmVha291dCBoZWxwZXJzIGluIG9zaXNtL3Rhc2tzL2NvbmR1Y3Rvci9zb25pYy9jb25maWdfZ2VuZXJhdG9yLnB5OgoKLSBfYWRkX3BvcnRfY29uZmlndXJhdGlvbnM6IG5hdHVyYWwgc29ydCwgbWFzdGVyLXBvcnQgc2tpcCwgYWRtaW5fc3RhdHVzLCBOZXRCb3ggc3BlZWQgb3ZlcnJpZGUgKGV4cGxpY2l0IHZzIGRlcml2ZWQsIGticHPihpJNYnBzKSwgYnJlYWtvdXQgc3BlZWQgKE5ldEJveCArIGJya291dF9tb2RlIGZhbGxiYWNrKSwgaW5kZXggcHJvcGFnYXRpb24gZnJvbSBtYXN0ZXIsIGRlZmF1bHQgcG9ydF9kYXRhIHNoYXBlLCB2YWxpZF9zcGVlZHMgYnJhbmNoZXMsIGFuZCB0aGUgcG9zdC1sb29wIF9hZGRfbWlzc2luZ19icmVha291dF9wb3J0cyAvIF9hZGRfdGFnZ2VkX3ZsYW5zX3RvX3BvcnRzIGludm9jYXRpb25zLgotIF9nZXRfYnJlYWtvdXRfcG9ydF92YWxpZF9zcGVlZHM6IGtub3duIHNwZWVkcyBhbmQgZmFsc3kgaW5wdXRzLgotIF9jYWxjdWxhdGVfYnJlYWtvdXRfcG9ydF9sYW5lOiA0LWxhbmUgYW5kIDgtbGFuZSBicmVha291dHMsIHJhbmdlIHN5bnRheCwgc2luZ2xlLWxhbmUgbWFzdGVyLCB1bmV4cGVjdGVkIGNvdW50cywgb3V0LW9mLWJvdW5kcyBhbmQgcmVnZXggbm8tbWF0Y2ggZmFsbGJhY2tzLgotIF9hZGRfbWlzc2luZ19icmVha291dF9wb3J0czogc2tpcC1leGlzdGluZywgTmV0Qm94IHNwZWVkIGticHPihpJNYnBzIGNvbnZlcnNpb24sIGJya291dF9tb2RlIGZhbGxiYWNrIChpbmNsLiBkZWZhdWx0KSwgYWRtaW4gc3RhdGUsIG1hc3RlciBpbmRleCBjb3B5LCB2YWxpZF9zcGVlZHMgb3ZlcnJpZGUsIGFsaWFzIGt3YXJncy4KLSBfYWRkX3RhZ2dlZF92bGFuc190b19wb3J0czogbnVtZXJpYyBWTEFOIElEIHNvcnQsIHVudGFnZ2VkIGlnbm9yZWQsIHVua25vd24gTmV0Qm94IG5hbWUgc2tpcHBlZCwgcG9ydCBhYnNlbnQgZnJvbSBQT1JUIHNpbGVudGx5IHNraXBwZWQuCi0gX2FkZF9pbnRlcmZhY2VfY29uZmlndXJhdGlvbnM6IElQdjQgYmFzZSArIHN1ZmZpeGVkIGVudHJ5LCBJUHY2IGxpbmstbG9jYWwgZmFsbGJhY2ssIHBvcnQtY2hhbm5lbC1tZW1iZXIgc2tpcCwgZGlzY29ubmVjdGVkIHNraXAsIG1pc3NpbmcgbmV0Ym94X2ludGVyZmFjZXMgZW50cnkuCi0gX2dldF90cmFuc2Zlcl9yb2xlX2lwdjRfYWRkcmVzc2VzOiBoYXBweSBwYXRoLCBkZWR1cCBwZXIgaW50ZXJmYWNlLCBJUHY2IGlnbm9yZWQsIG1nbXQvdmlydHVhbCBmaWx0ZXJlZCwgaW52YWxpZCBwcmVmaXggYW5kIElQIHN3YWxsb3dlZCwgSVAgd2l0aG91dCBhc3NpZ25lZF9vYmplY3RfaWQsIHVua25vd24gaWQsIHRvcC1sZXZlbCBleGNlcHRpb24uCi0gX2hhc19kaXJlY3RfaXB2NF9hZGRyZXNzLCBfaGFzX3RyYW5zZmVyX3JvbGVfaXB2NCwgX2lzX3VudGFnZ2VkX3ZsYW5fbWVtYmVyOiBoYXBweSBwYXRoIGFuZCBlbXB0eS1pbnB1dCBlYXJseSByZXR1cm5zLgotIF9hZGRfcG9ydGNoYW5uZWxfY29uZmlndXJhdGlvbjogcG9wdWxhdGVkIGFuZCBlbXB0eSBjYXNlcy4KCkFsc28gZml4ZXMgYSBrYnBz4oaSTWJwcyBjb252ZXJzaW9uIGJ1ZyBpbiBfYWRkX21pc3NpbmdfYnJlYWtvdXRfcG9ydHMgKGZsYWdnZWQgaW4gcmV2aWV3KTogdGhlIGhlbHBlciBwcmV2aW91c2x5IHdyb3RlIHRoZSByYXcgTmV0Qm94IGticHMgdmFsdWUsIHdoaWxlIF9hZGRfcG9ydF9jb25maWd1cmF0aW9ucyBkaXZpZGVzIGJ5IDEwMDAuIFdpdGggcmVhbGlzdGljIE5ldEJveCB1bml0cyAoZS5nLiAyNSBHID0gMjUgMDAwIDAwMCBrYnBzKSB0aGlzIHdvdWxkIGVtaXQgIjI1MDAwMDAwIiBpbnN0ZWFkIG9mICIyNTAwMCIuIFRoZSBjb252ZXJzaW9uIGlzIG5vdyBjb25zaXN0ZW50IGFjcm9zcyBib3RoIGNvZGUgcGF0aHMsIGFuZCB0aGUgdGVzdCBleGVyY2lzZXMgcmVhbGlzdGljIHVuaXRzLgoKQ2xvc2VzICMyMjIyCgpBSS1hc3Npc3RlZDogQ2xhdWRlIENvZGU=
      patchset: 589cd02801e75dbc18a46cae52b7ccd8a9d9c557
      pipeline: check
      playbook_context:
        playbook_projects:
          trusted/project_0/github.com/osism/zuul-config:
            canonical_name: github.com/osism/zuul-config
            checkout: main
            commit: 7fe648e065ead713980d61fa015a03a26ed6c629
          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: 7fe648e065ead713980d61fa015a03a26ed6c629
          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/hadolint/run.yaml
          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: 939b4b53b991a6599535bdc9609c02cfc51b2132
          name: osism/python-osism
          required: false
          short_name: python-osism
          src_dir: src/github.com/osism/python-osism
      ref: refs/pull/2246/head
      resources: {}
      tenant: osism
      timeout: 1800
      topic: null
      voting: true
