all:
  children:
    zuul_unreachable:
      hosts: {}
  hosts:
    debian-bookworm:
      ansible_connection: ssh
      ansible_host: 2a13:1a81:8000:3124:f816:3eff:fe30:2407
      ansible_port: 22
      ansible_python_interpreter: auto
      ansible_user: zuul
      nodepool:
        az: nova
        cloud: regiocloud-a-ci
        external_id: 32f45216-f65a-4388-8594-4477d864a421
        host_id: df70f2a3f3d0c26428f22685cfc722ebc48099d99e7332c39e017195
        interface_ip: 2a13:1a81:8000:3124:f816:3eff:fe30:2407
        label: debian-bookworm
        node_properties: {}
        private_ipv4: 10.128.0.106
        private_ipv6: null
        provider: regiocloud-a
        public_ipv4: 81.163.192.215
        public_ipv6: 2a13:1a81:8000:3124:f816:3eff:fe30:2407
        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 flake8 explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: osism/zuul-jobs/.zuul.yaml@main#32>'
      - '<Job flake8 explicit: None implied: None source: osism/container-image-inventory-reconciler/.zuul.yaml@main#108>'
      ansible_version: '9'
      attempts: 1
      branch: main
      build: 2b9c4d17c9554c6aa79247452d057233
      build_refs:
      - branch: main
        change: '554'
        change_message: "Add tier 5 unit tests for frr_extractor and netplan_extractor\n\nImplements
          #550 \u2014 tier 5 unit tests for the two large extractors,\n`frr_extractor.py`
          and `netplan_extractor.py`. Test-only change; no\nproduction code is touched.
          No live NetBox is required.\n\n## Walkthrough (commit order)\n\n1. **Extend
          netbox unit-test factories for the tier 5 extractors**\n   (`tests/unit/netbox/conftest.py`)
          \u2014 adds `make_iface_type` /\n   `make_vrf`, the tier-5 `make_interface`
          attributes (`label`, `type`,\n   `vrf`, `connected_endpoints`, `enabled`,
          `parent`, `lag`, `mtu`,\n   `mac_address`, `untagged_vlan`, `device`, `custom_fields`),\n
          \  `make_device(config_context=...)` and `make_fake_api(devices_by_id=...)`\n
          \  backing a `dcim.devices.get(id)` lookup. Every addition is keyword-only\n
          \  and defaulted, so the tier 0-4 suites keep passing unchanged.\n\n2. **Add
          tier 5 unit tests for frr_extractor pure helpers**\n   (`test_frr_extractor.py`,
          new) \u2014 Part 1: `ASNumberCalculator`,\n   `InterfaceFilter`, `FRRExtractor.__init__`
          / `_calculate_as_number` /\n   `_get_frr_type`.\n\n3. **Add tier 5 unit
          tests for FRRExtractor interface walking and extract**\n   \u2014 Part 2:
          `_get_loopback0_addresses`, `_get_vrf_loopback_addresses`,\n   `_get_uplink_interfaces`,
          `_get_remote_device` / `_get_remote_interface`,\n   `_filter_switch_connections`
          / `_is_switch_device`, `_build_frr_uplinks`\n   and the full `extract`.\n\n4.
          **Add tier 5 unit tests for netplan_extractor helpers**\n   (`test_netplan_extractor.py`)
          \u2014 Part 3: `__init__` and the seven private\n   helpers, appended after
          the existing `TestBond*` classes; module\n   docstring rewritten.\n\n5.
          **Add tier 5 unit tests for NetplanExtractor.extract** \u2014 Part 4:\n
          \  `extract` for every interface kind (regular / disabled / leaf /\n   loopback0
          / VLAN / VXLAN / VRF-dummy), the segment-MTU override, metalbox\n   mode,
          the empty-result `None`, the `config_context` deep-merge and the\n   custom-field
          caching. The LAG / bond kind is intentionally not re-tested\n   \u2014 the
          pre-existing `TestBond*` classes already cover every documented\n   bond
          branch.\n\n## Mocking style\n\nTests build on the prior tiers' fixtures:
          a pre-seeded **real**\n`BulkDataLoader` (its `device_interfaces` / `interface_ips`
          caches are plain\ndicts, so the genuine cache round-trip is exercised),
          the real\n`CustomFieldExtractor` and `utils.deep_merge`, a populated `make_fake_api`\nfor
          the FRR API-fallback path, and a `MagicMock` netbox client. The\nmodule-level
          loguru logger is patched only where a log assertion documents\nthe branch
          taken. Exception branches unreachable through a real\n`BulkDataLoader` are
          driven with `monkeypatch` on the loader instance.\n\n## Verification\n\n-
          `pytest tests/unit` \u2014 **418 passed** in ~0.3s (no IO / no waiting;\n
          \ `--durations=10` shows all < 0.005s).\n- Coverage: `frr_extractor` 99%
          (lone gap is an unreachable defensive\n  return), `netplan_extractor` 96%
          (remainder is bond-internal guards\n  covered behaviourally by `TestBond*`,
          defensive logging and unlisted\n  custom-field paths).\n- `flake8 tests
          files` clean; the three changed files pass `black --check`.\n\n## Deviations
          from the issue\n\n- **Tier 4 (#546) has not landed in this checkout.** The
          conftest was\n  still at tier-3 shape (no `make_vlan`, `make_interface(*,
          id, mgmt_only,\n  tags)`). Commit 1 therefore also adds the `name` / `mac_address`
          /\n  `untagged_vlan` / `device` attributes the issue assumed from #546,
          still\n  backward-compatibly, and the tests use inline `SimpleNamespace(vid=...)`\n
          \ VLAN stubs instead of a `make_vlan` helper (single call shape, not in
          the\n  DoD list). If #546 lands first, reconcile the conftest signatures.\n-
          **`test_netplan_extractor.py` already existed** (LAG/bond tests). It is\n
          \ extended rather than created; the existing bond classes and their\n  file-local
          stubs are left untouched, so the file carries two mocking\n  styles side
          by side (unifying them would be an unrequested refactor).\n- The DoD's coverage
          command (`--cov=files.netbox.extractors.*`) does not\n  match this repo's
          import layout (sources are imported via the `sys.path`\n  insert in `tests/conftest.py`);
          the equivalent is\n  `--cov=extractors.frr_extractor --cov=extractors.netplan_extractor`.\n\n\U0001F916
          Generated with [Claude Code](https://claude.com/claude-code)\n"
        change_url: https://github.com/osism/container-image-inventory-reconciler/pull/554
        commit_id: a404d9318aa787d7287ffa464ef8ff080864af78
        patchset: a404d9318aa787d7287ffa464ef8ff080864af78
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/container-image-inventory-reconciler
          name: osism/container-image-inventory-reconciler
          short_name: container-image-inventory-reconciler
        src_dir: src/github.com/osism/container-image-inventory-reconciler
        topic: null
      buildset: 7208b05bf28f467687e7a574ad77fc8d
      buildset_refs:
      - branch: main
        change: '554'
        change_message: "Add tier 5 unit tests for frr_extractor and netplan_extractor\n\nImplements
          #550 \u2014 tier 5 unit tests for the two large extractors,\n`frr_extractor.py`
          and `netplan_extractor.py`. Test-only change; no\nproduction code is touched.
          No live NetBox is required.\n\n## Walkthrough (commit order)\n\n1. **Extend
          netbox unit-test factories for the tier 5 extractors**\n   (`tests/unit/netbox/conftest.py`)
          \u2014 adds `make_iface_type` /\n   `make_vrf`, the tier-5 `make_interface`
          attributes (`label`, `type`,\n   `vrf`, `connected_endpoints`, `enabled`,
          `parent`, `lag`, `mtu`,\n   `mac_address`, `untagged_vlan`, `device`, `custom_fields`),\n
          \  `make_device(config_context=...)` and `make_fake_api(devices_by_id=...)`\n
          \  backing a `dcim.devices.get(id)` lookup. Every addition is keyword-only\n
          \  and defaulted, so the tier 0-4 suites keep passing unchanged.\n\n2. **Add
          tier 5 unit tests for frr_extractor pure helpers**\n   (`test_frr_extractor.py`,
          new) \u2014 Part 1: `ASNumberCalculator`,\n   `InterfaceFilter`, `FRRExtractor.__init__`
          / `_calculate_as_number` /\n   `_get_frr_type`.\n\n3. **Add tier 5 unit
          tests for FRRExtractor interface walking and extract**\n   \u2014 Part 2:
          `_get_loopback0_addresses`, `_get_vrf_loopback_addresses`,\n   `_get_uplink_interfaces`,
          `_get_remote_device` / `_get_remote_interface`,\n   `_filter_switch_connections`
          / `_is_switch_device`, `_build_frr_uplinks`\n   and the full `extract`.\n\n4.
          **Add tier 5 unit tests for netplan_extractor helpers**\n   (`test_netplan_extractor.py`)
          \u2014 Part 3: `__init__` and the seven private\n   helpers, appended after
          the existing `TestBond*` classes; module\n   docstring rewritten.\n\n5.
          **Add tier 5 unit tests for NetplanExtractor.extract** \u2014 Part 4:\n
          \  `extract` for every interface kind (regular / disabled / leaf /\n   loopback0
          / VLAN / VXLAN / VRF-dummy), the segment-MTU override, metalbox\n   mode,
          the empty-result `None`, the `config_context` deep-merge and the\n   custom-field
          caching. The LAG / bond kind is intentionally not re-tested\n   \u2014 the
          pre-existing `TestBond*` classes already cover every documented\n   bond
          branch.\n\n## Mocking style\n\nTests build on the prior tiers' fixtures:
          a pre-seeded **real**\n`BulkDataLoader` (its `device_interfaces` / `interface_ips`
          caches are plain\ndicts, so the genuine cache round-trip is exercised),
          the real\n`CustomFieldExtractor` and `utils.deep_merge`, a populated `make_fake_api`\nfor
          the FRR API-fallback path, and a `MagicMock` netbox client. The\nmodule-level
          loguru logger is patched only where a log assertion documents\nthe branch
          taken. Exception branches unreachable through a real\n`BulkDataLoader` are
          driven with `monkeypatch` on the loader instance.\n\n## Verification\n\n-
          `pytest tests/unit` \u2014 **418 passed** in ~0.3s (no IO / no waiting;\n
          \ `--durations=10` shows all < 0.005s).\n- Coverage: `frr_extractor` 99%
          (lone gap is an unreachable defensive\n  return), `netplan_extractor` 96%
          (remainder is bond-internal guards\n  covered behaviourally by `TestBond*`,
          defensive logging and unlisted\n  custom-field paths).\n- `flake8 tests
          files` clean; the three changed files pass `black --check`.\n\n## Deviations
          from the issue\n\n- **Tier 4 (#546) has not landed in this checkout.** The
          conftest was\n  still at tier-3 shape (no `make_vlan`, `make_interface(*,
          id, mgmt_only,\n  tags)`). Commit 1 therefore also adds the `name` / `mac_address`
          /\n  `untagged_vlan` / `device` attributes the issue assumed from #546,
          still\n  backward-compatibly, and the tests use inline `SimpleNamespace(vid=...)`\n
          \ VLAN stubs instead of a `make_vlan` helper (single call shape, not in
          the\n  DoD list). If #546 lands first, reconcile the conftest signatures.\n-
          **`test_netplan_extractor.py` already existed** (LAG/bond tests). It is\n
          \ extended rather than created; the existing bond classes and their\n  file-local
          stubs are left untouched, so the file carries two mocking\n  styles side
          by side (unifying them would be an unrequested refactor).\n- The DoD's coverage
          command (`--cov=files.netbox.extractors.*`) does not\n  match this repo's
          import layout (sources are imported via the `sys.path`\n  insert in `tests/conftest.py`);
          the equivalent is\n  `--cov=extractors.frr_extractor --cov=extractors.netplan_extractor`.\n\n\U0001F916
          Generated with [Claude Code](https://claude.com/claude-code)\n"
        change_url: https://github.com/osism/container-image-inventory-reconciler/pull/554
        commit_id: a404d9318aa787d7287ffa464ef8ff080864af78
        patchset: a404d9318aa787d7287ffa464ef8ff080864af78
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/container-image-inventory-reconciler
          name: osism/container-image-inventory-reconciler
          short_name: container-image-inventory-reconciler
        src_dir: src/github.com/osism/container-image-inventory-reconciler
        topic: null
      change: '554'
      change_message: "Add tier 5 unit tests for frr_extractor and netplan_extractor\n\nImplements
        #550 \u2014 tier 5 unit tests for the two large extractors,\n`frr_extractor.py`
        and `netplan_extractor.py`. Test-only change; no\nproduction code is touched.
        No live NetBox is required.\n\n## Walkthrough (commit order)\n\n1. **Extend
        netbox unit-test factories for the tier 5 extractors**\n   (`tests/unit/netbox/conftest.py`)
        \u2014 adds `make_iface_type` /\n   `make_vrf`, the tier-5 `make_interface`
        attributes (`label`, `type`,\n   `vrf`, `connected_endpoints`, `enabled`,
        `parent`, `lag`, `mtu`,\n   `mac_address`, `untagged_vlan`, `device`, `custom_fields`),\n
        \  `make_device(config_context=...)` and `make_fake_api(devices_by_id=...)`\n
        \  backing a `dcim.devices.get(id)` lookup. Every addition is keyword-only\n
        \  and defaulted, so the tier 0-4 suites keep passing unchanged.\n\n2. **Add
        tier 5 unit tests for frr_extractor pure helpers**\n   (`test_frr_extractor.py`,
        new) \u2014 Part 1: `ASNumberCalculator`,\n   `InterfaceFilter`, `FRRExtractor.__init__`
        / `_calculate_as_number` /\n   `_get_frr_type`.\n\n3. **Add tier 5 unit tests
        for FRRExtractor interface walking and extract**\n   \u2014 Part 2: `_get_loopback0_addresses`,
        `_get_vrf_loopback_addresses`,\n   `_get_uplink_interfaces`, `_get_remote_device`
        / `_get_remote_interface`,\n   `_filter_switch_connections` / `_is_switch_device`,
        `_build_frr_uplinks`\n   and the full `extract`.\n\n4. **Add tier 5 unit tests
        for netplan_extractor helpers**\n   (`test_netplan_extractor.py`) \u2014 Part
        3: `__init__` and the seven private\n   helpers, appended after the existing
        `TestBond*` classes; module\n   docstring rewritten.\n\n5. **Add tier 5 unit
        tests for NetplanExtractor.extract** \u2014 Part 4:\n   `extract` for every
        interface kind (regular / disabled / leaf /\n   loopback0 / VLAN / VXLAN /
        VRF-dummy), the segment-MTU override, metalbox\n   mode, the empty-result
        `None`, the `config_context` deep-merge and the\n   custom-field caching.
        The LAG / bond kind is intentionally not re-tested\n   \u2014 the pre-existing
        `TestBond*` classes already cover every documented\n   bond branch.\n\n##
        Mocking style\n\nTests build on the prior tiers' fixtures: a pre-seeded **real**\n`BulkDataLoader`
        (its `device_interfaces` / `interface_ips` caches are plain\ndicts, so the
        genuine cache round-trip is exercised), the real\n`CustomFieldExtractor` and
        `utils.deep_merge`, a populated `make_fake_api`\nfor the FRR API-fallback
        path, and a `MagicMock` netbox client. The\nmodule-level loguru logger is
        patched only where a log assertion documents\nthe branch taken. Exception
        branches unreachable through a real\n`BulkDataLoader` are driven with `monkeypatch`
        on the loader instance.\n\n## Verification\n\n- `pytest tests/unit` \u2014
        **418 passed** in ~0.3s (no IO / no waiting;\n  `--durations=10` shows all
        < 0.005s).\n- Coverage: `frr_extractor` 99% (lone gap is an unreachable defensive\n
        \ return), `netplan_extractor` 96% (remainder is bond-internal guards\n  covered
        behaviourally by `TestBond*`, defensive logging and unlisted\n  custom-field
        paths).\n- `flake8 tests files` clean; the three changed files pass `black
        --check`.\n\n## Deviations from the issue\n\n- **Tier 4 (#546) has not landed
        in this checkout.** The conftest was\n  still at tier-3 shape (no `make_vlan`,
        `make_interface(*, id, mgmt_only,\n  tags)`). Commit 1 therefore also adds
        the `name` / `mac_address` /\n  `untagged_vlan` / `device` attributes the
        issue assumed from #546, still\n  backward-compatibly, and the tests use inline
        `SimpleNamespace(vid=...)`\n  VLAN stubs instead of a `make_vlan` helper (single
        call shape, not in the\n  DoD list). If #546 lands first, reconcile the conftest
        signatures.\n- **`test_netplan_extractor.py` already existed** (LAG/bond tests).
        It is\n  extended rather than created; the existing bond classes and their\n
        \ file-local stubs are left untouched, so the file carries two mocking\n  styles
        side by side (unifying them would be an unrequested refactor).\n- The DoD's
        coverage command (`--cov=files.netbox.extractors.*`) does not\n  match this
        repo's import layout (sources are imported via the `sys.path`\n  insert in
        `tests/conftest.py`); the equivalent is\n  `--cov=extractors.frr_extractor
        --cov=extractors.netplan_extractor`.\n\n\U0001F916 Generated with [Claude
        Code](https://claude.com/claude-code)\n"
      change_url: https://github.com/osism/container-image-inventory-reconciler/pull/554
      child_jobs: []
      commit_id: a404d9318aa787d7287ffa464ef8ff080864af78
      event_id: 88be7f00-73fa-11f1-8b90-b4a5948334c0
      executor:
        hostname: 521e9411259a
        inventory_file: /var/lib/zuul/builds/2b9c4d17c9554c6aa79247452d057233/ansible/inventory.yaml
        log_root: /var/lib/zuul/builds/2b9c4d17c9554c6aa79247452d057233/work/logs
        result_data_file: /var/lib/zuul/builds/2b9c4d17c9554c6aa79247452d057233/work/results.json
        src_root: /var/lib/zuul/builds/2b9c4d17c9554c6aa79247452d057233/work/src
        work_root: /var/lib/zuul/builds/2b9c4d17c9554c6aa79247452d057233/work
      include_vars: []
      items:
      - branch: main
        change: '554'
        change_message: "Add tier 5 unit tests for frr_extractor and netplan_extractor\n\nImplements
          #550 \u2014 tier 5 unit tests for the two large extractors,\n`frr_extractor.py`
          and `netplan_extractor.py`. Test-only change; no\nproduction code is touched.
          No live NetBox is required.\n\n## Walkthrough (commit order)\n\n1. **Extend
          netbox unit-test factories for the tier 5 extractors**\n   (`tests/unit/netbox/conftest.py`)
          \u2014 adds `make_iface_type` /\n   `make_vrf`, the tier-5 `make_interface`
          attributes (`label`, `type`,\n   `vrf`, `connected_endpoints`, `enabled`,
          `parent`, `lag`, `mtu`,\n   `mac_address`, `untagged_vlan`, `device`, `custom_fields`),\n
          \  `make_device(config_context=...)` and `make_fake_api(devices_by_id=...)`\n
          \  backing a `dcim.devices.get(id)` lookup. Every addition is keyword-only\n
          \  and defaulted, so the tier 0-4 suites keep passing unchanged.\n\n2. **Add
          tier 5 unit tests for frr_extractor pure helpers**\n   (`test_frr_extractor.py`,
          new) \u2014 Part 1: `ASNumberCalculator`,\n   `InterfaceFilter`, `FRRExtractor.__init__`
          / `_calculate_as_number` /\n   `_get_frr_type`.\n\n3. **Add tier 5 unit
          tests for FRRExtractor interface walking and extract**\n   \u2014 Part 2:
          `_get_loopback0_addresses`, `_get_vrf_loopback_addresses`,\n   `_get_uplink_interfaces`,
          `_get_remote_device` / `_get_remote_interface`,\n   `_filter_switch_connections`
          / `_is_switch_device`, `_build_frr_uplinks`\n   and the full `extract`.\n\n4.
          **Add tier 5 unit tests for netplan_extractor helpers**\n   (`test_netplan_extractor.py`)
          \u2014 Part 3: `__init__` and the seven private\n   helpers, appended after
          the existing `TestBond*` classes; module\n   docstring rewritten.\n\n5.
          **Add tier 5 unit tests for NetplanExtractor.extract** \u2014 Part 4:\n
          \  `extract` for every interface kind (regular / disabled / leaf /\n   loopback0
          / VLAN / VXLAN / VRF-dummy), the segment-MTU override, metalbox\n   mode,
          the empty-result `None`, the `config_context` deep-merge and the\n   custom-field
          caching. The LAG / bond kind is intentionally not re-tested\n   \u2014 the
          pre-existing `TestBond*` classes already cover every documented\n   bond
          branch.\n\n## Mocking style\n\nTests build on the prior tiers' fixtures:
          a pre-seeded **real**\n`BulkDataLoader` (its `device_interfaces` / `interface_ips`
          caches are plain\ndicts, so the genuine cache round-trip is exercised),
          the real\n`CustomFieldExtractor` and `utils.deep_merge`, a populated `make_fake_api`\nfor
          the FRR API-fallback path, and a `MagicMock` netbox client. The\nmodule-level
          loguru logger is patched only where a log assertion documents\nthe branch
          taken. Exception branches unreachable through a real\n`BulkDataLoader` are
          driven with `monkeypatch` on the loader instance.\n\n## Verification\n\n-
          `pytest tests/unit` \u2014 **418 passed** in ~0.3s (no IO / no waiting;\n
          \ `--durations=10` shows all < 0.005s).\n- Coverage: `frr_extractor` 99%
          (lone gap is an unreachable defensive\n  return), `netplan_extractor` 96%
          (remainder is bond-internal guards\n  covered behaviourally by `TestBond*`,
          defensive logging and unlisted\n  custom-field paths).\n- `flake8 tests
          files` clean; the three changed files pass `black --check`.\n\n## Deviations
          from the issue\n\n- **Tier 4 (#546) has not landed in this checkout.** The
          conftest was\n  still at tier-3 shape (no `make_vlan`, `make_interface(*,
          id, mgmt_only,\n  tags)`). Commit 1 therefore also adds the `name` / `mac_address`
          /\n  `untagged_vlan` / `device` attributes the issue assumed from #546,
          still\n  backward-compatibly, and the tests use inline `SimpleNamespace(vid=...)`\n
          \ VLAN stubs instead of a `make_vlan` helper (single call shape, not in
          the\n  DoD list). If #546 lands first, reconcile the conftest signatures.\n-
          **`test_netplan_extractor.py` already existed** (LAG/bond tests). It is\n
          \ extended rather than created; the existing bond classes and their\n  file-local
          stubs are left untouched, so the file carries two mocking\n  styles side
          by side (unifying them would be an unrequested refactor).\n- The DoD's coverage
          command (`--cov=files.netbox.extractors.*`) does not\n  match this repo's
          import layout (sources are imported via the `sys.path`\n  insert in `tests/conftest.py`);
          the equivalent is\n  `--cov=extractors.frr_extractor --cov=extractors.netplan_extractor`.\n\n\U0001F916
          Generated with [Claude Code](https://claude.com/claude-code)\n"
        change_url: https://github.com/osism/container-image-inventory-reconciler/pull/554
        commit_id: a404d9318aa787d7287ffa464ef8ff080864af78
        patchset: a404d9318aa787d7287ffa464ef8ff080864af78
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/container-image-inventory-reconciler
          name: osism/container-image-inventory-reconciler
          short_name: container-image-inventory-reconciler
          src_dir: src/github.com/osism/container-image-inventory-reconciler
        topic: null
      job: flake8
      jobtags: []
      max_attempts: 3
      message: QWRkIHRpZXIgNSB1bml0IHRlc3RzIGZvciBmcnJfZXh0cmFjdG9yIGFuZCBuZXRwbGFuX2V4dHJhY3RvcgoKSW1wbGVtZW50cyAjNTUwIOKAlCB0aWVyIDUgdW5pdCB0ZXN0cyBmb3IgdGhlIHR3byBsYXJnZSBleHRyYWN0b3JzLApgZnJyX2V4dHJhY3Rvci5weWAgYW5kIGBuZXRwbGFuX2V4dHJhY3Rvci5weWAuIFRlc3Qtb25seSBjaGFuZ2U7IG5vCnByb2R1Y3Rpb24gY29kZSBpcyB0b3VjaGVkLiBObyBsaXZlIE5ldEJveCBpcyByZXF1aXJlZC4KCiMjIFdhbGt0aHJvdWdoIChjb21taXQgb3JkZXIpCgoxLiAqKkV4dGVuZCBuZXRib3ggdW5pdC10ZXN0IGZhY3RvcmllcyBmb3IgdGhlIHRpZXIgNSBleHRyYWN0b3JzKioKICAgKGB0ZXN0cy91bml0L25ldGJveC9jb25mdGVzdC5weWApIOKAlCBhZGRzIGBtYWtlX2lmYWNlX3R5cGVgIC8KICAgYG1ha2VfdnJmYCwgdGhlIHRpZXItNSBgbWFrZV9pbnRlcmZhY2VgIGF0dHJpYnV0ZXMgKGBsYWJlbGAsIGB0eXBlYCwKICAgYHZyZmAsIGBjb25uZWN0ZWRfZW5kcG9pbnRzYCwgYGVuYWJsZWRgLCBgcGFyZW50YCwgYGxhZ2AsIGBtdHVgLAogICBgbWFjX2FkZHJlc3NgLCBgdW50YWdnZWRfdmxhbmAsIGBkZXZpY2VgLCBgY3VzdG9tX2ZpZWxkc2ApLAogICBgbWFrZV9kZXZpY2UoY29uZmlnX2NvbnRleHQ9Li4uKWAgYW5kIGBtYWtlX2Zha2VfYXBpKGRldmljZXNfYnlfaWQ9Li4uKWAKICAgYmFja2luZyBhIGBkY2ltLmRldmljZXMuZ2V0KGlkKWAgbG9va3VwLiBFdmVyeSBhZGRpdGlvbiBpcyBrZXl3b3JkLW9ubHkKICAgYW5kIGRlZmF1bHRlZCwgc28gdGhlIHRpZXIgMC00IHN1aXRlcyBrZWVwIHBhc3NpbmcgdW5jaGFuZ2VkLgoKMi4gKipBZGQgdGllciA1IHVuaXQgdGVzdHMgZm9yIGZycl9leHRyYWN0b3IgcHVyZSBoZWxwZXJzKioKICAgKGB0ZXN0X2Zycl9leHRyYWN0b3IucHlgLCBuZXcpIOKAlCBQYXJ0IDE6IGBBU051bWJlckNhbGN1bGF0b3JgLAogICBgSW50ZXJmYWNlRmlsdGVyYCwgYEZSUkV4dHJhY3Rvci5fX2luaXRfX2AgLyBgX2NhbGN1bGF0ZV9hc19udW1iZXJgIC8KICAgYF9nZXRfZnJyX3R5cGVgLgoKMy4gKipBZGQgdGllciA1IHVuaXQgdGVzdHMgZm9yIEZSUkV4dHJhY3RvciBpbnRlcmZhY2Ugd2Fsa2luZyBhbmQgZXh0cmFjdCoqCiAgIOKAlCBQYXJ0IDI6IGBfZ2V0X2xvb3BiYWNrMF9hZGRyZXNzZXNgLCBgX2dldF92cmZfbG9vcGJhY2tfYWRkcmVzc2VzYCwKICAgYF9nZXRfdXBsaW5rX2ludGVyZmFjZXNgLCBgX2dldF9yZW1vdGVfZGV2aWNlYCAvIGBfZ2V0X3JlbW90ZV9pbnRlcmZhY2VgLAogICBgX2ZpbHRlcl9zd2l0Y2hfY29ubmVjdGlvbnNgIC8gYF9pc19zd2l0Y2hfZGV2aWNlYCwgYF9idWlsZF9mcnJfdXBsaW5rc2AKICAgYW5kIHRoZSBmdWxsIGBleHRyYWN0YC4KCjQuICoqQWRkIHRpZXIgNSB1bml0IHRlc3RzIGZvciBuZXRwbGFuX2V4dHJhY3RvciBoZWxwZXJzKioKICAgKGB0ZXN0X25ldHBsYW5fZXh0cmFjdG9yLnB5YCkg4oCUIFBhcnQgMzogYF9faW5pdF9fYCBhbmQgdGhlIHNldmVuIHByaXZhdGUKICAgaGVscGVycywgYXBwZW5kZWQgYWZ0ZXIgdGhlIGV4aXN0aW5nIGBUZXN0Qm9uZCpgIGNsYXNzZXM7IG1vZHVsZQogICBkb2NzdHJpbmcgcmV3cml0dGVuLgoKNS4gKipBZGQgdGllciA1IHVuaXQgdGVzdHMgZm9yIE5ldHBsYW5FeHRyYWN0b3IuZXh0cmFjdCoqIOKAlCBQYXJ0IDQ6CiAgIGBleHRyYWN0YCBmb3IgZXZlcnkgaW50ZXJmYWNlIGtpbmQgKHJlZ3VsYXIgLyBkaXNhYmxlZCAvIGxlYWYgLwogICBsb29wYmFjazAgLyBWTEFOIC8gVlhMQU4gLyBWUkYtZHVtbXkpLCB0aGUgc2VnbWVudC1NVFUgb3ZlcnJpZGUsIG1ldGFsYm94CiAgIG1vZGUsIHRoZSBlbXB0eS1yZXN1bHQgYE5vbmVgLCB0aGUgYGNvbmZpZ19jb250ZXh0YCBkZWVwLW1lcmdlIGFuZCB0aGUKICAgY3VzdG9tLWZpZWxkIGNhY2hpbmcuIFRoZSBMQUcgLyBib25kIGtpbmQgaXMgaW50ZW50aW9uYWxseSBub3QgcmUtdGVzdGVkCiAgIOKAlCB0aGUgcHJlLWV4aXN0aW5nIGBUZXN0Qm9uZCpgIGNsYXNzZXMgYWxyZWFkeSBjb3ZlciBldmVyeSBkb2N1bWVudGVkCiAgIGJvbmQgYnJhbmNoLgoKIyMgTW9ja2luZyBzdHlsZQoKVGVzdHMgYnVpbGQgb24gdGhlIHByaW9yIHRpZXJzJyBmaXh0dXJlczogYSBwcmUtc2VlZGVkICoqcmVhbCoqCmBCdWxrRGF0YUxvYWRlcmAgKGl0cyBgZGV2aWNlX2ludGVyZmFjZXNgIC8gYGludGVyZmFjZV9pcHNgIGNhY2hlcyBhcmUgcGxhaW4KZGljdHMsIHNvIHRoZSBnZW51aW5lIGNhY2hlIHJvdW5kLXRyaXAgaXMgZXhlcmNpc2VkKSwgdGhlIHJlYWwKYEN1c3RvbUZpZWxkRXh0cmFjdG9yYCBhbmQgYHV0aWxzLmRlZXBfbWVyZ2VgLCBhIHBvcHVsYXRlZCBgbWFrZV9mYWtlX2FwaWAKZm9yIHRoZSBGUlIgQVBJLWZhbGxiYWNrIHBhdGgsIGFuZCBhIGBNYWdpY01vY2tgIG5ldGJveCBjbGllbnQuIFRoZQptb2R1bGUtbGV2ZWwgbG9ndXJ1IGxvZ2dlciBpcyBwYXRjaGVkIG9ubHkgd2hlcmUgYSBsb2cgYXNzZXJ0aW9uIGRvY3VtZW50cwp0aGUgYnJhbmNoIHRha2VuLiBFeGNlcHRpb24gYnJhbmNoZXMgdW5yZWFjaGFibGUgdGhyb3VnaCBhIHJlYWwKYEJ1bGtEYXRhTG9hZGVyYCBhcmUgZHJpdmVuIHdpdGggYG1vbmtleXBhdGNoYCBvbiB0aGUgbG9hZGVyIGluc3RhbmNlLgoKIyMgVmVyaWZpY2F0aW9uCgotIGBweXRlc3QgdGVzdHMvdW5pdGAg4oCUICoqNDE4IHBhc3NlZCoqIGluIH4wLjNzIChubyBJTyAvIG5vIHdhaXRpbmc7CiAgYC0tZHVyYXRpb25zPTEwYCBzaG93cyBhbGwgPCAwLjAwNXMpLgotIENvdmVyYWdlOiBgZnJyX2V4dHJhY3RvcmAgOTklIChsb25lIGdhcCBpcyBhbiB1bnJlYWNoYWJsZSBkZWZlbnNpdmUKICByZXR1cm4pLCBgbmV0cGxhbl9leHRyYWN0b3JgIDk2JSAocmVtYWluZGVyIGlzIGJvbmQtaW50ZXJuYWwgZ3VhcmRzCiAgY292ZXJlZCBiZWhhdmlvdXJhbGx5IGJ5IGBUZXN0Qm9uZCpgLCBkZWZlbnNpdmUgbG9nZ2luZyBhbmQgdW5saXN0ZWQKICBjdXN0b20tZmllbGQgcGF0aHMpLgotIGBmbGFrZTggdGVzdHMgZmlsZXNgIGNsZWFuOyB0aGUgdGhyZWUgY2hhbmdlZCBmaWxlcyBwYXNzIGBibGFjayAtLWNoZWNrYC4KCiMjIERldmlhdGlvbnMgZnJvbSB0aGUgaXNzdWUKCi0gKipUaWVyIDQgKCM1NDYpIGhhcyBub3QgbGFuZGVkIGluIHRoaXMgY2hlY2tvdXQuKiogVGhlIGNvbmZ0ZXN0IHdhcwogIHN0aWxsIGF0IHRpZXItMyBzaGFwZSAobm8gYG1ha2VfdmxhbmAsIGBtYWtlX2ludGVyZmFjZSgqLCBpZCwgbWdtdF9vbmx5LAogIHRhZ3MpYCkuIENvbW1pdCAxIHRoZXJlZm9yZSBhbHNvIGFkZHMgdGhlIGBuYW1lYCAvIGBtYWNfYWRkcmVzc2AgLwogIGB1bnRhZ2dlZF92bGFuYCAvIGBkZXZpY2VgIGF0dHJpYnV0ZXMgdGhlIGlzc3VlIGFzc3VtZWQgZnJvbSAjNTQ2LCBzdGlsbAogIGJhY2t3YXJkLWNvbXBhdGlibHksIGFuZCB0aGUgdGVzdHMgdXNlIGlubGluZSBgU2ltcGxlTmFtZXNwYWNlKHZpZD0uLi4pYAogIFZMQU4gc3R1YnMgaW5zdGVhZCBvZiBhIGBtYWtlX3ZsYW5gIGhlbHBlciAoc2luZ2xlIGNhbGwgc2hhcGUsIG5vdCBpbiB0aGUKICBEb0QgbGlzdCkuIElmICM1NDYgbGFuZHMgZmlyc3QsIHJlY29uY2lsZSB0aGUgY29uZnRlc3Qgc2lnbmF0dXJlcy4KLSAqKmB0ZXN0X25ldHBsYW5fZXh0cmFjdG9yLnB5YCBhbHJlYWR5IGV4aXN0ZWQqKiAoTEFHL2JvbmQgdGVzdHMpLiBJdCBpcwogIGV4dGVuZGVkIHJhdGhlciB0aGFuIGNyZWF0ZWQ7IHRoZSBleGlzdGluZyBib25kIGNsYXNzZXMgYW5kIHRoZWlyCiAgZmlsZS1sb2NhbCBzdHVicyBhcmUgbGVmdCB1bnRvdWNoZWQsIHNvIHRoZSBmaWxlIGNhcnJpZXMgdHdvIG1vY2tpbmcKICBzdHlsZXMgc2lkZSBieSBzaWRlICh1bmlmeWluZyB0aGVtIHdvdWxkIGJlIGFuIHVucmVxdWVzdGVkIHJlZmFjdG9yKS4KLSBUaGUgRG9EJ3MgY292ZXJhZ2UgY29tbWFuZCAoYC0tY292PWZpbGVzLm5ldGJveC5leHRyYWN0b3JzLipgKSBkb2VzIG5vdAogIG1hdGNoIHRoaXMgcmVwbydzIGltcG9ydCBsYXlvdXQgKHNvdXJjZXMgYXJlIGltcG9ydGVkIHZpYSB0aGUgYHN5cy5wYXRoYAogIGluc2VydCBpbiBgdGVzdHMvY29uZnRlc3QucHlgKTsgdGhlIGVxdWl2YWxlbnQgaXMKICBgLS1jb3Y9ZXh0cmFjdG9ycy5mcnJfZXh0cmFjdG9yIC0tY292PWV4dHJhY3RvcnMubmV0cGxhbl9leHRyYWN0b3JgLgoK8J+kliBHZW5lcmF0ZWQgd2l0aCBbQ2xhdWRlIENvZGVdKGh0dHBzOi8vY2xhdWRlLmNvbS9jbGF1ZGUtY29kZSkK
      patchset: a404d9318aa787d7287ffa464ef8ff080864af78
      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/flake8/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/container-image-inventory-reconciler
        name: osism/container-image-inventory-reconciler
        short_name: container-image-inventory-reconciler
        src_dir: src/github.com/osism/container-image-inventory-reconciler
      projects:
        github.com/osism/container-image-inventory-reconciler:
          canonical_hostname: github.com
          canonical_name: github.com/osism/container-image-inventory-reconciler
          checkout: main
          checkout_description: zuul branch
          commit: a65003b518743b368cec98400984f0be306261c5
          name: osism/container-image-inventory-reconciler
          required: false
          short_name: container-image-inventory-reconciler
          src_dir: src/github.com/osism/container-image-inventory-reconciler
      ref: refs/pull/554/head
      resources: {}
      tenant: osism
      timeout: 1800
      topic: null
      voting: true
