all:
  children:
    zuul_unreachable:
      hosts: {}
  hosts:
    debian-bookworm:
      ansible_connection: ssh
      ansible_host: 2a13:1a81:8000:3124:f816:3eff:fe08:67ac
      ansible_port: 22
      ansible_python_interpreter: auto
      ansible_user: zuul
      nodepool:
        az: nova
        cloud: regiocloud-a-ci
        external_id: 7f8bf58b-1ce0-4f00-9445-b1d600a2a5e7
        host_id: df70f2a3f3d0c26428f22685cfc722ebc48099d99e7332c39e017195
        interface_ip: 2a13:1a81:8000:3124:f816:3eff:fe08:67ac
        label: debian-bookworm
        node_properties: {}
        private_ipv4: 10.128.0.110
        private_ipv6: null
        provider: regiocloud-a
        public_ipv4: 81.163.193.63
        public_ipv6: 2a13:1a81:8000:3124:f816:3eff:fe08:67ac
        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/container-image-inventory-reconciler/.zuul.yaml@main#108>'
      ansible_version: '9'
      attempts: 1
      branch: main
      build: dc41a426c68a46ea911d42b1832b064c
      build_refs:
      - branch: main
        change: '537'
        change_message: "Add tier 1 unit tests: utils, exceptions, cache, retry_utils,
          config\n\nCloses #531\n\n## Summary\n\nTier 1 of the per-module unit-test
          effort tracked under #524 \u2014 the pure-logic\nmodules under `files/netbox/`
          that need no NetBox stubs. Adds 86 tests across\nfive new files, building
          on the pytest foundation from #526.\n\nAll tests are pure-logic: no network,
          no real filesystem writes outside\n`tmp_path`, no `time.sleep`. The suite
          runs in ~0.1s.\n\n## Change set (commit order)\n\n1. **`test_exceptions.py`**
          \u2014 NetBox exception hierarchy: subclass relationships,\n   message preservation,
          and `except NetBoxException` catching both subclasses.\n2. **`test_utils.py`**
          \u2014 `get_inventory_hostname` (custom-field hit, coercion,\n   fallbacks),
          `deep_merge` (override-wins / recursive-merge / list semantics /\n   no
          base mutation), `setup_logging` (level selection, `remove()`-before-`add()`,\n
          \  idempotency). The loguru `logger` and dynaconf `SETTINGS` are patched.\n3.
          **`test_cache.py`** \u2014 `CacheManager` init / get / set / clear / invalidate,\n
          \  with `time.time()` driven through a patched mutable clock for deterministic\n
          \  TTL expiry \u2014 the suite never sleeps.\n4. **`test_retry_utils.py`**
          \u2014 `retry_on_api_error` (success, retry-then-success,\n   exhaustion,
          non-retryable fast-fail, exponential-backoff delay sequence,\n   `@wraps`)
          and `_is_retryable_error` classification. `time.sleep` is patched\n   out
          and the captured delays are asserted.\n5. **`test_config.py`** \u2014 default-constant
          regression guards, `Config._read_secret`\n   (via a patched `config.Path`
          pointing at `tmp_path`, so `/run/secrets` is never\n   touched), and `Config.from_environment`
          (required-var errors, secret fallback,\n   whitespace stripping, defaults,
          reconciler-mode validation, role normalization,\n   filter pass-through).
          An autouse fixture installs a `FakeSettings` dict wrapper\n   on `config.SETTINGS`
          for every test, so the suite neither depends on nor leaks\n   real environment
          variables.\n\n## Verification\n\n- `pytest tests/unit` \u2014 86 passed
          in ~0.1s; `--durations` confirms no test sleeps.\n- `pytest --cov=utils
          --cov=exceptions --cov=cache --cov=retry_utils --cov=config`\n  \u2014 99%
          line coverage of the five targeted modules. The single uncovered line is\n
          \ `retry_utils.py:67` (`raise last_exception`), which is unreachable because
          the\n  retry loop always returns or raises first; left untouched as out
          of scope.\n- `flake8` and `black --check` \u2014 clean.\n\n## Deviations
          from the issue\n\n- **Test location.** The issue specifies `files/netbox/tests/unit/`,
          but the\n  tier 0 foundation (#526) deliberately placed the suite at the
          repo root in\n  `tests/unit/netbox/` so the `Containerfile` `COPY` of `files/netbox/`
          does not\n  pull tests into the image. These files follow the established
          `tests/unit/netbox/`\n  layout.\n- **Patch targets.** `files/netbox/` is
          not an importable package; `tests/conftest.py`\n  puts `files/netbox/` on
          `sys.path`, so modules import as `config`, `utils`, etc.\n  Monkeypatch
          targets are `config.SETTINGS` / `utils.logger` / `config.Path` rather\n
          \ than the issue's `files.netbox.*` dotted paths, and coverage uses `--cov=config`\n
          \ etc. for the same reason.\n\n\U0001F916 Generated with [Claude Code](https://claude.com/claude-code)"
        change_url: https://github.com/osism/container-image-inventory-reconciler/pull/537
        commit_id: 8e85511eb412f76dfffb443c371638eda8098069
        patchset: 8e85511eb412f76dfffb443c371638eda8098069
        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: 99d1890a4c8b43d68b364df60da17e9d
      buildset_refs:
      - branch: main
        change: '537'
        change_message: "Add tier 1 unit tests: utils, exceptions, cache, retry_utils,
          config\n\nCloses #531\n\n## Summary\n\nTier 1 of the per-module unit-test
          effort tracked under #524 \u2014 the pure-logic\nmodules under `files/netbox/`
          that need no NetBox stubs. Adds 86 tests across\nfive new files, building
          on the pytest foundation from #526.\n\nAll tests are pure-logic: no network,
          no real filesystem writes outside\n`tmp_path`, no `time.sleep`. The suite
          runs in ~0.1s.\n\n## Change set (commit order)\n\n1. **`test_exceptions.py`**
          \u2014 NetBox exception hierarchy: subclass relationships,\n   message preservation,
          and `except NetBoxException` catching both subclasses.\n2. **`test_utils.py`**
          \u2014 `get_inventory_hostname` (custom-field hit, coercion,\n   fallbacks),
          `deep_merge` (override-wins / recursive-merge / list semantics /\n   no
          base mutation), `setup_logging` (level selection, `remove()`-before-`add()`,\n
          \  idempotency). The loguru `logger` and dynaconf `SETTINGS` are patched.\n3.
          **`test_cache.py`** \u2014 `CacheManager` init / get / set / clear / invalidate,\n
          \  with `time.time()` driven through a patched mutable clock for deterministic\n
          \  TTL expiry \u2014 the suite never sleeps.\n4. **`test_retry_utils.py`**
          \u2014 `retry_on_api_error` (success, retry-then-success,\n   exhaustion,
          non-retryable fast-fail, exponential-backoff delay sequence,\n   `@wraps`)
          and `_is_retryable_error` classification. `time.sleep` is patched\n   out
          and the captured delays are asserted.\n5. **`test_config.py`** \u2014 default-constant
          regression guards, `Config._read_secret`\n   (via a patched `config.Path`
          pointing at `tmp_path`, so `/run/secrets` is never\n   touched), and `Config.from_environment`
          (required-var errors, secret fallback,\n   whitespace stripping, defaults,
          reconciler-mode validation, role normalization,\n   filter pass-through).
          An autouse fixture installs a `FakeSettings` dict wrapper\n   on `config.SETTINGS`
          for every test, so the suite neither depends on nor leaks\n   real environment
          variables.\n\n## Verification\n\n- `pytest tests/unit` \u2014 86 passed
          in ~0.1s; `--durations` confirms no test sleeps.\n- `pytest --cov=utils
          --cov=exceptions --cov=cache --cov=retry_utils --cov=config`\n  \u2014 99%
          line coverage of the five targeted modules. The single uncovered line is\n
          \ `retry_utils.py:67` (`raise last_exception`), which is unreachable because
          the\n  retry loop always returns or raises first; left untouched as out
          of scope.\n- `flake8` and `black --check` \u2014 clean.\n\n## Deviations
          from the issue\n\n- **Test location.** The issue specifies `files/netbox/tests/unit/`,
          but the\n  tier 0 foundation (#526) deliberately placed the suite at the
          repo root in\n  `tests/unit/netbox/` so the `Containerfile` `COPY` of `files/netbox/`
          does not\n  pull tests into the image. These files follow the established
          `tests/unit/netbox/`\n  layout.\n- **Patch targets.** `files/netbox/` is
          not an importable package; `tests/conftest.py`\n  puts `files/netbox/` on
          `sys.path`, so modules import as `config`, `utils`, etc.\n  Monkeypatch
          targets are `config.SETTINGS` / `utils.logger` / `config.Path` rather\n
          \ than the issue's `files.netbox.*` dotted paths, and coverage uses `--cov=config`\n
          \ etc. for the same reason.\n\n\U0001F916 Generated with [Claude Code](https://claude.com/claude-code)"
        change_url: https://github.com/osism/container-image-inventory-reconciler/pull/537
        commit_id: 8e85511eb412f76dfffb443c371638eda8098069
        patchset: 8e85511eb412f76dfffb443c371638eda8098069
        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: '537'
      change_message: "Add tier 1 unit tests: utils, exceptions, cache, retry_utils,
        config\n\nCloses #531\n\n## Summary\n\nTier 1 of the per-module unit-test
        effort tracked under #524 \u2014 the pure-logic\nmodules under `files/netbox/`
        that need no NetBox stubs. Adds 86 tests across\nfive new files, building
        on the pytest foundation from #526.\n\nAll tests are pure-logic: no network,
        no real filesystem writes outside\n`tmp_path`, no `time.sleep`. The suite
        runs in ~0.1s.\n\n## Change set (commit order)\n\n1. **`test_exceptions.py`**
        \u2014 NetBox exception hierarchy: subclass relationships,\n   message preservation,
        and `except NetBoxException` catching both subclasses.\n2. **`test_utils.py`**
        \u2014 `get_inventory_hostname` (custom-field hit, coercion,\n   fallbacks),
        `deep_merge` (override-wins / recursive-merge / list semantics /\n   no base
        mutation), `setup_logging` (level selection, `remove()`-before-`add()`,\n
        \  idempotency). The loguru `logger` and dynaconf `SETTINGS` are patched.\n3.
        **`test_cache.py`** \u2014 `CacheManager` init / get / set / clear / invalidate,\n
        \  with `time.time()` driven through a patched mutable clock for deterministic\n
        \  TTL expiry \u2014 the suite never sleeps.\n4. **`test_retry_utils.py`**
        \u2014 `retry_on_api_error` (success, retry-then-success,\n   exhaustion,
        non-retryable fast-fail, exponential-backoff delay sequence,\n   `@wraps`)
        and `_is_retryable_error` classification. `time.sleep` is patched\n   out
        and the captured delays are asserted.\n5. **`test_config.py`** \u2014 default-constant
        regression guards, `Config._read_secret`\n   (via a patched `config.Path`
        pointing at `tmp_path`, so `/run/secrets` is never\n   touched), and `Config.from_environment`
        (required-var errors, secret fallback,\n   whitespace stripping, defaults,
        reconciler-mode validation, role normalization,\n   filter pass-through).
        An autouse fixture installs a `FakeSettings` dict wrapper\n   on `config.SETTINGS`
        for every test, so the suite neither depends on nor leaks\n   real environment
        variables.\n\n## Verification\n\n- `pytest tests/unit` \u2014 86 passed in
        ~0.1s; `--durations` confirms no test sleeps.\n- `pytest --cov=utils --cov=exceptions
        --cov=cache --cov=retry_utils --cov=config`\n  \u2014 99% line coverage of
        the five targeted modules. The single uncovered line is\n  `retry_utils.py:67`
        (`raise last_exception`), which is unreachable because the\n  retry loop always
        returns or raises first; left untouched as out of scope.\n- `flake8` and `black
        --check` \u2014 clean.\n\n## Deviations from the issue\n\n- **Test location.**
        The issue specifies `files/netbox/tests/unit/`, but the\n  tier 0 foundation
        (#526) deliberately placed the suite at the repo root in\n  `tests/unit/netbox/`
        so the `Containerfile` `COPY` of `files/netbox/` does not\n  pull tests into
        the image. These files follow the established `tests/unit/netbox/`\n  layout.\n-
        **Patch targets.** `files/netbox/` is not an importable package; `tests/conftest.py`\n
        \ puts `files/netbox/` on `sys.path`, so modules import as `config`, `utils`,
        etc.\n  Monkeypatch targets are `config.SETTINGS` / `utils.logger` / `config.Path`
        rather\n  than the issue's `files.netbox.*` dotted paths, and coverage uses
        `--cov=config`\n  etc. for the same reason.\n\n\U0001F916 Generated with [Claude
        Code](https://claude.com/claude-code)"
      change_url: https://github.com/osism/container-image-inventory-reconciler/pull/537
      child_jobs: []
      commit_id: 8e85511eb412f76dfffb443c371638eda8098069
      event_id: f48b77d0-592c-11f1-89d5-7d0dab963dcd
      executor:
        hostname: 521e9411259a
        inventory_file: /var/lib/zuul/builds/dc41a426c68a46ea911d42b1832b064c/ansible/inventory.yaml
        log_root: /var/lib/zuul/builds/dc41a426c68a46ea911d42b1832b064c/work/logs
        result_data_file: /var/lib/zuul/builds/dc41a426c68a46ea911d42b1832b064c/work/results.json
        src_root: /var/lib/zuul/builds/dc41a426c68a46ea911d42b1832b064c/work/src
        work_root: /var/lib/zuul/builds/dc41a426c68a46ea911d42b1832b064c/work
      include_vars: []
      items:
      - branch: main
        change: '537'
        change_message: "Add tier 1 unit tests: utils, exceptions, cache, retry_utils,
          config\n\nCloses #531\n\n## Summary\n\nTier 1 of the per-module unit-test
          effort tracked under #524 \u2014 the pure-logic\nmodules under `files/netbox/`
          that need no NetBox stubs. Adds 86 tests across\nfive new files, building
          on the pytest foundation from #526.\n\nAll tests are pure-logic: no network,
          no real filesystem writes outside\n`tmp_path`, no `time.sleep`. The suite
          runs in ~0.1s.\n\n## Change set (commit order)\n\n1. **`test_exceptions.py`**
          \u2014 NetBox exception hierarchy: subclass relationships,\n   message preservation,
          and `except NetBoxException` catching both subclasses.\n2. **`test_utils.py`**
          \u2014 `get_inventory_hostname` (custom-field hit, coercion,\n   fallbacks),
          `deep_merge` (override-wins / recursive-merge / list semantics /\n   no
          base mutation), `setup_logging` (level selection, `remove()`-before-`add()`,\n
          \  idempotency). The loguru `logger` and dynaconf `SETTINGS` are patched.\n3.
          **`test_cache.py`** \u2014 `CacheManager` init / get / set / clear / invalidate,\n
          \  with `time.time()` driven through a patched mutable clock for deterministic\n
          \  TTL expiry \u2014 the suite never sleeps.\n4. **`test_retry_utils.py`**
          \u2014 `retry_on_api_error` (success, retry-then-success,\n   exhaustion,
          non-retryable fast-fail, exponential-backoff delay sequence,\n   `@wraps`)
          and `_is_retryable_error` classification. `time.sleep` is patched\n   out
          and the captured delays are asserted.\n5. **`test_config.py`** \u2014 default-constant
          regression guards, `Config._read_secret`\n   (via a patched `config.Path`
          pointing at `tmp_path`, so `/run/secrets` is never\n   touched), and `Config.from_environment`
          (required-var errors, secret fallback,\n   whitespace stripping, defaults,
          reconciler-mode validation, role normalization,\n   filter pass-through).
          An autouse fixture installs a `FakeSettings` dict wrapper\n   on `config.SETTINGS`
          for every test, so the suite neither depends on nor leaks\n   real environment
          variables.\n\n## Verification\n\n- `pytest tests/unit` \u2014 86 passed
          in ~0.1s; `--durations` confirms no test sleeps.\n- `pytest --cov=utils
          --cov=exceptions --cov=cache --cov=retry_utils --cov=config`\n  \u2014 99%
          line coverage of the five targeted modules. The single uncovered line is\n
          \ `retry_utils.py:67` (`raise last_exception`), which is unreachable because
          the\n  retry loop always returns or raises first; left untouched as out
          of scope.\n- `flake8` and `black --check` \u2014 clean.\n\n## Deviations
          from the issue\n\n- **Test location.** The issue specifies `files/netbox/tests/unit/`,
          but the\n  tier 0 foundation (#526) deliberately placed the suite at the
          repo root in\n  `tests/unit/netbox/` so the `Containerfile` `COPY` of `files/netbox/`
          does not\n  pull tests into the image. These files follow the established
          `tests/unit/netbox/`\n  layout.\n- **Patch targets.** `files/netbox/` is
          not an importable package; `tests/conftest.py`\n  puts `files/netbox/` on
          `sys.path`, so modules import as `config`, `utils`, etc.\n  Monkeypatch
          targets are `config.SETTINGS` / `utils.logger` / `config.Path` rather\n
          \ than the issue's `files.netbox.*` dotted paths, and coverage uses `--cov=config`\n
          \ etc. for the same reason.\n\n\U0001F916 Generated with [Claude Code](https://claude.com/claude-code)"
        change_url: https://github.com/osism/container-image-inventory-reconciler/pull/537
        commit_id: 8e85511eb412f76dfffb443c371638eda8098069
        patchset: 8e85511eb412f76dfffb443c371638eda8098069
        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: hadolint
      jobtags: []
      max_attempts: 3
      message: QWRkIHRpZXIgMSB1bml0IHRlc3RzOiB1dGlscywgZXhjZXB0aW9ucywgY2FjaGUsIHJldHJ5X3V0aWxzLCBjb25maWcKCkNsb3NlcyAjNTMxCgojIyBTdW1tYXJ5CgpUaWVyIDEgb2YgdGhlIHBlci1tb2R1bGUgdW5pdC10ZXN0IGVmZm9ydCB0cmFja2VkIHVuZGVyICM1MjQg4oCUIHRoZSBwdXJlLWxvZ2ljCm1vZHVsZXMgdW5kZXIgYGZpbGVzL25ldGJveC9gIHRoYXQgbmVlZCBubyBOZXRCb3ggc3R1YnMuIEFkZHMgODYgdGVzdHMgYWNyb3NzCmZpdmUgbmV3IGZpbGVzLCBidWlsZGluZyBvbiB0aGUgcHl0ZXN0IGZvdW5kYXRpb24gZnJvbSAjNTI2LgoKQWxsIHRlc3RzIGFyZSBwdXJlLWxvZ2ljOiBubyBuZXR3b3JrLCBubyByZWFsIGZpbGVzeXN0ZW0gd3JpdGVzIG91dHNpZGUKYHRtcF9wYXRoYCwgbm8gYHRpbWUuc2xlZXBgLiBUaGUgc3VpdGUgcnVucyBpbiB+MC4xcy4KCiMjIENoYW5nZSBzZXQgKGNvbW1pdCBvcmRlcikKCjEuICoqYHRlc3RfZXhjZXB0aW9ucy5weWAqKiDigJQgTmV0Qm94IGV4Y2VwdGlvbiBoaWVyYXJjaHk6IHN1YmNsYXNzIHJlbGF0aW9uc2hpcHMsCiAgIG1lc3NhZ2UgcHJlc2VydmF0aW9uLCBhbmQgYGV4Y2VwdCBOZXRCb3hFeGNlcHRpb25gIGNhdGNoaW5nIGJvdGggc3ViY2xhc3Nlcy4KMi4gKipgdGVzdF91dGlscy5weWAqKiDigJQgYGdldF9pbnZlbnRvcnlfaG9zdG5hbWVgIChjdXN0b20tZmllbGQgaGl0LCBjb2VyY2lvbiwKICAgZmFsbGJhY2tzKSwgYGRlZXBfbWVyZ2VgIChvdmVycmlkZS13aW5zIC8gcmVjdXJzaXZlLW1lcmdlIC8gbGlzdCBzZW1hbnRpY3MgLwogICBubyBiYXNlIG11dGF0aW9uKSwgYHNldHVwX2xvZ2dpbmdgIChsZXZlbCBzZWxlY3Rpb24sIGByZW1vdmUoKWAtYmVmb3JlLWBhZGQoKWAsCiAgIGlkZW1wb3RlbmN5KS4gVGhlIGxvZ3VydSBgbG9nZ2VyYCBhbmQgZHluYWNvbmYgYFNFVFRJTkdTYCBhcmUgcGF0Y2hlZC4KMy4gKipgdGVzdF9jYWNoZS5weWAqKiDigJQgYENhY2hlTWFuYWdlcmAgaW5pdCAvIGdldCAvIHNldCAvIGNsZWFyIC8gaW52YWxpZGF0ZSwKICAgd2l0aCBgdGltZS50aW1lKClgIGRyaXZlbiB0aHJvdWdoIGEgcGF0Y2hlZCBtdXRhYmxlIGNsb2NrIGZvciBkZXRlcm1pbmlzdGljCiAgIFRUTCBleHBpcnkg4oCUIHRoZSBzdWl0ZSBuZXZlciBzbGVlcHMuCjQuICoqYHRlc3RfcmV0cnlfdXRpbHMucHlgKiog4oCUIGByZXRyeV9vbl9hcGlfZXJyb3JgIChzdWNjZXNzLCByZXRyeS10aGVuLXN1Y2Nlc3MsCiAgIGV4aGF1c3Rpb24sIG5vbi1yZXRyeWFibGUgZmFzdC1mYWlsLCBleHBvbmVudGlhbC1iYWNrb2ZmIGRlbGF5IHNlcXVlbmNlLAogICBgQHdyYXBzYCkgYW5kIGBfaXNfcmV0cnlhYmxlX2Vycm9yYCBjbGFzc2lmaWNhdGlvbi4gYHRpbWUuc2xlZXBgIGlzIHBhdGNoZWQKICAgb3V0IGFuZCB0aGUgY2FwdHVyZWQgZGVsYXlzIGFyZSBhc3NlcnRlZC4KNS4gKipgdGVzdF9jb25maWcucHlgKiog4oCUIGRlZmF1bHQtY29uc3RhbnQgcmVncmVzc2lvbiBndWFyZHMsIGBDb25maWcuX3JlYWRfc2VjcmV0YAogICAodmlhIGEgcGF0Y2hlZCBgY29uZmlnLlBhdGhgIHBvaW50aW5nIGF0IGB0bXBfcGF0aGAsIHNvIGAvcnVuL3NlY3JldHNgIGlzIG5ldmVyCiAgIHRvdWNoZWQpLCBhbmQgYENvbmZpZy5mcm9tX2Vudmlyb25tZW50YCAocmVxdWlyZWQtdmFyIGVycm9ycywgc2VjcmV0IGZhbGxiYWNrLAogICB3aGl0ZXNwYWNlIHN0cmlwcGluZywgZGVmYXVsdHMsIHJlY29uY2lsZXItbW9kZSB2YWxpZGF0aW9uLCByb2xlIG5vcm1hbGl6YXRpb24sCiAgIGZpbHRlciBwYXNzLXRocm91Z2gpLiBBbiBhdXRvdXNlIGZpeHR1cmUgaW5zdGFsbHMgYSBgRmFrZVNldHRpbmdzYCBkaWN0IHdyYXBwZXIKICAgb24gYGNvbmZpZy5TRVRUSU5HU2AgZm9yIGV2ZXJ5IHRlc3QsIHNvIHRoZSBzdWl0ZSBuZWl0aGVyIGRlcGVuZHMgb24gbm9yIGxlYWtzCiAgIHJlYWwgZW52aXJvbm1lbnQgdmFyaWFibGVzLgoKIyMgVmVyaWZpY2F0aW9uCgotIGBweXRlc3QgdGVzdHMvdW5pdGAg4oCUIDg2IHBhc3NlZCBpbiB+MC4xczsgYC0tZHVyYXRpb25zYCBjb25maXJtcyBubyB0ZXN0IHNsZWVwcy4KLSBgcHl0ZXN0IC0tY292PXV0aWxzIC0tY292PWV4Y2VwdGlvbnMgLS1jb3Y9Y2FjaGUgLS1jb3Y9cmV0cnlfdXRpbHMgLS1jb3Y9Y29uZmlnYAogIOKAlCA5OSUgbGluZSBjb3ZlcmFnZSBvZiB0aGUgZml2ZSB0YXJnZXRlZCBtb2R1bGVzLiBUaGUgc2luZ2xlIHVuY292ZXJlZCBsaW5lIGlzCiAgYHJldHJ5X3V0aWxzLnB5OjY3YCAoYHJhaXNlIGxhc3RfZXhjZXB0aW9uYCksIHdoaWNoIGlzIHVucmVhY2hhYmxlIGJlY2F1c2UgdGhlCiAgcmV0cnkgbG9vcCBhbHdheXMgcmV0dXJucyBvciByYWlzZXMgZmlyc3Q7IGxlZnQgdW50b3VjaGVkIGFzIG91dCBvZiBzY29wZS4KLSBgZmxha2U4YCBhbmQgYGJsYWNrIC0tY2hlY2tgIOKAlCBjbGVhbi4KCiMjIERldmlhdGlvbnMgZnJvbSB0aGUgaXNzdWUKCi0gKipUZXN0IGxvY2F0aW9uLioqIFRoZSBpc3N1ZSBzcGVjaWZpZXMgYGZpbGVzL25ldGJveC90ZXN0cy91bml0L2AsIGJ1dCB0aGUKICB0aWVyIDAgZm91bmRhdGlvbiAoIzUyNikgZGVsaWJlcmF0ZWx5IHBsYWNlZCB0aGUgc3VpdGUgYXQgdGhlIHJlcG8gcm9vdCBpbgogIGB0ZXN0cy91bml0L25ldGJveC9gIHNvIHRoZSBgQ29udGFpbmVyZmlsZWAgYENPUFlgIG9mIGBmaWxlcy9uZXRib3gvYCBkb2VzIG5vdAogIHB1bGwgdGVzdHMgaW50byB0aGUgaW1hZ2UuIFRoZXNlIGZpbGVzIGZvbGxvdyB0aGUgZXN0YWJsaXNoZWQgYHRlc3RzL3VuaXQvbmV0Ym94L2AKICBsYXlvdXQuCi0gKipQYXRjaCB0YXJnZXRzLioqIGBmaWxlcy9uZXRib3gvYCBpcyBub3QgYW4gaW1wb3J0YWJsZSBwYWNrYWdlOyBgdGVzdHMvY29uZnRlc3QucHlgCiAgcHV0cyBgZmlsZXMvbmV0Ym94L2Agb24gYHN5cy5wYXRoYCwgc28gbW9kdWxlcyBpbXBvcnQgYXMgYGNvbmZpZ2AsIGB1dGlsc2AsIGV0Yy4KICBNb25rZXlwYXRjaCB0YXJnZXRzIGFyZSBgY29uZmlnLlNFVFRJTkdTYCAvIGB1dGlscy5sb2dnZXJgIC8gYGNvbmZpZy5QYXRoYCByYXRoZXIKICB0aGFuIHRoZSBpc3N1ZSdzIGBmaWxlcy5uZXRib3guKmAgZG90dGVkIHBhdGhzLCBhbmQgY292ZXJhZ2UgdXNlcyBgLS1jb3Y9Y29uZmlnYAogIGV0Yy4gZm9yIHRoZSBzYW1lIHJlYXNvbi4KCvCfpJYgR2VuZXJhdGVkIHdpdGggW0NsYXVkZSBDb2RlXShodHRwczovL2NsYXVkZS5jb20vY2xhdWRlLWNvZGUp
      patchset: 8e85511eb412f76dfffb443c371638eda8098069
      pipeline: check
      playbook_context:
        playbook_projects:
          trusted/project_0/github.com/osism/zuul-config:
            canonical_name: github.com/osism/zuul-config
            checkout: main
            commit: 019f0261a526db7d8989ff1abefc2299a8c0ffbc
          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: 019f0261a526db7d8989ff1abefc2299a8c0ffbc
          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/hadolint/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: 7c633fa1e8b3da6b7895d27064d049a792466236
          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/537/head
      resources: {}
      tenant: osism
      timeout: 1800
      topic: null
      voting: true
