all:
  children:
    zuul_unreachable:
      hosts: {}
  hosts:
    debian-bookworm:
      ansible_connection: ssh
      ansible_host: 2a13:1a81:8000:3124:f816:3eff:feaf:2aed
      ansible_port: 22
      ansible_python_interpreter: auto
      ansible_user: zuul
      nodepool:
        az: nova
        cloud: regiocloud-a-ci
        external_id: e909e90d-ae98-4bdf-9dd7-5a5fe36dfe69
        host_id: df70f2a3f3d0c26428f22685cfc722ebc48099d99e7332c39e017195
        interface_ip: 2a13:1a81:8000:3124:f816:3eff:feaf:2aed
        label: debian-bookworm
        node_properties: {}
        private_ipv4: 10.128.0.108
        private_ipv6: null
        provider: regiocloud-a
        public_ipv4: 81.163.192.10
        public_ipv6: 2a13:1a81:8000:3124:f816:3eff:feaf:2aed
        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 yamllint explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: osism/zuul-jobs/.zuul.yaml@main#59>'
      - '<Job yamllint explicit: None implied: None source: osism/netbox-manager/.zuul.yaml@main#39>'
      ansible_version: '9'
      attempts: 1
      branch: main
      build: 3e90b9f06d3a4a099c3f880388123181
      build_refs:
      - branch: main
        change: '276'
        change_message: "Fix PortChannel name collision across switch pairs\n\n##
          Problem\n\n`_generate_portchannel_tasks` derives the PortChannel number
          **per switch pair** from the lowest member interface number, but a PortChannel
          name must be unique **per device**. When one switch participates in several
          pairs whose member interfaces extract to the same number, every such pair
          produced the same PortChannel name on that switch \u2014 a name collision
          that merges distinct LAGs into one.\n\nThis is broader than the digit-less
          `\u2192 0` case: modular vendor names collapse too.\n\n- Arista/Dell `Ethernet3/1`
          and `Ethernet4/1` both extract to the second number `1`.\n- Cisco `GigabitEthernet1/0/1`
          and `GigabitEthernet2/0/1` both extract to `0`.\n\nSo two pairs on a shared
          switch both request `PortChannel1` (resp. `PortChannel0`). The flat `EthernetN`
          naming used by the testbed cannot collide, which is why the bug stayed latent
          \u2014 real vendor naming schemes hit it.\n\n## Fix\n\nTrack the PortChannel
          numbers already assigned per device; when the derived number is already
          taken on that device, bump to the next free number. The first pair to touch
          a device keeps its natural interface-derived number, so behaviour is unchanged
          wherever there is no collision. Processing order is deterministic (pairs
          handled in sorted order).\n\n## Tests\n\nThree regression tests on a switch
          shared between two pairs \u2014 Arista/Dell modular, Cisco stackable, and
          digit-less naming \u2014 each asserting the two LAGs resolve to distinct
          names. All three fail before the fix (both LAGs collide on one name) and
          pass after.\n\n- `pytest tests/unit` \u2192 green\n- `flake8`, `black --check`,
          `mypy` \u2192 clean on the change\n\n## Context\n\nThis is the latent edge
          case flagged as a follow-up during the co-review of the Tier-5 test PR:\n\n-
          osism/netbox-manager#271\n\n\U0001F916 Generated with [Claude Code](https://claude.com/claude-code)"
        change_url: https://github.com/osism/netbox-manager/pull/276
        commit_id: 694f31ccfff41c3dff055d72c82e522d1732bbe6
        patchset: 694f31ccfff41c3dff055d72c82e522d1732bbe6
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/netbox-manager
          name: osism/netbox-manager
          short_name: netbox-manager
        src_dir: src/github.com/osism/netbox-manager
        topic: null
      buildset: f52a506e6417474a963ad2985942adfe
      buildset_refs:
      - branch: main
        change: '276'
        change_message: "Fix PortChannel name collision across switch pairs\n\n##
          Problem\n\n`_generate_portchannel_tasks` derives the PortChannel number
          **per switch pair** from the lowest member interface number, but a PortChannel
          name must be unique **per device**. When one switch participates in several
          pairs whose member interfaces extract to the same number, every such pair
          produced the same PortChannel name on that switch \u2014 a name collision
          that merges distinct LAGs into one.\n\nThis is broader than the digit-less
          `\u2192 0` case: modular vendor names collapse too.\n\n- Arista/Dell `Ethernet3/1`
          and `Ethernet4/1` both extract to the second number `1`.\n- Cisco `GigabitEthernet1/0/1`
          and `GigabitEthernet2/0/1` both extract to `0`.\n\nSo two pairs on a shared
          switch both request `PortChannel1` (resp. `PortChannel0`). The flat `EthernetN`
          naming used by the testbed cannot collide, which is why the bug stayed latent
          \u2014 real vendor naming schemes hit it.\n\n## Fix\n\nTrack the PortChannel
          numbers already assigned per device; when the derived number is already
          taken on that device, bump to the next free number. The first pair to touch
          a device keeps its natural interface-derived number, so behaviour is unchanged
          wherever there is no collision. Processing order is deterministic (pairs
          handled in sorted order).\n\n## Tests\n\nThree regression tests on a switch
          shared between two pairs \u2014 Arista/Dell modular, Cisco stackable, and
          digit-less naming \u2014 each asserting the two LAGs resolve to distinct
          names. All three fail before the fix (both LAGs collide on one name) and
          pass after.\n\n- `pytest tests/unit` \u2192 green\n- `flake8`, `black --check`,
          `mypy` \u2192 clean on the change\n\n## Context\n\nThis is the latent edge
          case flagged as a follow-up during the co-review of the Tier-5 test PR:\n\n-
          osism/netbox-manager#271\n\n\U0001F916 Generated with [Claude Code](https://claude.com/claude-code)"
        change_url: https://github.com/osism/netbox-manager/pull/276
        commit_id: 694f31ccfff41c3dff055d72c82e522d1732bbe6
        patchset: 694f31ccfff41c3dff055d72c82e522d1732bbe6
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/netbox-manager
          name: osism/netbox-manager
          short_name: netbox-manager
        src_dir: src/github.com/osism/netbox-manager
        topic: null
      change: '276'
      change_message: "Fix PortChannel name collision across switch pairs\n\n## Problem\n\n`_generate_portchannel_tasks`
        derives the PortChannel number **per switch pair** from the lowest member
        interface number, but a PortChannel name must be unique **per device**. When
        one switch participates in several pairs whose member interfaces extract to
        the same number, every such pair produced the same PortChannel name on that
        switch \u2014 a name collision that merges distinct LAGs into one.\n\nThis
        is broader than the digit-less `\u2192 0` case: modular vendor names collapse
        too.\n\n- Arista/Dell `Ethernet3/1` and `Ethernet4/1` both extract to the
        second number `1`.\n- Cisco `GigabitEthernet1/0/1` and `GigabitEthernet2/0/1`
        both extract to `0`.\n\nSo two pairs on a shared switch both request `PortChannel1`
        (resp. `PortChannel0`). The flat `EthernetN` naming used by the testbed cannot
        collide, which is why the bug stayed latent \u2014 real vendor naming schemes
        hit it.\n\n## Fix\n\nTrack the PortChannel numbers already assigned per device;
        when the derived number is already taken on that device, bump to the next
        free number. The first pair to touch a device keeps its natural interface-derived
        number, so behaviour is unchanged wherever there is no collision. Processing
        order is deterministic (pairs handled in sorted order).\n\n## Tests\n\nThree
        regression tests on a switch shared between two pairs \u2014 Arista/Dell modular,
        Cisco stackable, and digit-less naming \u2014 each asserting the two LAGs
        resolve to distinct names. All three fail before the fix (both LAGs collide
        on one name) and pass after.\n\n- `pytest tests/unit` \u2192 green\n- `flake8`,
        `black --check`, `mypy` \u2192 clean on the change\n\n## Context\n\nThis is
        the latent edge case flagged as a follow-up during the co-review of the Tier-5
        test PR:\n\n- osism/netbox-manager#271\n\n\U0001F916 Generated with [Claude
        Code](https://claude.com/claude-code)"
      change_url: https://github.com/osism/netbox-manager/pull/276
      child_jobs: []
      commit_id: 694f31ccfff41c3dff055d72c82e522d1732bbe6
      event_id: f7d7bf60-76f6-11f1-9fe2-766f3c44d65e
      executor:
        hostname: 521e9411259a
        inventory_file: /var/lib/zuul/builds/3e90b9f06d3a4a099c3f880388123181/ansible/inventory.yaml
        log_root: /var/lib/zuul/builds/3e90b9f06d3a4a099c3f880388123181/work/logs
        result_data_file: /var/lib/zuul/builds/3e90b9f06d3a4a099c3f880388123181/work/results.json
        src_root: /var/lib/zuul/builds/3e90b9f06d3a4a099c3f880388123181/work/src
        work_root: /var/lib/zuul/builds/3e90b9f06d3a4a099c3f880388123181/work
      include_vars: []
      items:
      - branch: main
        change: '276'
        change_message: "Fix PortChannel name collision across switch pairs\n\n##
          Problem\n\n`_generate_portchannel_tasks` derives the PortChannel number
          **per switch pair** from the lowest member interface number, but a PortChannel
          name must be unique **per device**. When one switch participates in several
          pairs whose member interfaces extract to the same number, every such pair
          produced the same PortChannel name on that switch \u2014 a name collision
          that merges distinct LAGs into one.\n\nThis is broader than the digit-less
          `\u2192 0` case: modular vendor names collapse too.\n\n- Arista/Dell `Ethernet3/1`
          and `Ethernet4/1` both extract to the second number `1`.\n- Cisco `GigabitEthernet1/0/1`
          and `GigabitEthernet2/0/1` both extract to `0`.\n\nSo two pairs on a shared
          switch both request `PortChannel1` (resp. `PortChannel0`). The flat `EthernetN`
          naming used by the testbed cannot collide, which is why the bug stayed latent
          \u2014 real vendor naming schemes hit it.\n\n## Fix\n\nTrack the PortChannel
          numbers already assigned per device; when the derived number is already
          taken on that device, bump to the next free number. The first pair to touch
          a device keeps its natural interface-derived number, so behaviour is unchanged
          wherever there is no collision. Processing order is deterministic (pairs
          handled in sorted order).\n\n## Tests\n\nThree regression tests on a switch
          shared between two pairs \u2014 Arista/Dell modular, Cisco stackable, and
          digit-less naming \u2014 each asserting the two LAGs resolve to distinct
          names. All three fail before the fix (both LAGs collide on one name) and
          pass after.\n\n- `pytest tests/unit` \u2192 green\n- `flake8`, `black --check`,
          `mypy` \u2192 clean on the change\n\n## Context\n\nThis is the latent edge
          case flagged as a follow-up during the co-review of the Tier-5 test PR:\n\n-
          osism/netbox-manager#271\n\n\U0001F916 Generated with [Claude Code](https://claude.com/claude-code)"
        change_url: https://github.com/osism/netbox-manager/pull/276
        commit_id: 694f31ccfff41c3dff055d72c82e522d1732bbe6
        patchset: 694f31ccfff41c3dff055d72c82e522d1732bbe6
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/netbox-manager
          name: osism/netbox-manager
          short_name: netbox-manager
          src_dir: src/github.com/osism/netbox-manager
        topic: null
      job: yamllint
      jobtags: []
      max_attempts: 3
      message: Rml4IFBvcnRDaGFubmVsIG5hbWUgY29sbGlzaW9uIGFjcm9zcyBzd2l0Y2ggcGFpcnMKCiMjIFByb2JsZW0KCmBfZ2VuZXJhdGVfcG9ydGNoYW5uZWxfdGFza3NgIGRlcml2ZXMgdGhlIFBvcnRDaGFubmVsIG51bWJlciAqKnBlciBzd2l0Y2ggcGFpcioqIGZyb20gdGhlIGxvd2VzdCBtZW1iZXIgaW50ZXJmYWNlIG51bWJlciwgYnV0IGEgUG9ydENoYW5uZWwgbmFtZSBtdXN0IGJlIHVuaXF1ZSAqKnBlciBkZXZpY2UqKi4gV2hlbiBvbmUgc3dpdGNoIHBhcnRpY2lwYXRlcyBpbiBzZXZlcmFsIHBhaXJzIHdob3NlIG1lbWJlciBpbnRlcmZhY2VzIGV4dHJhY3QgdG8gdGhlIHNhbWUgbnVtYmVyLCBldmVyeSBzdWNoIHBhaXIgcHJvZHVjZWQgdGhlIHNhbWUgUG9ydENoYW5uZWwgbmFtZSBvbiB0aGF0IHN3aXRjaCDigJQgYSBuYW1lIGNvbGxpc2lvbiB0aGF0IG1lcmdlcyBkaXN0aW5jdCBMQUdzIGludG8gb25lLgoKVGhpcyBpcyBicm9hZGVyIHRoYW4gdGhlIGRpZ2l0LWxlc3MgYOKGkiAwYCBjYXNlOiBtb2R1bGFyIHZlbmRvciBuYW1lcyBjb2xsYXBzZSB0b28uCgotIEFyaXN0YS9EZWxsIGBFdGhlcm5ldDMvMWAgYW5kIGBFdGhlcm5ldDQvMWAgYm90aCBleHRyYWN0IHRvIHRoZSBzZWNvbmQgbnVtYmVyIGAxYC4KLSBDaXNjbyBgR2lnYWJpdEV0aGVybmV0MS8wLzFgIGFuZCBgR2lnYWJpdEV0aGVybmV0Mi8wLzFgIGJvdGggZXh0cmFjdCB0byBgMGAuCgpTbyB0d28gcGFpcnMgb24gYSBzaGFyZWQgc3dpdGNoIGJvdGggcmVxdWVzdCBgUG9ydENoYW5uZWwxYCAocmVzcC4gYFBvcnRDaGFubmVsMGApLiBUaGUgZmxhdCBgRXRoZXJuZXROYCBuYW1pbmcgdXNlZCBieSB0aGUgdGVzdGJlZCBjYW5ub3QgY29sbGlkZSwgd2hpY2ggaXMgd2h5IHRoZSBidWcgc3RheWVkIGxhdGVudCDigJQgcmVhbCB2ZW5kb3IgbmFtaW5nIHNjaGVtZXMgaGl0IGl0LgoKIyMgRml4CgpUcmFjayB0aGUgUG9ydENoYW5uZWwgbnVtYmVycyBhbHJlYWR5IGFzc2lnbmVkIHBlciBkZXZpY2U7IHdoZW4gdGhlIGRlcml2ZWQgbnVtYmVyIGlzIGFscmVhZHkgdGFrZW4gb24gdGhhdCBkZXZpY2UsIGJ1bXAgdG8gdGhlIG5leHQgZnJlZSBudW1iZXIuIFRoZSBmaXJzdCBwYWlyIHRvIHRvdWNoIGEgZGV2aWNlIGtlZXBzIGl0cyBuYXR1cmFsIGludGVyZmFjZS1kZXJpdmVkIG51bWJlciwgc28gYmVoYXZpb3VyIGlzIHVuY2hhbmdlZCB3aGVyZXZlciB0aGVyZSBpcyBubyBjb2xsaXNpb24uIFByb2Nlc3Npbmcgb3JkZXIgaXMgZGV0ZXJtaW5pc3RpYyAocGFpcnMgaGFuZGxlZCBpbiBzb3J0ZWQgb3JkZXIpLgoKIyMgVGVzdHMKClRocmVlIHJlZ3Jlc3Npb24gdGVzdHMgb24gYSBzd2l0Y2ggc2hhcmVkIGJldHdlZW4gdHdvIHBhaXJzIOKAlCBBcmlzdGEvRGVsbCBtb2R1bGFyLCBDaXNjbyBzdGFja2FibGUsIGFuZCBkaWdpdC1sZXNzIG5hbWluZyDigJQgZWFjaCBhc3NlcnRpbmcgdGhlIHR3byBMQUdzIHJlc29sdmUgdG8gZGlzdGluY3QgbmFtZXMuIEFsbCB0aHJlZSBmYWlsIGJlZm9yZSB0aGUgZml4IChib3RoIExBR3MgY29sbGlkZSBvbiBvbmUgbmFtZSkgYW5kIHBhc3MgYWZ0ZXIuCgotIGBweXRlc3QgdGVzdHMvdW5pdGAg4oaSIGdyZWVuCi0gYGZsYWtlOGAsIGBibGFjayAtLWNoZWNrYCwgYG15cHlgIOKGkiBjbGVhbiBvbiB0aGUgY2hhbmdlCgojIyBDb250ZXh0CgpUaGlzIGlzIHRoZSBsYXRlbnQgZWRnZSBjYXNlIGZsYWdnZWQgYXMgYSBmb2xsb3ctdXAgZHVyaW5nIHRoZSBjby1yZXZpZXcgb2YgdGhlIFRpZXItNSB0ZXN0IFBSOgoKLSBvc2lzbS9uZXRib3gtbWFuYWdlciMyNzEKCvCfpJYgR2VuZXJhdGVkIHdpdGggW0NsYXVkZSBDb2RlXShodHRwczovL2NsYXVkZS5jb20vY2xhdWRlLWNvZGUp
      patchset: 694f31ccfff41c3dff055d72c82e522d1732bbe6
      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/yamllint/run.yaml
          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/netbox-manager
        name: osism/netbox-manager
        short_name: netbox-manager
        src_dir: src/github.com/osism/netbox-manager
      projects:
        github.com/osism/netbox-manager:
          canonical_hostname: github.com
          canonical_name: github.com/osism/netbox-manager
          checkout: main
          checkout_description: zuul branch
          commit: a61169ad0f46f58ff890208d61e3228f8c65da97
          name: osism/netbox-manager
          required: false
          short_name: netbox-manager
          src_dir: src/github.com/osism/netbox-manager
      ref: refs/pull/276/head
      resources: {}
      tenant: osism
      timeout: 1800
      topic: null
      voting: true
