all:
  children:
    zuul_unreachable:
      hosts: {}
  hosts:
    debian-bookworm:
      ansible_connection: ssh
      ansible_host: 2a13:1a81:8000:3124:f816:3eff:fec4:2e25
      ansible_port: 22
      ansible_python_interpreter: auto
      ansible_user: zuul
      nodepool:
        az: nova
        cloud: regiocloud-a-ci
        external_id: 447b3ba8-1825-42e6-978e-19af2aefc80f
        host_id: 5afd8fc909abddfe2ce3a956a91bbe56629648b7209fd0acfa541862
        interface_ip: 2a13:1a81:8000:3124:f816:3eff:fec4:2e25
        label: debian-bookworm
        node_properties: {}
        private_ipv4: 10.128.7.61
        private_ipv6: null
        provider: regiocloud-a
        public_ipv4: 81.163.192.54
        public_ipv6: 2a13:1a81:8000:3124:f816:3eff:fec4:2e25
        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/openstack-project-manager/.zuul.yaml@main#26>'
      ansible_version: '9'
      attempts: 1
      branch: main
      build: d2c9d94bf03f43138e183d70d6c25f6a
      build_refs:
      - branch: main
        change: '294'
        change_message: "Add Keystone-on-kind integration test (forge)\n\n## Summary\n\nAdds
          the first integration test for `openstack-project-manager`: it deploys a
          **live, Keystone-only Keystone** on a [kind](https://kind.sigs.k8s.io/)
          cluster via [forge](https://github.com/c5c3/forge), then drives the real
          `tox -e create` path as the admin account to create one project and asserts
          the result through the OpenStack SDK. This is the first thing in the repo
          that exercises a real `openstack.connect()` / `keystone` path instead of
          the mocks used by `test/unit/`.\n\nCloses #293\n\n## Change set (in commit
          order)\n\n1. **`68776e6` Add forge Keystone deploy script and ControlPlane
          CR**\n   - `test/integration/controlplane.yaml`: a Keystone-only forge `ControlPlane`
          CR (release `2025.2`, single replica, exposed at `keystone.127-0-0-1.nip.io:8443/v3`
          via the `openstack-gw` gateway).\n   - `test/integration/deploy_keystone.sh`:
          clones forge pinned to a known-good commit (`FORGE_REF`), uses forge's own
          `install-test-deps` to provide the pinned `kind`/`kubectl` toolchain, stands
          up the kind cluster + ControlPlane, then mints an ephemeral `clouds.yaml`
          from the operator-projected `controlplane-keystone-admin-credentials` Secret.
          It refuses to clobber an `OS_CLIENT_CONFIG_FILE` that points outside the
          dedicated in-tree path, serializes `clouds.yaml` with a YAML library (not
          a heredoc) so an arbitrary admin password can't corrupt the file, and pre-creates
          the `member` and `load-balancer_member` roles. The latter is needed because
          `create.py` indexes its role cache directly and a bare Keystone ships `member`
          but not `load-balancer_member` (Octavia normally provisions it) \u2014 `create.py`
          itself is left untouched.\n\n2. **`b7bd7ec` Add integration run.sh orchestration
          and SDK verifier**\n   - `test/integration/run.sh`: orchestrates deploy
          \u2192 `tox -e create` (as admin, with `--nodomain-name-prefix` so the project
          is named exactly `opm-integration-test`) \u2192 `verify.py`. An `EXIT` trap
          always tears down the kind cluster, but only when this run created it (a
          pre-existing debug cluster is reused and left in place); on failure it dumps
          diagnostics first. Best-effort project deletion keeps reruns idempotent
          unless `KEEP_PROJECT=1`.\n   - `test/integration/verify.py`: a standalone
          openstacksdk script (deliberately **not** named `test_*.py`, so `tox -e
          test` never collects it) that asserts the `default` domain resolves, the
          `opm-integration-test` project exists in it, and the matching per-project
          group exists; it exits non-zero on any failed assertion.\n   - `.gitignore`:
          ignores the generated `test/integration/clouds.yaml`.\n   - `tox.ini`: passes
          `OS_CLIENT_CONFIG_FILE` through to the create env.\n\n3. **`1be0a3c` Add
          Makefile integration targets**\n   - `make integration` (full provision/create/verify/teardown
          cycle), `make integration-up` (deploy and leave the cluster running for
          local debugging), `make integration-down` (delete the kind cluster).\n\n4.
          **`b470a8e` Add Ansible pre/test playbooks for integration job**\n   - `playbooks/pre-integration.yml`:
          prepares an IPv6-only Zuul node \u2014 `ensure-pip`/`ensure-pipenv`/`ensure-docker`
          roles, the `libldap2-dev`/`libsasl2-dev` build deps the create env needs,
          and an `accept_ra=2` sysctl fix so the node keeps honouring router advertisements
          once kind enables IPv6 forwarding.\n   - `playbooks/test-integration.yml`:
          installs `tox` + `openstacksdk` into a throwaway venv and runs `make integration`
          from the checkout.\n\n5. **`bb61192` Add periodic-daily Zuul integration
          job**\n   - `.zuul.yaml`: defines `openstack-project-manager-integration`
          (ubuntu-noble, 2400s timeout) and adds it to **periodic-daily only**, so
          the heavy kind+Keystone job does not slow the check gate (which is left
          unchanged).\n\n6. **`c3db56a` Document the integration test harness**\n
          \  - `test/integration/README.md`: prerequisites, the make targets, the
          environment overrides, what `verify.py` asserts, and the ephemeral-credentials
          handling.\n\n## Notes / divergences from the issue\n\n- **Keystone-only
          deploy:** the issue asks to \"deploy Keystone on kind (forge)\". The harness
          applies a Keystone-only `ControlPlane` rather than a full forge control
          plane, keeping the job as light as feasible for the single happy-path assertion.\n-
          **`load-balancer_member` workaround:** the only accommodation to the production
          code is pre-creating roles `create.py` expects (`member`, `load-balancer_member`)
          on the bare Keystone. `create.py` is intentionally left untouched; the workaround
          lives entirely in `deploy_keystone.sh`.\n- **CI placement:** the job runs
          in `periodic-daily`, not the check pipeline, so PRs are not gated on the
          multi-minute kind+Keystone bring-up.\n- The verifier checks not just the
          project but also the per-project group of the same name that `create.py`
          provisions, giving the happy path a slightly stronger assertion than the
          issue's minimal \"create a project\".\n\n---\n\n_Implemented by [planwerk-agent](https://github.com/planwerk/planwerk-agent)
          84299e2 with Claude:claude-opus-4-8_\n"
        change_url: https://github.com/osism/openstack-project-manager/pull/294
        commit_id: 665985802eb8fee220cedefec56a607656a22d3b
        patchset: 665985802eb8fee220cedefec56a607656a22d3b
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/openstack-project-manager
          name: osism/openstack-project-manager
          short_name: openstack-project-manager
        src_dir: src/github.com/osism/openstack-project-manager
        topic: null
      buildset: 2c84ad5d4a2847ba9a4a629459c48bb8
      buildset_refs:
      - branch: main
        change: '294'
        change_message: "Add Keystone-on-kind integration test (forge)\n\n## Summary\n\nAdds
          the first integration test for `openstack-project-manager`: it deploys a
          **live, Keystone-only Keystone** on a [kind](https://kind.sigs.k8s.io/)
          cluster via [forge](https://github.com/c5c3/forge), then drives the real
          `tox -e create` path as the admin account to create one project and asserts
          the result through the OpenStack SDK. This is the first thing in the repo
          that exercises a real `openstack.connect()` / `keystone` path instead of
          the mocks used by `test/unit/`.\n\nCloses #293\n\n## Change set (in commit
          order)\n\n1. **`68776e6` Add forge Keystone deploy script and ControlPlane
          CR**\n   - `test/integration/controlplane.yaml`: a Keystone-only forge `ControlPlane`
          CR (release `2025.2`, single replica, exposed at `keystone.127-0-0-1.nip.io:8443/v3`
          via the `openstack-gw` gateway).\n   - `test/integration/deploy_keystone.sh`:
          clones forge pinned to a known-good commit (`FORGE_REF`), uses forge's own
          `install-test-deps` to provide the pinned `kind`/`kubectl` toolchain, stands
          up the kind cluster + ControlPlane, then mints an ephemeral `clouds.yaml`
          from the operator-projected `controlplane-keystone-admin-credentials` Secret.
          It refuses to clobber an `OS_CLIENT_CONFIG_FILE` that points outside the
          dedicated in-tree path, serializes `clouds.yaml` with a YAML library (not
          a heredoc) so an arbitrary admin password can't corrupt the file, and pre-creates
          the `member` and `load-balancer_member` roles. The latter is needed because
          `create.py` indexes its role cache directly and a bare Keystone ships `member`
          but not `load-balancer_member` (Octavia normally provisions it) \u2014 `create.py`
          itself is left untouched.\n\n2. **`b7bd7ec` Add integration run.sh orchestration
          and SDK verifier**\n   - `test/integration/run.sh`: orchestrates deploy
          \u2192 `tox -e create` (as admin, with `--nodomain-name-prefix` so the project
          is named exactly `opm-integration-test`) \u2192 `verify.py`. An `EXIT` trap
          always tears down the kind cluster, but only when this run created it (a
          pre-existing debug cluster is reused and left in place); on failure it dumps
          diagnostics first. Best-effort project deletion keeps reruns idempotent
          unless `KEEP_PROJECT=1`.\n   - `test/integration/verify.py`: a standalone
          openstacksdk script (deliberately **not** named `test_*.py`, so `tox -e
          test` never collects it) that asserts the `default` domain resolves, the
          `opm-integration-test` project exists in it, and the matching per-project
          group exists; it exits non-zero on any failed assertion.\n   - `.gitignore`:
          ignores the generated `test/integration/clouds.yaml`.\n   - `tox.ini`: passes
          `OS_CLIENT_CONFIG_FILE` through to the create env.\n\n3. **`1be0a3c` Add
          Makefile integration targets**\n   - `make integration` (full provision/create/verify/teardown
          cycle), `make integration-up` (deploy and leave the cluster running for
          local debugging), `make integration-down` (delete the kind cluster).\n\n4.
          **`b470a8e` Add Ansible pre/test playbooks for integration job**\n   - `playbooks/pre-integration.yml`:
          prepares an IPv6-only Zuul node \u2014 `ensure-pip`/`ensure-pipenv`/`ensure-docker`
          roles, the `libldap2-dev`/`libsasl2-dev` build deps the create env needs,
          and an `accept_ra=2` sysctl fix so the node keeps honouring router advertisements
          once kind enables IPv6 forwarding.\n   - `playbooks/test-integration.yml`:
          installs `tox` + `openstacksdk` into a throwaway venv and runs `make integration`
          from the checkout.\n\n5. **`bb61192` Add periodic-daily Zuul integration
          job**\n   - `.zuul.yaml`: defines `openstack-project-manager-integration`
          (ubuntu-noble, 2400s timeout) and adds it to **periodic-daily only**, so
          the heavy kind+Keystone job does not slow the check gate (which is left
          unchanged).\n\n6. **`c3db56a` Document the integration test harness**\n
          \  - `test/integration/README.md`: prerequisites, the make targets, the
          environment overrides, what `verify.py` asserts, and the ephemeral-credentials
          handling.\n\n## Notes / divergences from the issue\n\n- **Keystone-only
          deploy:** the issue asks to \"deploy Keystone on kind (forge)\". The harness
          applies a Keystone-only `ControlPlane` rather than a full forge control
          plane, keeping the job as light as feasible for the single happy-path assertion.\n-
          **`load-balancer_member` workaround:** the only accommodation to the production
          code is pre-creating roles `create.py` expects (`member`, `load-balancer_member`)
          on the bare Keystone. `create.py` is intentionally left untouched; the workaround
          lives entirely in `deploy_keystone.sh`.\n- **CI placement:** the job runs
          in `periodic-daily`, not the check pipeline, so PRs are not gated on the
          multi-minute kind+Keystone bring-up.\n- The verifier checks not just the
          project but also the per-project group of the same name that `create.py`
          provisions, giving the happy path a slightly stronger assertion than the
          issue's minimal \"create a project\".\n\n---\n\n_Implemented by [planwerk-agent](https://github.com/planwerk/planwerk-agent)
          84299e2 with Claude:claude-opus-4-8_\n"
        change_url: https://github.com/osism/openstack-project-manager/pull/294
        commit_id: 665985802eb8fee220cedefec56a607656a22d3b
        patchset: 665985802eb8fee220cedefec56a607656a22d3b
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/openstack-project-manager
          name: osism/openstack-project-manager
          short_name: openstack-project-manager
        src_dir: src/github.com/osism/openstack-project-manager
        topic: null
      change: '294'
      change_message: "Add Keystone-on-kind integration test (forge)\n\n## Summary\n\nAdds
        the first integration test for `openstack-project-manager`: it deploys a **live,
        Keystone-only Keystone** on a [kind](https://kind.sigs.k8s.io/) cluster via
        [forge](https://github.com/c5c3/forge), then drives the real `tox -e create`
        path as the admin account to create one project and asserts the result through
        the OpenStack SDK. This is the first thing in the repo that exercises a real
        `openstack.connect()` / `keystone` path instead of the mocks used by `test/unit/`.\n\nCloses
        #293\n\n## Change set (in commit order)\n\n1. **`68776e6` Add forge Keystone
        deploy script and ControlPlane CR**\n   - `test/integration/controlplane.yaml`:
        a Keystone-only forge `ControlPlane` CR (release `2025.2`, single replica,
        exposed at `keystone.127-0-0-1.nip.io:8443/v3` via the `openstack-gw` gateway).\n
        \  - `test/integration/deploy_keystone.sh`: clones forge pinned to a known-good
        commit (`FORGE_REF`), uses forge's own `install-test-deps` to provide the
        pinned `kind`/`kubectl` toolchain, stands up the kind cluster + ControlPlane,
        then mints an ephemeral `clouds.yaml` from the operator-projected `controlplane-keystone-admin-credentials`
        Secret. It refuses to clobber an `OS_CLIENT_CONFIG_FILE` that points outside
        the dedicated in-tree path, serializes `clouds.yaml` with a YAML library (not
        a heredoc) so an arbitrary admin password can't corrupt the file, and pre-creates
        the `member` and `load-balancer_member` roles. The latter is needed because
        `create.py` indexes its role cache directly and a bare Keystone ships `member`
        but not `load-balancer_member` (Octavia normally provisions it) \u2014 `create.py`
        itself is left untouched.\n\n2. **`b7bd7ec` Add integration run.sh orchestration
        and SDK verifier**\n   - `test/integration/run.sh`: orchestrates deploy \u2192
        `tox -e create` (as admin, with `--nodomain-name-prefix` so the project is
        named exactly `opm-integration-test`) \u2192 `verify.py`. An `EXIT` trap always
        tears down the kind cluster, but only when this run created it (a pre-existing
        debug cluster is reused and left in place); on failure it dumps diagnostics
        first. Best-effort project deletion keeps reruns idempotent unless `KEEP_PROJECT=1`.\n
        \  - `test/integration/verify.py`: a standalone openstacksdk script (deliberately
        **not** named `test_*.py`, so `tox -e test` never collects it) that asserts
        the `default` domain resolves, the `opm-integration-test` project exists in
        it, and the matching per-project group exists; it exits non-zero on any failed
        assertion.\n   - `.gitignore`: ignores the generated `test/integration/clouds.yaml`.\n
        \  - `tox.ini`: passes `OS_CLIENT_CONFIG_FILE` through to the create env.\n\n3.
        **`1be0a3c` Add Makefile integration targets**\n   - `make integration` (full
        provision/create/verify/teardown cycle), `make integration-up` (deploy and
        leave the cluster running for local debugging), `make integration-down` (delete
        the kind cluster).\n\n4. **`b470a8e` Add Ansible pre/test playbooks for integration
        job**\n   - `playbooks/pre-integration.yml`: prepares an IPv6-only Zuul node
        \u2014 `ensure-pip`/`ensure-pipenv`/`ensure-docker` roles, the `libldap2-dev`/`libsasl2-dev`
        build deps the create env needs, and an `accept_ra=2` sysctl fix so the node
        keeps honouring router advertisements once kind enables IPv6 forwarding.\n
        \  - `playbooks/test-integration.yml`: installs `tox` + `openstacksdk` into
        a throwaway venv and runs `make integration` from the checkout.\n\n5. **`bb61192`
        Add periodic-daily Zuul integration job**\n   - `.zuul.yaml`: defines `openstack-project-manager-integration`
        (ubuntu-noble, 2400s timeout) and adds it to **periodic-daily only**, so the
        heavy kind+Keystone job does not slow the check gate (which is left unchanged).\n\n6.
        **`c3db56a` Document the integration test harness**\n   - `test/integration/README.md`:
        prerequisites, the make targets, the environment overrides, what `verify.py`
        asserts, and the ephemeral-credentials handling.\n\n## Notes / divergences
        from the issue\n\n- **Keystone-only deploy:** the issue asks to \"deploy Keystone
        on kind (forge)\". The harness applies a Keystone-only `ControlPlane` rather
        than a full forge control plane, keeping the job as light as feasible for
        the single happy-path assertion.\n- **`load-balancer_member` workaround:**
        the only accommodation to the production code is pre-creating roles `create.py`
        expects (`member`, `load-balancer_member`) on the bare Keystone. `create.py`
        is intentionally left untouched; the workaround lives entirely in `deploy_keystone.sh`.\n-
        **CI placement:** the job runs in `periodic-daily`, not the check pipeline,
        so PRs are not gated on the multi-minute kind+Keystone bring-up.\n- The verifier
        checks not just the project but also the per-project group of the same name
        that `create.py` provisions, giving the happy path a slightly stronger assertion
        than the issue's minimal \"create a project\".\n\n---\n\n_Implemented by [planwerk-agent](https://github.com/planwerk/planwerk-agent)
        84299e2 with Claude:claude-opus-4-8_\n"
      change_url: https://github.com/osism/openstack-project-manager/pull/294
      child_jobs: []
      commit_id: 665985802eb8fee220cedefec56a607656a22d3b
      event_id: c31f1080-7709-11f1-9fbe-2a203b059447
      executor:
        hostname: 521e9411259a
        inventory_file: /var/lib/zuul/builds/d2c9d94bf03f43138e183d70d6c25f6a/ansible/inventory.yaml
        log_root: /var/lib/zuul/builds/d2c9d94bf03f43138e183d70d6c25f6a/work/logs
        result_data_file: /var/lib/zuul/builds/d2c9d94bf03f43138e183d70d6c25f6a/work/results.json
        src_root: /var/lib/zuul/builds/d2c9d94bf03f43138e183d70d6c25f6a/work/src
        work_root: /var/lib/zuul/builds/d2c9d94bf03f43138e183d70d6c25f6a/work
      include_vars: []
      items:
      - branch: main
        change: '294'
        change_message: "Add Keystone-on-kind integration test (forge)\n\n## Summary\n\nAdds
          the first integration test for `openstack-project-manager`: it deploys a
          **live, Keystone-only Keystone** on a [kind](https://kind.sigs.k8s.io/)
          cluster via [forge](https://github.com/c5c3/forge), then drives the real
          `tox -e create` path as the admin account to create one project and asserts
          the result through the OpenStack SDK. This is the first thing in the repo
          that exercises a real `openstack.connect()` / `keystone` path instead of
          the mocks used by `test/unit/`.\n\nCloses #293\n\n## Change set (in commit
          order)\n\n1. **`68776e6` Add forge Keystone deploy script and ControlPlane
          CR**\n   - `test/integration/controlplane.yaml`: a Keystone-only forge `ControlPlane`
          CR (release `2025.2`, single replica, exposed at `keystone.127-0-0-1.nip.io:8443/v3`
          via the `openstack-gw` gateway).\n   - `test/integration/deploy_keystone.sh`:
          clones forge pinned to a known-good commit (`FORGE_REF`), uses forge's own
          `install-test-deps` to provide the pinned `kind`/`kubectl` toolchain, stands
          up the kind cluster + ControlPlane, then mints an ephemeral `clouds.yaml`
          from the operator-projected `controlplane-keystone-admin-credentials` Secret.
          It refuses to clobber an `OS_CLIENT_CONFIG_FILE` that points outside the
          dedicated in-tree path, serializes `clouds.yaml` with a YAML library (not
          a heredoc) so an arbitrary admin password can't corrupt the file, and pre-creates
          the `member` and `load-balancer_member` roles. The latter is needed because
          `create.py` indexes its role cache directly and a bare Keystone ships `member`
          but not `load-balancer_member` (Octavia normally provisions it) \u2014 `create.py`
          itself is left untouched.\n\n2. **`b7bd7ec` Add integration run.sh orchestration
          and SDK verifier**\n   - `test/integration/run.sh`: orchestrates deploy
          \u2192 `tox -e create` (as admin, with `--nodomain-name-prefix` so the project
          is named exactly `opm-integration-test`) \u2192 `verify.py`. An `EXIT` trap
          always tears down the kind cluster, but only when this run created it (a
          pre-existing debug cluster is reused and left in place); on failure it dumps
          diagnostics first. Best-effort project deletion keeps reruns idempotent
          unless `KEEP_PROJECT=1`.\n   - `test/integration/verify.py`: a standalone
          openstacksdk script (deliberately **not** named `test_*.py`, so `tox -e
          test` never collects it) that asserts the `default` domain resolves, the
          `opm-integration-test` project exists in it, and the matching per-project
          group exists; it exits non-zero on any failed assertion.\n   - `.gitignore`:
          ignores the generated `test/integration/clouds.yaml`.\n   - `tox.ini`: passes
          `OS_CLIENT_CONFIG_FILE` through to the create env.\n\n3. **`1be0a3c` Add
          Makefile integration targets**\n   - `make integration` (full provision/create/verify/teardown
          cycle), `make integration-up` (deploy and leave the cluster running for
          local debugging), `make integration-down` (delete the kind cluster).\n\n4.
          **`b470a8e` Add Ansible pre/test playbooks for integration job**\n   - `playbooks/pre-integration.yml`:
          prepares an IPv6-only Zuul node \u2014 `ensure-pip`/`ensure-pipenv`/`ensure-docker`
          roles, the `libldap2-dev`/`libsasl2-dev` build deps the create env needs,
          and an `accept_ra=2` sysctl fix so the node keeps honouring router advertisements
          once kind enables IPv6 forwarding.\n   - `playbooks/test-integration.yml`:
          installs `tox` + `openstacksdk` into a throwaway venv and runs `make integration`
          from the checkout.\n\n5. **`bb61192` Add periodic-daily Zuul integration
          job**\n   - `.zuul.yaml`: defines `openstack-project-manager-integration`
          (ubuntu-noble, 2400s timeout) and adds it to **periodic-daily only**, so
          the heavy kind+Keystone job does not slow the check gate (which is left
          unchanged).\n\n6. **`c3db56a` Document the integration test harness**\n
          \  - `test/integration/README.md`: prerequisites, the make targets, the
          environment overrides, what `verify.py` asserts, and the ephemeral-credentials
          handling.\n\n## Notes / divergences from the issue\n\n- **Keystone-only
          deploy:** the issue asks to \"deploy Keystone on kind (forge)\". The harness
          applies a Keystone-only `ControlPlane` rather than a full forge control
          plane, keeping the job as light as feasible for the single happy-path assertion.\n-
          **`load-balancer_member` workaround:** the only accommodation to the production
          code is pre-creating roles `create.py` expects (`member`, `load-balancer_member`)
          on the bare Keystone. `create.py` is intentionally left untouched; the workaround
          lives entirely in `deploy_keystone.sh`.\n- **CI placement:** the job runs
          in `periodic-daily`, not the check pipeline, so PRs are not gated on the
          multi-minute kind+Keystone bring-up.\n- The verifier checks not just the
          project but also the per-project group of the same name that `create.py`
          provisions, giving the happy path a slightly stronger assertion than the
          issue's minimal \"create a project\".\n\n---\n\n_Implemented by [planwerk-agent](https://github.com/planwerk/planwerk-agent)
          84299e2 with Claude:claude-opus-4-8_\n"
        change_url: https://github.com/osism/openstack-project-manager/pull/294
        commit_id: 665985802eb8fee220cedefec56a607656a22d3b
        patchset: 665985802eb8fee220cedefec56a607656a22d3b
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/openstack-project-manager
          name: osism/openstack-project-manager
          short_name: openstack-project-manager
          src_dir: src/github.com/osism/openstack-project-manager
        topic: null
      job: flake8
      jobtags: []
      max_attempts: 3
      message: QWRkIEtleXN0b25lLW9uLWtpbmQgaW50ZWdyYXRpb24gdGVzdCAoZm9yZ2UpCgojIyBTdW1tYXJ5CgpBZGRzIHRoZSBmaXJzdCBpbnRlZ3JhdGlvbiB0ZXN0IGZvciBgb3BlbnN0YWNrLXByb2plY3QtbWFuYWdlcmA6IGl0IGRlcGxveXMgYSAqKmxpdmUsIEtleXN0b25lLW9ubHkgS2V5c3RvbmUqKiBvbiBhIFtraW5kXShodHRwczovL2tpbmQuc2lncy5rOHMuaW8vKSBjbHVzdGVyIHZpYSBbZm9yZ2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9jNWMzL2ZvcmdlKSwgdGhlbiBkcml2ZXMgdGhlIHJlYWwgYHRveCAtZSBjcmVhdGVgIHBhdGggYXMgdGhlIGFkbWluIGFjY291bnQgdG8gY3JlYXRlIG9uZSBwcm9qZWN0IGFuZCBhc3NlcnRzIHRoZSByZXN1bHQgdGhyb3VnaCB0aGUgT3BlblN0YWNrIFNESy4gVGhpcyBpcyB0aGUgZmlyc3QgdGhpbmcgaW4gdGhlIHJlcG8gdGhhdCBleGVyY2lzZXMgYSByZWFsIGBvcGVuc3RhY2suY29ubmVjdCgpYCAvIGBrZXlzdG9uZWAgcGF0aCBpbnN0ZWFkIG9mIHRoZSBtb2NrcyB1c2VkIGJ5IGB0ZXN0L3VuaXQvYC4KCkNsb3NlcyAjMjkzCgojIyBDaGFuZ2Ugc2V0IChpbiBjb21taXQgb3JkZXIpCgoxLiAqKmA2ODc3NmU2YCBBZGQgZm9yZ2UgS2V5c3RvbmUgZGVwbG95IHNjcmlwdCBhbmQgQ29udHJvbFBsYW5lIENSKioKICAgLSBgdGVzdC9pbnRlZ3JhdGlvbi9jb250cm9scGxhbmUueWFtbGA6IGEgS2V5c3RvbmUtb25seSBmb3JnZSBgQ29udHJvbFBsYW5lYCBDUiAocmVsZWFzZSBgMjAyNS4yYCwgc2luZ2xlIHJlcGxpY2EsIGV4cG9zZWQgYXQgYGtleXN0b25lLjEyNy0wLTAtMS5uaXAuaW86ODQ0My92M2AgdmlhIHRoZSBgb3BlbnN0YWNrLWd3YCBnYXRld2F5KS4KICAgLSBgdGVzdC9pbnRlZ3JhdGlvbi9kZXBsb3lfa2V5c3RvbmUuc2hgOiBjbG9uZXMgZm9yZ2UgcGlubmVkIHRvIGEga25vd24tZ29vZCBjb21taXQgKGBGT1JHRV9SRUZgKSwgdXNlcyBmb3JnZSdzIG93biBgaW5zdGFsbC10ZXN0LWRlcHNgIHRvIHByb3ZpZGUgdGhlIHBpbm5lZCBga2luZGAvYGt1YmVjdGxgIHRvb2xjaGFpbiwgc3RhbmRzIHVwIHRoZSBraW5kIGNsdXN0ZXIgKyBDb250cm9sUGxhbmUsIHRoZW4gbWludHMgYW4gZXBoZW1lcmFsIGBjbG91ZHMueWFtbGAgZnJvbSB0aGUgb3BlcmF0b3ItcHJvamVjdGVkIGBjb250cm9scGxhbmUta2V5c3RvbmUtYWRtaW4tY3JlZGVudGlhbHNgIFNlY3JldC4gSXQgcmVmdXNlcyB0byBjbG9iYmVyIGFuIGBPU19DTElFTlRfQ09ORklHX0ZJTEVgIHRoYXQgcG9pbnRzIG91dHNpZGUgdGhlIGRlZGljYXRlZCBpbi10cmVlIHBhdGgsIHNlcmlhbGl6ZXMgYGNsb3Vkcy55YW1sYCB3aXRoIGEgWUFNTCBsaWJyYXJ5IChub3QgYSBoZXJlZG9jKSBzbyBhbiBhcmJpdHJhcnkgYWRtaW4gcGFzc3dvcmQgY2FuJ3QgY29ycnVwdCB0aGUgZmlsZSwgYW5kIHByZS1jcmVhdGVzIHRoZSBgbWVtYmVyYCBhbmQgYGxvYWQtYmFsYW5jZXJfbWVtYmVyYCByb2xlcy4gVGhlIGxhdHRlciBpcyBuZWVkZWQgYmVjYXVzZSBgY3JlYXRlLnB5YCBpbmRleGVzIGl0cyByb2xlIGNhY2hlIGRpcmVjdGx5IGFuZCBhIGJhcmUgS2V5c3RvbmUgc2hpcHMgYG1lbWJlcmAgYnV0IG5vdCBgbG9hZC1iYWxhbmNlcl9tZW1iZXJgIChPY3RhdmlhIG5vcm1hbGx5IHByb3Zpc2lvbnMgaXQpIOKAlCBgY3JlYXRlLnB5YCBpdHNlbGYgaXMgbGVmdCB1bnRvdWNoZWQuCgoyLiAqKmBiN2JkN2VjYCBBZGQgaW50ZWdyYXRpb24gcnVuLnNoIG9yY2hlc3RyYXRpb24gYW5kIFNESyB2ZXJpZmllcioqCiAgIC0gYHRlc3QvaW50ZWdyYXRpb24vcnVuLnNoYDogb3JjaGVzdHJhdGVzIGRlcGxveSDihpIgYHRveCAtZSBjcmVhdGVgIChhcyBhZG1pbiwgd2l0aCBgLS1ub2RvbWFpbi1uYW1lLXByZWZpeGAgc28gdGhlIHByb2plY3QgaXMgbmFtZWQgZXhhY3RseSBgb3BtLWludGVncmF0aW9uLXRlc3RgKSDihpIgYHZlcmlmeS5weWAuIEFuIGBFWElUYCB0cmFwIGFsd2F5cyB0ZWFycyBkb3duIHRoZSBraW5kIGNsdXN0ZXIsIGJ1dCBvbmx5IHdoZW4gdGhpcyBydW4gY3JlYXRlZCBpdCAoYSBwcmUtZXhpc3RpbmcgZGVidWcgY2x1c3RlciBpcyByZXVzZWQgYW5kIGxlZnQgaW4gcGxhY2UpOyBvbiBmYWlsdXJlIGl0IGR1bXBzIGRpYWdub3N0aWNzIGZpcnN0LiBCZXN0LWVmZm9ydCBwcm9qZWN0IGRlbGV0aW9uIGtlZXBzIHJlcnVucyBpZGVtcG90ZW50IHVubGVzcyBgS0VFUF9QUk9KRUNUPTFgLgogICAtIGB0ZXN0L2ludGVncmF0aW9uL3ZlcmlmeS5weWA6IGEgc3RhbmRhbG9uZSBvcGVuc3RhY2tzZGsgc2NyaXB0IChkZWxpYmVyYXRlbHkgKipub3QqKiBuYW1lZCBgdGVzdF8qLnB5YCwgc28gYHRveCAtZSB0ZXN0YCBuZXZlciBjb2xsZWN0cyBpdCkgdGhhdCBhc3NlcnRzIHRoZSBgZGVmYXVsdGAgZG9tYWluIHJlc29sdmVzLCB0aGUgYG9wbS1pbnRlZ3JhdGlvbi10ZXN0YCBwcm9qZWN0IGV4aXN0cyBpbiBpdCwgYW5kIHRoZSBtYXRjaGluZyBwZXItcHJvamVjdCBncm91cCBleGlzdHM7IGl0IGV4aXRzIG5vbi16ZXJvIG9uIGFueSBmYWlsZWQgYXNzZXJ0aW9uLgogICAtIGAuZ2l0aWdub3JlYDogaWdub3JlcyB0aGUgZ2VuZXJhdGVkIGB0ZXN0L2ludGVncmF0aW9uL2Nsb3Vkcy55YW1sYC4KICAgLSBgdG94LmluaWA6IHBhc3NlcyBgT1NfQ0xJRU5UX0NPTkZJR19GSUxFYCB0aHJvdWdoIHRvIHRoZSBjcmVhdGUgZW52LgoKMy4gKipgMWJlMGEzY2AgQWRkIE1ha2VmaWxlIGludGVncmF0aW9uIHRhcmdldHMqKgogICAtIGBtYWtlIGludGVncmF0aW9uYCAoZnVsbCBwcm92aXNpb24vY3JlYXRlL3ZlcmlmeS90ZWFyZG93biBjeWNsZSksIGBtYWtlIGludGVncmF0aW9uLXVwYCAoZGVwbG95IGFuZCBsZWF2ZSB0aGUgY2x1c3RlciBydW5uaW5nIGZvciBsb2NhbCBkZWJ1Z2dpbmcpLCBgbWFrZSBpbnRlZ3JhdGlvbi1kb3duYCAoZGVsZXRlIHRoZSBraW5kIGNsdXN0ZXIpLgoKNC4gKipgYjQ3MGE4ZWAgQWRkIEFuc2libGUgcHJlL3Rlc3QgcGxheWJvb2tzIGZvciBpbnRlZ3JhdGlvbiBqb2IqKgogICAtIGBwbGF5Ym9va3MvcHJlLWludGVncmF0aW9uLnltbGA6IHByZXBhcmVzIGFuIElQdjYtb25seSBadXVsIG5vZGUg4oCUIGBlbnN1cmUtcGlwYC9gZW5zdXJlLXBpcGVudmAvYGVuc3VyZS1kb2NrZXJgIHJvbGVzLCB0aGUgYGxpYmxkYXAyLWRldmAvYGxpYnNhc2wyLWRldmAgYnVpbGQgZGVwcyB0aGUgY3JlYXRlIGVudiBuZWVkcywgYW5kIGFuIGBhY2NlcHRfcmE9MmAgc3lzY3RsIGZpeCBzbyB0aGUgbm9kZSBrZWVwcyBob25vdXJpbmcgcm91dGVyIGFkdmVydGlzZW1lbnRzIG9uY2Uga2luZCBlbmFibGVzIElQdjYgZm9yd2FyZGluZy4KICAgLSBgcGxheWJvb2tzL3Rlc3QtaW50ZWdyYXRpb24ueW1sYDogaW5zdGFsbHMgYHRveGAgKyBgb3BlbnN0YWNrc2RrYCBpbnRvIGEgdGhyb3dhd2F5IHZlbnYgYW5kIHJ1bnMgYG1ha2UgaW50ZWdyYXRpb25gIGZyb20gdGhlIGNoZWNrb3V0LgoKNS4gKipgYmI2MTE5MmAgQWRkIHBlcmlvZGljLWRhaWx5IFp1dWwgaW50ZWdyYXRpb24gam9iKioKICAgLSBgLnp1dWwueWFtbGA6IGRlZmluZXMgYG9wZW5zdGFjay1wcm9qZWN0LW1hbmFnZXItaW50ZWdyYXRpb25gICh1YnVudHUtbm9ibGUsIDI0MDBzIHRpbWVvdXQpIGFuZCBhZGRzIGl0IHRvICoqcGVyaW9kaWMtZGFpbHkgb25seSoqLCBzbyB0aGUgaGVhdnkga2luZCtLZXlzdG9uZSBqb2IgZG9lcyBub3Qgc2xvdyB0aGUgY2hlY2sgZ2F0ZSAod2hpY2ggaXMgbGVmdCB1bmNoYW5nZWQpLgoKNi4gKipgYzNkYjU2YWAgRG9jdW1lbnQgdGhlIGludGVncmF0aW9uIHRlc3QgaGFybmVzcyoqCiAgIC0gYHRlc3QvaW50ZWdyYXRpb24vUkVBRE1FLm1kYDogcHJlcmVxdWlzaXRlcywgdGhlIG1ha2UgdGFyZ2V0cywgdGhlIGVudmlyb25tZW50IG92ZXJyaWRlcywgd2hhdCBgdmVyaWZ5LnB5YCBhc3NlcnRzLCBhbmQgdGhlIGVwaGVtZXJhbC1jcmVkZW50aWFscyBoYW5kbGluZy4KCiMjIE5vdGVzIC8gZGl2ZXJnZW5jZXMgZnJvbSB0aGUgaXNzdWUKCi0gKipLZXlzdG9uZS1vbmx5IGRlcGxveToqKiB0aGUgaXNzdWUgYXNrcyB0byAiZGVwbG95IEtleXN0b25lIG9uIGtpbmQgKGZvcmdlKSIuIFRoZSBoYXJuZXNzIGFwcGxpZXMgYSBLZXlzdG9uZS1vbmx5IGBDb250cm9sUGxhbmVgIHJhdGhlciB0aGFuIGEgZnVsbCBmb3JnZSBjb250cm9sIHBsYW5lLCBrZWVwaW5nIHRoZSBqb2IgYXMgbGlnaHQgYXMgZmVhc2libGUgZm9yIHRoZSBzaW5nbGUgaGFwcHktcGF0aCBhc3NlcnRpb24uCi0gKipgbG9hZC1iYWxhbmNlcl9tZW1iZXJgIHdvcmthcm91bmQ6KiogdGhlIG9ubHkgYWNjb21tb2RhdGlvbiB0byB0aGUgcHJvZHVjdGlvbiBjb2RlIGlzIHByZS1jcmVhdGluZyByb2xlcyBgY3JlYXRlLnB5YCBleHBlY3RzIChgbWVtYmVyYCwgYGxvYWQtYmFsYW5jZXJfbWVtYmVyYCkgb24gdGhlIGJhcmUgS2V5c3RvbmUuIGBjcmVhdGUucHlgIGlzIGludGVudGlvbmFsbHkgbGVmdCB1bnRvdWNoZWQ7IHRoZSB3b3JrYXJvdW5kIGxpdmVzIGVudGlyZWx5IGluIGBkZXBsb3lfa2V5c3RvbmUuc2hgLgotICoqQ0kgcGxhY2VtZW50OioqIHRoZSBqb2IgcnVucyBpbiBgcGVyaW9kaWMtZGFpbHlgLCBub3QgdGhlIGNoZWNrIHBpcGVsaW5lLCBzbyBQUnMgYXJlIG5vdCBnYXRlZCBvbiB0aGUgbXVsdGktbWludXRlIGtpbmQrS2V5c3RvbmUgYnJpbmctdXAuCi0gVGhlIHZlcmlmaWVyIGNoZWNrcyBub3QganVzdCB0aGUgcHJvamVjdCBidXQgYWxzbyB0aGUgcGVyLXByb2plY3QgZ3JvdXAgb2YgdGhlIHNhbWUgbmFtZSB0aGF0IGBjcmVhdGUucHlgIHByb3Zpc2lvbnMsIGdpdmluZyB0aGUgaGFwcHkgcGF0aCBhIHNsaWdodGx5IHN0cm9uZ2VyIGFzc2VydGlvbiB0aGFuIHRoZSBpc3N1ZSdzIG1pbmltYWwgImNyZWF0ZSBhIHByb2plY3QiLgoKLS0tCgpfSW1wbGVtZW50ZWQgYnkgW3BsYW53ZXJrLWFnZW50XShodHRwczovL2dpdGh1Yi5jb20vcGxhbndlcmsvcGxhbndlcmstYWdlbnQpIDg0Mjk5ZTIgd2l0aCBDbGF1ZGU6Y2xhdWRlLW9wdXMtNC04Xwo=
      patchset: 665985802eb8fee220cedefec56a607656a22d3b
      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/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/openstack-project-manager
        name: osism/openstack-project-manager
        short_name: openstack-project-manager
        src_dir: src/github.com/osism/openstack-project-manager
      projects:
        github.com/osism/openstack-project-manager:
          canonical_hostname: github.com
          canonical_name: github.com/osism/openstack-project-manager
          checkout: main
          checkout_description: zuul branch
          commit: 89369f026d567bcacfdb86cb1beab05abd3d3328
          name: osism/openstack-project-manager
          required: false
          short_name: openstack-project-manager
          src_dir: src/github.com/osism/openstack-project-manager
      ref: refs/pull/294/head
      resources: {}
      tenant: osism
      timeout: 1800
      topic: null
      voting: true
