all:
  children:
    zuul_unreachable:
      hosts: {}
  hosts:
    debian-bookworm:
      ansible_connection: ssh
      ansible_host: 2a13:1a81:8000:3124:f816:3eff:fef1:4a92
      ansible_port: 22
      ansible_python_interpreter: auto
      ansible_user: zuul
      nodepool:
        az: nova
        cloud: regiocloud-a-ci
        external_id: 8c4a47ce-7358-43de-8903-4b2fe16ee25a
        host_id: ec4f54fa666de9bc553bc59c41683f12345b665d0b1af00d715e7318
        interface_ip: 2a13:1a81:8000:3124:f816:3eff:fef1:4a92
        label: debian-bookworm
        node_properties: {}
        private_ipv4: 10.128.7.99
        private_ipv6: null
        provider: regiocloud-a
        public_ipv4: 81.163.192.146
        public_ipv6: 2a13:1a81:8000:3124:f816:3eff:fef1:4a92
        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 yamllint explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: osism/zuul-jobs/.zuul.yaml@main#59>'
      - '<Job yamllint explicit: None implied: None source: osism/netbox-manager/.zuul.yaml@main#39>'
      ansible_version: '9'
      attempts: 1
      branch: main
      build: 438f096321b04d63af91951bccfd3373
      build_refs:
      - branch: main
        change: '275'
        change_message: "Unit tests: Tier 10 \u2014 CLI command wiring (smoke tests)\n\nCloses
          #258\n\n## Tier 10 (of #232) \u2014 CLI command wiring smoke tests\n\nThis
          branch adds smoke tests that drive the Typer commands in\n`netbox_manager/main.py`
          through their dispatch surface \u2014 option parsing,\nworker dispatch,
          and exit codes \u2014 without touching NetBox, `ansible_runner`,\n`git`,
          or the real filesystem. It is **test-only**: no production code is\nchanged.
          Two files are touched \u2014 `tests/conftest.py` (+115) and a new\n`tests/unit/netbox_manager/test_cli_commands.py`
          (+544).\n\n### Change set, in commit order\n\n1. **`71591a2` Add shared
          CLI runner and worker-spy fixtures for command tests**\n   Adds two shared
          fixtures to `tests/conftest.py`:\n   - `cli_runner` \u2014 a `typer.testing.CliRunner`
          for invoking `main.app`.\n   - `mock_cli_workers` \u2014 replaces every
          heavy worker (`_run_main`,\n     `_run_autoconf_for_devices`, both `validate_*`
          checks,\n     `validate_netbox_connection`, `create_netbox_api`, `init_logger`)
          with\n     `MagicMock` spies, returned as a `SimpleNamespace`. `init_logger`
          is spied\n     both so the real `logger.remove()` cannot tear down the conftest\n
          \    loguru\u2192`caplog` bridge mid-command, and as the assertion point
          for\n     `--debug` / `--verbose` plumbing.\n\n     Also sets `.message`
          on the fake `make_request_error` exception (alongside\n     the existing
          `.error`) so it can be stringified \u2014 `RequestError.__str__`\n     returns
          `self.message`, and the `main.py` handlers log\n     `f\"NetBox API error:
          {e}\"`. The dtl tiers read `.error`, which is unchanged.\n\n2. **`73b2a3b`
          Add smoke tests for run and autoconf command wiring**\n   `run_command`:
          the 17 options map positionally into the patched `_run_main`\n   (including
          repeatable `--filter-device`); a bare `run` forwards the documented\n   defaults;
          dispatch touches no worker outside the patched `_run_main`; and\n   `--version`
          fires the eager callback without running the body.\n   `autoconf_command`:
          flat-mode dispatch, `--output` prefix/dir derivation,\n   `--dryrun` / `--debug`
          plumbing, and `RequestError` / generic worker errors\n   exit 1.\n\n3. **`ea84ea5`
          Add smoke tests for validate and purge command wiring**\n   `validate_command`:
          per-check dispatch (`--check ip-prefixes` /\n   `vrf-consistency` run only
          their own check, no `--check` runs both), an\n   unknown check exits 1 before
          any worker, and the non-zero-on-findings\n   contract (passed checks exit
          0; findings and worker errors exit 1; an inner\n   `typer.Exit` is re-raised
          unchanged).\n   `purge_command`: the dry-run / confirmation gate only \u2014
          dry-run skips the\n   confirmation and records zero deletions, a declined
          confirmation cancels\n   before the API client is built, and `--limit` narrows
          (matching) or empties\n   and exits 1 (unknown). A module-local fake `pynetbox`
          tree keeps the\n   destructive path unreached.\n\n4. **`6ee0536` Add smoke
          tests for entrypoint and utility wiring**\n   Covers the remaining seams:
          `version_command` prints and returns without\n   `typer.Exit`; `main_callback`
          with no subcommand dispatches to `run_command`\n   with documented defaults;
          `main` registers `signal_handler_sigint` for SIGINT\n   and calls `app()`;
          `signal_handler_sigint` prints and raises `typer.Exit(0)`;\n   `init_logger`
          selects DEBUG vs INFO and wires `logger.remove()` then\n   `logger.add(...)`;
          and `callback_version` prints + exits on True, no-op on\n   False.\n\n###
          Divergences from the issue\n\nNone observed. The commits track the Tier
          10 scope directly (the `run`,\n`autoconf`, `validate`, `purge`, entrypoint,
          and utility command groups), and\nthe work stays within the smoke-test remit
          \u2014 asserting dispatch, option\nplumbing, and exit codes rather than
          the workers' internal behavior.\n\n---\n\n_Implemented by [planwerk-agent](https://github.com/planwerk/planwerk-agent)
          6b3f3ea with Claude:claude-opus-4-8_\n"
        change_url: https://github.com/osism/netbox-manager/pull/275
        commit_id: 9346eedac2d621a936af75ae421232cb2f1ebbe3
        patchset: 9346eedac2d621a936af75ae421232cb2f1ebbe3
        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: c289533fefaa4e83b13d4c1ed654474f
      buildset_refs:
      - branch: main
        change: '275'
        change_message: "Unit tests: Tier 10 \u2014 CLI command wiring (smoke tests)\n\nCloses
          #258\n\n## Tier 10 (of #232) \u2014 CLI command wiring smoke tests\n\nThis
          branch adds smoke tests that drive the Typer commands in\n`netbox_manager/main.py`
          through their dispatch surface \u2014 option parsing,\nworker dispatch,
          and exit codes \u2014 without touching NetBox, `ansible_runner`,\n`git`,
          or the real filesystem. It is **test-only**: no production code is\nchanged.
          Two files are touched \u2014 `tests/conftest.py` (+115) and a new\n`tests/unit/netbox_manager/test_cli_commands.py`
          (+544).\n\n### Change set, in commit order\n\n1. **`71591a2` Add shared
          CLI runner and worker-spy fixtures for command tests**\n   Adds two shared
          fixtures to `tests/conftest.py`:\n   - `cli_runner` \u2014 a `typer.testing.CliRunner`
          for invoking `main.app`.\n   - `mock_cli_workers` \u2014 replaces every
          heavy worker (`_run_main`,\n     `_run_autoconf_for_devices`, both `validate_*`
          checks,\n     `validate_netbox_connection`, `create_netbox_api`, `init_logger`)
          with\n     `MagicMock` spies, returned as a `SimpleNamespace`. `init_logger`
          is spied\n     both so the real `logger.remove()` cannot tear down the conftest\n
          \    loguru\u2192`caplog` bridge mid-command, and as the assertion point
          for\n     `--debug` / `--verbose` plumbing.\n\n     Also sets `.message`
          on the fake `make_request_error` exception (alongside\n     the existing
          `.error`) so it can be stringified \u2014 `RequestError.__str__`\n     returns
          `self.message`, and the `main.py` handlers log\n     `f\"NetBox API error:
          {e}\"`. The dtl tiers read `.error`, which is unchanged.\n\n2. **`73b2a3b`
          Add smoke tests for run and autoconf command wiring**\n   `run_command`:
          the 17 options map positionally into the patched `_run_main`\n   (including
          repeatable `--filter-device`); a bare `run` forwards the documented\n   defaults;
          dispatch touches no worker outside the patched `_run_main`; and\n   `--version`
          fires the eager callback without running the body.\n   `autoconf_command`:
          flat-mode dispatch, `--output` prefix/dir derivation,\n   `--dryrun` / `--debug`
          plumbing, and `RequestError` / generic worker errors\n   exit 1.\n\n3. **`ea84ea5`
          Add smoke tests for validate and purge command wiring**\n   `validate_command`:
          per-check dispatch (`--check ip-prefixes` /\n   `vrf-consistency` run only
          their own check, no `--check` runs both), an\n   unknown check exits 1 before
          any worker, and the non-zero-on-findings\n   contract (passed checks exit
          0; findings and worker errors exit 1; an inner\n   `typer.Exit` is re-raised
          unchanged).\n   `purge_command`: the dry-run / confirmation gate only \u2014
          dry-run skips the\n   confirmation and records zero deletions, a declined
          confirmation cancels\n   before the API client is built, and `--limit` narrows
          (matching) or empties\n   and exits 1 (unknown). A module-local fake `pynetbox`
          tree keeps the\n   destructive path unreached.\n\n4. **`6ee0536` Add smoke
          tests for entrypoint and utility wiring**\n   Covers the remaining seams:
          `version_command` prints and returns without\n   `typer.Exit`; `main_callback`
          with no subcommand dispatches to `run_command`\n   with documented defaults;
          `main` registers `signal_handler_sigint` for SIGINT\n   and calls `app()`;
          `signal_handler_sigint` prints and raises `typer.Exit(0)`;\n   `init_logger`
          selects DEBUG vs INFO and wires `logger.remove()` then\n   `logger.add(...)`;
          and `callback_version` prints + exits on True, no-op on\n   False.\n\n###
          Divergences from the issue\n\nNone observed. The commits track the Tier
          10 scope directly (the `run`,\n`autoconf`, `validate`, `purge`, entrypoint,
          and utility command groups), and\nthe work stays within the smoke-test remit
          \u2014 asserting dispatch, option\nplumbing, and exit codes rather than
          the workers' internal behavior.\n\n---\n\n_Implemented by [planwerk-agent](https://github.com/planwerk/planwerk-agent)
          6b3f3ea with Claude:claude-opus-4-8_\n"
        change_url: https://github.com/osism/netbox-manager/pull/275
        commit_id: 9346eedac2d621a936af75ae421232cb2f1ebbe3
        patchset: 9346eedac2d621a936af75ae421232cb2f1ebbe3
        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: '275'
      change_message: "Unit tests: Tier 10 \u2014 CLI command wiring (smoke tests)\n\nCloses
        #258\n\n## Tier 10 (of #232) \u2014 CLI command wiring smoke tests\n\nThis
        branch adds smoke tests that drive the Typer commands in\n`netbox_manager/main.py`
        through their dispatch surface \u2014 option parsing,\nworker dispatch, and
        exit codes \u2014 without touching NetBox, `ansible_runner`,\n`git`, or the
        real filesystem. It is **test-only**: no production code is\nchanged. Two
        files are touched \u2014 `tests/conftest.py` (+115) and a new\n`tests/unit/netbox_manager/test_cli_commands.py`
        (+544).\n\n### Change set, in commit order\n\n1. **`71591a2` Add shared CLI
        runner and worker-spy fixtures for command tests**\n   Adds two shared fixtures
        to `tests/conftest.py`:\n   - `cli_runner` \u2014 a `typer.testing.CliRunner`
        for invoking `main.app`.\n   - `mock_cli_workers` \u2014 replaces every heavy
        worker (`_run_main`,\n     `_run_autoconf_for_devices`, both `validate_*`
        checks,\n     `validate_netbox_connection`, `create_netbox_api`, `init_logger`)
        with\n     `MagicMock` spies, returned as a `SimpleNamespace`. `init_logger`
        is spied\n     both so the real `logger.remove()` cannot tear down the conftest\n
        \    loguru\u2192`caplog` bridge mid-command, and as the assertion point for\n
        \    `--debug` / `--verbose` plumbing.\n\n     Also sets `.message` on the
        fake `make_request_error` exception (alongside\n     the existing `.error`)
        so it can be stringified \u2014 `RequestError.__str__`\n     returns `self.message`,
        and the `main.py` handlers log\n     `f\"NetBox API error: {e}\"`. The dtl
        tiers read `.error`, which is unchanged.\n\n2. **`73b2a3b` Add smoke tests
        for run and autoconf command wiring**\n   `run_command`: the 17 options map
        positionally into the patched `_run_main`\n   (including repeatable `--filter-device`);
        a bare `run` forwards the documented\n   defaults; dispatch touches no worker
        outside the patched `_run_main`; and\n   `--version` fires the eager callback
        without running the body.\n   `autoconf_command`: flat-mode dispatch, `--output`
        prefix/dir derivation,\n   `--dryrun` / `--debug` plumbing, and `RequestError`
        / generic worker errors\n   exit 1.\n\n3. **`ea84ea5` Add smoke tests for
        validate and purge command wiring**\n   `validate_command`: per-check dispatch
        (`--check ip-prefixes` /\n   `vrf-consistency` run only their own check, no
        `--check` runs both), an\n   unknown check exits 1 before any worker, and
        the non-zero-on-findings\n   contract (passed checks exit 0; findings and
        worker errors exit 1; an inner\n   `typer.Exit` is re-raised unchanged).\n
        \  `purge_command`: the dry-run / confirmation gate only \u2014 dry-run skips
        the\n   confirmation and records zero deletions, a declined confirmation cancels\n
        \  before the API client is built, and `--limit` narrows (matching) or empties\n
        \  and exits 1 (unknown). A module-local fake `pynetbox` tree keeps the\n
        \  destructive path unreached.\n\n4. **`6ee0536` Add smoke tests for entrypoint
        and utility wiring**\n   Covers the remaining seams: `version_command` prints
        and returns without\n   `typer.Exit`; `main_callback` with no subcommand dispatches
        to `run_command`\n   with documented defaults; `main` registers `signal_handler_sigint`
        for SIGINT\n   and calls `app()`; `signal_handler_sigint` prints and raises
        `typer.Exit(0)`;\n   `init_logger` selects DEBUG vs INFO and wires `logger.remove()`
        then\n   `logger.add(...)`; and `callback_version` prints + exits on True,
        no-op on\n   False.\n\n### Divergences from the issue\n\nNone observed. The
        commits track the Tier 10 scope directly (the `run`,\n`autoconf`, `validate`,
        `purge`, entrypoint, and utility command groups), and\nthe work stays within
        the smoke-test remit \u2014 asserting dispatch, option\nplumbing, and exit
        codes rather than the workers' internal behavior.\n\n---\n\n_Implemented by
        [planwerk-agent](https://github.com/planwerk/planwerk-agent) 6b3f3ea with
        Claude:claude-opus-4-8_\n"
      change_url: https://github.com/osism/netbox-manager/pull/275
      child_jobs: []
      commit_id: 9346eedac2d621a936af75ae421232cb2f1ebbe3
      event_id: e077b3c0-7903-11f1-92d0-ce57ac342c88
      executor:
        hostname: 521e9411259a
        inventory_file: /var/lib/zuul/builds/438f096321b04d63af91951bccfd3373/ansible/inventory.yaml
        log_root: /var/lib/zuul/builds/438f096321b04d63af91951bccfd3373/work/logs
        result_data_file: /var/lib/zuul/builds/438f096321b04d63af91951bccfd3373/work/results.json
        src_root: /var/lib/zuul/builds/438f096321b04d63af91951bccfd3373/work/src
        work_root: /var/lib/zuul/builds/438f096321b04d63af91951bccfd3373/work
      include_vars: []
      items:
      - branch: main
        change: '275'
        change_message: "Unit tests: Tier 10 \u2014 CLI command wiring (smoke tests)\n\nCloses
          #258\n\n## Tier 10 (of #232) \u2014 CLI command wiring smoke tests\n\nThis
          branch adds smoke tests that drive the Typer commands in\n`netbox_manager/main.py`
          through their dispatch surface \u2014 option parsing,\nworker dispatch,
          and exit codes \u2014 without touching NetBox, `ansible_runner`,\n`git`,
          or the real filesystem. It is **test-only**: no production code is\nchanged.
          Two files are touched \u2014 `tests/conftest.py` (+115) and a new\n`tests/unit/netbox_manager/test_cli_commands.py`
          (+544).\n\n### Change set, in commit order\n\n1. **`71591a2` Add shared
          CLI runner and worker-spy fixtures for command tests**\n   Adds two shared
          fixtures to `tests/conftest.py`:\n   - `cli_runner` \u2014 a `typer.testing.CliRunner`
          for invoking `main.app`.\n   - `mock_cli_workers` \u2014 replaces every
          heavy worker (`_run_main`,\n     `_run_autoconf_for_devices`, both `validate_*`
          checks,\n     `validate_netbox_connection`, `create_netbox_api`, `init_logger`)
          with\n     `MagicMock` spies, returned as a `SimpleNamespace`. `init_logger`
          is spied\n     both so the real `logger.remove()` cannot tear down the conftest\n
          \    loguru\u2192`caplog` bridge mid-command, and as the assertion point
          for\n     `--debug` / `--verbose` plumbing.\n\n     Also sets `.message`
          on the fake `make_request_error` exception (alongside\n     the existing
          `.error`) so it can be stringified \u2014 `RequestError.__str__`\n     returns
          `self.message`, and the `main.py` handlers log\n     `f\"NetBox API error:
          {e}\"`. The dtl tiers read `.error`, which is unchanged.\n\n2. **`73b2a3b`
          Add smoke tests for run and autoconf command wiring**\n   `run_command`:
          the 17 options map positionally into the patched `_run_main`\n   (including
          repeatable `--filter-device`); a bare `run` forwards the documented\n   defaults;
          dispatch touches no worker outside the patched `_run_main`; and\n   `--version`
          fires the eager callback without running the body.\n   `autoconf_command`:
          flat-mode dispatch, `--output` prefix/dir derivation,\n   `--dryrun` / `--debug`
          plumbing, and `RequestError` / generic worker errors\n   exit 1.\n\n3. **`ea84ea5`
          Add smoke tests for validate and purge command wiring**\n   `validate_command`:
          per-check dispatch (`--check ip-prefixes` /\n   `vrf-consistency` run only
          their own check, no `--check` runs both), an\n   unknown check exits 1 before
          any worker, and the non-zero-on-findings\n   contract (passed checks exit
          0; findings and worker errors exit 1; an inner\n   `typer.Exit` is re-raised
          unchanged).\n   `purge_command`: the dry-run / confirmation gate only \u2014
          dry-run skips the\n   confirmation and records zero deletions, a declined
          confirmation cancels\n   before the API client is built, and `--limit` narrows
          (matching) or empties\n   and exits 1 (unknown). A module-local fake `pynetbox`
          tree keeps the\n   destructive path unreached.\n\n4. **`6ee0536` Add smoke
          tests for entrypoint and utility wiring**\n   Covers the remaining seams:
          `version_command` prints and returns without\n   `typer.Exit`; `main_callback`
          with no subcommand dispatches to `run_command`\n   with documented defaults;
          `main` registers `signal_handler_sigint` for SIGINT\n   and calls `app()`;
          `signal_handler_sigint` prints and raises `typer.Exit(0)`;\n   `init_logger`
          selects DEBUG vs INFO and wires `logger.remove()` then\n   `logger.add(...)`;
          and `callback_version` prints + exits on True, no-op on\n   False.\n\n###
          Divergences from the issue\n\nNone observed. The commits track the Tier
          10 scope directly (the `run`,\n`autoconf`, `validate`, `purge`, entrypoint,
          and utility command groups), and\nthe work stays within the smoke-test remit
          \u2014 asserting dispatch, option\nplumbing, and exit codes rather than
          the workers' internal behavior.\n\n---\n\n_Implemented by [planwerk-agent](https://github.com/planwerk/planwerk-agent)
          6b3f3ea with Claude:claude-opus-4-8_\n"
        change_url: https://github.com/osism/netbox-manager/pull/275
        commit_id: 9346eedac2d621a936af75ae421232cb2f1ebbe3
        patchset: 9346eedac2d621a936af75ae421232cb2f1ebbe3
        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: yamllint
      jobtags: []
      max_attempts: 3
      message: VW5pdCB0ZXN0czogVGllciAxMCDigJQgQ0xJIGNvbW1hbmQgd2lyaW5nIChzbW9rZSB0ZXN0cykKCkNsb3NlcyAjMjU4CgojIyBUaWVyIDEwIChvZiAjMjMyKSDigJQgQ0xJIGNvbW1hbmQgd2lyaW5nIHNtb2tlIHRlc3RzCgpUaGlzIGJyYW5jaCBhZGRzIHNtb2tlIHRlc3RzIHRoYXQgZHJpdmUgdGhlIFR5cGVyIGNvbW1hbmRzIGluCmBuZXRib3hfbWFuYWdlci9tYWluLnB5YCB0aHJvdWdoIHRoZWlyIGRpc3BhdGNoIHN1cmZhY2Ug4oCUIG9wdGlvbiBwYXJzaW5nLAp3b3JrZXIgZGlzcGF0Y2gsIGFuZCBleGl0IGNvZGVzIOKAlCB3aXRob3V0IHRvdWNoaW5nIE5ldEJveCwgYGFuc2libGVfcnVubmVyYCwKYGdpdGAsIG9yIHRoZSByZWFsIGZpbGVzeXN0ZW0uIEl0IGlzICoqdGVzdC1vbmx5Kio6IG5vIHByb2R1Y3Rpb24gY29kZSBpcwpjaGFuZ2VkLiBUd28gZmlsZXMgYXJlIHRvdWNoZWQg4oCUIGB0ZXN0cy9jb25mdGVzdC5weWAgKCsxMTUpIGFuZCBhIG5ldwpgdGVzdHMvdW5pdC9uZXRib3hfbWFuYWdlci90ZXN0X2NsaV9jb21tYW5kcy5weWAgKCs1NDQpLgoKIyMjIENoYW5nZSBzZXQsIGluIGNvbW1pdCBvcmRlcgoKMS4gKipgNzE1OTFhMmAgQWRkIHNoYXJlZCBDTEkgcnVubmVyIGFuZCB3b3JrZXItc3B5IGZpeHR1cmVzIGZvciBjb21tYW5kIHRlc3RzKioKICAgQWRkcyB0d28gc2hhcmVkIGZpeHR1cmVzIHRvIGB0ZXN0cy9jb25mdGVzdC5weWA6CiAgIC0gYGNsaV9ydW5uZXJgIOKAlCBhIGB0eXBlci50ZXN0aW5nLkNsaVJ1bm5lcmAgZm9yIGludm9raW5nIGBtYWluLmFwcGAuCiAgIC0gYG1vY2tfY2xpX3dvcmtlcnNgIOKAlCByZXBsYWNlcyBldmVyeSBoZWF2eSB3b3JrZXIgKGBfcnVuX21haW5gLAogICAgIGBfcnVuX2F1dG9jb25mX2Zvcl9kZXZpY2VzYCwgYm90aCBgdmFsaWRhdGVfKmAgY2hlY2tzLAogICAgIGB2YWxpZGF0ZV9uZXRib3hfY29ubmVjdGlvbmAsIGBjcmVhdGVfbmV0Ym94X2FwaWAsIGBpbml0X2xvZ2dlcmApIHdpdGgKICAgICBgTWFnaWNNb2NrYCBzcGllcywgcmV0dXJuZWQgYXMgYSBgU2ltcGxlTmFtZXNwYWNlYC4gYGluaXRfbG9nZ2VyYCBpcyBzcGllZAogICAgIGJvdGggc28gdGhlIHJlYWwgYGxvZ2dlci5yZW1vdmUoKWAgY2Fubm90IHRlYXIgZG93biB0aGUgY29uZnRlc3QKICAgICBsb2d1cnXihpJgY2FwbG9nYCBicmlkZ2UgbWlkLWNvbW1hbmQsIGFuZCBhcyB0aGUgYXNzZXJ0aW9uIHBvaW50IGZvcgogICAgIGAtLWRlYnVnYCAvIGAtLXZlcmJvc2VgIHBsdW1iaW5nLgoKICAgICBBbHNvIHNldHMgYC5tZXNzYWdlYCBvbiB0aGUgZmFrZSBgbWFrZV9yZXF1ZXN0X2Vycm9yYCBleGNlcHRpb24gKGFsb25nc2lkZQogICAgIHRoZSBleGlzdGluZyBgLmVycm9yYCkgc28gaXQgY2FuIGJlIHN0cmluZ2lmaWVkIOKAlCBgUmVxdWVzdEVycm9yLl9fc3RyX19gCiAgICAgcmV0dXJucyBgc2VsZi5tZXNzYWdlYCwgYW5kIHRoZSBgbWFpbi5weWAgaGFuZGxlcnMgbG9nCiAgICAgYGYiTmV0Qm94IEFQSSBlcnJvcjoge2V9ImAuIFRoZSBkdGwgdGllcnMgcmVhZCBgLmVycm9yYCwgd2hpY2ggaXMgdW5jaGFuZ2VkLgoKMi4gKipgNzNiMmEzYmAgQWRkIHNtb2tlIHRlc3RzIGZvciBydW4gYW5kIGF1dG9jb25mIGNvbW1hbmQgd2lyaW5nKioKICAgYHJ1bl9jb21tYW5kYDogdGhlIDE3IG9wdGlvbnMgbWFwIHBvc2l0aW9uYWxseSBpbnRvIHRoZSBwYXRjaGVkIGBfcnVuX21haW5gCiAgIChpbmNsdWRpbmcgcmVwZWF0YWJsZSBgLS1maWx0ZXItZGV2aWNlYCk7IGEgYmFyZSBgcnVuYCBmb3J3YXJkcyB0aGUgZG9jdW1lbnRlZAogICBkZWZhdWx0czsgZGlzcGF0Y2ggdG91Y2hlcyBubyB3b3JrZXIgb3V0c2lkZSB0aGUgcGF0Y2hlZCBgX3J1bl9tYWluYDsgYW5kCiAgIGAtLXZlcnNpb25gIGZpcmVzIHRoZSBlYWdlciBjYWxsYmFjayB3aXRob3V0IHJ1bm5pbmcgdGhlIGJvZHkuCiAgIGBhdXRvY29uZl9jb21tYW5kYDogZmxhdC1tb2RlIGRpc3BhdGNoLCBgLS1vdXRwdXRgIHByZWZpeC9kaXIgZGVyaXZhdGlvbiwKICAgYC0tZHJ5cnVuYCAvIGAtLWRlYnVnYCBwbHVtYmluZywgYW5kIGBSZXF1ZXN0RXJyb3JgIC8gZ2VuZXJpYyB3b3JrZXIgZXJyb3JzCiAgIGV4aXQgMS4KCjMuICoqYGVhODRlYTVgIEFkZCBzbW9rZSB0ZXN0cyBmb3IgdmFsaWRhdGUgYW5kIHB1cmdlIGNvbW1hbmQgd2lyaW5nKioKICAgYHZhbGlkYXRlX2NvbW1hbmRgOiBwZXItY2hlY2sgZGlzcGF0Y2ggKGAtLWNoZWNrIGlwLXByZWZpeGVzYCAvCiAgIGB2cmYtY29uc2lzdGVuY3lgIHJ1biBvbmx5IHRoZWlyIG93biBjaGVjaywgbm8gYC0tY2hlY2tgIHJ1bnMgYm90aCksIGFuCiAgIHVua25vd24gY2hlY2sgZXhpdHMgMSBiZWZvcmUgYW55IHdvcmtlciwgYW5kIHRoZSBub24temVyby1vbi1maW5kaW5ncwogICBjb250cmFjdCAocGFzc2VkIGNoZWNrcyBleGl0IDA7IGZpbmRpbmdzIGFuZCB3b3JrZXIgZXJyb3JzIGV4aXQgMTsgYW4gaW5uZXIKICAgYHR5cGVyLkV4aXRgIGlzIHJlLXJhaXNlZCB1bmNoYW5nZWQpLgogICBgcHVyZ2VfY29tbWFuZGA6IHRoZSBkcnktcnVuIC8gY29uZmlybWF0aW9uIGdhdGUgb25seSDigJQgZHJ5LXJ1biBza2lwcyB0aGUKICAgY29uZmlybWF0aW9uIGFuZCByZWNvcmRzIHplcm8gZGVsZXRpb25zLCBhIGRlY2xpbmVkIGNvbmZpcm1hdGlvbiBjYW5jZWxzCiAgIGJlZm9yZSB0aGUgQVBJIGNsaWVudCBpcyBidWlsdCwgYW5kIGAtLWxpbWl0YCBuYXJyb3dzIChtYXRjaGluZykgb3IgZW1wdGllcwogICBhbmQgZXhpdHMgMSAodW5rbm93bikuIEEgbW9kdWxlLWxvY2FsIGZha2UgYHB5bmV0Ym94YCB0cmVlIGtlZXBzIHRoZQogICBkZXN0cnVjdGl2ZSBwYXRoIHVucmVhY2hlZC4KCjQuICoqYDZlZTA1MzZgIEFkZCBzbW9rZSB0ZXN0cyBmb3IgZW50cnlwb2ludCBhbmQgdXRpbGl0eSB3aXJpbmcqKgogICBDb3ZlcnMgdGhlIHJlbWFpbmluZyBzZWFtczogYHZlcnNpb25fY29tbWFuZGAgcHJpbnRzIGFuZCByZXR1cm5zIHdpdGhvdXQKICAgYHR5cGVyLkV4aXRgOyBgbWFpbl9jYWxsYmFja2Agd2l0aCBubyBzdWJjb21tYW5kIGRpc3BhdGNoZXMgdG8gYHJ1bl9jb21tYW5kYAogICB3aXRoIGRvY3VtZW50ZWQgZGVmYXVsdHM7IGBtYWluYCByZWdpc3RlcnMgYHNpZ25hbF9oYW5kbGVyX3NpZ2ludGAgZm9yIFNJR0lOVAogICBhbmQgY2FsbHMgYGFwcCgpYDsgYHNpZ25hbF9oYW5kbGVyX3NpZ2ludGAgcHJpbnRzIGFuZCByYWlzZXMgYHR5cGVyLkV4aXQoMClgOwogICBgaW5pdF9sb2dnZXJgIHNlbGVjdHMgREVCVUcgdnMgSU5GTyBhbmQgd2lyZXMgYGxvZ2dlci5yZW1vdmUoKWAgdGhlbgogICBgbG9nZ2VyLmFkZCguLi4pYDsgYW5kIGBjYWxsYmFja192ZXJzaW9uYCBwcmludHMgKyBleGl0cyBvbiBUcnVlLCBuby1vcCBvbgogICBGYWxzZS4KCiMjIyBEaXZlcmdlbmNlcyBmcm9tIHRoZSBpc3N1ZQoKTm9uZSBvYnNlcnZlZC4gVGhlIGNvbW1pdHMgdHJhY2sgdGhlIFRpZXIgMTAgc2NvcGUgZGlyZWN0bHkgKHRoZSBgcnVuYCwKYGF1dG9jb25mYCwgYHZhbGlkYXRlYCwgYHB1cmdlYCwgZW50cnlwb2ludCwgYW5kIHV0aWxpdHkgY29tbWFuZCBncm91cHMpLCBhbmQKdGhlIHdvcmsgc3RheXMgd2l0aGluIHRoZSBzbW9rZS10ZXN0IHJlbWl0IOKAlCBhc3NlcnRpbmcgZGlzcGF0Y2gsIG9wdGlvbgpwbHVtYmluZywgYW5kIGV4aXQgY29kZXMgcmF0aGVyIHRoYW4gdGhlIHdvcmtlcnMnIGludGVybmFsIGJlaGF2aW9yLgoKLS0tCgpfSW1wbGVtZW50ZWQgYnkgW3BsYW53ZXJrLWFnZW50XShodHRwczovL2dpdGh1Yi5jb20vcGxhbndlcmsvcGxhbndlcmstYWdlbnQpIDZiM2YzZWEgd2l0aCBDbGF1ZGU6Y2xhdWRlLW9wdXMtNC04Xwo=
      patchset: 9346eedac2d621a936af75ae421232cb2f1ebbe3
      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/yamllint/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: d6d9a9835052a4261d1edf01a0f66e53b6dba857
          name: osism/netbox-manager
          required: false
          short_name: netbox-manager
          src_dir: src/github.com/osism/netbox-manager
      ref: refs/pull/275/head
      resources: {}
      tenant: osism
      timeout: 1800
      topic: null
      voting: true
