all:
  children:
    zuul_unreachable:
      hosts: {}
  hosts:
    debian-bookworm:
      ansible_connection: ssh
      ansible_host: 2a13:1a81:8000:3124:f816:3eff:feea:c32f
      ansible_port: 22
      ansible_python_interpreter: auto
      ansible_user: zuul
      nodepool:
        az: nova
        cloud: regiocloud-a-ci
        external_id: 8b75aa74-f833-44f9-af20-26a836dcb687
        host_id: 5afd8fc909abddfe2ce3a956a91bbe56629648b7209fd0acfa541862
        interface_ip: 2a13:1a81:8000:3124:f816:3eff:feea:c32f
        label: debian-bookworm
        node_properties: {}
        private_ipv4: 10.128.7.237
        private_ipv6: null
        provider: regiocloud-a
        public_ipv4: 81.163.193.220
        public_ipv6: 2a13:1a81:8000:3124:f816:3eff:feea:c32f
        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 mypy explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: osism/zuul-jobs/.zuul.yaml@main#42>'
      - '<Job mypy explicit: None implied: None source: osism/python-osism/.zuul.yaml@main#171>'
      ansible_version: '9'
      attempts: 1
      branch: main
      build: fc7b5a737d9644ce97780fddd5ec8221
      build_refs:
      - branch: main
        change: '2483'
        change_message: "Add E2E golden tests for SONiC config generation\n\n## Summary\n\nAdds
          an end-to-end golden test for the SONiC config generator: provision NetBox
          on a local kind cluster, seed it with the netbox-manager example data, run
          `sync_sonic()`, and compare every exported `config_db.json` against golden
          files committed under `tests/e2e/golden/`. Any behavior change in the generator
          becomes a reviewable golden diff in the same PR.\n\n## Motivation\n\nUnit
          tests verify the generator against fixture values that encode the author's
          assumptions, so a class of regressions \u2014 such as mixed kbps/Mbps interface
          speeds \u2014 can pass the unit suite while producing broken switch configurations.
          Nothing exercised the full pipeline (real NetBox data in, complete config_db
          out) until now:\n\n- #2478 \u2014 the customer-visible breakage (breakout
          ports with `\"speed\": \"100\"`)\n- #2246 \u2014 where that regression slipped
          in, past both author and review\n\n## Changes\n\n- **`SONIC_PORT_CONFIG_PATH`**
          setting so the generator can read the in-repo `files/sonic/port_config/`
          outside the container image\n- **`tests/e2e/generate.py`** \u2014 drives
          `sync_sonic()`; since it returns only a device\u2192config dict and swallows
          per-device failures, the driver asserts success itself (expected device
          set derived from golden filenames, empty-config detection, a loguru sink
          that fails the run on any ERROR record)\n- **`tests/e2e/compare.py`** \u2014
          exact file-set equality (missing / extra / mismatched reported separately),
          structural diff paths like `PORT|Ethernet4.speed`, canonical unified diff,
          `--regenerate` for intentional output changes\n- **`tests/e2e/run.sh` +
          Makefile targets** `sonic-e2e`, `sonic-e2e-regen`, `sonic-e2e-up`, `sonic-e2e-down`;
          netbox-manager is installed from a checkout (sibling dir or `NETBOX_MANAGER_DIR`)
          into a dedicated venv\n- **Golden files** for the five example-testbed switches,
          cross-checked against their independent sources (seed YAML, port_config
          `.ini` speeds, the ASN derivation rule) and reproduced byte-for-byte by
          a second seed-and-generate cycle\n- **Zuul job `python-osism-sonic-e2e`**
          in check (restricted by a files matcher to changes that can alter generator
          output) and periodic-daily (unconditional, bounds seed-data drift); netbox-manager
          comes from `required-projects`, so `Depends-On` is honored for its code
          and seed data\n- **Drive-by fix**: `_add_snmp_configuration` no longer builds
          the Redis-backed Ansible vault for devices without encrypted secrets \u2014
          it logged three ERRORs per device in any environment without vault infrastructure
          (found by the new error guard)\n\n## Verification\n\n- 2043 unit tests pass;
          the comparator and driver logic are unit-tested (`tests/unit/e2e/`)\n- Full
          local E2E cycle run twice against kind + NetBox 4.5.10: golden bootstrap,
          then a compare-mode rerun against a fresh re-seed reproduced all five files
          exactly\n\n## Follow-up work\n\n- Scenario seed data for the known regression
          shapes (derived-speed breakout subports, explicit kbps speeds, 4x10G fallback)
          plus VLAN coverage \u2014 the base example data exercises neither breakouts
          nor data-port VLANs, so the paths that broke in #2478 are pinned only once
          that overlay lands\n- Factor the kind/kubectl/helm pre-run into a shared
          zuul-jobs role instead of the copy adapted from netbox-manager's `pre-e2e.yml`\n\nOpened
          as draft so the new Zuul job can validate itself on this PR (the files matcher
          includes `.zuul.yaml`, `tests/e2e/`, and the playbooks).\n\n\U0001F916 Generated
          with [Claude Code](https://claude.com/claude-code)"
        change_url: https://github.com/osism/python-osism/pull/2483
        commit_id: 10d947c87fc4d540ed854511421a710dcf1d8622
        patchset: 10d947c87fc4d540ed854511421a710dcf1d8622
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/python-osism
          name: osism/python-osism
          short_name: python-osism
        src_dir: src/github.com/osism/python-osism
        topic: null
      buildset: bff27d772d3844b8a1e40cde3d86ba10
      buildset_refs:
      - branch: main
        change: '2483'
        change_message: "Add E2E golden tests for SONiC config generation\n\n## Summary\n\nAdds
          an end-to-end golden test for the SONiC config generator: provision NetBox
          on a local kind cluster, seed it with the netbox-manager example data, run
          `sync_sonic()`, and compare every exported `config_db.json` against golden
          files committed under `tests/e2e/golden/`. Any behavior change in the generator
          becomes a reviewable golden diff in the same PR.\n\n## Motivation\n\nUnit
          tests verify the generator against fixture values that encode the author's
          assumptions, so a class of regressions \u2014 such as mixed kbps/Mbps interface
          speeds \u2014 can pass the unit suite while producing broken switch configurations.
          Nothing exercised the full pipeline (real NetBox data in, complete config_db
          out) until now:\n\n- #2478 \u2014 the customer-visible breakage (breakout
          ports with `\"speed\": \"100\"`)\n- #2246 \u2014 where that regression slipped
          in, past both author and review\n\n## Changes\n\n- **`SONIC_PORT_CONFIG_PATH`**
          setting so the generator can read the in-repo `files/sonic/port_config/`
          outside the container image\n- **`tests/e2e/generate.py`** \u2014 drives
          `sync_sonic()`; since it returns only a device\u2192config dict and swallows
          per-device failures, the driver asserts success itself (expected device
          set derived from golden filenames, empty-config detection, a loguru sink
          that fails the run on any ERROR record)\n- **`tests/e2e/compare.py`** \u2014
          exact file-set equality (missing / extra / mismatched reported separately),
          structural diff paths like `PORT|Ethernet4.speed`, canonical unified diff,
          `--regenerate` for intentional output changes\n- **`tests/e2e/run.sh` +
          Makefile targets** `sonic-e2e`, `sonic-e2e-regen`, `sonic-e2e-up`, `sonic-e2e-down`;
          netbox-manager is installed from a checkout (sibling dir or `NETBOX_MANAGER_DIR`)
          into a dedicated venv\n- **Golden files** for the five example-testbed switches,
          cross-checked against their independent sources (seed YAML, port_config
          `.ini` speeds, the ASN derivation rule) and reproduced byte-for-byte by
          a second seed-and-generate cycle\n- **Zuul job `python-osism-sonic-e2e`**
          in check (restricted by a files matcher to changes that can alter generator
          output) and periodic-daily (unconditional, bounds seed-data drift); netbox-manager
          comes from `required-projects`, so `Depends-On` is honored for its code
          and seed data\n- **Drive-by fix**: `_add_snmp_configuration` no longer builds
          the Redis-backed Ansible vault for devices without encrypted secrets \u2014
          it logged three ERRORs per device in any environment without vault infrastructure
          (found by the new error guard)\n\n## Verification\n\n- 2043 unit tests pass;
          the comparator and driver logic are unit-tested (`tests/unit/e2e/`)\n- Full
          local E2E cycle run twice against kind + NetBox 4.5.10: golden bootstrap,
          then a compare-mode rerun against a fresh re-seed reproduced all five files
          exactly\n\n## Follow-up work\n\n- Scenario seed data for the known regression
          shapes (derived-speed breakout subports, explicit kbps speeds, 4x10G fallback)
          plus VLAN coverage \u2014 the base example data exercises neither breakouts
          nor data-port VLANs, so the paths that broke in #2478 are pinned only once
          that overlay lands\n- Factor the kind/kubectl/helm pre-run into a shared
          zuul-jobs role instead of the copy adapted from netbox-manager's `pre-e2e.yml`\n\nOpened
          as draft so the new Zuul job can validate itself on this PR (the files matcher
          includes `.zuul.yaml`, `tests/e2e/`, and the playbooks).\n\n\U0001F916 Generated
          with [Claude Code](https://claude.com/claude-code)"
        change_url: https://github.com/osism/python-osism/pull/2483
        commit_id: 10d947c87fc4d540ed854511421a710dcf1d8622
        patchset: 10d947c87fc4d540ed854511421a710dcf1d8622
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/python-osism
          name: osism/python-osism
          short_name: python-osism
        src_dir: src/github.com/osism/python-osism
        topic: null
      change: '2483'
      change_message: "Add E2E golden tests for SONiC config generation\n\n## Summary\n\nAdds
        an end-to-end golden test for the SONiC config generator: provision NetBox
        on a local kind cluster, seed it with the netbox-manager example data, run
        `sync_sonic()`, and compare every exported `config_db.json` against golden
        files committed under `tests/e2e/golden/`. Any behavior change in the generator
        becomes a reviewable golden diff in the same PR.\n\n## Motivation\n\nUnit
        tests verify the generator against fixture values that encode the author's
        assumptions, so a class of regressions \u2014 such as mixed kbps/Mbps interface
        speeds \u2014 can pass the unit suite while producing broken switch configurations.
        Nothing exercised the full pipeline (real NetBox data in, complete config_db
        out) until now:\n\n- #2478 \u2014 the customer-visible breakage (breakout
        ports with `\"speed\": \"100\"`)\n- #2246 \u2014 where that regression slipped
        in, past both author and review\n\n## Changes\n\n- **`SONIC_PORT_CONFIG_PATH`**
        setting so the generator can read the in-repo `files/sonic/port_config/` outside
        the container image\n- **`tests/e2e/generate.py`** \u2014 drives `sync_sonic()`;
        since it returns only a device\u2192config dict and swallows per-device failures,
        the driver asserts success itself (expected device set derived from golden
        filenames, empty-config detection, a loguru sink that fails the run on any
        ERROR record)\n- **`tests/e2e/compare.py`** \u2014 exact file-set equality
        (missing / extra / mismatched reported separately), structural diff paths
        like `PORT|Ethernet4.speed`, canonical unified diff, `--regenerate` for intentional
        output changes\n- **`tests/e2e/run.sh` + Makefile targets** `sonic-e2e`, `sonic-e2e-regen`,
        `sonic-e2e-up`, `sonic-e2e-down`; netbox-manager is installed from a checkout
        (sibling dir or `NETBOX_MANAGER_DIR`) into a dedicated venv\n- **Golden files**
        for the five example-testbed switches, cross-checked against their independent
        sources (seed YAML, port_config `.ini` speeds, the ASN derivation rule) and
        reproduced byte-for-byte by a second seed-and-generate cycle\n- **Zuul job
        `python-osism-sonic-e2e`** in check (restricted by a files matcher to changes
        that can alter generator output) and periodic-daily (unconditional, bounds
        seed-data drift); netbox-manager comes from `required-projects`, so `Depends-On`
        is honored for its code and seed data\n- **Drive-by fix**: `_add_snmp_configuration`
        no longer builds the Redis-backed Ansible vault for devices without encrypted
        secrets \u2014 it logged three ERRORs per device in any environment without
        vault infrastructure (found by the new error guard)\n\n## Verification\n\n-
        2043 unit tests pass; the comparator and driver logic are unit-tested (`tests/unit/e2e/`)\n-
        Full local E2E cycle run twice against kind + NetBox 4.5.10: golden bootstrap,
        then a compare-mode rerun against a fresh re-seed reproduced all five files
        exactly\n\n## Follow-up work\n\n- Scenario seed data for the known regression
        shapes (derived-speed breakout subports, explicit kbps speeds, 4x10G fallback)
        plus VLAN coverage \u2014 the base example data exercises neither breakouts
        nor data-port VLANs, so the paths that broke in #2478 are pinned only once
        that overlay lands\n- Factor the kind/kubectl/helm pre-run into a shared zuul-jobs
        role instead of the copy adapted from netbox-manager's `pre-e2e.yml`\n\nOpened
        as draft so the new Zuul job can validate itself on this PR (the files matcher
        includes `.zuul.yaml`, `tests/e2e/`, and the playbooks).\n\n\U0001F916 Generated
        with [Claude Code](https://claude.com/claude-code)"
      change_url: https://github.com/osism/python-osism/pull/2483
      child_jobs: []
      commit_id: 10d947c87fc4d540ed854511421a710dcf1d8622
      event_id: 643522c0-8204-11f1-9941-eb086da7fb8c
      executor:
        hostname: 521e9411259a
        inventory_file: /var/lib/zuul/builds/fc7b5a737d9644ce97780fddd5ec8221/ansible/inventory.yaml
        log_root: /var/lib/zuul/builds/fc7b5a737d9644ce97780fddd5ec8221/work/logs
        result_data_file: /var/lib/zuul/builds/fc7b5a737d9644ce97780fddd5ec8221/work/results.json
        src_root: /var/lib/zuul/builds/fc7b5a737d9644ce97780fddd5ec8221/work/src
        work_root: /var/lib/zuul/builds/fc7b5a737d9644ce97780fddd5ec8221/work
      include_vars: []
      items:
      - branch: main
        change: '2483'
        change_message: "Add E2E golden tests for SONiC config generation\n\n## Summary\n\nAdds
          an end-to-end golden test for the SONiC config generator: provision NetBox
          on a local kind cluster, seed it with the netbox-manager example data, run
          `sync_sonic()`, and compare every exported `config_db.json` against golden
          files committed under `tests/e2e/golden/`. Any behavior change in the generator
          becomes a reviewable golden diff in the same PR.\n\n## Motivation\n\nUnit
          tests verify the generator against fixture values that encode the author's
          assumptions, so a class of regressions \u2014 such as mixed kbps/Mbps interface
          speeds \u2014 can pass the unit suite while producing broken switch configurations.
          Nothing exercised the full pipeline (real NetBox data in, complete config_db
          out) until now:\n\n- #2478 \u2014 the customer-visible breakage (breakout
          ports with `\"speed\": \"100\"`)\n- #2246 \u2014 where that regression slipped
          in, past both author and review\n\n## Changes\n\n- **`SONIC_PORT_CONFIG_PATH`**
          setting so the generator can read the in-repo `files/sonic/port_config/`
          outside the container image\n- **`tests/e2e/generate.py`** \u2014 drives
          `sync_sonic()`; since it returns only a device\u2192config dict and swallows
          per-device failures, the driver asserts success itself (expected device
          set derived from golden filenames, empty-config detection, a loguru sink
          that fails the run on any ERROR record)\n- **`tests/e2e/compare.py`** \u2014
          exact file-set equality (missing / extra / mismatched reported separately),
          structural diff paths like `PORT|Ethernet4.speed`, canonical unified diff,
          `--regenerate` for intentional output changes\n- **`tests/e2e/run.sh` +
          Makefile targets** `sonic-e2e`, `sonic-e2e-regen`, `sonic-e2e-up`, `sonic-e2e-down`;
          netbox-manager is installed from a checkout (sibling dir or `NETBOX_MANAGER_DIR`)
          into a dedicated venv\n- **Golden files** for the five example-testbed switches,
          cross-checked against their independent sources (seed YAML, port_config
          `.ini` speeds, the ASN derivation rule) and reproduced byte-for-byte by
          a second seed-and-generate cycle\n- **Zuul job `python-osism-sonic-e2e`**
          in check (restricted by a files matcher to changes that can alter generator
          output) and periodic-daily (unconditional, bounds seed-data drift); netbox-manager
          comes from `required-projects`, so `Depends-On` is honored for its code
          and seed data\n- **Drive-by fix**: `_add_snmp_configuration` no longer builds
          the Redis-backed Ansible vault for devices without encrypted secrets \u2014
          it logged three ERRORs per device in any environment without vault infrastructure
          (found by the new error guard)\n\n## Verification\n\n- 2043 unit tests pass;
          the comparator and driver logic are unit-tested (`tests/unit/e2e/`)\n- Full
          local E2E cycle run twice against kind + NetBox 4.5.10: golden bootstrap,
          then a compare-mode rerun against a fresh re-seed reproduced all five files
          exactly\n\n## Follow-up work\n\n- Scenario seed data for the known regression
          shapes (derived-speed breakout subports, explicit kbps speeds, 4x10G fallback)
          plus VLAN coverage \u2014 the base example data exercises neither breakouts
          nor data-port VLANs, so the paths that broke in #2478 are pinned only once
          that overlay lands\n- Factor the kind/kubectl/helm pre-run into a shared
          zuul-jobs role instead of the copy adapted from netbox-manager's `pre-e2e.yml`\n\nOpened
          as draft so the new Zuul job can validate itself on this PR (the files matcher
          includes `.zuul.yaml`, `tests/e2e/`, and the playbooks).\n\n\U0001F916 Generated
          with [Claude Code](https://claude.com/claude-code)"
        change_url: https://github.com/osism/python-osism/pull/2483
        commit_id: 10d947c87fc4d540ed854511421a710dcf1d8622
        patchset: 10d947c87fc4d540ed854511421a710dcf1d8622
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/python-osism
          name: osism/python-osism
          short_name: python-osism
          src_dir: src/github.com/osism/python-osism
        topic: null
      job: mypy
      jobtags: []
      max_attempts: 3
      message: QWRkIEUyRSBnb2xkZW4gdGVzdHMgZm9yIFNPTmlDIGNvbmZpZyBnZW5lcmF0aW9uCgojIyBTdW1tYXJ5CgpBZGRzIGFuIGVuZC10by1lbmQgZ29sZGVuIHRlc3QgZm9yIHRoZSBTT05pQyBjb25maWcgZ2VuZXJhdG9yOiBwcm92aXNpb24gTmV0Qm94IG9uIGEgbG9jYWwga2luZCBjbHVzdGVyLCBzZWVkIGl0IHdpdGggdGhlIG5ldGJveC1tYW5hZ2VyIGV4YW1wbGUgZGF0YSwgcnVuIGBzeW5jX3NvbmljKClgLCBhbmQgY29tcGFyZSBldmVyeSBleHBvcnRlZCBgY29uZmlnX2RiLmpzb25gIGFnYWluc3QgZ29sZGVuIGZpbGVzIGNvbW1pdHRlZCB1bmRlciBgdGVzdHMvZTJlL2dvbGRlbi9gLiBBbnkgYmVoYXZpb3IgY2hhbmdlIGluIHRoZSBnZW5lcmF0b3IgYmVjb21lcyBhIHJldmlld2FibGUgZ29sZGVuIGRpZmYgaW4gdGhlIHNhbWUgUFIuCgojIyBNb3RpdmF0aW9uCgpVbml0IHRlc3RzIHZlcmlmeSB0aGUgZ2VuZXJhdG9yIGFnYWluc3QgZml4dHVyZSB2YWx1ZXMgdGhhdCBlbmNvZGUgdGhlIGF1dGhvcidzIGFzc3VtcHRpb25zLCBzbyBhIGNsYXNzIG9mIHJlZ3Jlc3Npb25zIOKAlCBzdWNoIGFzIG1peGVkIGticHMvTWJwcyBpbnRlcmZhY2Ugc3BlZWRzIOKAlCBjYW4gcGFzcyB0aGUgdW5pdCBzdWl0ZSB3aGlsZSBwcm9kdWNpbmcgYnJva2VuIHN3aXRjaCBjb25maWd1cmF0aW9ucy4gTm90aGluZyBleGVyY2lzZWQgdGhlIGZ1bGwgcGlwZWxpbmUgKHJlYWwgTmV0Qm94IGRhdGEgaW4sIGNvbXBsZXRlIGNvbmZpZ19kYiBvdXQpIHVudGlsIG5vdzoKCi0gIzI0Nzgg4oCUIHRoZSBjdXN0b21lci12aXNpYmxlIGJyZWFrYWdlIChicmVha291dCBwb3J0cyB3aXRoIGAic3BlZWQiOiAiMTAwImApCi0gIzIyNDYg4oCUIHdoZXJlIHRoYXQgcmVncmVzc2lvbiBzbGlwcGVkIGluLCBwYXN0IGJvdGggYXV0aG9yIGFuZCByZXZpZXcKCiMjIENoYW5nZXMKCi0gKipgU09OSUNfUE9SVF9DT05GSUdfUEFUSGAqKiBzZXR0aW5nIHNvIHRoZSBnZW5lcmF0b3IgY2FuIHJlYWQgdGhlIGluLXJlcG8gYGZpbGVzL3NvbmljL3BvcnRfY29uZmlnL2Agb3V0c2lkZSB0aGUgY29udGFpbmVyIGltYWdlCi0gKipgdGVzdHMvZTJlL2dlbmVyYXRlLnB5YCoqIOKAlCBkcml2ZXMgYHN5bmNfc29uaWMoKWA7IHNpbmNlIGl0IHJldHVybnMgb25seSBhIGRldmljZeKGkmNvbmZpZyBkaWN0IGFuZCBzd2FsbG93cyBwZXItZGV2aWNlIGZhaWx1cmVzLCB0aGUgZHJpdmVyIGFzc2VydHMgc3VjY2VzcyBpdHNlbGYgKGV4cGVjdGVkIGRldmljZSBzZXQgZGVyaXZlZCBmcm9tIGdvbGRlbiBmaWxlbmFtZXMsIGVtcHR5LWNvbmZpZyBkZXRlY3Rpb24sIGEgbG9ndXJ1IHNpbmsgdGhhdCBmYWlscyB0aGUgcnVuIG9uIGFueSBFUlJPUiByZWNvcmQpCi0gKipgdGVzdHMvZTJlL2NvbXBhcmUucHlgKiog4oCUIGV4YWN0IGZpbGUtc2V0IGVxdWFsaXR5IChtaXNzaW5nIC8gZXh0cmEgLyBtaXNtYXRjaGVkIHJlcG9ydGVkIHNlcGFyYXRlbHkpLCBzdHJ1Y3R1cmFsIGRpZmYgcGF0aHMgbGlrZSBgUE9SVHxFdGhlcm5ldDQuc3BlZWRgLCBjYW5vbmljYWwgdW5pZmllZCBkaWZmLCBgLS1yZWdlbmVyYXRlYCBmb3IgaW50ZW50aW9uYWwgb3V0cHV0IGNoYW5nZXMKLSAqKmB0ZXN0cy9lMmUvcnVuLnNoYCArIE1ha2VmaWxlIHRhcmdldHMqKiBgc29uaWMtZTJlYCwgYHNvbmljLWUyZS1yZWdlbmAsIGBzb25pYy1lMmUtdXBgLCBgc29uaWMtZTJlLWRvd25gOyBuZXRib3gtbWFuYWdlciBpcyBpbnN0YWxsZWQgZnJvbSBhIGNoZWNrb3V0IChzaWJsaW5nIGRpciBvciBgTkVUQk9YX01BTkFHRVJfRElSYCkgaW50byBhIGRlZGljYXRlZCB2ZW52Ci0gKipHb2xkZW4gZmlsZXMqKiBmb3IgdGhlIGZpdmUgZXhhbXBsZS10ZXN0YmVkIHN3aXRjaGVzLCBjcm9zcy1jaGVja2VkIGFnYWluc3QgdGhlaXIgaW5kZXBlbmRlbnQgc291cmNlcyAoc2VlZCBZQU1MLCBwb3J0X2NvbmZpZyBgLmluaWAgc3BlZWRzLCB0aGUgQVNOIGRlcml2YXRpb24gcnVsZSkgYW5kIHJlcHJvZHVjZWQgYnl0ZS1mb3ItYnl0ZSBieSBhIHNlY29uZCBzZWVkLWFuZC1nZW5lcmF0ZSBjeWNsZQotICoqWnV1bCBqb2IgYHB5dGhvbi1vc2lzbS1zb25pYy1lMmVgKiogaW4gY2hlY2sgKHJlc3RyaWN0ZWQgYnkgYSBmaWxlcyBtYXRjaGVyIHRvIGNoYW5nZXMgdGhhdCBjYW4gYWx0ZXIgZ2VuZXJhdG9yIG91dHB1dCkgYW5kIHBlcmlvZGljLWRhaWx5ICh1bmNvbmRpdGlvbmFsLCBib3VuZHMgc2VlZC1kYXRhIGRyaWZ0KTsgbmV0Ym94LW1hbmFnZXIgY29tZXMgZnJvbSBgcmVxdWlyZWQtcHJvamVjdHNgLCBzbyBgRGVwZW5kcy1PbmAgaXMgaG9ub3JlZCBmb3IgaXRzIGNvZGUgYW5kIHNlZWQgZGF0YQotICoqRHJpdmUtYnkgZml4Kio6IGBfYWRkX3NubXBfY29uZmlndXJhdGlvbmAgbm8gbG9uZ2VyIGJ1aWxkcyB0aGUgUmVkaXMtYmFja2VkIEFuc2libGUgdmF1bHQgZm9yIGRldmljZXMgd2l0aG91dCBlbmNyeXB0ZWQgc2VjcmV0cyDigJQgaXQgbG9nZ2VkIHRocmVlIEVSUk9ScyBwZXIgZGV2aWNlIGluIGFueSBlbnZpcm9ubWVudCB3aXRob3V0IHZhdWx0IGluZnJhc3RydWN0dXJlIChmb3VuZCBieSB0aGUgbmV3IGVycm9yIGd1YXJkKQoKIyMgVmVyaWZpY2F0aW9uCgotIDIwNDMgdW5pdCB0ZXN0cyBwYXNzOyB0aGUgY29tcGFyYXRvciBhbmQgZHJpdmVyIGxvZ2ljIGFyZSB1bml0LXRlc3RlZCAoYHRlc3RzL3VuaXQvZTJlL2ApCi0gRnVsbCBsb2NhbCBFMkUgY3ljbGUgcnVuIHR3aWNlIGFnYWluc3Qga2luZCArIE5ldEJveCA0LjUuMTA6IGdvbGRlbiBib290c3RyYXAsIHRoZW4gYSBjb21wYXJlLW1vZGUgcmVydW4gYWdhaW5zdCBhIGZyZXNoIHJlLXNlZWQgcmVwcm9kdWNlZCBhbGwgZml2ZSBmaWxlcyBleGFjdGx5CgojIyBGb2xsb3ctdXAgd29yawoKLSBTY2VuYXJpbyBzZWVkIGRhdGEgZm9yIHRoZSBrbm93biByZWdyZXNzaW9uIHNoYXBlcyAoZGVyaXZlZC1zcGVlZCBicmVha291dCBzdWJwb3J0cywgZXhwbGljaXQga2JwcyBzcGVlZHMsIDR4MTBHIGZhbGxiYWNrKSBwbHVzIFZMQU4gY292ZXJhZ2Ug4oCUIHRoZSBiYXNlIGV4YW1wbGUgZGF0YSBleGVyY2lzZXMgbmVpdGhlciBicmVha291dHMgbm9yIGRhdGEtcG9ydCBWTEFOcywgc28gdGhlIHBhdGhzIHRoYXQgYnJva2UgaW4gIzI0NzggYXJlIHBpbm5lZCBvbmx5IG9uY2UgdGhhdCBvdmVybGF5IGxhbmRzCi0gRmFjdG9yIHRoZSBraW5kL2t1YmVjdGwvaGVsbSBwcmUtcnVuIGludG8gYSBzaGFyZWQgenV1bC1qb2JzIHJvbGUgaW5zdGVhZCBvZiB0aGUgY29weSBhZGFwdGVkIGZyb20gbmV0Ym94LW1hbmFnZXIncyBgcHJlLWUyZS55bWxgCgpPcGVuZWQgYXMgZHJhZnQgc28gdGhlIG5ldyBadXVsIGpvYiBjYW4gdmFsaWRhdGUgaXRzZWxmIG9uIHRoaXMgUFIgKHRoZSBmaWxlcyBtYXRjaGVyIGluY2x1ZGVzIGAuenV1bC55YW1sYCwgYHRlc3RzL2UyZS9gLCBhbmQgdGhlIHBsYXlib29rcykuCgrwn6SWIEdlbmVyYXRlZCB3aXRoIFtDbGF1ZGUgQ29kZV0oaHR0cHM6Ly9jbGF1ZGUuY29tL2NsYXVkZS1jb2RlKQ==
      patchset: 10d947c87fc4d540ed854511421a710dcf1d8622
      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/mypy/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/python-osism
        name: osism/python-osism
        short_name: python-osism
        src_dir: src/github.com/osism/python-osism
      projects:
        github.com/osism/python-osism:
          canonical_hostname: github.com
          canonical_name: github.com/osism/python-osism
          checkout: main
          checkout_description: zuul branch
          commit: 1f500b408a7bfaf74138a273ca3263854faaf2d2
          name: osism/python-osism
          required: false
          short_name: python-osism
          src_dir: src/github.com/osism/python-osism
      ref: refs/pull/2483/head
      resources: {}
      tenant: osism
      timeout: 1800
      topic: null
      voting: true
