all:
  children:
    zuul_unreachable:
      hosts: {}
  hosts:
    debian-bookworm:
      ansible_connection: ssh
      ansible_host: 2a13:1a81:8000:3124:f816:3eff:fe01:6731
      ansible_port: 22
      ansible_python_interpreter: auto
      ansible_user: zuul
      nodepool:
        az: nova
        cloud: regiocloud-a-ci
        external_id: 071f25a8-405d-40c7-992a-c89387e18d9c
        host_id: 4ba4344415ca7057d9956ea5de826bbc0b830981e82c0e0f191fa07b
        interface_ip: 2a13:1a81:8000:3124:f816:3eff:fe01:6731
        label: debian-bookworm
        node_properties: {}
        private_ipv4: 10.128.7.112
        private_ipv6: null
        provider: regiocloud-a
        public_ipv4: 81.163.193.189
        public_ipv6: 2a13:1a81:8000:3124:f816:3eff:fe01:6731
        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/cfg-cookiecutter/.zuul.yaml@main#82>'
      ansible_version: '9'
      attempts: 1
      branch: main
      build: fde52e579ee74bd1845a3d9c8fe39e6c
      build_refs:
      - branch: main
        change: '868'
        change_message: "Add environments/kubernetes and route k3s settings there\n\nAdd
          `environments/kubernetes/` to the generated configuration repository and
          move the k3s\nsettings into it, so that `osism apply kubernetes` can run
          at all.\n\n### Why the directory is required\n\nThe `osism-kubernetes` container
          runs with `ENVIRONMENT=kubernetes`. Its `run.sh`\n(`osism/osism-kubernetes`,
          `files/scripts/run.sh`) changes into\n`environments/$ENVIRONMENT` and hard-fails
          when the directory is absent:\n\n```bash\nif [[ ! -e $ENVIRONMENTS_DIRECTORY/$ENVIRONMENT
          ]]; then\n    echo \"ERROR: environment $ENVIRONMENT not available\"\n    exit
          1\nfi\n```\n\nIt then loads exactly these files:\n\n```\n-e @environments/configuration.yml
          \           # global\n-e @environments/secrets.yml                  # global\n-e
          @environments/kubernetes/secrets.yml\n-e @environments/kubernetes/images.yml\n-e
          @environments/kubernetes/configuration.yml\n```\n\nA freshly generated configuration
          repository has no `environments/kubernetes`, so the play\ncannot start.
          All three files are needed, not just `configuration.yml`: they are passed
          as\nbare `-e @\u2026`, so a missing `images.yml` or `secrets.yml` aborts
          `ansible-playbook`.\n\n### Why the settings move\n\nThe k3s settings were
          previously in three places, none of which the k3s environment reads:\n\n|
          Setting | Was | Read by the k3s environment? |\n|---|---|---|\n| `apiserver_endpoint`,
          `metal_lb_ip_range` | `environments/infrastructure/configuration.yml` |
          no |\n| `k3s_token` placeholder | `environments/infrastructure/secrets.yml`
          | no |\n| generated `k3s_token` (`scripts/set-secrets.py`) | `environments/manager/secrets.yml`
          | no |\n\nA deployment therefore silently used the upstream defaults with
          an empty cluster token.\n\n### Evidence\n\nVerified on a real deployment
          with `ansible -m debug` inside the `osism-kubernetes`\ncontainer. After
          setting all four values under `environments/infrastructure/`, the effective\nvariables
          were still the upstream defaults:\n\n```\napiserver_endpoint: 192.168.16.8\ncilium_bgp:
          \        true\nk3s_version:        v1.34.1+k3s1\nmetal_lb_ip_range:  172.31.252.10-172.31.253.250\ntoken_set:
          \         false\n```\n\nWith the settings under `environments/kubernetes/`
          the same check returns the configured\nvalues, and `osism apply kubernetes`
          deploys a working cluster.\n\nHad the directory existed but the settings
          stayed in `infrastructure`, this would have\ndeployed a kube-vip VIP on
          the unroutable placeholder `192.168.16.8` with no cluster token.\n\n###
          What this changes\n\n- adds `environments/kubernetes/{configuration,images,secrets}.yml`,
          following the same\n  layout as the other environment directories (`images.yml`
          carries the usual `dummy:`\n  placeholder)\n- moves `apiserver_endpoint`
          and `metal_lb_ip_range` there, values and comments unchanged\n- moves the
          `k3s_token` placeholder there\n- points `scripts/set-secrets.py` at the
          new secrets file via a\n  `SECRETSFILE_OUTPUT_KUBERNETES` constant, matching
          the existing per-environment pattern\n\nNo default values change.\n\n###
          Note for existing configuration repositories\n\nThis is correct for newly
          generated repositories. An existing one that has already run\n`set-secrets.py`
          keeps its generated `k3s_token` in `environments/manager/secrets.yml`, while\nthe
          new `environments/kubernetes/secrets.yml` starts empty \u2014 so the value
          needs moving by\nhand once:\n\n```bash\n# read the existing value\nansible-vault
          view environments/manager/secrets.yml | grep k3s_token\n# then put it under
          k3s_token in environments/kubernetes/secrets.yml and drop the old entry\n```\n\nWorth
          calling out in the release notes, since a cluster deployed against an empty
          `k3s_token`\nfails in a way that does not obviously point back at the secrets
          file.\n\n### Alternative considered\n\n`run.sh` could also load `environments/infrastructure/*`.
          A dedicated environment directory\nwas chosen instead because it matches
          every other component and keeps the k3s settings where\nthe runtime already
          looks for them."
        change_url: https://github.com/osism/cfg-cookiecutter/pull/868
        commit_id: 8126ae9856c7d7129066f01223f769021fcd2729
        patchset: 8126ae9856c7d7129066f01223f769021fcd2729
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/cfg-cookiecutter
          name: osism/cfg-cookiecutter
          short_name: cfg-cookiecutter
        src_dir: src/github.com/osism/cfg-cookiecutter
        topic: null
      buildset: 4be12b3ebb284ed18af892c6ad53e229
      buildset_refs:
      - branch: main
        change: '868'
        change_message: "Add environments/kubernetes and route k3s settings there\n\nAdd
          `environments/kubernetes/` to the generated configuration repository and
          move the k3s\nsettings into it, so that `osism apply kubernetes` can run
          at all.\n\n### Why the directory is required\n\nThe `osism-kubernetes` container
          runs with `ENVIRONMENT=kubernetes`. Its `run.sh`\n(`osism/osism-kubernetes`,
          `files/scripts/run.sh`) changes into\n`environments/$ENVIRONMENT` and hard-fails
          when the directory is absent:\n\n```bash\nif [[ ! -e $ENVIRONMENTS_DIRECTORY/$ENVIRONMENT
          ]]; then\n    echo \"ERROR: environment $ENVIRONMENT not available\"\n    exit
          1\nfi\n```\n\nIt then loads exactly these files:\n\n```\n-e @environments/configuration.yml
          \           # global\n-e @environments/secrets.yml                  # global\n-e
          @environments/kubernetes/secrets.yml\n-e @environments/kubernetes/images.yml\n-e
          @environments/kubernetes/configuration.yml\n```\n\nA freshly generated configuration
          repository has no `environments/kubernetes`, so the play\ncannot start.
          All three files are needed, not just `configuration.yml`: they are passed
          as\nbare `-e @\u2026`, so a missing `images.yml` or `secrets.yml` aborts
          `ansible-playbook`.\n\n### Why the settings move\n\nThe k3s settings were
          previously in three places, none of which the k3s environment reads:\n\n|
          Setting | Was | Read by the k3s environment? |\n|---|---|---|\n| `apiserver_endpoint`,
          `metal_lb_ip_range` | `environments/infrastructure/configuration.yml` |
          no |\n| `k3s_token` placeholder | `environments/infrastructure/secrets.yml`
          | no |\n| generated `k3s_token` (`scripts/set-secrets.py`) | `environments/manager/secrets.yml`
          | no |\n\nA deployment therefore silently used the upstream defaults with
          an empty cluster token.\n\n### Evidence\n\nVerified on a real deployment
          with `ansible -m debug` inside the `osism-kubernetes`\ncontainer. After
          setting all four values under `environments/infrastructure/`, the effective\nvariables
          were still the upstream defaults:\n\n```\napiserver_endpoint: 192.168.16.8\ncilium_bgp:
          \        true\nk3s_version:        v1.34.1+k3s1\nmetal_lb_ip_range:  172.31.252.10-172.31.253.250\ntoken_set:
          \         false\n```\n\nWith the settings under `environments/kubernetes/`
          the same check returns the configured\nvalues, and `osism apply kubernetes`
          deploys a working cluster.\n\nHad the directory existed but the settings
          stayed in `infrastructure`, this would have\ndeployed a kube-vip VIP on
          the unroutable placeholder `192.168.16.8` with no cluster token.\n\n###
          What this changes\n\n- adds `environments/kubernetes/{configuration,images,secrets}.yml`,
          following the same\n  layout as the other environment directories (`images.yml`
          carries the usual `dummy:`\n  placeholder)\n- moves `apiserver_endpoint`
          and `metal_lb_ip_range` there, values and comments unchanged\n- moves the
          `k3s_token` placeholder there\n- points `scripts/set-secrets.py` at the
          new secrets file via a\n  `SECRETSFILE_OUTPUT_KUBERNETES` constant, matching
          the existing per-environment pattern\n\nNo default values change.\n\n###
          Note for existing configuration repositories\n\nThis is correct for newly
          generated repositories. An existing one that has already run\n`set-secrets.py`
          keeps its generated `k3s_token` in `environments/manager/secrets.yml`, while\nthe
          new `environments/kubernetes/secrets.yml` starts empty \u2014 so the value
          needs moving by\nhand once:\n\n```bash\n# read the existing value\nansible-vault
          view environments/manager/secrets.yml | grep k3s_token\n# then put it under
          k3s_token in environments/kubernetes/secrets.yml and drop the old entry\n```\n\nWorth
          calling out in the release notes, since a cluster deployed against an empty
          `k3s_token`\nfails in a way that does not obviously point back at the secrets
          file.\n\n### Alternative considered\n\n`run.sh` could also load `environments/infrastructure/*`.
          A dedicated environment directory\nwas chosen instead because it matches
          every other component and keeps the k3s settings where\nthe runtime already
          looks for them."
        change_url: https://github.com/osism/cfg-cookiecutter/pull/868
        commit_id: 8126ae9856c7d7129066f01223f769021fcd2729
        patchset: 8126ae9856c7d7129066f01223f769021fcd2729
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/cfg-cookiecutter
          name: osism/cfg-cookiecutter
          short_name: cfg-cookiecutter
        src_dir: src/github.com/osism/cfg-cookiecutter
        topic: null
      change: '868'
      change_message: "Add environments/kubernetes and route k3s settings there\n\nAdd
        `environments/kubernetes/` to the generated configuration repository and move
        the k3s\nsettings into it, so that `osism apply kubernetes` can run at all.\n\n###
        Why the directory is required\n\nThe `osism-kubernetes` container runs with
        `ENVIRONMENT=kubernetes`. Its `run.sh`\n(`osism/osism-kubernetes`, `files/scripts/run.sh`)
        changes into\n`environments/$ENVIRONMENT` and hard-fails when the directory
        is absent:\n\n```bash\nif [[ ! -e $ENVIRONMENTS_DIRECTORY/$ENVIRONMENT ]];
        then\n    echo \"ERROR: environment $ENVIRONMENT not available\"\n    exit
        1\nfi\n```\n\nIt then loads exactly these files:\n\n```\n-e @environments/configuration.yml
        \           # global\n-e @environments/secrets.yml                  # global\n-e
        @environments/kubernetes/secrets.yml\n-e @environments/kubernetes/images.yml\n-e
        @environments/kubernetes/configuration.yml\n```\n\nA freshly generated configuration
        repository has no `environments/kubernetes`, so the play\ncannot start. All
        three files are needed, not just `configuration.yml`: they are passed as\nbare
        `-e @\u2026`, so a missing `images.yml` or `secrets.yml` aborts `ansible-playbook`.\n\n###
        Why the settings move\n\nThe k3s settings were previously in three places,
        none of which the k3s environment reads:\n\n| Setting | Was | Read by the
        k3s environment? |\n|---|---|---|\n| `apiserver_endpoint`, `metal_lb_ip_range`
        | `environments/infrastructure/configuration.yml` | no |\n| `k3s_token` placeholder
        | `environments/infrastructure/secrets.yml` | no |\n| generated `k3s_token`
        (`scripts/set-secrets.py`) | `environments/manager/secrets.yml` | no |\n\nA
        deployment therefore silently used the upstream defaults with an empty cluster
        token.\n\n### Evidence\n\nVerified on a real deployment with `ansible -m debug`
        inside the `osism-kubernetes`\ncontainer. After setting all four values under
        `environments/infrastructure/`, the effective\nvariables were still the upstream
        defaults:\n\n```\napiserver_endpoint: 192.168.16.8\ncilium_bgp:         true\nk3s_version:
        \       v1.34.1+k3s1\nmetal_lb_ip_range:  172.31.252.10-172.31.253.250\ntoken_set:
        \         false\n```\n\nWith the settings under `environments/kubernetes/`
        the same check returns the configured\nvalues, and `osism apply kubernetes`
        deploys a working cluster.\n\nHad the directory existed but the settings stayed
        in `infrastructure`, this would have\ndeployed a kube-vip VIP on the unroutable
        placeholder `192.168.16.8` with no cluster token.\n\n### What this changes\n\n-
        adds `environments/kubernetes/{configuration,images,secrets}.yml`, following
        the same\n  layout as the other environment directories (`images.yml` carries
        the usual `dummy:`\n  placeholder)\n- moves `apiserver_endpoint` and `metal_lb_ip_range`
        there, values and comments unchanged\n- moves the `k3s_token` placeholder
        there\n- points `scripts/set-secrets.py` at the new secrets file via a\n  `SECRETSFILE_OUTPUT_KUBERNETES`
        constant, matching the existing per-environment pattern\n\nNo default values
        change.\n\n### Note for existing configuration repositories\n\nThis is correct
        for newly generated repositories. An existing one that has already run\n`set-secrets.py`
        keeps its generated `k3s_token` in `environments/manager/secrets.yml`, while\nthe
        new `environments/kubernetes/secrets.yml` starts empty \u2014 so the value
        needs moving by\nhand once:\n\n```bash\n# read the existing value\nansible-vault
        view environments/manager/secrets.yml | grep k3s_token\n# then put it under
        k3s_token in environments/kubernetes/secrets.yml and drop the old entry\n```\n\nWorth
        calling out in the release notes, since a cluster deployed against an empty
        `k3s_token`\nfails in a way that does not obviously point back at the secrets
        file.\n\n### Alternative considered\n\n`run.sh` could also load `environments/infrastructure/*`.
        A dedicated environment directory\nwas chosen instead because it matches every
        other component and keeps the k3s settings where\nthe runtime already looks
        for them."
      change_url: https://github.com/osism/cfg-cookiecutter/pull/868
      child_jobs: []
      commit_id: 8126ae9856c7d7129066f01223f769021fcd2729
      event_id: 843f3320-9551-11f1-88e6-3ea890429c71
      executor:
        hostname: 521e9411259a
        inventory_file: /var/lib/zuul/builds/fde52e579ee74bd1845a3d9c8fe39e6c/ansible/inventory.yaml
        log_root: /var/lib/zuul/builds/fde52e579ee74bd1845a3d9c8fe39e6c/work/logs
        result_data_file: /var/lib/zuul/builds/fde52e579ee74bd1845a3d9c8fe39e6c/work/results.json
        src_root: /var/lib/zuul/builds/fde52e579ee74bd1845a3d9c8fe39e6c/work/src
        work_root: /var/lib/zuul/builds/fde52e579ee74bd1845a3d9c8fe39e6c/work
      include_vars: []
      items:
      - branch: main
        change: '868'
        change_message: "Add environments/kubernetes and route k3s settings there\n\nAdd
          `environments/kubernetes/` to the generated configuration repository and
          move the k3s\nsettings into it, so that `osism apply kubernetes` can run
          at all.\n\n### Why the directory is required\n\nThe `osism-kubernetes` container
          runs with `ENVIRONMENT=kubernetes`. Its `run.sh`\n(`osism/osism-kubernetes`,
          `files/scripts/run.sh`) changes into\n`environments/$ENVIRONMENT` and hard-fails
          when the directory is absent:\n\n```bash\nif [[ ! -e $ENVIRONMENTS_DIRECTORY/$ENVIRONMENT
          ]]; then\n    echo \"ERROR: environment $ENVIRONMENT not available\"\n    exit
          1\nfi\n```\n\nIt then loads exactly these files:\n\n```\n-e @environments/configuration.yml
          \           # global\n-e @environments/secrets.yml                  # global\n-e
          @environments/kubernetes/secrets.yml\n-e @environments/kubernetes/images.yml\n-e
          @environments/kubernetes/configuration.yml\n```\n\nA freshly generated configuration
          repository has no `environments/kubernetes`, so the play\ncannot start.
          All three files are needed, not just `configuration.yml`: they are passed
          as\nbare `-e @\u2026`, so a missing `images.yml` or `secrets.yml` aborts
          `ansible-playbook`.\n\n### Why the settings move\n\nThe k3s settings were
          previously in three places, none of which the k3s environment reads:\n\n|
          Setting | Was | Read by the k3s environment? |\n|---|---|---|\n| `apiserver_endpoint`,
          `metal_lb_ip_range` | `environments/infrastructure/configuration.yml` |
          no |\n| `k3s_token` placeholder | `environments/infrastructure/secrets.yml`
          | no |\n| generated `k3s_token` (`scripts/set-secrets.py`) | `environments/manager/secrets.yml`
          | no |\n\nA deployment therefore silently used the upstream defaults with
          an empty cluster token.\n\n### Evidence\n\nVerified on a real deployment
          with `ansible -m debug` inside the `osism-kubernetes`\ncontainer. After
          setting all four values under `environments/infrastructure/`, the effective\nvariables
          were still the upstream defaults:\n\n```\napiserver_endpoint: 192.168.16.8\ncilium_bgp:
          \        true\nk3s_version:        v1.34.1+k3s1\nmetal_lb_ip_range:  172.31.252.10-172.31.253.250\ntoken_set:
          \         false\n```\n\nWith the settings under `environments/kubernetes/`
          the same check returns the configured\nvalues, and `osism apply kubernetes`
          deploys a working cluster.\n\nHad the directory existed but the settings
          stayed in `infrastructure`, this would have\ndeployed a kube-vip VIP on
          the unroutable placeholder `192.168.16.8` with no cluster token.\n\n###
          What this changes\n\n- adds `environments/kubernetes/{configuration,images,secrets}.yml`,
          following the same\n  layout as the other environment directories (`images.yml`
          carries the usual `dummy:`\n  placeholder)\n- moves `apiserver_endpoint`
          and `metal_lb_ip_range` there, values and comments unchanged\n- moves the
          `k3s_token` placeholder there\n- points `scripts/set-secrets.py` at the
          new secrets file via a\n  `SECRETSFILE_OUTPUT_KUBERNETES` constant, matching
          the existing per-environment pattern\n\nNo default values change.\n\n###
          Note for existing configuration repositories\n\nThis is correct for newly
          generated repositories. An existing one that has already run\n`set-secrets.py`
          keeps its generated `k3s_token` in `environments/manager/secrets.yml`, while\nthe
          new `environments/kubernetes/secrets.yml` starts empty \u2014 so the value
          needs moving by\nhand once:\n\n```bash\n# read the existing value\nansible-vault
          view environments/manager/secrets.yml | grep k3s_token\n# then put it under
          k3s_token in environments/kubernetes/secrets.yml and drop the old entry\n```\n\nWorth
          calling out in the release notes, since a cluster deployed against an empty
          `k3s_token`\nfails in a way that does not obviously point back at the secrets
          file.\n\n### Alternative considered\n\n`run.sh` could also load `environments/infrastructure/*`.
          A dedicated environment directory\nwas chosen instead because it matches
          every other component and keeps the k3s settings where\nthe runtime already
          looks for them."
        change_url: https://github.com/osism/cfg-cookiecutter/pull/868
        commit_id: 8126ae9856c7d7129066f01223f769021fcd2729
        patchset: 8126ae9856c7d7129066f01223f769021fcd2729
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/cfg-cookiecutter
          name: osism/cfg-cookiecutter
          short_name: cfg-cookiecutter
          src_dir: src/github.com/osism/cfg-cookiecutter
        topic: null
      job: flake8
      jobtags: []
      max_attempts: 3
      message: QWRkIGVudmlyb25tZW50cy9rdWJlcm5ldGVzIGFuZCByb3V0ZSBrM3Mgc2V0dGluZ3MgdGhlcmUKCkFkZCBgZW52aXJvbm1lbnRzL2t1YmVybmV0ZXMvYCB0byB0aGUgZ2VuZXJhdGVkIGNvbmZpZ3VyYXRpb24gcmVwb3NpdG9yeSBhbmQgbW92ZSB0aGUgazNzCnNldHRpbmdzIGludG8gaXQsIHNvIHRoYXQgYG9zaXNtIGFwcGx5IGt1YmVybmV0ZXNgIGNhbiBydW4gYXQgYWxsLgoKIyMjIFdoeSB0aGUgZGlyZWN0b3J5IGlzIHJlcXVpcmVkCgpUaGUgYG9zaXNtLWt1YmVybmV0ZXNgIGNvbnRhaW5lciBydW5zIHdpdGggYEVOVklST05NRU5UPWt1YmVybmV0ZXNgLiBJdHMgYHJ1bi5zaGAKKGBvc2lzbS9vc2lzbS1rdWJlcm5ldGVzYCwgYGZpbGVzL3NjcmlwdHMvcnVuLnNoYCkgY2hhbmdlcyBpbnRvCmBlbnZpcm9ubWVudHMvJEVOVklST05NRU5UYCBhbmQgaGFyZC1mYWlscyB3aGVuIHRoZSBkaXJlY3RvcnkgaXMgYWJzZW50OgoKYGBgYmFzaAppZiBbWyAhIC1lICRFTlZJUk9OTUVOVFNfRElSRUNUT1JZLyRFTlZJUk9OTUVOVCBdXTsgdGhlbgogICAgZWNobyAiRVJST1I6IGVudmlyb25tZW50ICRFTlZJUk9OTUVOVCBub3QgYXZhaWxhYmxlIgogICAgZXhpdCAxCmZpCmBgYAoKSXQgdGhlbiBsb2FkcyBleGFjdGx5IHRoZXNlIGZpbGVzOgoKYGBgCi1lIEBlbnZpcm9ubWVudHMvY29uZmlndXJhdGlvbi55bWwgICAgICAgICAgICAjIGdsb2JhbAotZSBAZW52aXJvbm1lbnRzL3NlY3JldHMueW1sICAgICAgICAgICAgICAgICAgIyBnbG9iYWwKLWUgQGVudmlyb25tZW50cy9rdWJlcm5ldGVzL3NlY3JldHMueW1sCi1lIEBlbnZpcm9ubWVudHMva3ViZXJuZXRlcy9pbWFnZXMueW1sCi1lIEBlbnZpcm9ubWVudHMva3ViZXJuZXRlcy9jb25maWd1cmF0aW9uLnltbApgYGAKCkEgZnJlc2hseSBnZW5lcmF0ZWQgY29uZmlndXJhdGlvbiByZXBvc2l0b3J5IGhhcyBubyBgZW52aXJvbm1lbnRzL2t1YmVybmV0ZXNgLCBzbyB0aGUgcGxheQpjYW5ub3Qgc3RhcnQuIEFsbCB0aHJlZSBmaWxlcyBhcmUgbmVlZGVkLCBub3QganVzdCBgY29uZmlndXJhdGlvbi55bWxgOiB0aGV5IGFyZSBwYXNzZWQgYXMKYmFyZSBgLWUgQOKApmAsIHNvIGEgbWlzc2luZyBgaW1hZ2VzLnltbGAgb3IgYHNlY3JldHMueW1sYCBhYm9ydHMgYGFuc2libGUtcGxheWJvb2tgLgoKIyMjIFdoeSB0aGUgc2V0dGluZ3MgbW92ZQoKVGhlIGszcyBzZXR0aW5ncyB3ZXJlIHByZXZpb3VzbHkgaW4gdGhyZWUgcGxhY2VzLCBub25lIG9mIHdoaWNoIHRoZSBrM3MgZW52aXJvbm1lbnQgcmVhZHM6Cgp8IFNldHRpbmcgfCBXYXMgfCBSZWFkIGJ5IHRoZSBrM3MgZW52aXJvbm1lbnQ/IHwKfC0tLXwtLS18LS0tfAp8IGBhcGlzZXJ2ZXJfZW5kcG9pbnRgLCBgbWV0YWxfbGJfaXBfcmFuZ2VgIHwgYGVudmlyb25tZW50cy9pbmZyYXN0cnVjdHVyZS9jb25maWd1cmF0aW9uLnltbGAgfCBubyB8CnwgYGszc190b2tlbmAgcGxhY2Vob2xkZXIgfCBgZW52aXJvbm1lbnRzL2luZnJhc3RydWN0dXJlL3NlY3JldHMueW1sYCB8IG5vIHwKfCBnZW5lcmF0ZWQgYGszc190b2tlbmAgKGBzY3JpcHRzL3NldC1zZWNyZXRzLnB5YCkgfCBgZW52aXJvbm1lbnRzL21hbmFnZXIvc2VjcmV0cy55bWxgIHwgbm8gfAoKQSBkZXBsb3ltZW50IHRoZXJlZm9yZSBzaWxlbnRseSB1c2VkIHRoZSB1cHN0cmVhbSBkZWZhdWx0cyB3aXRoIGFuIGVtcHR5IGNsdXN0ZXIgdG9rZW4uCgojIyMgRXZpZGVuY2UKClZlcmlmaWVkIG9uIGEgcmVhbCBkZXBsb3ltZW50IHdpdGggYGFuc2libGUgLW0gZGVidWdgIGluc2lkZSB0aGUgYG9zaXNtLWt1YmVybmV0ZXNgCmNvbnRhaW5lci4gQWZ0ZXIgc2V0dGluZyBhbGwgZm91ciB2YWx1ZXMgdW5kZXIgYGVudmlyb25tZW50cy9pbmZyYXN0cnVjdHVyZS9gLCB0aGUgZWZmZWN0aXZlCnZhcmlhYmxlcyB3ZXJlIHN0aWxsIHRoZSB1cHN0cmVhbSBkZWZhdWx0czoKCmBgYAphcGlzZXJ2ZXJfZW5kcG9pbnQ6IDE5Mi4xNjguMTYuOApjaWxpdW1fYmdwOiAgICAgICAgIHRydWUKazNzX3ZlcnNpb246ICAgICAgICB2MS4zNC4xK2szczEKbWV0YWxfbGJfaXBfcmFuZ2U6ICAxNzIuMzEuMjUyLjEwLTE3Mi4zMS4yNTMuMjUwCnRva2VuX3NldDogICAgICAgICAgZmFsc2UKYGBgCgpXaXRoIHRoZSBzZXR0aW5ncyB1bmRlciBgZW52aXJvbm1lbnRzL2t1YmVybmV0ZXMvYCB0aGUgc2FtZSBjaGVjayByZXR1cm5zIHRoZSBjb25maWd1cmVkCnZhbHVlcywgYW5kIGBvc2lzbSBhcHBseSBrdWJlcm5ldGVzYCBkZXBsb3lzIGEgd29ya2luZyBjbHVzdGVyLgoKSGFkIHRoZSBkaXJlY3RvcnkgZXhpc3RlZCBidXQgdGhlIHNldHRpbmdzIHN0YXllZCBpbiBgaW5mcmFzdHJ1Y3R1cmVgLCB0aGlzIHdvdWxkIGhhdmUKZGVwbG95ZWQgYSBrdWJlLXZpcCBWSVAgb24gdGhlIHVucm91dGFibGUgcGxhY2Vob2xkZXIgYDE5Mi4xNjguMTYuOGAgd2l0aCBubyBjbHVzdGVyIHRva2VuLgoKIyMjIFdoYXQgdGhpcyBjaGFuZ2VzCgotIGFkZHMgYGVudmlyb25tZW50cy9rdWJlcm5ldGVzL3tjb25maWd1cmF0aW9uLGltYWdlcyxzZWNyZXRzfS55bWxgLCBmb2xsb3dpbmcgdGhlIHNhbWUKICBsYXlvdXQgYXMgdGhlIG90aGVyIGVudmlyb25tZW50IGRpcmVjdG9yaWVzIChgaW1hZ2VzLnltbGAgY2FycmllcyB0aGUgdXN1YWwgYGR1bW15OmAKICBwbGFjZWhvbGRlcikKLSBtb3ZlcyBgYXBpc2VydmVyX2VuZHBvaW50YCBhbmQgYG1ldGFsX2xiX2lwX3JhbmdlYCB0aGVyZSwgdmFsdWVzIGFuZCBjb21tZW50cyB1bmNoYW5nZWQKLSBtb3ZlcyB0aGUgYGszc190b2tlbmAgcGxhY2Vob2xkZXIgdGhlcmUKLSBwb2ludHMgYHNjcmlwdHMvc2V0LXNlY3JldHMucHlgIGF0IHRoZSBuZXcgc2VjcmV0cyBmaWxlIHZpYSBhCiAgYFNFQ1JFVFNGSUxFX09VVFBVVF9LVUJFUk5FVEVTYCBjb25zdGFudCwgbWF0Y2hpbmcgdGhlIGV4aXN0aW5nIHBlci1lbnZpcm9ubWVudCBwYXR0ZXJuCgpObyBkZWZhdWx0IHZhbHVlcyBjaGFuZ2UuCgojIyMgTm90ZSBmb3IgZXhpc3RpbmcgY29uZmlndXJhdGlvbiByZXBvc2l0b3JpZXMKClRoaXMgaXMgY29ycmVjdCBmb3IgbmV3bHkgZ2VuZXJhdGVkIHJlcG9zaXRvcmllcy4gQW4gZXhpc3Rpbmcgb25lIHRoYXQgaGFzIGFscmVhZHkgcnVuCmBzZXQtc2VjcmV0cy5weWAga2VlcHMgaXRzIGdlbmVyYXRlZCBgazNzX3Rva2VuYCBpbiBgZW52aXJvbm1lbnRzL21hbmFnZXIvc2VjcmV0cy55bWxgLCB3aGlsZQp0aGUgbmV3IGBlbnZpcm9ubWVudHMva3ViZXJuZXRlcy9zZWNyZXRzLnltbGAgc3RhcnRzIGVtcHR5IOKAlCBzbyB0aGUgdmFsdWUgbmVlZHMgbW92aW5nIGJ5CmhhbmQgb25jZToKCmBgYGJhc2gKIyByZWFkIHRoZSBleGlzdGluZyB2YWx1ZQphbnNpYmxlLXZhdWx0IHZpZXcgZW52aXJvbm1lbnRzL21hbmFnZXIvc2VjcmV0cy55bWwgfCBncmVwIGszc190b2tlbgojIHRoZW4gcHV0IGl0IHVuZGVyIGszc190b2tlbiBpbiBlbnZpcm9ubWVudHMva3ViZXJuZXRlcy9zZWNyZXRzLnltbCBhbmQgZHJvcCB0aGUgb2xkIGVudHJ5CmBgYAoKV29ydGggY2FsbGluZyBvdXQgaW4gdGhlIHJlbGVhc2Ugbm90ZXMsIHNpbmNlIGEgY2x1c3RlciBkZXBsb3llZCBhZ2FpbnN0IGFuIGVtcHR5IGBrM3NfdG9rZW5gCmZhaWxzIGluIGEgd2F5IHRoYXQgZG9lcyBub3Qgb2J2aW91c2x5IHBvaW50IGJhY2sgYXQgdGhlIHNlY3JldHMgZmlsZS4KCiMjIyBBbHRlcm5hdGl2ZSBjb25zaWRlcmVkCgpgcnVuLnNoYCBjb3VsZCBhbHNvIGxvYWQgYGVudmlyb25tZW50cy9pbmZyYXN0cnVjdHVyZS8qYC4gQSBkZWRpY2F0ZWQgZW52aXJvbm1lbnQgZGlyZWN0b3J5CndhcyBjaG9zZW4gaW5zdGVhZCBiZWNhdXNlIGl0IG1hdGNoZXMgZXZlcnkgb3RoZXIgY29tcG9uZW50IGFuZCBrZWVwcyB0aGUgazNzIHNldHRpbmdzIHdoZXJlCnRoZSBydW50aW1lIGFscmVhZHkgbG9va3MgZm9yIHRoZW0u
      patchset: 8126ae9856c7d7129066f01223f769021fcd2729
      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: b7c70f39598a39998dbbc6f833779355630f3a39
          untrusted/project_0/github.com/osism/zuul-jobs:
            canonical_name: github.com/osism/zuul-jobs
            checkout: main
            commit: b7c70f39598a39998dbbc6f833779355630f3a39
          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/cfg-cookiecutter
        name: osism/cfg-cookiecutter
        short_name: cfg-cookiecutter
        src_dir: src/github.com/osism/cfg-cookiecutter
      projects:
        github.com/osism/cfg-cookiecutter:
          canonical_hostname: github.com
          canonical_name: github.com/osism/cfg-cookiecutter
          checkout: main
          checkout_description: zuul branch
          commit: 9aa57ed854d251c79ac2d8ab0e3be48bebe683dd
          name: osism/cfg-cookiecutter
          required: false
          short_name: cfg-cookiecutter
          src_dir: src/github.com/osism/cfg-cookiecutter
      ref: refs/pull/868/head
      resources: {}
      tenant: osism
      timeout: 1800
      topic: null
      voting: true
