all:
  children:
    zuul_unreachable:
      hosts: {}
  hosts:
    debian-bookworm:
      ansible_connection: ssh
      ansible_host: 2a13:1a81:8000:3124:f816:3eff:fed4:9400
      ansible_port: 22
      ansible_python_interpreter: auto
      ansible_user: zuul
      nodepool:
        az: nova
        cloud: regiocloud-a-ci
        external_id: 07e36e40-6afc-48d6-9e77-ca564c2ce644
        host_id: 25afcdcd4b24cc9d1766f11f81549380a3029030a455889bb61ec093
        interface_ip: 2a13:1a81:8000:3124:f816:3eff:fed4:9400
        label: debian-bookworm
        node_properties: {}
        private_ipv4: 10.128.0.107
        private_ipv6: null
        provider: regiocloud-a
        public_ipv4: 81.163.192.12
        public_ipv6: 2a13:1a81:8000:3124:f816:3eff:fed4:9400
        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 ansible-lint explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: osism/zuul-jobs/.zuul.yaml@main#7>'
      - '<Job ansible-lint explicit: None implied: None source: osism/testbed/.zuul.yaml@main#324>'
      ansible_version: '9'
      attempts: 1
      branch: main
      build: ca02bfdf78e248b1ac78d41427c9b1c5
      build_refs:
      - branch: main
        change: '2897'
        change_message: "deploy: capture manager console log on ssh fail\n\n## Problem\n\n`testbed-upgrade-stable-ubuntu-24.04`
          (and other jobs running\n`playbooks/deploy.yml`) intermittently fail during
          manager bring-up at\n*Wait until ssh public key authentication to the manager
          works*: sshd is up\nand the host key is scannable, but public-key auth is
          refused for the whole\nretry window. The usual cause is a cloud-init timing
          race \u2014 the image user's\n`authorized_keys` has not been written yet.\n\nThe
          hard part is diagnosis. The manager's cloud-init log cannot be pulled over\nSSH
          (SSH is exactly what failed), and `post.yml` then runs `cleanup.py`\nunconditionally,
          destroying the manager \u2014 and its console \u2014 before anything\nreads
          it. Every occurrence so far has had to be reconstructed from the\norchestrator
          side only.\n\nMost recent occurrence, which prompted this change (periodic-midnight,\n2026-05-29
          \u2014 60/60 public-key retries denied, failed at ~8m):\nhttps://zuul.services.osism.tech/t/osism/build/441363899a4446aeb1146da5efb5899e\n\n##
          What this PR does\n\nWraps the three readiness probes (port-22 wait, host-key
          scan, auth probe) in a\n`block`, and on failure captures the manager's **serial
          console log**\nout-of-band via `openstack console log show` using the orchestrator's
          existing\ncloud credentials (`OS_CLOUD`) \u2014 no manager SSH required.
          The log is printed\ninto the job output for triage, then the play re-fails
          so the build still\nreports the failure. The capture runs in the run phase,
          before the post-run\ncleanup tears the manager down.\n\nThis is diagnostic
          instrumentation: the success path is unchanged. The next\ntime the race
          fires, the cloud-init console output should show whether\ncloud-init stalled
          or errored, and where.\n\nNotes:\n- `manager_server_name` (default `testbed-manager`)
          is parameterised rather\n  than hard-coded.\n- The rescue covers all three
          probes and reports which task actually failed.\n- The capture is `failed_when:
          false` so an instrumentation hiccup cannot mask\n  the real failure.\n\n##
          Earlier work on this problem\n\n- #2887 (*deploy: replace fixed delays with
          event-driven waits for SSH auth and\n  docker*, merged 2026-05-08) added
          this very probe, replacing a fixed 60s\n  pause with a retrying `ssh-keyscan`
          + active public-key probe so bootstrap\n  continues as soon as auth is ready.
          It absorbs the race when cloud-init\n  finishes within the window; this
          PR adds the diagnostics for when it does not.\n- osism/python-osism#2282
          (`ANSIBLE_SSH_RETRIES=3`) addressed a related but\n  distinct SSH \"Permission
          denied (publickey)\" race on the production\n  `osism apply` path (a per-task
          ControlPath cold-burst) \u2014 a different\n  manifestation, noted here
          for context.\n\n## Testing\n\nYAML validated locally; full `ansible-lint`
          / syntax check runs in CI. The\ncapture path only runs on a real readiness
          failure, so it is best validated by\nthe next occurrence (or a forced failure).\n\n\U0001F916
          Generated with [Claude Code](https://claude.com/claude-code)"
        change_url: https://github.com/osism/testbed/pull/2897
        commit_id: d8e186b72af39bde9a158f22ea6d2e8a150c5540
        patchset: d8e186b72af39bde9a158f22ea6d2e8a150c5540
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/testbed
          name: osism/testbed
          short_name: testbed
        src_dir: src/github.com/osism/testbed
        topic: null
      buildset: 62f29778d2b046b6bc54dd796d4912d1
      buildset_refs:
      - branch: main
        change: '2897'
        change_message: "deploy: capture manager console log on ssh fail\n\n## Problem\n\n`testbed-upgrade-stable-ubuntu-24.04`
          (and other jobs running\n`playbooks/deploy.yml`) intermittently fail during
          manager bring-up at\n*Wait until ssh public key authentication to the manager
          works*: sshd is up\nand the host key is scannable, but public-key auth is
          refused for the whole\nretry window. The usual cause is a cloud-init timing
          race \u2014 the image user's\n`authorized_keys` has not been written yet.\n\nThe
          hard part is diagnosis. The manager's cloud-init log cannot be pulled over\nSSH
          (SSH is exactly what failed), and `post.yml` then runs `cleanup.py`\nunconditionally,
          destroying the manager \u2014 and its console \u2014 before anything\nreads
          it. Every occurrence so far has had to be reconstructed from the\norchestrator
          side only.\n\nMost recent occurrence, which prompted this change (periodic-midnight,\n2026-05-29
          \u2014 60/60 public-key retries denied, failed at ~8m):\nhttps://zuul.services.osism.tech/t/osism/build/441363899a4446aeb1146da5efb5899e\n\n##
          What this PR does\n\nWraps the three readiness probes (port-22 wait, host-key
          scan, auth probe) in a\n`block`, and on failure captures the manager's **serial
          console log**\nout-of-band via `openstack console log show` using the orchestrator's
          existing\ncloud credentials (`OS_CLOUD`) \u2014 no manager SSH required.
          The log is printed\ninto the job output for triage, then the play re-fails
          so the build still\nreports the failure. The capture runs in the run phase,
          before the post-run\ncleanup tears the manager down.\n\nThis is diagnostic
          instrumentation: the success path is unchanged. The next\ntime the race
          fires, the cloud-init console output should show whether\ncloud-init stalled
          or errored, and where.\n\nNotes:\n- `manager_server_name` (default `testbed-manager`)
          is parameterised rather\n  than hard-coded.\n- The rescue covers all three
          probes and reports which task actually failed.\n- The capture is `failed_when:
          false` so an instrumentation hiccup cannot mask\n  the real failure.\n\n##
          Earlier work on this problem\n\n- #2887 (*deploy: replace fixed delays with
          event-driven waits for SSH auth and\n  docker*, merged 2026-05-08) added
          this very probe, replacing a fixed 60s\n  pause with a retrying `ssh-keyscan`
          + active public-key probe so bootstrap\n  continues as soon as auth is ready.
          It absorbs the race when cloud-init\n  finishes within the window; this
          PR adds the diagnostics for when it does not.\n- osism/python-osism#2282
          (`ANSIBLE_SSH_RETRIES=3`) addressed a related but\n  distinct SSH \"Permission
          denied (publickey)\" race on the production\n  `osism apply` path (a per-task
          ControlPath cold-burst) \u2014 a different\n  manifestation, noted here
          for context.\n\n## Testing\n\nYAML validated locally; full `ansible-lint`
          / syntax check runs in CI. The\ncapture path only runs on a real readiness
          failure, so it is best validated by\nthe next occurrence (or a forced failure).\n\n\U0001F916
          Generated with [Claude Code](https://claude.com/claude-code)"
        change_url: https://github.com/osism/testbed/pull/2897
        commit_id: d8e186b72af39bde9a158f22ea6d2e8a150c5540
        patchset: d8e186b72af39bde9a158f22ea6d2e8a150c5540
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/testbed
          name: osism/testbed
          short_name: testbed
        src_dir: src/github.com/osism/testbed
        topic: null
      change: '2897'
      change_message: "deploy: capture manager console log on ssh fail\n\n## Problem\n\n`testbed-upgrade-stable-ubuntu-24.04`
        (and other jobs running\n`playbooks/deploy.yml`) intermittently fail during
        manager bring-up at\n*Wait until ssh public key authentication to the manager
        works*: sshd is up\nand the host key is scannable, but public-key auth is
        refused for the whole\nretry window. The usual cause is a cloud-init timing
        race \u2014 the image user's\n`authorized_keys` has not been written yet.\n\nThe
        hard part is diagnosis. The manager's cloud-init log cannot be pulled over\nSSH
        (SSH is exactly what failed), and `post.yml` then runs `cleanup.py`\nunconditionally,
        destroying the manager \u2014 and its console \u2014 before anything\nreads
        it. Every occurrence so far has had to be reconstructed from the\norchestrator
        side only.\n\nMost recent occurrence, which prompted this change (periodic-midnight,\n2026-05-29
        \u2014 60/60 public-key retries denied, failed at ~8m):\nhttps://zuul.services.osism.tech/t/osism/build/441363899a4446aeb1146da5efb5899e\n\n##
        What this PR does\n\nWraps the three readiness probes (port-22 wait, host-key
        scan, auth probe) in a\n`block`, and on failure captures the manager's **serial
        console log**\nout-of-band via `openstack console log show` using the orchestrator's
        existing\ncloud credentials (`OS_CLOUD`) \u2014 no manager SSH required. The
        log is printed\ninto the job output for triage, then the play re-fails so
        the build still\nreports the failure. The capture runs in the run phase, before
        the post-run\ncleanup tears the manager down.\n\nThis is diagnostic instrumentation:
        the success path is unchanged. The next\ntime the race fires, the cloud-init
        console output should show whether\ncloud-init stalled or errored, and where.\n\nNotes:\n-
        `manager_server_name` (default `testbed-manager`) is parameterised rather\n
        \ than hard-coded.\n- The rescue covers all three probes and reports which
        task actually failed.\n- The capture is `failed_when: false` so an instrumentation
        hiccup cannot mask\n  the real failure.\n\n## Earlier work on this problem\n\n-
        #2887 (*deploy: replace fixed delays with event-driven waits for SSH auth
        and\n  docker*, merged 2026-05-08) added this very probe, replacing a fixed
        60s\n  pause with a retrying `ssh-keyscan` + active public-key probe so bootstrap\n
        \ continues as soon as auth is ready. It absorbs the race when cloud-init\n
        \ finishes within the window; this PR adds the diagnostics for when it does
        not.\n- osism/python-osism#2282 (`ANSIBLE_SSH_RETRIES=3`) addressed a related
        but\n  distinct SSH \"Permission denied (publickey)\" race on the production\n
        \ `osism apply` path (a per-task ControlPath cold-burst) \u2014 a different\n
        \ manifestation, noted here for context.\n\n## Testing\n\nYAML validated locally;
        full `ansible-lint` / syntax check runs in CI. The\ncapture path only runs
        on a real readiness failure, so it is best validated by\nthe next occurrence
        (or a forced failure).\n\n\U0001F916 Generated with [Claude Code](https://claude.com/claude-code)"
      change_url: https://github.com/osism/testbed/pull/2897
      child_jobs: []
      commit_id: d8e186b72af39bde9a158f22ea6d2e8a150c5540
      event_id: 28aa97c0-5f5a-11f1-8697-2e021e7a3a70
      executor:
        hostname: 521e9411259a
        inventory_file: /var/lib/zuul/builds/ca02bfdf78e248b1ac78d41427c9b1c5/ansible/inventory.yaml
        log_root: /var/lib/zuul/builds/ca02bfdf78e248b1ac78d41427c9b1c5/work/logs
        result_data_file: /var/lib/zuul/builds/ca02bfdf78e248b1ac78d41427c9b1c5/work/results.json
        src_root: /var/lib/zuul/builds/ca02bfdf78e248b1ac78d41427c9b1c5/work/src
        work_root: /var/lib/zuul/builds/ca02bfdf78e248b1ac78d41427c9b1c5/work
      include_vars: []
      items:
      - branch: main
        change: '2897'
        change_message: "deploy: capture manager console log on ssh fail\n\n## Problem\n\n`testbed-upgrade-stable-ubuntu-24.04`
          (and other jobs running\n`playbooks/deploy.yml`) intermittently fail during
          manager bring-up at\n*Wait until ssh public key authentication to the manager
          works*: sshd is up\nand the host key is scannable, but public-key auth is
          refused for the whole\nretry window. The usual cause is a cloud-init timing
          race \u2014 the image user's\n`authorized_keys` has not been written yet.\n\nThe
          hard part is diagnosis. The manager's cloud-init log cannot be pulled over\nSSH
          (SSH is exactly what failed), and `post.yml` then runs `cleanup.py`\nunconditionally,
          destroying the manager \u2014 and its console \u2014 before anything\nreads
          it. Every occurrence so far has had to be reconstructed from the\norchestrator
          side only.\n\nMost recent occurrence, which prompted this change (periodic-midnight,\n2026-05-29
          \u2014 60/60 public-key retries denied, failed at ~8m):\nhttps://zuul.services.osism.tech/t/osism/build/441363899a4446aeb1146da5efb5899e\n\n##
          What this PR does\n\nWraps the three readiness probes (port-22 wait, host-key
          scan, auth probe) in a\n`block`, and on failure captures the manager's **serial
          console log**\nout-of-band via `openstack console log show` using the orchestrator's
          existing\ncloud credentials (`OS_CLOUD`) \u2014 no manager SSH required.
          The log is printed\ninto the job output for triage, then the play re-fails
          so the build still\nreports the failure. The capture runs in the run phase,
          before the post-run\ncleanup tears the manager down.\n\nThis is diagnostic
          instrumentation: the success path is unchanged. The next\ntime the race
          fires, the cloud-init console output should show whether\ncloud-init stalled
          or errored, and where.\n\nNotes:\n- `manager_server_name` (default `testbed-manager`)
          is parameterised rather\n  than hard-coded.\n- The rescue covers all three
          probes and reports which task actually failed.\n- The capture is `failed_when:
          false` so an instrumentation hiccup cannot mask\n  the real failure.\n\n##
          Earlier work on this problem\n\n- #2887 (*deploy: replace fixed delays with
          event-driven waits for SSH auth and\n  docker*, merged 2026-05-08) added
          this very probe, replacing a fixed 60s\n  pause with a retrying `ssh-keyscan`
          + active public-key probe so bootstrap\n  continues as soon as auth is ready.
          It absorbs the race when cloud-init\n  finishes within the window; this
          PR adds the diagnostics for when it does not.\n- osism/python-osism#2282
          (`ANSIBLE_SSH_RETRIES=3`) addressed a related but\n  distinct SSH \"Permission
          denied (publickey)\" race on the production\n  `osism apply` path (a per-task
          ControlPath cold-burst) \u2014 a different\n  manifestation, noted here
          for context.\n\n## Testing\n\nYAML validated locally; full `ansible-lint`
          / syntax check runs in CI. The\ncapture path only runs on a real readiness
          failure, so it is best validated by\nthe next occurrence (or a forced failure).\n\n\U0001F916
          Generated with [Claude Code](https://claude.com/claude-code)"
        change_url: https://github.com/osism/testbed/pull/2897
        commit_id: d8e186b72af39bde9a158f22ea6d2e8a150c5540
        patchset: d8e186b72af39bde9a158f22ea6d2e8a150c5540
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/testbed
          name: osism/testbed
          short_name: testbed
          src_dir: src/github.com/osism/testbed
        topic: null
      job: ansible-lint
      jobtags: []
      max_attempts: 3
      message: ZGVwbG95OiBjYXB0dXJlIG1hbmFnZXIgY29uc29sZSBsb2cgb24gc3NoIGZhaWwKCiMjIFByb2JsZW0KCmB0ZXN0YmVkLXVwZ3JhZGUtc3RhYmxlLXVidW50dS0yNC4wNGAgKGFuZCBvdGhlciBqb2JzIHJ1bm5pbmcKYHBsYXlib29rcy9kZXBsb3kueW1sYCkgaW50ZXJtaXR0ZW50bHkgZmFpbCBkdXJpbmcgbWFuYWdlciBicmluZy11cCBhdAoqV2FpdCB1bnRpbCBzc2ggcHVibGljIGtleSBhdXRoZW50aWNhdGlvbiB0byB0aGUgbWFuYWdlciB3b3Jrcyo6IHNzaGQgaXMgdXAKYW5kIHRoZSBob3N0IGtleSBpcyBzY2FubmFibGUsIGJ1dCBwdWJsaWMta2V5IGF1dGggaXMgcmVmdXNlZCBmb3IgdGhlIHdob2xlCnJldHJ5IHdpbmRvdy4gVGhlIHVzdWFsIGNhdXNlIGlzIGEgY2xvdWQtaW5pdCB0aW1pbmcgcmFjZSDigJQgdGhlIGltYWdlIHVzZXIncwpgYXV0aG9yaXplZF9rZXlzYCBoYXMgbm90IGJlZW4gd3JpdHRlbiB5ZXQuCgpUaGUgaGFyZCBwYXJ0IGlzIGRpYWdub3Npcy4gVGhlIG1hbmFnZXIncyBjbG91ZC1pbml0IGxvZyBjYW5ub3QgYmUgcHVsbGVkIG92ZXIKU1NIIChTU0ggaXMgZXhhY3RseSB3aGF0IGZhaWxlZCksIGFuZCBgcG9zdC55bWxgIHRoZW4gcnVucyBgY2xlYW51cC5weWAKdW5jb25kaXRpb25hbGx5LCBkZXN0cm95aW5nIHRoZSBtYW5hZ2VyIOKAlCBhbmQgaXRzIGNvbnNvbGUg4oCUIGJlZm9yZSBhbnl0aGluZwpyZWFkcyBpdC4gRXZlcnkgb2NjdXJyZW5jZSBzbyBmYXIgaGFzIGhhZCB0byBiZSByZWNvbnN0cnVjdGVkIGZyb20gdGhlCm9yY2hlc3RyYXRvciBzaWRlIG9ubHkuCgpNb3N0IHJlY2VudCBvY2N1cnJlbmNlLCB3aGljaCBwcm9tcHRlZCB0aGlzIGNoYW5nZSAocGVyaW9kaWMtbWlkbmlnaHQsCjIwMjYtMDUtMjkg4oCUIDYwLzYwIHB1YmxpYy1rZXkgcmV0cmllcyBkZW5pZWQsIGZhaWxlZCBhdCB+OG0pOgpodHRwczovL3p1dWwuc2VydmljZXMub3Npc20udGVjaC90L29zaXNtL2J1aWxkLzQ0MTM2Mzg5OWE0NDQ2YWViMTE0NmRhNWVmYjU4OTllCgojIyBXaGF0IHRoaXMgUFIgZG9lcwoKV3JhcHMgdGhlIHRocmVlIHJlYWRpbmVzcyBwcm9iZXMgKHBvcnQtMjIgd2FpdCwgaG9zdC1rZXkgc2NhbiwgYXV0aCBwcm9iZSkgaW4gYQpgYmxvY2tgLCBhbmQgb24gZmFpbHVyZSBjYXB0dXJlcyB0aGUgbWFuYWdlcidzICoqc2VyaWFsIGNvbnNvbGUgbG9nKioKb3V0LW9mLWJhbmQgdmlhIGBvcGVuc3RhY2sgY29uc29sZSBsb2cgc2hvd2AgdXNpbmcgdGhlIG9yY2hlc3RyYXRvcidzIGV4aXN0aW5nCmNsb3VkIGNyZWRlbnRpYWxzIChgT1NfQ0xPVURgKSDigJQgbm8gbWFuYWdlciBTU0ggcmVxdWlyZWQuIFRoZSBsb2cgaXMgcHJpbnRlZAppbnRvIHRoZSBqb2Igb3V0cHV0IGZvciB0cmlhZ2UsIHRoZW4gdGhlIHBsYXkgcmUtZmFpbHMgc28gdGhlIGJ1aWxkIHN0aWxsCnJlcG9ydHMgdGhlIGZhaWx1cmUuIFRoZSBjYXB0dXJlIHJ1bnMgaW4gdGhlIHJ1biBwaGFzZSwgYmVmb3JlIHRoZSBwb3N0LXJ1bgpjbGVhbnVwIHRlYXJzIHRoZSBtYW5hZ2VyIGRvd24uCgpUaGlzIGlzIGRpYWdub3N0aWMgaW5zdHJ1bWVudGF0aW9uOiB0aGUgc3VjY2VzcyBwYXRoIGlzIHVuY2hhbmdlZC4gVGhlIG5leHQKdGltZSB0aGUgcmFjZSBmaXJlcywgdGhlIGNsb3VkLWluaXQgY29uc29sZSBvdXRwdXQgc2hvdWxkIHNob3cgd2hldGhlcgpjbG91ZC1pbml0IHN0YWxsZWQgb3IgZXJyb3JlZCwgYW5kIHdoZXJlLgoKTm90ZXM6Ci0gYG1hbmFnZXJfc2VydmVyX25hbWVgIChkZWZhdWx0IGB0ZXN0YmVkLW1hbmFnZXJgKSBpcyBwYXJhbWV0ZXJpc2VkIHJhdGhlcgogIHRoYW4gaGFyZC1jb2RlZC4KLSBUaGUgcmVzY3VlIGNvdmVycyBhbGwgdGhyZWUgcHJvYmVzIGFuZCByZXBvcnRzIHdoaWNoIHRhc2sgYWN0dWFsbHkgZmFpbGVkLgotIFRoZSBjYXB0dXJlIGlzIGBmYWlsZWRfd2hlbjogZmFsc2VgIHNvIGFuIGluc3RydW1lbnRhdGlvbiBoaWNjdXAgY2Fubm90IG1hc2sKICB0aGUgcmVhbCBmYWlsdXJlLgoKIyMgRWFybGllciB3b3JrIG9uIHRoaXMgcHJvYmxlbQoKLSAjMjg4NyAoKmRlcGxveTogcmVwbGFjZSBmaXhlZCBkZWxheXMgd2l0aCBldmVudC1kcml2ZW4gd2FpdHMgZm9yIFNTSCBhdXRoIGFuZAogIGRvY2tlciosIG1lcmdlZCAyMDI2LTA1LTA4KSBhZGRlZCB0aGlzIHZlcnkgcHJvYmUsIHJlcGxhY2luZyBhIGZpeGVkIDYwcwogIHBhdXNlIHdpdGggYSByZXRyeWluZyBgc3NoLWtleXNjYW5gICsgYWN0aXZlIHB1YmxpYy1rZXkgcHJvYmUgc28gYm9vdHN0cmFwCiAgY29udGludWVzIGFzIHNvb24gYXMgYXV0aCBpcyByZWFkeS4gSXQgYWJzb3JicyB0aGUgcmFjZSB3aGVuIGNsb3VkLWluaXQKICBmaW5pc2hlcyB3aXRoaW4gdGhlIHdpbmRvdzsgdGhpcyBQUiBhZGRzIHRoZSBkaWFnbm9zdGljcyBmb3Igd2hlbiBpdCBkb2VzIG5vdC4KLSBvc2lzbS9weXRob24tb3Npc20jMjI4MiAoYEFOU0lCTEVfU1NIX1JFVFJJRVM9M2ApIGFkZHJlc3NlZCBhIHJlbGF0ZWQgYnV0CiAgZGlzdGluY3QgU1NIICJQZXJtaXNzaW9uIGRlbmllZCAocHVibGlja2V5KSIgcmFjZSBvbiB0aGUgcHJvZHVjdGlvbgogIGBvc2lzbSBhcHBseWAgcGF0aCAoYSBwZXItdGFzayBDb250cm9sUGF0aCBjb2xkLWJ1cnN0KSDigJQgYSBkaWZmZXJlbnQKICBtYW5pZmVzdGF0aW9uLCBub3RlZCBoZXJlIGZvciBjb250ZXh0LgoKIyMgVGVzdGluZwoKWUFNTCB2YWxpZGF0ZWQgbG9jYWxseTsgZnVsbCBgYW5zaWJsZS1saW50YCAvIHN5bnRheCBjaGVjayBydW5zIGluIENJLiBUaGUKY2FwdHVyZSBwYXRoIG9ubHkgcnVucyBvbiBhIHJlYWwgcmVhZGluZXNzIGZhaWx1cmUsIHNvIGl0IGlzIGJlc3QgdmFsaWRhdGVkIGJ5CnRoZSBuZXh0IG9jY3VycmVuY2UgKG9yIGEgZm9yY2VkIGZhaWx1cmUpLgoK8J+kliBHZW5lcmF0ZWQgd2l0aCBbQ2xhdWRlIENvZGVdKGh0dHBzOi8vY2xhdWRlLmNvbS9jbGF1ZGUtY29kZSk=
      patchset: d8e186b72af39bde9a158f22ea6d2e8a150c5540
      pipeline: check
      playbook_context:
        playbook_projects:
          trusted/project_0/github.com/osism/zuul-config:
            canonical_name: github.com/osism/zuul-config
            checkout: main
            commit: 019f0261a526db7d8989ff1abefc2299a8c0ffbc
          trusted/project_1/github.com/osism/openinfra-zuul-jobs:
            canonical_name: github.com/osism/openinfra-zuul-jobs
            checkout: master
            commit: 038dd8b856c62af4433c8477c5cb3d0480847059
          trusted/project_2/github.com/osism/zuul-jobs:
            canonical_name: github.com/osism/zuul-jobs
            checkout: main
            commit: 0c74c57cedff2b36bb37ca68a5338d1c49991496
          untrusted/project_0/github.com/osism/zuul-jobs:
            canonical_name: github.com/osism/zuul-jobs
            checkout: main
            commit: 0c74c57cedff2b36bb37ca68a5338d1c49991496
          untrusted/project_1/github.com/osism/zuul-config:
            canonical_name: github.com/osism/zuul-config
            checkout: main
            commit: 019f0261a526db7d8989ff1abefc2299a8c0ffbc
          untrusted/project_2/github.com/osism/openinfra-zuul-jobs:
            canonical_name: github.com/osism/openinfra-zuul-jobs
            checkout: master
            commit: 038dd8b856c62af4433c8477c5cb3d0480847059
        playbooks:
        - path: untrusted/project_0/github.com/osism/zuul-jobs/playbooks/ansible-lint/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: null
      pre_timeout: null
      project:
        canonical_hostname: github.com
        canonical_name: github.com/osism/testbed
        name: osism/testbed
        short_name: testbed
        src_dir: src/github.com/osism/testbed
      projects:
        github.com/osism/testbed:
          canonical_hostname: github.com
          canonical_name: github.com/osism/testbed
          checkout: main
          checkout_description: zuul branch
          commit: 04184977038c43345a1a7224a712c4e2018e8c9e
          name: osism/testbed
          required: false
          short_name: testbed
          src_dir: src/github.com/osism/testbed
      ref: refs/pull/2897/head
      resources: {}
      tenant: osism
      timeout: 1800
      topic: null
      voting: true
