all:
  children:
    zuul_unreachable:
      hosts: {}
  hosts:
    debian-bookworm:
      ansible_connection: ssh
      ansible_host: 2a13:1a81:8000:3124:f816:3eff:fe3e:7662
      ansible_port: 22
      ansible_python_interpreter: auto
      ansible_user: zuul
      nodepool:
        az: nova
        cloud: regiocloud-a-ci
        external_id: 9d2a57d2-d125-41d3-81c3-b2baad6a9df0
        host_id: 4ba4344415ca7057d9956ea5de826bbc0b830981e82c0e0f191fa07b
        interface_ip: 2a13:1a81:8000:3124:f816:3eff:fe3e:7662
        label: debian-bookworm
        node_properties: {}
        private_ipv4: 10.128.7.40
        private_ipv6: null
        provider: regiocloud-a
        public_ipv4: 81.163.193.238
        public_ipv6: 2a13:1a81:8000:3124:f816:3eff:fe3e:7662
        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/netbox-manager/.zuul.yaml@main#39>'
      ansible_version: '9'
      attempts: 1
      branch: main
      build: 65ccc40d3f6a486e9879bce003a33389
      build_refs:
      - branch: main
        change: '263'
        change_message: "Add end-to-end (E2E) test: deploy NetBox on kind (Helm) +
          apply example/ + verify via API\n\nCloses #262\n\n## Summary\n\nAdds a real
          **end-to-end (E2E) test** that exercises the full `netbox-manager` path:
          deploy a fresh NetBox on a local **kind** cluster (via the official `netbox-chart`
          Helm chart), apply the bundled `example/` data with `netbox-manager run`,
          and verify the result through the NetBox REST API. The heavy job runs **nightly
          only** (`periodic-daily`); the fast PR `check` gate (linters + unit tests)
          is left unchanged.\n\nThis closes the gap called out in the issue: until
          now only `tests/unit/` existed (see #232), which never talks to a real NetBox,
          so regressions in the actual apply path (`netbox.netbox` modules, DTL import,
          ordering/parallelism, primary-IP wiring) could slip through.\n\n## Change
          set, in commit order\n\nThe branch builds the harness bottom-up \u2014 fixtures
          first, then orchestration, then the make targets, the Zuul wiring, and finally
          the docs.\n\n1. **`ea9cb18` Add E2E API verification fixtures and script**
          \u2014 `tests/e2e/expected.py` pins the objects, counts, and relations that
          `netbox-manager` must create from `example/`; `tests/e2e/verify.py` is a
          standalone `pynetbox` client that asserts them and exits non-zero on any
          mismatch. It is deliberately *not* a `pytest` test, so the fast `pytest
          tests/unit` gate never collects it.\n2. **`87c8004` Add E2E kind+NetBox
          deploy and orchestration scripts** \u2014 `deploy_netbox.sh` creates the
          kind cluster and installs the pinned `netbox-chart` with an ephemeral, single-replica
          config and a deterministic superuser API token (reusable standalone for
          `make e2e-up`). `run.sh` wires phases 1\u20133 together (deploy \u2192 port-forward
          \u2192 `netbox-manager run --fail-fast` \u2192 `verify.py` \u2192 `netbox-manager
          validate`) with a `trap` that tears the cluster down on every exit path,
          so a failed run never leaks a cluster.\n3. **`bfa6c3f` Add make e2e/e2e-up/e2e-down
          targets** \u2014 one-command local reproducibility: `make e2e` runs the
          full provision/apply/assert/teardown cycle, `make e2e-up` provisions and
          leaves it running, `make e2e-down` deletes the cluster. `CLUSTER_NAME` is
          overridable and exported to the scripts.\n4. **`7949c65` Add Zuul pre-run
          and run playbooks for the E2E job** \u2014 `pre-e2e.yml` installs the pinned
          kind/kubectl/Helm binaries, ensures Docker is running, and reuses the `ensure-pip`/`ensure-pipenv`
          roles like the unit-test pre-run; `test-e2e.yml` installs the package into
          the pipenv venv and runs `make e2e`, mirroring `test-unit.yml`.\n5. **`b6cb900`
          Add netbox-manager-e2e job to periodic-daily pipeline** \u2014 defines the
          job and runs it nightly only; the PR `check` gate stays fast and unchanged.\n6.
          **`c9e93e3` Document the E2E test harness and prerequisites** \u2014 `tests/e2e/README.md`
          (prerequisites, `make` usage, env overrides, what phase 3 asserts, how to
          re-pin `expected.py`), a Testing-section pointer in `README.md`, and an
          Unreleased CHANGELOG entry referencing #262.\n\n## Divergences from the
          issue\n\n- **Interface count is `267`, not the issue's soft `~77`.** The
          issue explicitly flagged its `~` figures as `grep`-derived starting points
          to confirm against a baseline. The pinned `267` is `250` interfaces that
          NetBox auto-instantiates from the imported device-type interface templates
          plus the `17` net-new interfaces the resources add, confirmed against a
          baseline run (see `ea9cb18`).\n- **Other counts (cables, IPs, MACs, etc.)
          are pinned in `expected.py`** from a baseline rather than the issue's soft
          estimates, exactly as the issue's acceptance criteria asked (\"expected
          values pinned in `tests/e2e/expected.py`\").\n\nEverything else follows
          the issue's proposed architecture and file layout: three phases behind `make
          e2e`/`run.sh`, deterministic `superuser.apiToken`, ephemeral `persistence.enabled=false`
          + `replicaCount=1`, a pinned chart version, periodic-only CI placement,
          and the documented local prerequisites.\n\n## Reviewer notes\n\nThis is
          a draft. The job is `periodic-daily` only, so opening this PR does not trigger
          the E2E run; the first real signal will come from the nightly pipeline (or
          a manual `make e2e` on a Docker-capable host).\n\n---\n\n_Implemented by
          [planwerk-review](https://github.com/planwerk/planwerk-review) b245b5f with
          Claude:claude-opus-4-8_\n"
        change_url: https://github.com/osism/netbox-manager/pull/263
        commit_id: df653c664ffefb4cf46f434bc7c39e3341e8fd3d
        patchset: df653c664ffefb4cf46f434bc7c39e3341e8fd3d
        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: c6d541bbf9c0476b99ff0dbe077f0100
      buildset_refs:
      - branch: main
        change: '263'
        change_message: "Add end-to-end (E2E) test: deploy NetBox on kind (Helm) +
          apply example/ + verify via API\n\nCloses #262\n\n## Summary\n\nAdds a real
          **end-to-end (E2E) test** that exercises the full `netbox-manager` path:
          deploy a fresh NetBox on a local **kind** cluster (via the official `netbox-chart`
          Helm chart), apply the bundled `example/` data with `netbox-manager run`,
          and verify the result through the NetBox REST API. The heavy job runs **nightly
          only** (`periodic-daily`); the fast PR `check` gate (linters + unit tests)
          is left unchanged.\n\nThis closes the gap called out in the issue: until
          now only `tests/unit/` existed (see #232), which never talks to a real NetBox,
          so regressions in the actual apply path (`netbox.netbox` modules, DTL import,
          ordering/parallelism, primary-IP wiring) could slip through.\n\n## Change
          set, in commit order\n\nThe branch builds the harness bottom-up \u2014 fixtures
          first, then orchestration, then the make targets, the Zuul wiring, and finally
          the docs.\n\n1. **`ea9cb18` Add E2E API verification fixtures and script**
          \u2014 `tests/e2e/expected.py` pins the objects, counts, and relations that
          `netbox-manager` must create from `example/`; `tests/e2e/verify.py` is a
          standalone `pynetbox` client that asserts them and exits non-zero on any
          mismatch. It is deliberately *not* a `pytest` test, so the fast `pytest
          tests/unit` gate never collects it.\n2. **`87c8004` Add E2E kind+NetBox
          deploy and orchestration scripts** \u2014 `deploy_netbox.sh` creates the
          kind cluster and installs the pinned `netbox-chart` with an ephemeral, single-replica
          config and a deterministic superuser API token (reusable standalone for
          `make e2e-up`). `run.sh` wires phases 1\u20133 together (deploy \u2192 port-forward
          \u2192 `netbox-manager run --fail-fast` \u2192 `verify.py` \u2192 `netbox-manager
          validate`) with a `trap` that tears the cluster down on every exit path,
          so a failed run never leaks a cluster.\n3. **`bfa6c3f` Add make e2e/e2e-up/e2e-down
          targets** \u2014 one-command local reproducibility: `make e2e` runs the
          full provision/apply/assert/teardown cycle, `make e2e-up` provisions and
          leaves it running, `make e2e-down` deletes the cluster. `CLUSTER_NAME` is
          overridable and exported to the scripts.\n4. **`7949c65` Add Zuul pre-run
          and run playbooks for the E2E job** \u2014 `pre-e2e.yml` installs the pinned
          kind/kubectl/Helm binaries, ensures Docker is running, and reuses the `ensure-pip`/`ensure-pipenv`
          roles like the unit-test pre-run; `test-e2e.yml` installs the package into
          the pipenv venv and runs `make e2e`, mirroring `test-unit.yml`.\n5. **`b6cb900`
          Add netbox-manager-e2e job to periodic-daily pipeline** \u2014 defines the
          job and runs it nightly only; the PR `check` gate stays fast and unchanged.\n6.
          **`c9e93e3` Document the E2E test harness and prerequisites** \u2014 `tests/e2e/README.md`
          (prerequisites, `make` usage, env overrides, what phase 3 asserts, how to
          re-pin `expected.py`), a Testing-section pointer in `README.md`, and an
          Unreleased CHANGELOG entry referencing #262.\n\n## Divergences from the
          issue\n\n- **Interface count is `267`, not the issue's soft `~77`.** The
          issue explicitly flagged its `~` figures as `grep`-derived starting points
          to confirm against a baseline. The pinned `267` is `250` interfaces that
          NetBox auto-instantiates from the imported device-type interface templates
          plus the `17` net-new interfaces the resources add, confirmed against a
          baseline run (see `ea9cb18`).\n- **Other counts (cables, IPs, MACs, etc.)
          are pinned in `expected.py`** from a baseline rather than the issue's soft
          estimates, exactly as the issue's acceptance criteria asked (\"expected
          values pinned in `tests/e2e/expected.py`\").\n\nEverything else follows
          the issue's proposed architecture and file layout: three phases behind `make
          e2e`/`run.sh`, deterministic `superuser.apiToken`, ephemeral `persistence.enabled=false`
          + `replicaCount=1`, a pinned chart version, periodic-only CI placement,
          and the documented local prerequisites.\n\n## Reviewer notes\n\nThis is
          a draft. The job is `periodic-daily` only, so opening this PR does not trigger
          the E2E run; the first real signal will come from the nightly pipeline (or
          a manual `make e2e` on a Docker-capable host).\n\n---\n\n_Implemented by
          [planwerk-review](https://github.com/planwerk/planwerk-review) b245b5f with
          Claude:claude-opus-4-8_\n"
        change_url: https://github.com/osism/netbox-manager/pull/263
        commit_id: df653c664ffefb4cf46f434bc7c39e3341e8fd3d
        patchset: df653c664ffefb4cf46f434bc7c39e3341e8fd3d
        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: '263'
      change_message: "Add end-to-end (E2E) test: deploy NetBox on kind (Helm) + apply
        example/ + verify via API\n\nCloses #262\n\n## Summary\n\nAdds a real **end-to-end
        (E2E) test** that exercises the full `netbox-manager` path: deploy a fresh
        NetBox on a local **kind** cluster (via the official `netbox-chart` Helm chart),
        apply the bundled `example/` data with `netbox-manager run`, and verify the
        result through the NetBox REST API. The heavy job runs **nightly only** (`periodic-daily`);
        the fast PR `check` gate (linters + unit tests) is left unchanged.\n\nThis
        closes the gap called out in the issue: until now only `tests/unit/` existed
        (see #232), which never talks to a real NetBox, so regressions in the actual
        apply path (`netbox.netbox` modules, DTL import, ordering/parallelism, primary-IP
        wiring) could slip through.\n\n## Change set, in commit order\n\nThe branch
        builds the harness bottom-up \u2014 fixtures first, then orchestration, then
        the make targets, the Zuul wiring, and finally the docs.\n\n1. **`ea9cb18`
        Add E2E API verification fixtures and script** \u2014 `tests/e2e/expected.py`
        pins the objects, counts, and relations that `netbox-manager` must create
        from `example/`; `tests/e2e/verify.py` is a standalone `pynetbox` client that
        asserts them and exits non-zero on any mismatch. It is deliberately *not*
        a `pytest` test, so the fast `pytest tests/unit` gate never collects it.\n2.
        **`87c8004` Add E2E kind+NetBox deploy and orchestration scripts** \u2014
        `deploy_netbox.sh` creates the kind cluster and installs the pinned `netbox-chart`
        with an ephemeral, single-replica config and a deterministic superuser API
        token (reusable standalone for `make e2e-up`). `run.sh` wires phases 1\u20133
        together (deploy \u2192 port-forward \u2192 `netbox-manager run --fail-fast`
        \u2192 `verify.py` \u2192 `netbox-manager validate`) with a `trap` that tears
        the cluster down on every exit path, so a failed run never leaks a cluster.\n3.
        **`bfa6c3f` Add make e2e/e2e-up/e2e-down targets** \u2014 one-command local
        reproducibility: `make e2e` runs the full provision/apply/assert/teardown
        cycle, `make e2e-up` provisions and leaves it running, `make e2e-down` deletes
        the cluster. `CLUSTER_NAME` is overridable and exported to the scripts.\n4.
        **`7949c65` Add Zuul pre-run and run playbooks for the E2E job** \u2014 `pre-e2e.yml`
        installs the pinned kind/kubectl/Helm binaries, ensures Docker is running,
        and reuses the `ensure-pip`/`ensure-pipenv` roles like the unit-test pre-run;
        `test-e2e.yml` installs the package into the pipenv venv and runs `make e2e`,
        mirroring `test-unit.yml`.\n5. **`b6cb900` Add netbox-manager-e2e job to periodic-daily
        pipeline** \u2014 defines the job and runs it nightly only; the PR `check`
        gate stays fast and unchanged.\n6. **`c9e93e3` Document the E2E test harness
        and prerequisites** \u2014 `tests/e2e/README.md` (prerequisites, `make` usage,
        env overrides, what phase 3 asserts, how to re-pin `expected.py`), a Testing-section
        pointer in `README.md`, and an Unreleased CHANGELOG entry referencing #262.\n\n##
        Divergences from the issue\n\n- **Interface count is `267`, not the issue's
        soft `~77`.** The issue explicitly flagged its `~` figures as `grep`-derived
        starting points to confirm against a baseline. The pinned `267` is `250` interfaces
        that NetBox auto-instantiates from the imported device-type interface templates
        plus the `17` net-new interfaces the resources add, confirmed against a baseline
        run (see `ea9cb18`).\n- **Other counts (cables, IPs, MACs, etc.) are pinned
        in `expected.py`** from a baseline rather than the issue's soft estimates,
        exactly as the issue's acceptance criteria asked (\"expected values pinned
        in `tests/e2e/expected.py`\").\n\nEverything else follows the issue's proposed
        architecture and file layout: three phases behind `make e2e`/`run.sh`, deterministic
        `superuser.apiToken`, ephemeral `persistence.enabled=false` + `replicaCount=1`,
        a pinned chart version, periodic-only CI placement, and the documented local
        prerequisites.\n\n## Reviewer notes\n\nThis is a draft. The job is `periodic-daily`
        only, so opening this PR does not trigger the E2E run; the first real signal
        will come from the nightly pipeline (or a manual `make e2e` on a Docker-capable
        host).\n\n---\n\n_Implemented by [planwerk-review](https://github.com/planwerk/planwerk-review)
        b245b5f with Claude:claude-opus-4-8_\n"
      change_url: https://github.com/osism/netbox-manager/pull/263
      child_jobs: []
      commit_id: df653c664ffefb4cf46f434bc7c39e3341e8fd3d
      event_id: a523fc20-6c92-11f1-9f85-71b72865c9ba
      executor:
        hostname: 521e9411259a
        inventory_file: /var/lib/zuul/builds/65ccc40d3f6a486e9879bce003a33389/ansible/inventory.yaml
        log_root: /var/lib/zuul/builds/65ccc40d3f6a486e9879bce003a33389/work/logs
        result_data_file: /var/lib/zuul/builds/65ccc40d3f6a486e9879bce003a33389/work/results.json
        src_root: /var/lib/zuul/builds/65ccc40d3f6a486e9879bce003a33389/work/src
        work_root: /var/lib/zuul/builds/65ccc40d3f6a486e9879bce003a33389/work
      include_vars: []
      items:
      - branch: main
        change: '263'
        change_message: "Add end-to-end (E2E) test: deploy NetBox on kind (Helm) +
          apply example/ + verify via API\n\nCloses #262\n\n## Summary\n\nAdds a real
          **end-to-end (E2E) test** that exercises the full `netbox-manager` path:
          deploy a fresh NetBox on a local **kind** cluster (via the official `netbox-chart`
          Helm chart), apply the bundled `example/` data with `netbox-manager run`,
          and verify the result through the NetBox REST API. The heavy job runs **nightly
          only** (`periodic-daily`); the fast PR `check` gate (linters + unit tests)
          is left unchanged.\n\nThis closes the gap called out in the issue: until
          now only `tests/unit/` existed (see #232), which never talks to a real NetBox,
          so regressions in the actual apply path (`netbox.netbox` modules, DTL import,
          ordering/parallelism, primary-IP wiring) could slip through.\n\n## Change
          set, in commit order\n\nThe branch builds the harness bottom-up \u2014 fixtures
          first, then orchestration, then the make targets, the Zuul wiring, and finally
          the docs.\n\n1. **`ea9cb18` Add E2E API verification fixtures and script**
          \u2014 `tests/e2e/expected.py` pins the objects, counts, and relations that
          `netbox-manager` must create from `example/`; `tests/e2e/verify.py` is a
          standalone `pynetbox` client that asserts them and exits non-zero on any
          mismatch. It is deliberately *not* a `pytest` test, so the fast `pytest
          tests/unit` gate never collects it.\n2. **`87c8004` Add E2E kind+NetBox
          deploy and orchestration scripts** \u2014 `deploy_netbox.sh` creates the
          kind cluster and installs the pinned `netbox-chart` with an ephemeral, single-replica
          config and a deterministic superuser API token (reusable standalone for
          `make e2e-up`). `run.sh` wires phases 1\u20133 together (deploy \u2192 port-forward
          \u2192 `netbox-manager run --fail-fast` \u2192 `verify.py` \u2192 `netbox-manager
          validate`) with a `trap` that tears the cluster down on every exit path,
          so a failed run never leaks a cluster.\n3. **`bfa6c3f` Add make e2e/e2e-up/e2e-down
          targets** \u2014 one-command local reproducibility: `make e2e` runs the
          full provision/apply/assert/teardown cycle, `make e2e-up` provisions and
          leaves it running, `make e2e-down` deletes the cluster. `CLUSTER_NAME` is
          overridable and exported to the scripts.\n4. **`7949c65` Add Zuul pre-run
          and run playbooks for the E2E job** \u2014 `pre-e2e.yml` installs the pinned
          kind/kubectl/Helm binaries, ensures Docker is running, and reuses the `ensure-pip`/`ensure-pipenv`
          roles like the unit-test pre-run; `test-e2e.yml` installs the package into
          the pipenv venv and runs `make e2e`, mirroring `test-unit.yml`.\n5. **`b6cb900`
          Add netbox-manager-e2e job to periodic-daily pipeline** \u2014 defines the
          job and runs it nightly only; the PR `check` gate stays fast and unchanged.\n6.
          **`c9e93e3` Document the E2E test harness and prerequisites** \u2014 `tests/e2e/README.md`
          (prerequisites, `make` usage, env overrides, what phase 3 asserts, how to
          re-pin `expected.py`), a Testing-section pointer in `README.md`, and an
          Unreleased CHANGELOG entry referencing #262.\n\n## Divergences from the
          issue\n\n- **Interface count is `267`, not the issue's soft `~77`.** The
          issue explicitly flagged its `~` figures as `grep`-derived starting points
          to confirm against a baseline. The pinned `267` is `250` interfaces that
          NetBox auto-instantiates from the imported device-type interface templates
          plus the `17` net-new interfaces the resources add, confirmed against a
          baseline run (see `ea9cb18`).\n- **Other counts (cables, IPs, MACs, etc.)
          are pinned in `expected.py`** from a baseline rather than the issue's soft
          estimates, exactly as the issue's acceptance criteria asked (\"expected
          values pinned in `tests/e2e/expected.py`\").\n\nEverything else follows
          the issue's proposed architecture and file layout: three phases behind `make
          e2e`/`run.sh`, deterministic `superuser.apiToken`, ephemeral `persistence.enabled=false`
          + `replicaCount=1`, a pinned chart version, periodic-only CI placement,
          and the documented local prerequisites.\n\n## Reviewer notes\n\nThis is
          a draft. The job is `periodic-daily` only, so opening this PR does not trigger
          the E2E run; the first real signal will come from the nightly pipeline (or
          a manual `make e2e` on a Docker-capable host).\n\n---\n\n_Implemented by
          [planwerk-review](https://github.com/planwerk/planwerk-review) b245b5f with
          Claude:claude-opus-4-8_\n"
        change_url: https://github.com/osism/netbox-manager/pull/263
        commit_id: df653c664ffefb4cf46f434bc7c39e3341e8fd3d
        patchset: df653c664ffefb4cf46f434bc7c39e3341e8fd3d
        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: flake8
      jobtags: []
      max_attempts: 3
      message: QWRkIGVuZC10by1lbmQgKEUyRSkgdGVzdDogZGVwbG95IE5ldEJveCBvbiBraW5kIChIZWxtKSArIGFwcGx5IGV4YW1wbGUvICsgdmVyaWZ5IHZpYSBBUEkKCkNsb3NlcyAjMjYyCgojIyBTdW1tYXJ5CgpBZGRzIGEgcmVhbCAqKmVuZC10by1lbmQgKEUyRSkgdGVzdCoqIHRoYXQgZXhlcmNpc2VzIHRoZSBmdWxsIGBuZXRib3gtbWFuYWdlcmAgcGF0aDogZGVwbG95IGEgZnJlc2ggTmV0Qm94IG9uIGEgbG9jYWwgKipraW5kKiogY2x1c3RlciAodmlhIHRoZSBvZmZpY2lhbCBgbmV0Ym94LWNoYXJ0YCBIZWxtIGNoYXJ0KSwgYXBwbHkgdGhlIGJ1bmRsZWQgYGV4YW1wbGUvYCBkYXRhIHdpdGggYG5ldGJveC1tYW5hZ2VyIHJ1bmAsIGFuZCB2ZXJpZnkgdGhlIHJlc3VsdCB0aHJvdWdoIHRoZSBOZXRCb3ggUkVTVCBBUEkuIFRoZSBoZWF2eSBqb2IgcnVucyAqKm5pZ2h0bHkgb25seSoqIChgcGVyaW9kaWMtZGFpbHlgKTsgdGhlIGZhc3QgUFIgYGNoZWNrYCBnYXRlIChsaW50ZXJzICsgdW5pdCB0ZXN0cykgaXMgbGVmdCB1bmNoYW5nZWQuCgpUaGlzIGNsb3NlcyB0aGUgZ2FwIGNhbGxlZCBvdXQgaW4gdGhlIGlzc3VlOiB1bnRpbCBub3cgb25seSBgdGVzdHMvdW5pdC9gIGV4aXN0ZWQgKHNlZSAjMjMyKSwgd2hpY2ggbmV2ZXIgdGFsa3MgdG8gYSByZWFsIE5ldEJveCwgc28gcmVncmVzc2lvbnMgaW4gdGhlIGFjdHVhbCBhcHBseSBwYXRoIChgbmV0Ym94Lm5ldGJveGAgbW9kdWxlcywgRFRMIGltcG9ydCwgb3JkZXJpbmcvcGFyYWxsZWxpc20sIHByaW1hcnktSVAgd2lyaW5nKSBjb3VsZCBzbGlwIHRocm91Z2guCgojIyBDaGFuZ2Ugc2V0LCBpbiBjb21taXQgb3JkZXIKClRoZSBicmFuY2ggYnVpbGRzIHRoZSBoYXJuZXNzIGJvdHRvbS11cCDigJQgZml4dHVyZXMgZmlyc3QsIHRoZW4gb3JjaGVzdHJhdGlvbiwgdGhlbiB0aGUgbWFrZSB0YXJnZXRzLCB0aGUgWnV1bCB3aXJpbmcsIGFuZCBmaW5hbGx5IHRoZSBkb2NzLgoKMS4gKipgZWE5Y2IxOGAgQWRkIEUyRSBBUEkgdmVyaWZpY2F0aW9uIGZpeHR1cmVzIGFuZCBzY3JpcHQqKiDigJQgYHRlc3RzL2UyZS9leHBlY3RlZC5weWAgcGlucyB0aGUgb2JqZWN0cywgY291bnRzLCBhbmQgcmVsYXRpb25zIHRoYXQgYG5ldGJveC1tYW5hZ2VyYCBtdXN0IGNyZWF0ZSBmcm9tIGBleGFtcGxlL2A7IGB0ZXN0cy9lMmUvdmVyaWZ5LnB5YCBpcyBhIHN0YW5kYWxvbmUgYHB5bmV0Ym94YCBjbGllbnQgdGhhdCBhc3NlcnRzIHRoZW0gYW5kIGV4aXRzIG5vbi16ZXJvIG9uIGFueSBtaXNtYXRjaC4gSXQgaXMgZGVsaWJlcmF0ZWx5ICpub3QqIGEgYHB5dGVzdGAgdGVzdCwgc28gdGhlIGZhc3QgYHB5dGVzdCB0ZXN0cy91bml0YCBnYXRlIG5ldmVyIGNvbGxlY3RzIGl0LgoyLiAqKmA4N2M4MDA0YCBBZGQgRTJFIGtpbmQrTmV0Qm94IGRlcGxveSBhbmQgb3JjaGVzdHJhdGlvbiBzY3JpcHRzKiog4oCUIGBkZXBsb3lfbmV0Ym94LnNoYCBjcmVhdGVzIHRoZSBraW5kIGNsdXN0ZXIgYW5kIGluc3RhbGxzIHRoZSBwaW5uZWQgYG5ldGJveC1jaGFydGAgd2l0aCBhbiBlcGhlbWVyYWwsIHNpbmdsZS1yZXBsaWNhIGNvbmZpZyBhbmQgYSBkZXRlcm1pbmlzdGljIHN1cGVydXNlciBBUEkgdG9rZW4gKHJldXNhYmxlIHN0YW5kYWxvbmUgZm9yIGBtYWtlIGUyZS11cGApLiBgcnVuLnNoYCB3aXJlcyBwaGFzZXMgMeKAkzMgdG9nZXRoZXIgKGRlcGxveSDihpIgcG9ydC1mb3J3YXJkIOKGkiBgbmV0Ym94LW1hbmFnZXIgcnVuIC0tZmFpbC1mYXN0YCDihpIgYHZlcmlmeS5weWAg4oaSIGBuZXRib3gtbWFuYWdlciB2YWxpZGF0ZWApIHdpdGggYSBgdHJhcGAgdGhhdCB0ZWFycyB0aGUgY2x1c3RlciBkb3duIG9uIGV2ZXJ5IGV4aXQgcGF0aCwgc28gYSBmYWlsZWQgcnVuIG5ldmVyIGxlYWtzIGEgY2x1c3Rlci4KMy4gKipgYmZhNmMzZmAgQWRkIG1ha2UgZTJlL2UyZS11cC9lMmUtZG93biB0YXJnZXRzKiog4oCUIG9uZS1jb21tYW5kIGxvY2FsIHJlcHJvZHVjaWJpbGl0eTogYG1ha2UgZTJlYCBydW5zIHRoZSBmdWxsIHByb3Zpc2lvbi9hcHBseS9hc3NlcnQvdGVhcmRvd24gY3ljbGUsIGBtYWtlIGUyZS11cGAgcHJvdmlzaW9ucyBhbmQgbGVhdmVzIGl0IHJ1bm5pbmcsIGBtYWtlIGUyZS1kb3duYCBkZWxldGVzIHRoZSBjbHVzdGVyLiBgQ0xVU1RFUl9OQU1FYCBpcyBvdmVycmlkYWJsZSBhbmQgZXhwb3J0ZWQgdG8gdGhlIHNjcmlwdHMuCjQuICoqYDc5NDljNjVgIEFkZCBadXVsIHByZS1ydW4gYW5kIHJ1biBwbGF5Ym9va3MgZm9yIHRoZSBFMkUgam9iKiog4oCUIGBwcmUtZTJlLnltbGAgaW5zdGFsbHMgdGhlIHBpbm5lZCBraW5kL2t1YmVjdGwvSGVsbSBiaW5hcmllcywgZW5zdXJlcyBEb2NrZXIgaXMgcnVubmluZywgYW5kIHJldXNlcyB0aGUgYGVuc3VyZS1waXBgL2BlbnN1cmUtcGlwZW52YCByb2xlcyBsaWtlIHRoZSB1bml0LXRlc3QgcHJlLXJ1bjsgYHRlc3QtZTJlLnltbGAgaW5zdGFsbHMgdGhlIHBhY2thZ2UgaW50byB0aGUgcGlwZW52IHZlbnYgYW5kIHJ1bnMgYG1ha2UgZTJlYCwgbWlycm9yaW5nIGB0ZXN0LXVuaXQueW1sYC4KNS4gKipgYjZjYjkwMGAgQWRkIG5ldGJveC1tYW5hZ2VyLWUyZSBqb2IgdG8gcGVyaW9kaWMtZGFpbHkgcGlwZWxpbmUqKiDigJQgZGVmaW5lcyB0aGUgam9iIGFuZCBydW5zIGl0IG5pZ2h0bHkgb25seTsgdGhlIFBSIGBjaGVja2AgZ2F0ZSBzdGF5cyBmYXN0IGFuZCB1bmNoYW5nZWQuCjYuICoqYGM5ZTkzZTNgIERvY3VtZW50IHRoZSBFMkUgdGVzdCBoYXJuZXNzIGFuZCBwcmVyZXF1aXNpdGVzKiog4oCUIGB0ZXN0cy9lMmUvUkVBRE1FLm1kYCAocHJlcmVxdWlzaXRlcywgYG1ha2VgIHVzYWdlLCBlbnYgb3ZlcnJpZGVzLCB3aGF0IHBoYXNlIDMgYXNzZXJ0cywgaG93IHRvIHJlLXBpbiBgZXhwZWN0ZWQucHlgKSwgYSBUZXN0aW5nLXNlY3Rpb24gcG9pbnRlciBpbiBgUkVBRE1FLm1kYCwgYW5kIGFuIFVucmVsZWFzZWQgQ0hBTkdFTE9HIGVudHJ5IHJlZmVyZW5jaW5nICMyNjIuCgojIyBEaXZlcmdlbmNlcyBmcm9tIHRoZSBpc3N1ZQoKLSAqKkludGVyZmFjZSBjb3VudCBpcyBgMjY3YCwgbm90IHRoZSBpc3N1ZSdzIHNvZnQgYH43N2AuKiogVGhlIGlzc3VlIGV4cGxpY2l0bHkgZmxhZ2dlZCBpdHMgYH5gIGZpZ3VyZXMgYXMgYGdyZXBgLWRlcml2ZWQgc3RhcnRpbmcgcG9pbnRzIHRvIGNvbmZpcm0gYWdhaW5zdCBhIGJhc2VsaW5lLiBUaGUgcGlubmVkIGAyNjdgIGlzIGAyNTBgIGludGVyZmFjZXMgdGhhdCBOZXRCb3ggYXV0by1pbnN0YW50aWF0ZXMgZnJvbSB0aGUgaW1wb3J0ZWQgZGV2aWNlLXR5cGUgaW50ZXJmYWNlIHRlbXBsYXRlcyBwbHVzIHRoZSBgMTdgIG5ldC1uZXcgaW50ZXJmYWNlcyB0aGUgcmVzb3VyY2VzIGFkZCwgY29uZmlybWVkIGFnYWluc3QgYSBiYXNlbGluZSBydW4gKHNlZSBgZWE5Y2IxOGApLgotICoqT3RoZXIgY291bnRzIChjYWJsZXMsIElQcywgTUFDcywgZXRjLikgYXJlIHBpbm5lZCBpbiBgZXhwZWN0ZWQucHlgKiogZnJvbSBhIGJhc2VsaW5lIHJhdGhlciB0aGFuIHRoZSBpc3N1ZSdzIHNvZnQgZXN0aW1hdGVzLCBleGFjdGx5IGFzIHRoZSBpc3N1ZSdzIGFjY2VwdGFuY2UgY3JpdGVyaWEgYXNrZWQgKCJleHBlY3RlZCB2YWx1ZXMgcGlubmVkIGluIGB0ZXN0cy9lMmUvZXhwZWN0ZWQucHlgIikuCgpFdmVyeXRoaW5nIGVsc2UgZm9sbG93cyB0aGUgaXNzdWUncyBwcm9wb3NlZCBhcmNoaXRlY3R1cmUgYW5kIGZpbGUgbGF5b3V0OiB0aHJlZSBwaGFzZXMgYmVoaW5kIGBtYWtlIGUyZWAvYHJ1bi5zaGAsIGRldGVybWluaXN0aWMgYHN1cGVydXNlci5hcGlUb2tlbmAsIGVwaGVtZXJhbCBgcGVyc2lzdGVuY2UuZW5hYmxlZD1mYWxzZWAgKyBgcmVwbGljYUNvdW50PTFgLCBhIHBpbm5lZCBjaGFydCB2ZXJzaW9uLCBwZXJpb2RpYy1vbmx5IENJIHBsYWNlbWVudCwgYW5kIHRoZSBkb2N1bWVudGVkIGxvY2FsIHByZXJlcXVpc2l0ZXMuCgojIyBSZXZpZXdlciBub3RlcwoKVGhpcyBpcyBhIGRyYWZ0LiBUaGUgam9iIGlzIGBwZXJpb2RpYy1kYWlseWAgb25seSwgc28gb3BlbmluZyB0aGlzIFBSIGRvZXMgbm90IHRyaWdnZXIgdGhlIEUyRSBydW47IHRoZSBmaXJzdCByZWFsIHNpZ25hbCB3aWxsIGNvbWUgZnJvbSB0aGUgbmlnaHRseSBwaXBlbGluZSAob3IgYSBtYW51YWwgYG1ha2UgZTJlYCBvbiBhIERvY2tlci1jYXBhYmxlIGhvc3QpLgoKLS0tCgpfSW1wbGVtZW50ZWQgYnkgW3BsYW53ZXJrLXJldmlld10oaHR0cHM6Ly9naXRodWIuY29tL3BsYW53ZXJrL3BsYW53ZXJrLXJldmlldykgYjI0NWI1ZiB3aXRoIENsYXVkZTpjbGF1ZGUtb3B1cy00LThfCg==
      patchset: df653c664ffefb4cf46f434bc7c39e3341e8fd3d
      pipeline: check
      playbook_context:
        playbook_projects:
          trusted/project_0/github.com/osism/zuul-config:
            canonical_name: github.com/osism/zuul-config
            checkout: main
            commit: 3d5c7b5973754999f7005857a00ce9168944f0f1
          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: 3d5c7b5973754999f7005857a00ce9168944f0f1
          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/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/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: 8e9cdaf3ae397ca4fc321dda2ea23f4a35446b0d
          name: osism/netbox-manager
          required: false
          short_name: netbox-manager
          src_dir: src/github.com/osism/netbox-manager
      ref: refs/pull/263/head
      resources: {}
      tenant: osism
      timeout: 1800
      topic: null
      voting: true
