all:
  children:
    zuul_unreachable:
      hosts: {}
  hosts:
    debian-bookworm:
      ansible_connection: ssh
      ansible_host: 2a13:1a81:8000:3124:f816:3eff:fee1:a635
      ansible_port: 22
      ansible_python_interpreter: auto
      ansible_user: zuul
      nodepool:
        az: nova
        cloud: regiocloud-a-ci
        external_id: 0708aa8a-7a43-4986-9756-0d1f68157231
        host_id: df70f2a3f3d0c26428f22685cfc722ebc48099d99e7332c39e017195
        interface_ip: 2a13:1a81:8000:3124:f816:3eff:fee1:a635
        label: debian-bookworm
        node_properties: {}
        private_ipv4: 10.128.0.108
        private_ipv6: null
        provider: regiocloud-a
        public_ipv4: 81.163.193.215
        public_ipv6: 2a13:1a81:8000:3124:f816:3eff:fee1:a635
        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 ansible-lint explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: osism/zuul-jobs/.zuul.yaml@main#7>'
      - '<Job ansible-lint explicit: None implied: None source: osism/container-image-inventory-reconciler/.zuul.yaml@main#108>'
      ansible_version: '9'
      attempts: 1
      branch: main
      build: 9b7843fb4c8b44ca9e0e2a700dec03ae
      build_refs:
      - branch: main
        change: '545'
        change_message: "Add tier 3 unit tests: primary_ip, config_context, custom_field,
          secrets, gnmic\n\nImplements #543 (sub-issue of #524).\n\nAdds pure-logic
          unit tests for the five tier-3 *small extractors* under\n`files/netbox/extractors/`.
          No live NetBox is required: the tests build\n`SimpleNamespace` device/interface/IP
          stubs and, for `gnmic_extractor`, a\ntiny fake pynetbox session. Builds
          on the tier-1 (#531) and tier-2 (#538)\nfoundations and reuses `make_device`
          / `make_tag` from\n`tests/unit/netbox/conftest.py`.\n\n## Change set (commit
          order)\n\n1. **Add `make_ip` / `make_interface` / `make_fake_api` test factories**
          \u2014\n   extends the netbox conftest with the IP-address, interface and\n
          \  pynetbox-session shapes the tier-3 tests need. `make_interface` /\n   `make_fake_api`
          model the `dcim.interfaces.filter` /\n   `ipam.ip_addresses.filter` lookups
          and are reused by tiers 4-9.\n2. **Add tier 3 unit tests for primary_ip
          and config_context** \u2014\n   IPv4/IPv6/legacy priority and mask stripping;
          frr/netplan/`\"\"` key\n   filtering, copy-without-mutation and non-dict
          passthrough.\n3. **Add tier 3 unit tests for custom_field and secrets**
          \u2014 required\n   `field_name` guard, falsy-but-present values, `None`/empty
          coercion;\n   `remote_board_` / `ironic_osism_` prefix filtering (`startswith`,
          not\n   substring), falsy/non-dict guards, vault values passed through untouched.\n4.
          **Add tier 3 unit tests for the gnmic extractor** \u2014 `__init__`,\n   `_has_metalbox_tag`,
          `_get_hostname`, `_is_managed_oob_interface`,\n   `_get_oob_ip` (incl. the
          filter-exception path and `device_id` /\n   `interface_id` call args) and
          `extract` (no-tag short-circuit with no\n   API calls, tag-but-no-IP, full
          `gnmic_targets` shape, inventory_hostname\n   key). The module logger is
          patched with a `MagicMock` via `monkeypatch`\n   only where a log assertion
          documents the branch taken.\n5. **Add BaseExtractor abstract-class smoke
          test** \u2014 `BaseExtractor` cannot\n   be instantiated; each tier-3 extractor
          is a concrete subclass.\n\n## Verification\n\n- `pytest tests/unit/netbox`
          \u2014 **259 passed** (184 baseline + 75 new) in ~0.2s.\n- Coverage of the
          five target modules is **100%**\n  (`primary_ip`, `config_context`, `custom_field`,
          `secrets`, `gnmic`).\n  `base_extractor.py` reports 83% \u2014 the one uncovered
          line is the `pass`\n  body of the abstract method, which is unreachable
          by definition.\n- Tier-3 suite runs in **0.08s** (`--durations=10`, all
          cases < 5ms).\n- `flake8 tests/unit/netbox/` clean; `black --check` clean
          on all changed\n  files.\n\nNote on the coverage command in the issue: the
          modules are imported as\ntop-level `extractors.*` (because `files/netbox`
          is on `sys.path` per\n`tests/conftest.py`), so the dotted `--cov=files.netbox.extractors.<mod>`\nform
          does not match the imported module name. The path form\n`--cov=files/netbox/extractors`
          measures coverage correctly and is what the\n100% figures above come from.\n\n\U0001F916
          Generated with [Claude Code](https://claude.com/claude-code)"
        change_url: https://github.com/osism/container-image-inventory-reconciler/pull/545
        commit_id: 912e8ecb6e410953bf3960595d03287972bf4bee
        patchset: 912e8ecb6e410953bf3960595d03287972bf4bee
        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: 9b8aa74a858648b99ea1a59ce1b5f7c4
      buildset_refs:
      - branch: main
        change: '545'
        change_message: "Add tier 3 unit tests: primary_ip, config_context, custom_field,
          secrets, gnmic\n\nImplements #543 (sub-issue of #524).\n\nAdds pure-logic
          unit tests for the five tier-3 *small extractors* under\n`files/netbox/extractors/`.
          No live NetBox is required: the tests build\n`SimpleNamespace` device/interface/IP
          stubs and, for `gnmic_extractor`, a\ntiny fake pynetbox session. Builds
          on the tier-1 (#531) and tier-2 (#538)\nfoundations and reuses `make_device`
          / `make_tag` from\n`tests/unit/netbox/conftest.py`.\n\n## Change set (commit
          order)\n\n1. **Add `make_ip` / `make_interface` / `make_fake_api` test factories**
          \u2014\n   extends the netbox conftest with the IP-address, interface and\n
          \  pynetbox-session shapes the tier-3 tests need. `make_interface` /\n   `make_fake_api`
          model the `dcim.interfaces.filter` /\n   `ipam.ip_addresses.filter` lookups
          and are reused by tiers 4-9.\n2. **Add tier 3 unit tests for primary_ip
          and config_context** \u2014\n   IPv4/IPv6/legacy priority and mask stripping;
          frr/netplan/`\"\"` key\n   filtering, copy-without-mutation and non-dict
          passthrough.\n3. **Add tier 3 unit tests for custom_field and secrets**
          \u2014 required\n   `field_name` guard, falsy-but-present values, `None`/empty
          coercion;\n   `remote_board_` / `ironic_osism_` prefix filtering (`startswith`,
          not\n   substring), falsy/non-dict guards, vault values passed through untouched.\n4.
          **Add tier 3 unit tests for the gnmic extractor** \u2014 `__init__`,\n   `_has_metalbox_tag`,
          `_get_hostname`, `_is_managed_oob_interface`,\n   `_get_oob_ip` (incl. the
          filter-exception path and `device_id` /\n   `interface_id` call args) and
          `extract` (no-tag short-circuit with no\n   API calls, tag-but-no-IP, full
          `gnmic_targets` shape, inventory_hostname\n   key). The module logger is
          patched with a `MagicMock` via `monkeypatch`\n   only where a log assertion
          documents the branch taken.\n5. **Add BaseExtractor abstract-class smoke
          test** \u2014 `BaseExtractor` cannot\n   be instantiated; each tier-3 extractor
          is a concrete subclass.\n\n## Verification\n\n- `pytest tests/unit/netbox`
          \u2014 **259 passed** (184 baseline + 75 new) in ~0.2s.\n- Coverage of the
          five target modules is **100%**\n  (`primary_ip`, `config_context`, `custom_field`,
          `secrets`, `gnmic`).\n  `base_extractor.py` reports 83% \u2014 the one uncovered
          line is the `pass`\n  body of the abstract method, which is unreachable
          by definition.\n- Tier-3 suite runs in **0.08s** (`--durations=10`, all
          cases < 5ms).\n- `flake8 tests/unit/netbox/` clean; `black --check` clean
          on all changed\n  files.\n\nNote on the coverage command in the issue: the
          modules are imported as\ntop-level `extractors.*` (because `files/netbox`
          is on `sys.path` per\n`tests/conftest.py`), so the dotted `--cov=files.netbox.extractors.<mod>`\nform
          does not match the imported module name. The path form\n`--cov=files/netbox/extractors`
          measures coverage correctly and is what the\n100% figures above come from.\n\n\U0001F916
          Generated with [Claude Code](https://claude.com/claude-code)"
        change_url: https://github.com/osism/container-image-inventory-reconciler/pull/545
        commit_id: 912e8ecb6e410953bf3960595d03287972bf4bee
        patchset: 912e8ecb6e410953bf3960595d03287972bf4bee
        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: '545'
      change_message: "Add tier 3 unit tests: primary_ip, config_context, custom_field,
        secrets, gnmic\n\nImplements #543 (sub-issue of #524).\n\nAdds pure-logic
        unit tests for the five tier-3 *small extractors* under\n`files/netbox/extractors/`.
        No live NetBox is required: the tests build\n`SimpleNamespace` device/interface/IP
        stubs and, for `gnmic_extractor`, a\ntiny fake pynetbox session. Builds on
        the tier-1 (#531) and tier-2 (#538)\nfoundations and reuses `make_device`
        / `make_tag` from\n`tests/unit/netbox/conftest.py`.\n\n## Change set (commit
        order)\n\n1. **Add `make_ip` / `make_interface` / `make_fake_api` test factories**
        \u2014\n   extends the netbox conftest with the IP-address, interface and\n
        \  pynetbox-session shapes the tier-3 tests need. `make_interface` /\n   `make_fake_api`
        model the `dcim.interfaces.filter` /\n   `ipam.ip_addresses.filter` lookups
        and are reused by tiers 4-9.\n2. **Add tier 3 unit tests for primary_ip and
        config_context** \u2014\n   IPv4/IPv6/legacy priority and mask stripping;
        frr/netplan/`\"\"` key\n   filtering, copy-without-mutation and non-dict passthrough.\n3.
        **Add tier 3 unit tests for custom_field and secrets** \u2014 required\n   `field_name`
        guard, falsy-but-present values, `None`/empty coercion;\n   `remote_board_`
        / `ironic_osism_` prefix filtering (`startswith`, not\n   substring), falsy/non-dict
        guards, vault values passed through untouched.\n4. **Add tier 3 unit tests
        for the gnmic extractor** \u2014 `__init__`,\n   `_has_metalbox_tag`, `_get_hostname`,
        `_is_managed_oob_interface`,\n   `_get_oob_ip` (incl. the filter-exception
        path and `device_id` /\n   `interface_id` call args) and `extract` (no-tag
        short-circuit with no\n   API calls, tag-but-no-IP, full `gnmic_targets` shape,
        inventory_hostname\n   key). The module logger is patched with a `MagicMock`
        via `monkeypatch`\n   only where a log assertion documents the branch taken.\n5.
        **Add BaseExtractor abstract-class smoke test** \u2014 `BaseExtractor` cannot\n
        \  be instantiated; each tier-3 extractor is a concrete subclass.\n\n## Verification\n\n-
        `pytest tests/unit/netbox` \u2014 **259 passed** (184 baseline + 75 new) in
        ~0.2s.\n- Coverage of the five target modules is **100%**\n  (`primary_ip`,
        `config_context`, `custom_field`, `secrets`, `gnmic`).\n  `base_extractor.py`
        reports 83% \u2014 the one uncovered line is the `pass`\n  body of the abstract
        method, which is unreachable by definition.\n- Tier-3 suite runs in **0.08s**
        (`--durations=10`, all cases < 5ms).\n- `flake8 tests/unit/netbox/` clean;
        `black --check` clean on all changed\n  files.\n\nNote on the coverage command
        in the issue: the modules are imported as\ntop-level `extractors.*` (because
        `files/netbox` is on `sys.path` per\n`tests/conftest.py`), so the dotted `--cov=files.netbox.extractors.<mod>`\nform
        does not match the imported module name. The path form\n`--cov=files/netbox/extractors`
        measures coverage correctly and is what the\n100% figures above come from.\n\n\U0001F916
        Generated with [Claude Code](https://claude.com/claude-code)"
      change_url: https://github.com/osism/container-image-inventory-reconciler/pull/545
      child_jobs: []
      commit_id: 912e8ecb6e410953bf3960595d03287972bf4bee
      event_id: 8dc5dd30-6497-11f1-8850-4bb94d1ce951
      executor:
        hostname: 521e9411259a
        inventory_file: /var/lib/zuul/builds/9b7843fb4c8b44ca9e0e2a700dec03ae/ansible/inventory.yaml
        log_root: /var/lib/zuul/builds/9b7843fb4c8b44ca9e0e2a700dec03ae/work/logs
        result_data_file: /var/lib/zuul/builds/9b7843fb4c8b44ca9e0e2a700dec03ae/work/results.json
        src_root: /var/lib/zuul/builds/9b7843fb4c8b44ca9e0e2a700dec03ae/work/src
        work_root: /var/lib/zuul/builds/9b7843fb4c8b44ca9e0e2a700dec03ae/work
      include_vars: []
      items:
      - branch: main
        change: '545'
        change_message: "Add tier 3 unit tests: primary_ip, config_context, custom_field,
          secrets, gnmic\n\nImplements #543 (sub-issue of #524).\n\nAdds pure-logic
          unit tests for the five tier-3 *small extractors* under\n`files/netbox/extractors/`.
          No live NetBox is required: the tests build\n`SimpleNamespace` device/interface/IP
          stubs and, for `gnmic_extractor`, a\ntiny fake pynetbox session. Builds
          on the tier-1 (#531) and tier-2 (#538)\nfoundations and reuses `make_device`
          / `make_tag` from\n`tests/unit/netbox/conftest.py`.\n\n## Change set (commit
          order)\n\n1. **Add `make_ip` / `make_interface` / `make_fake_api` test factories**
          \u2014\n   extends the netbox conftest with the IP-address, interface and\n
          \  pynetbox-session shapes the tier-3 tests need. `make_interface` /\n   `make_fake_api`
          model the `dcim.interfaces.filter` /\n   `ipam.ip_addresses.filter` lookups
          and are reused by tiers 4-9.\n2. **Add tier 3 unit tests for primary_ip
          and config_context** \u2014\n   IPv4/IPv6/legacy priority and mask stripping;
          frr/netplan/`\"\"` key\n   filtering, copy-without-mutation and non-dict
          passthrough.\n3. **Add tier 3 unit tests for custom_field and secrets**
          \u2014 required\n   `field_name` guard, falsy-but-present values, `None`/empty
          coercion;\n   `remote_board_` / `ironic_osism_` prefix filtering (`startswith`,
          not\n   substring), falsy/non-dict guards, vault values passed through untouched.\n4.
          **Add tier 3 unit tests for the gnmic extractor** \u2014 `__init__`,\n   `_has_metalbox_tag`,
          `_get_hostname`, `_is_managed_oob_interface`,\n   `_get_oob_ip` (incl. the
          filter-exception path and `device_id` /\n   `interface_id` call args) and
          `extract` (no-tag short-circuit with no\n   API calls, tag-but-no-IP, full
          `gnmic_targets` shape, inventory_hostname\n   key). The module logger is
          patched with a `MagicMock` via `monkeypatch`\n   only where a log assertion
          documents the branch taken.\n5. **Add BaseExtractor abstract-class smoke
          test** \u2014 `BaseExtractor` cannot\n   be instantiated; each tier-3 extractor
          is a concrete subclass.\n\n## Verification\n\n- `pytest tests/unit/netbox`
          \u2014 **259 passed** (184 baseline + 75 new) in ~0.2s.\n- Coverage of the
          five target modules is **100%**\n  (`primary_ip`, `config_context`, `custom_field`,
          `secrets`, `gnmic`).\n  `base_extractor.py` reports 83% \u2014 the one uncovered
          line is the `pass`\n  body of the abstract method, which is unreachable
          by definition.\n- Tier-3 suite runs in **0.08s** (`--durations=10`, all
          cases < 5ms).\n- `flake8 tests/unit/netbox/` clean; `black --check` clean
          on all changed\n  files.\n\nNote on the coverage command in the issue: the
          modules are imported as\ntop-level `extractors.*` (because `files/netbox`
          is on `sys.path` per\n`tests/conftest.py`), so the dotted `--cov=files.netbox.extractors.<mod>`\nform
          does not match the imported module name. The path form\n`--cov=files/netbox/extractors`
          measures coverage correctly and is what the\n100% figures above come from.\n\n\U0001F916
          Generated with [Claude Code](https://claude.com/claude-code)"
        change_url: https://github.com/osism/container-image-inventory-reconciler/pull/545
        commit_id: 912e8ecb6e410953bf3960595d03287972bf4bee
        patchset: 912e8ecb6e410953bf3960595d03287972bf4bee
        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: ansible-lint
      jobtags: []
      max_attempts: 3
      message: QWRkIHRpZXIgMyB1bml0IHRlc3RzOiBwcmltYXJ5X2lwLCBjb25maWdfY29udGV4dCwgY3VzdG9tX2ZpZWxkLCBzZWNyZXRzLCBnbm1pYwoKSW1wbGVtZW50cyAjNTQzIChzdWItaXNzdWUgb2YgIzUyNCkuCgpBZGRzIHB1cmUtbG9naWMgdW5pdCB0ZXN0cyBmb3IgdGhlIGZpdmUgdGllci0zICpzbWFsbCBleHRyYWN0b3JzKiB1bmRlcgpgZmlsZXMvbmV0Ym94L2V4dHJhY3RvcnMvYC4gTm8gbGl2ZSBOZXRCb3ggaXMgcmVxdWlyZWQ6IHRoZSB0ZXN0cyBidWlsZApgU2ltcGxlTmFtZXNwYWNlYCBkZXZpY2UvaW50ZXJmYWNlL0lQIHN0dWJzIGFuZCwgZm9yIGBnbm1pY19leHRyYWN0b3JgLCBhCnRpbnkgZmFrZSBweW5ldGJveCBzZXNzaW9uLiBCdWlsZHMgb24gdGhlIHRpZXItMSAoIzUzMSkgYW5kIHRpZXItMiAoIzUzOCkKZm91bmRhdGlvbnMgYW5kIHJldXNlcyBgbWFrZV9kZXZpY2VgIC8gYG1ha2VfdGFnYCBmcm9tCmB0ZXN0cy91bml0L25ldGJveC9jb25mdGVzdC5weWAuCgojIyBDaGFuZ2Ugc2V0IChjb21taXQgb3JkZXIpCgoxLiAqKkFkZCBgbWFrZV9pcGAgLyBgbWFrZV9pbnRlcmZhY2VgIC8gYG1ha2VfZmFrZV9hcGlgIHRlc3QgZmFjdG9yaWVzKiog4oCUCiAgIGV4dGVuZHMgdGhlIG5ldGJveCBjb25mdGVzdCB3aXRoIHRoZSBJUC1hZGRyZXNzLCBpbnRlcmZhY2UgYW5kCiAgIHB5bmV0Ym94LXNlc3Npb24gc2hhcGVzIHRoZSB0aWVyLTMgdGVzdHMgbmVlZC4gYG1ha2VfaW50ZXJmYWNlYCAvCiAgIGBtYWtlX2Zha2VfYXBpYCBtb2RlbCB0aGUgYGRjaW0uaW50ZXJmYWNlcy5maWx0ZXJgIC8KICAgYGlwYW0uaXBfYWRkcmVzc2VzLmZpbHRlcmAgbG9va3VwcyBhbmQgYXJlIHJldXNlZCBieSB0aWVycyA0LTkuCjIuICoqQWRkIHRpZXIgMyB1bml0IHRlc3RzIGZvciBwcmltYXJ5X2lwIGFuZCBjb25maWdfY29udGV4dCoqIOKAlAogICBJUHY0L0lQdjYvbGVnYWN5IHByaW9yaXR5IGFuZCBtYXNrIHN0cmlwcGluZzsgZnJyL25ldHBsYW4vYCIiYCBrZXkKICAgZmlsdGVyaW5nLCBjb3B5LXdpdGhvdXQtbXV0YXRpb24gYW5kIG5vbi1kaWN0IHBhc3N0aHJvdWdoLgozLiAqKkFkZCB0aWVyIDMgdW5pdCB0ZXN0cyBmb3IgY3VzdG9tX2ZpZWxkIGFuZCBzZWNyZXRzKiog4oCUIHJlcXVpcmVkCiAgIGBmaWVsZF9uYW1lYCBndWFyZCwgZmFsc3ktYnV0LXByZXNlbnQgdmFsdWVzLCBgTm9uZWAvZW1wdHkgY29lcmNpb247CiAgIGByZW1vdGVfYm9hcmRfYCAvIGBpcm9uaWNfb3Npc21fYCBwcmVmaXggZmlsdGVyaW5nIChgc3RhcnRzd2l0aGAsIG5vdAogICBzdWJzdHJpbmcpLCBmYWxzeS9ub24tZGljdCBndWFyZHMsIHZhdWx0IHZhbHVlcyBwYXNzZWQgdGhyb3VnaCB1bnRvdWNoZWQuCjQuICoqQWRkIHRpZXIgMyB1bml0IHRlc3RzIGZvciB0aGUgZ25taWMgZXh0cmFjdG9yKiog4oCUIGBfX2luaXRfX2AsCiAgIGBfaGFzX21ldGFsYm94X3RhZ2AsIGBfZ2V0X2hvc3RuYW1lYCwgYF9pc19tYW5hZ2VkX29vYl9pbnRlcmZhY2VgLAogICBgX2dldF9vb2JfaXBgIChpbmNsLiB0aGUgZmlsdGVyLWV4Y2VwdGlvbiBwYXRoIGFuZCBgZGV2aWNlX2lkYCAvCiAgIGBpbnRlcmZhY2VfaWRgIGNhbGwgYXJncykgYW5kIGBleHRyYWN0YCAobm8tdGFnIHNob3J0LWNpcmN1aXQgd2l0aCBubwogICBBUEkgY2FsbHMsIHRhZy1idXQtbm8tSVAsIGZ1bGwgYGdubWljX3RhcmdldHNgIHNoYXBlLCBpbnZlbnRvcnlfaG9zdG5hbWUKICAga2V5KS4gVGhlIG1vZHVsZSBsb2dnZXIgaXMgcGF0Y2hlZCB3aXRoIGEgYE1hZ2ljTW9ja2AgdmlhIGBtb25rZXlwYXRjaGAKICAgb25seSB3aGVyZSBhIGxvZyBhc3NlcnRpb24gZG9jdW1lbnRzIHRoZSBicmFuY2ggdGFrZW4uCjUuICoqQWRkIEJhc2VFeHRyYWN0b3IgYWJzdHJhY3QtY2xhc3Mgc21va2UgdGVzdCoqIOKAlCBgQmFzZUV4dHJhY3RvcmAgY2Fubm90CiAgIGJlIGluc3RhbnRpYXRlZDsgZWFjaCB0aWVyLTMgZXh0cmFjdG9yIGlzIGEgY29uY3JldGUgc3ViY2xhc3MuCgojIyBWZXJpZmljYXRpb24KCi0gYHB5dGVzdCB0ZXN0cy91bml0L25ldGJveGAg4oCUICoqMjU5IHBhc3NlZCoqICgxODQgYmFzZWxpbmUgKyA3NSBuZXcpIGluIH4wLjJzLgotIENvdmVyYWdlIG9mIHRoZSBmaXZlIHRhcmdldCBtb2R1bGVzIGlzICoqMTAwJSoqCiAgKGBwcmltYXJ5X2lwYCwgYGNvbmZpZ19jb250ZXh0YCwgYGN1c3RvbV9maWVsZGAsIGBzZWNyZXRzYCwgYGdubWljYCkuCiAgYGJhc2VfZXh0cmFjdG9yLnB5YCByZXBvcnRzIDgzJSDigJQgdGhlIG9uZSB1bmNvdmVyZWQgbGluZSBpcyB0aGUgYHBhc3NgCiAgYm9keSBvZiB0aGUgYWJzdHJhY3QgbWV0aG9kLCB3aGljaCBpcyB1bnJlYWNoYWJsZSBieSBkZWZpbml0aW9uLgotIFRpZXItMyBzdWl0ZSBydW5zIGluICoqMC4wOHMqKiAoYC0tZHVyYXRpb25zPTEwYCwgYWxsIGNhc2VzIDwgNW1zKS4KLSBgZmxha2U4IHRlc3RzL3VuaXQvbmV0Ym94L2AgY2xlYW47IGBibGFjayAtLWNoZWNrYCBjbGVhbiBvbiBhbGwgY2hhbmdlZAogIGZpbGVzLgoKTm90ZSBvbiB0aGUgY292ZXJhZ2UgY29tbWFuZCBpbiB0aGUgaXNzdWU6IHRoZSBtb2R1bGVzIGFyZSBpbXBvcnRlZCBhcwp0b3AtbGV2ZWwgYGV4dHJhY3RvcnMuKmAgKGJlY2F1c2UgYGZpbGVzL25ldGJveGAgaXMgb24gYHN5cy5wYXRoYCBwZXIKYHRlc3RzL2NvbmZ0ZXN0LnB5YCksIHNvIHRoZSBkb3R0ZWQgYC0tY292PWZpbGVzLm5ldGJveC5leHRyYWN0b3JzLjxtb2Q+YApmb3JtIGRvZXMgbm90IG1hdGNoIHRoZSBpbXBvcnRlZCBtb2R1bGUgbmFtZS4gVGhlIHBhdGggZm9ybQpgLS1jb3Y9ZmlsZXMvbmV0Ym94L2V4dHJhY3RvcnNgIG1lYXN1cmVzIGNvdmVyYWdlIGNvcnJlY3RseSBhbmQgaXMgd2hhdCB0aGUKMTAwJSBmaWd1cmVzIGFib3ZlIGNvbWUgZnJvbS4KCvCfpJYgR2VuZXJhdGVkIHdpdGggW0NsYXVkZSBDb2RlXShodHRwczovL2NsYXVkZS5jb20vY2xhdWRlLWNvZGUp
      patchset: 912e8ecb6e410953bf3960595d03287972bf4bee
      pipeline: check
      playbook_context:
        playbook_projects:
          trusted/project_0/github.com/osism/zuul-config:
            canonical_name: github.com/osism/zuul-config
            checkout: main
            commit: 688445d15ac2c497396b682f69c57ccd484f5f25
          trusted/project_1/github.com/osism/openinfra-zuul-jobs:
            canonical_name: github.com/osism/openinfra-zuul-jobs
            checkout: master
            commit: 038dd8b856c62af4433c8477c5cb3d0480847059
          trusted/project_2/github.com/osism/zuul-jobs:
            canonical_name: github.com/osism/zuul-jobs
            checkout: main
            commit: 0c74c57cedff2b36bb37ca68a5338d1c49991496
          untrusted/project_0/github.com/osism/zuul-jobs:
            canonical_name: github.com/osism/zuul-jobs
            checkout: main
            commit: 0c74c57cedff2b36bb37ca68a5338d1c49991496
          untrusted/project_1/github.com/osism/zuul-config:
            canonical_name: github.com/osism/zuul-config
            checkout: main
            commit: 688445d15ac2c497396b682f69c57ccd484f5f25
          untrusted/project_2/github.com/osism/openinfra-zuul-jobs:
            canonical_name: github.com/osism/openinfra-zuul-jobs
            checkout: master
            commit: 038dd8b856c62af4433c8477c5cb3d0480847059
        playbooks:
        - path: untrusted/project_0/github.com/osism/zuul-jobs/playbooks/ansible-lint/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: null
      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: f3e07b47c01154fa64af09bdd226553dec15c903
          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/545/head
      resources: {}
      tenant: osism
      timeout: 1800
      topic: null
      voting: true
