all:
  children:
    zuul_unreachable:
      hosts: {}
  hosts:
    debian-bookworm:
      ansible_connection: ssh
      ansible_host: 2a13:1a81:8000:3124:f816:3eff:febe:6396
      ansible_port: 22
      ansible_python_interpreter: auto
      ansible_user: zuul
      nodepool:
        az: nova
        cloud: regiocloud-a-ci
        external_id: 9bf9758f-2e7b-4a36-8c16-7ab3118e2a29
        host_id: 4ba4344415ca7057d9956ea5de826bbc0b830981e82c0e0f191fa07b
        interface_ip: 2a13:1a81:8000:3124:f816:3eff:febe:6396
        label: debian-bookworm
        node_properties: {}
        private_ipv4: 10.128.7.112
        private_ipv6: null
        provider: regiocloud-a
        public_ipv4: 81.163.192.101
        public_ipv6: 2a13:1a81:8000:3124:f816:3eff:febe:6396
        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/ansible-collection-validations/.zuul.yaml@main#159>'
      ansible_version: '9'
      attempts: 1
      branch: main
      build: cc399781ea554afc9217426cf9c79f08
      build_refs:
      - branch: main
        change: '270'
        change_message: "Add role to validate NTP synchronization\n\nCloses #17.\n\n##
          Why\n\nIn `osism/ansible-playbooks`, every `playbooks/generic/validate-*.yml`
          is a thin wrapper that delegates to a role of this collection:\n\n```yaml\nroles:\n
          \ - role: osism.validations.kernel_version\n```\n\n`validate-ntp.yml` is
          the sole exception \u2014 it carries the `chronyc` parsing logic inline
          and has no backing role. This PR extracts that logic into the `chrony` role,
          so the playbook can become a wrapper like all its siblings. OSISM synchronizes
          time exclusively via `osism.services.chrony`, hence the role name and the
          `chronyc` based check.\n\nThe thresholds keep the values the playbook uses
          in production, exposed as `chrony_max_stratum`, `chrony_max_system_clock_deviation`
          and `chrony_max_upper_clock_error_bound`. They do not collide with the variables
          of `osism.services.chrony`.\n\n## Bugfix included\n\nWhile porting I found
          a gap in the synchronization check. The playbook treats only the reference
          ID `7F7F0101` as unsynchronized, but chrony emits that value **solely when
          the `local` mode is operating**. A `chronyd` which never synchronized to
          any source instead reports:\n\n```\nreference ID = 00000000, stratum = 0,
          system time offset = 0.0, leap status = Not synchronised\n```\n\nThat passes
          all four of the playbook's current assertions \u2014 an unsynchronized host
          silently validates as healthy. Verified by running the existing assertions
          against exactly that input: `ok=4  failed=0`.\n\nThe role additionally asserts
          on the leap status. Both checks are required, neither covers the other:
          in `local` mode the leap status is `Normal`.\n\nTwo details worth calling
          out for review, both checked against chrony's `client.c` and the manual
          rather than assumed:\n\n- `chronyc -c tracking` prints **14** comma separated
          fields, one more than the number of rows shown by `chronyc tracking`, because
          the reference ID and the reference name are two distinct fields. The field
          indices `[0] [2] [4] [10] [11]` therefore carry over from the playbook unchanged.\n-
          The leap status is compared against `Not synchronised` rather than `Normal`,
          because `Insert second` / `Delete second` denote a synchronized clock with
          a *pending leap second* and must not fail the validation.\n\nThe tracking
          output is also guarded before it is indexed \u2014 without it a stopped
          `chronyd` (`506 Cannot talk to daemon`) or a missing `chronyc` surfaces
          as an index error instead of a legible message.\n\n**Operational note:**
          hosts whose `chronyd` never synchronized passed this validation before and
          will now correctly fail it.\n\n## Tests\n\n`molecule/delegated/prepare/chrony.yml`
          installs chrony via `osism.services.chrony` and waits for the initial sync
          with `chronyc waitsync`; `vars/chrony.yml` relaxes the *quality* thresholds
          because CI nodes are VMs with poor clock stability, while the *synchronization*
          assertion stays strict. As with the other validation roles, converge is
          the test \u2014 the role fails the play if NTP is unhealthy.\n\nBeyond that,
          the task file was exercised against synthetic `chronyc` output covering:
          healthy, pending leap second (must pass), never synchronized, `local` mode,
          each of the three thresholds, stopped daemon, and truncated output. The
          threshold fixture `0.001 + 0.002 + 0.5*0.100 = 0.053 > 0.025` confirms fields
          `[10]` and `[11]` are read as root delay and root dispersion.\n\n## Follow-up\n\nConverting
          `validate-ntp.yml` in `osism/ansible-playbooks` to a wrapper around `osism.validations.chrony`
          is deliberately left out \u2014 it can only merge once this collection is
          released.\n\n\U0001F916 Generated with [Claude Code](https://claude.com/claude-code)\n"
        change_url: https://github.com/osism/ansible-collection-validations/pull/270
        commit_id: 93a5b47926ba0d8d93137f86d6344fb6a1287f6f
        patchset: 93a5b47926ba0d8d93137f86d6344fb6a1287f6f
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/ansible-collection-validations
          name: osism/ansible-collection-validations
          short_name: ansible-collection-validations
        src_dir: src/github.com/osism/ansible-collection-validations
        topic: null
      buildset: 8d13139e6710475ba7bb06b80dc155f3
      buildset_refs:
      - branch: main
        change: '270'
        change_message: "Add role to validate NTP synchronization\n\nCloses #17.\n\n##
          Why\n\nIn `osism/ansible-playbooks`, every `playbooks/generic/validate-*.yml`
          is a thin wrapper that delegates to a role of this collection:\n\n```yaml\nroles:\n
          \ - role: osism.validations.kernel_version\n```\n\n`validate-ntp.yml` is
          the sole exception \u2014 it carries the `chronyc` parsing logic inline
          and has no backing role. This PR extracts that logic into the `chrony` role,
          so the playbook can become a wrapper like all its siblings. OSISM synchronizes
          time exclusively via `osism.services.chrony`, hence the role name and the
          `chronyc` based check.\n\nThe thresholds keep the values the playbook uses
          in production, exposed as `chrony_max_stratum`, `chrony_max_system_clock_deviation`
          and `chrony_max_upper_clock_error_bound`. They do not collide with the variables
          of `osism.services.chrony`.\n\n## Bugfix included\n\nWhile porting I found
          a gap in the synchronization check. The playbook treats only the reference
          ID `7F7F0101` as unsynchronized, but chrony emits that value **solely when
          the `local` mode is operating**. A `chronyd` which never synchronized to
          any source instead reports:\n\n```\nreference ID = 00000000, stratum = 0,
          system time offset = 0.0, leap status = Not synchronised\n```\n\nThat passes
          all four of the playbook's current assertions \u2014 an unsynchronized host
          silently validates as healthy. Verified by running the existing assertions
          against exactly that input: `ok=4  failed=0`.\n\nThe role additionally asserts
          on the leap status. Both checks are required, neither covers the other:
          in `local` mode the leap status is `Normal`.\n\nTwo details worth calling
          out for review, both checked against chrony's `client.c` and the manual
          rather than assumed:\n\n- `chronyc -c tracking` prints **14** comma separated
          fields, one more than the number of rows shown by `chronyc tracking`, because
          the reference ID and the reference name are two distinct fields. The field
          indices `[0] [2] [4] [10] [11]` therefore carry over from the playbook unchanged.\n-
          The leap status is compared against `Not synchronised` rather than `Normal`,
          because `Insert second` / `Delete second` denote a synchronized clock with
          a *pending leap second* and must not fail the validation.\n\nThe tracking
          output is also guarded before it is indexed \u2014 without it a stopped
          `chronyd` (`506 Cannot talk to daemon`) or a missing `chronyc` surfaces
          as an index error instead of a legible message.\n\n**Operational note:**
          hosts whose `chronyd` never synchronized passed this validation before and
          will now correctly fail it.\n\n## Tests\n\n`molecule/delegated/prepare/chrony.yml`
          installs chrony via `osism.services.chrony` and waits for the initial sync
          with `chronyc waitsync`; `vars/chrony.yml` relaxes the *quality* thresholds
          because CI nodes are VMs with poor clock stability, while the *synchronization*
          assertion stays strict. As with the other validation roles, converge is
          the test \u2014 the role fails the play if NTP is unhealthy.\n\nBeyond that,
          the task file was exercised against synthetic `chronyc` output covering:
          healthy, pending leap second (must pass), never synchronized, `local` mode,
          each of the three thresholds, stopped daemon, and truncated output. The
          threshold fixture `0.001 + 0.002 + 0.5*0.100 = 0.053 > 0.025` confirms fields
          `[10]` and `[11]` are read as root delay and root dispersion.\n\n## Follow-up\n\nConverting
          `validate-ntp.yml` in `osism/ansible-playbooks` to a wrapper around `osism.validations.chrony`
          is deliberately left out \u2014 it can only merge once this collection is
          released.\n\n\U0001F916 Generated with [Claude Code](https://claude.com/claude-code)\n"
        change_url: https://github.com/osism/ansible-collection-validations/pull/270
        commit_id: 93a5b47926ba0d8d93137f86d6344fb6a1287f6f
        patchset: 93a5b47926ba0d8d93137f86d6344fb6a1287f6f
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/ansible-collection-validations
          name: osism/ansible-collection-validations
          short_name: ansible-collection-validations
        src_dir: src/github.com/osism/ansible-collection-validations
        topic: null
      change: '270'
      change_message: "Add role to validate NTP synchronization\n\nCloses #17.\n\n##
        Why\n\nIn `osism/ansible-playbooks`, every `playbooks/generic/validate-*.yml`
        is a thin wrapper that delegates to a role of this collection:\n\n```yaml\nroles:\n
        \ - role: osism.validations.kernel_version\n```\n\n`validate-ntp.yml` is the
        sole exception \u2014 it carries the `chronyc` parsing logic inline and has
        no backing role. This PR extracts that logic into the `chrony` role, so the
        playbook can become a wrapper like all its siblings. OSISM synchronizes time
        exclusively via `osism.services.chrony`, hence the role name and the `chronyc`
        based check.\n\nThe thresholds keep the values the playbook uses in production,
        exposed as `chrony_max_stratum`, `chrony_max_system_clock_deviation` and `chrony_max_upper_clock_error_bound`.
        They do not collide with the variables of `osism.services.chrony`.\n\n## Bugfix
        included\n\nWhile porting I found a gap in the synchronization check. The
        playbook treats only the reference ID `7F7F0101` as unsynchronized, but chrony
        emits that value **solely when the `local` mode is operating**. A `chronyd`
        which never synchronized to any source instead reports:\n\n```\nreference
        ID = 00000000, stratum = 0, system time offset = 0.0, leap status = Not synchronised\n```\n\nThat
        passes all four of the playbook's current assertions \u2014 an unsynchronized
        host silently validates as healthy. Verified by running the existing assertions
        against exactly that input: `ok=4  failed=0`.\n\nThe role additionally asserts
        on the leap status. Both checks are required, neither covers the other: in
        `local` mode the leap status is `Normal`.\n\nTwo details worth calling out
        for review, both checked against chrony's `client.c` and the manual rather
        than assumed:\n\n- `chronyc -c tracking` prints **14** comma separated fields,
        one more than the number of rows shown by `chronyc tracking`, because the
        reference ID and the reference name are two distinct fields. The field indices
        `[0] [2] [4] [10] [11]` therefore carry over from the playbook unchanged.\n-
        The leap status is compared against `Not synchronised` rather than `Normal`,
        because `Insert second` / `Delete second` denote a synchronized clock with
        a *pending leap second* and must not fail the validation.\n\nThe tracking
        output is also guarded before it is indexed \u2014 without it a stopped `chronyd`
        (`506 Cannot talk to daemon`) or a missing `chronyc` surfaces as an index
        error instead of a legible message.\n\n**Operational note:** hosts whose `chronyd`
        never synchronized passed this validation before and will now correctly fail
        it.\n\n## Tests\n\n`molecule/delegated/prepare/chrony.yml` installs chrony
        via `osism.services.chrony` and waits for the initial sync with `chronyc waitsync`;
        `vars/chrony.yml` relaxes the *quality* thresholds because CI nodes are VMs
        with poor clock stability, while the *synchronization* assertion stays strict.
        As with the other validation roles, converge is the test \u2014 the role fails
        the play if NTP is unhealthy.\n\nBeyond that, the task file was exercised
        against synthetic `chronyc` output covering: healthy, pending leap second
        (must pass), never synchronized, `local` mode, each of the three thresholds,
        stopped daemon, and truncated output. The threshold fixture `0.001 + 0.002
        + 0.5*0.100 = 0.053 > 0.025` confirms fields `[10]` and `[11]` are read as
        root delay and root dispersion.\n\n## Follow-up\n\nConverting `validate-ntp.yml`
        in `osism/ansible-playbooks` to a wrapper around `osism.validations.chrony`
        is deliberately left out \u2014 it can only merge once this collection is
        released.\n\n\U0001F916 Generated with [Claude Code](https://claude.com/claude-code)\n"
      change_url: https://github.com/osism/ansible-collection-validations/pull/270
      child_jobs: []
      commit_id: 93a5b47926ba0d8d93137f86d6344fb6a1287f6f
      event_id: a3626270-7b9a-11f1-8686-205868dcee71
      executor:
        hostname: 521e9411259a
        inventory_file: /var/lib/zuul/builds/cc399781ea554afc9217426cf9c79f08/ansible/inventory.yaml
        log_root: /var/lib/zuul/builds/cc399781ea554afc9217426cf9c79f08/work/logs
        result_data_file: /var/lib/zuul/builds/cc399781ea554afc9217426cf9c79f08/work/results.json
        src_root: /var/lib/zuul/builds/cc399781ea554afc9217426cf9c79f08/work/src
        work_root: /var/lib/zuul/builds/cc399781ea554afc9217426cf9c79f08/work
      include_vars: []
      items:
      - branch: main
        change: '270'
        change_message: "Add role to validate NTP synchronization\n\nCloses #17.\n\n##
          Why\n\nIn `osism/ansible-playbooks`, every `playbooks/generic/validate-*.yml`
          is a thin wrapper that delegates to a role of this collection:\n\n```yaml\nroles:\n
          \ - role: osism.validations.kernel_version\n```\n\n`validate-ntp.yml` is
          the sole exception \u2014 it carries the `chronyc` parsing logic inline
          and has no backing role. This PR extracts that logic into the `chrony` role,
          so the playbook can become a wrapper like all its siblings. OSISM synchronizes
          time exclusively via `osism.services.chrony`, hence the role name and the
          `chronyc` based check.\n\nThe thresholds keep the values the playbook uses
          in production, exposed as `chrony_max_stratum`, `chrony_max_system_clock_deviation`
          and `chrony_max_upper_clock_error_bound`. They do not collide with the variables
          of `osism.services.chrony`.\n\n## Bugfix included\n\nWhile porting I found
          a gap in the synchronization check. The playbook treats only the reference
          ID `7F7F0101` as unsynchronized, but chrony emits that value **solely when
          the `local` mode is operating**. A `chronyd` which never synchronized to
          any source instead reports:\n\n```\nreference ID = 00000000, stratum = 0,
          system time offset = 0.0, leap status = Not synchronised\n```\n\nThat passes
          all four of the playbook's current assertions \u2014 an unsynchronized host
          silently validates as healthy. Verified by running the existing assertions
          against exactly that input: `ok=4  failed=0`.\n\nThe role additionally asserts
          on the leap status. Both checks are required, neither covers the other:
          in `local` mode the leap status is `Normal`.\n\nTwo details worth calling
          out for review, both checked against chrony's `client.c` and the manual
          rather than assumed:\n\n- `chronyc -c tracking` prints **14** comma separated
          fields, one more than the number of rows shown by `chronyc tracking`, because
          the reference ID and the reference name are two distinct fields. The field
          indices `[0] [2] [4] [10] [11]` therefore carry over from the playbook unchanged.\n-
          The leap status is compared against `Not synchronised` rather than `Normal`,
          because `Insert second` / `Delete second` denote a synchronized clock with
          a *pending leap second* and must not fail the validation.\n\nThe tracking
          output is also guarded before it is indexed \u2014 without it a stopped
          `chronyd` (`506 Cannot talk to daemon`) or a missing `chronyc` surfaces
          as an index error instead of a legible message.\n\n**Operational note:**
          hosts whose `chronyd` never synchronized passed this validation before and
          will now correctly fail it.\n\n## Tests\n\n`molecule/delegated/prepare/chrony.yml`
          installs chrony via `osism.services.chrony` and waits for the initial sync
          with `chronyc waitsync`; `vars/chrony.yml` relaxes the *quality* thresholds
          because CI nodes are VMs with poor clock stability, while the *synchronization*
          assertion stays strict. As with the other validation roles, converge is
          the test \u2014 the role fails the play if NTP is unhealthy.\n\nBeyond that,
          the task file was exercised against synthetic `chronyc` output covering:
          healthy, pending leap second (must pass), never synchronized, `local` mode,
          each of the three thresholds, stopped daemon, and truncated output. The
          threshold fixture `0.001 + 0.002 + 0.5*0.100 = 0.053 > 0.025` confirms fields
          `[10]` and `[11]` are read as root delay and root dispersion.\n\n## Follow-up\n\nConverting
          `validate-ntp.yml` in `osism/ansible-playbooks` to a wrapper around `osism.validations.chrony`
          is deliberately left out \u2014 it can only merge once this collection is
          released.\n\n\U0001F916 Generated with [Claude Code](https://claude.com/claude-code)\n"
        change_url: https://github.com/osism/ansible-collection-validations/pull/270
        commit_id: 93a5b47926ba0d8d93137f86d6344fb6a1287f6f
        patchset: 93a5b47926ba0d8d93137f86d6344fb6a1287f6f
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/ansible-collection-validations
          name: osism/ansible-collection-validations
          short_name: ansible-collection-validations
          src_dir: src/github.com/osism/ansible-collection-validations
        topic: null
      job: yamllint
      jobtags: []
      max_attempts: 3
      message: QWRkIHJvbGUgdG8gdmFsaWRhdGUgTlRQIHN5bmNocm9uaXphdGlvbgoKQ2xvc2VzICMxNy4KCiMjIFdoeQoKSW4gYG9zaXNtL2Fuc2libGUtcGxheWJvb2tzYCwgZXZlcnkgYHBsYXlib29rcy9nZW5lcmljL3ZhbGlkYXRlLSoueW1sYCBpcyBhIHRoaW4gd3JhcHBlciB0aGF0IGRlbGVnYXRlcyB0byBhIHJvbGUgb2YgdGhpcyBjb2xsZWN0aW9uOgoKYGBgeWFtbApyb2xlczoKICAtIHJvbGU6IG9zaXNtLnZhbGlkYXRpb25zLmtlcm5lbF92ZXJzaW9uCmBgYAoKYHZhbGlkYXRlLW50cC55bWxgIGlzIHRoZSBzb2xlIGV4Y2VwdGlvbiDigJQgaXQgY2FycmllcyB0aGUgYGNocm9ueWNgIHBhcnNpbmcgbG9naWMgaW5saW5lIGFuZCBoYXMgbm8gYmFja2luZyByb2xlLiBUaGlzIFBSIGV4dHJhY3RzIHRoYXQgbG9naWMgaW50byB0aGUgYGNocm9ueWAgcm9sZSwgc28gdGhlIHBsYXlib29rIGNhbiBiZWNvbWUgYSB3cmFwcGVyIGxpa2UgYWxsIGl0cyBzaWJsaW5ncy4gT1NJU00gc3luY2hyb25pemVzIHRpbWUgZXhjbHVzaXZlbHkgdmlhIGBvc2lzbS5zZXJ2aWNlcy5jaHJvbnlgLCBoZW5jZSB0aGUgcm9sZSBuYW1lIGFuZCB0aGUgYGNocm9ueWNgIGJhc2VkIGNoZWNrLgoKVGhlIHRocmVzaG9sZHMga2VlcCB0aGUgdmFsdWVzIHRoZSBwbGF5Ym9vayB1c2VzIGluIHByb2R1Y3Rpb24sIGV4cG9zZWQgYXMgYGNocm9ueV9tYXhfc3RyYXR1bWAsIGBjaHJvbnlfbWF4X3N5c3RlbV9jbG9ja19kZXZpYXRpb25gIGFuZCBgY2hyb255X21heF91cHBlcl9jbG9ja19lcnJvcl9ib3VuZGAuIFRoZXkgZG8gbm90IGNvbGxpZGUgd2l0aCB0aGUgdmFyaWFibGVzIG9mIGBvc2lzbS5zZXJ2aWNlcy5jaHJvbnlgLgoKIyMgQnVnZml4IGluY2x1ZGVkCgpXaGlsZSBwb3J0aW5nIEkgZm91bmQgYSBnYXAgaW4gdGhlIHN5bmNocm9uaXphdGlvbiBjaGVjay4gVGhlIHBsYXlib29rIHRyZWF0cyBvbmx5IHRoZSByZWZlcmVuY2UgSUQgYDdGN0YwMTAxYCBhcyB1bnN5bmNocm9uaXplZCwgYnV0IGNocm9ueSBlbWl0cyB0aGF0IHZhbHVlICoqc29sZWx5IHdoZW4gdGhlIGBsb2NhbGAgbW9kZSBpcyBvcGVyYXRpbmcqKi4gQSBgY2hyb255ZGAgd2hpY2ggbmV2ZXIgc3luY2hyb25pemVkIHRvIGFueSBzb3VyY2UgaW5zdGVhZCByZXBvcnRzOgoKYGBgCnJlZmVyZW5jZSBJRCA9IDAwMDAwMDAwLCBzdHJhdHVtID0gMCwgc3lzdGVtIHRpbWUgb2Zmc2V0ID0gMC4wLCBsZWFwIHN0YXR1cyA9IE5vdCBzeW5jaHJvbmlzZWQKYGBgCgpUaGF0IHBhc3NlcyBhbGwgZm91ciBvZiB0aGUgcGxheWJvb2sncyBjdXJyZW50IGFzc2VydGlvbnMg4oCUIGFuIHVuc3luY2hyb25pemVkIGhvc3Qgc2lsZW50bHkgdmFsaWRhdGVzIGFzIGhlYWx0aHkuIFZlcmlmaWVkIGJ5IHJ1bm5pbmcgdGhlIGV4aXN0aW5nIGFzc2VydGlvbnMgYWdhaW5zdCBleGFjdGx5IHRoYXQgaW5wdXQ6IGBvaz00ICBmYWlsZWQ9MGAuCgpUaGUgcm9sZSBhZGRpdGlvbmFsbHkgYXNzZXJ0cyBvbiB0aGUgbGVhcCBzdGF0dXMuIEJvdGggY2hlY2tzIGFyZSByZXF1aXJlZCwgbmVpdGhlciBjb3ZlcnMgdGhlIG90aGVyOiBpbiBgbG9jYWxgIG1vZGUgdGhlIGxlYXAgc3RhdHVzIGlzIGBOb3JtYWxgLgoKVHdvIGRldGFpbHMgd29ydGggY2FsbGluZyBvdXQgZm9yIHJldmlldywgYm90aCBjaGVja2VkIGFnYWluc3QgY2hyb255J3MgYGNsaWVudC5jYCBhbmQgdGhlIG1hbnVhbCByYXRoZXIgdGhhbiBhc3N1bWVkOgoKLSBgY2hyb255YyAtYyB0cmFja2luZ2AgcHJpbnRzICoqMTQqKiBjb21tYSBzZXBhcmF0ZWQgZmllbGRzLCBvbmUgbW9yZSB0aGFuIHRoZSBudW1iZXIgb2Ygcm93cyBzaG93biBieSBgY2hyb255YyB0cmFja2luZ2AsIGJlY2F1c2UgdGhlIHJlZmVyZW5jZSBJRCBhbmQgdGhlIHJlZmVyZW5jZSBuYW1lIGFyZSB0d28gZGlzdGluY3QgZmllbGRzLiBUaGUgZmllbGQgaW5kaWNlcyBgWzBdIFsyXSBbNF0gWzEwXSBbMTFdYCB0aGVyZWZvcmUgY2Fycnkgb3ZlciBmcm9tIHRoZSBwbGF5Ym9vayB1bmNoYW5nZWQuCi0gVGhlIGxlYXAgc3RhdHVzIGlzIGNvbXBhcmVkIGFnYWluc3QgYE5vdCBzeW5jaHJvbmlzZWRgIHJhdGhlciB0aGFuIGBOb3JtYWxgLCBiZWNhdXNlIGBJbnNlcnQgc2Vjb25kYCAvIGBEZWxldGUgc2Vjb25kYCBkZW5vdGUgYSBzeW5jaHJvbml6ZWQgY2xvY2sgd2l0aCBhICpwZW5kaW5nIGxlYXAgc2Vjb25kKiBhbmQgbXVzdCBub3QgZmFpbCB0aGUgdmFsaWRhdGlvbi4KClRoZSB0cmFja2luZyBvdXRwdXQgaXMgYWxzbyBndWFyZGVkIGJlZm9yZSBpdCBpcyBpbmRleGVkIOKAlCB3aXRob3V0IGl0IGEgc3RvcHBlZCBgY2hyb255ZGAgKGA1MDYgQ2Fubm90IHRhbGsgdG8gZGFlbW9uYCkgb3IgYSBtaXNzaW5nIGBjaHJvbnljYCBzdXJmYWNlcyBhcyBhbiBpbmRleCBlcnJvciBpbnN0ZWFkIG9mIGEgbGVnaWJsZSBtZXNzYWdlLgoKKipPcGVyYXRpb25hbCBub3RlOioqIGhvc3RzIHdob3NlIGBjaHJvbnlkYCBuZXZlciBzeW5jaHJvbml6ZWQgcGFzc2VkIHRoaXMgdmFsaWRhdGlvbiBiZWZvcmUgYW5kIHdpbGwgbm93IGNvcnJlY3RseSBmYWlsIGl0LgoKIyMgVGVzdHMKCmBtb2xlY3VsZS9kZWxlZ2F0ZWQvcHJlcGFyZS9jaHJvbnkueW1sYCBpbnN0YWxscyBjaHJvbnkgdmlhIGBvc2lzbS5zZXJ2aWNlcy5jaHJvbnlgIGFuZCB3YWl0cyBmb3IgdGhlIGluaXRpYWwgc3luYyB3aXRoIGBjaHJvbnljIHdhaXRzeW5jYDsgYHZhcnMvY2hyb255LnltbGAgcmVsYXhlcyB0aGUgKnF1YWxpdHkqIHRocmVzaG9sZHMgYmVjYXVzZSBDSSBub2RlcyBhcmUgVk1zIHdpdGggcG9vciBjbG9jayBzdGFiaWxpdHksIHdoaWxlIHRoZSAqc3luY2hyb25pemF0aW9uKiBhc3NlcnRpb24gc3RheXMgc3RyaWN0LiBBcyB3aXRoIHRoZSBvdGhlciB2YWxpZGF0aW9uIHJvbGVzLCBjb252ZXJnZSBpcyB0aGUgdGVzdCDigJQgdGhlIHJvbGUgZmFpbHMgdGhlIHBsYXkgaWYgTlRQIGlzIHVuaGVhbHRoeS4KCkJleW9uZCB0aGF0LCB0aGUgdGFzayBmaWxlIHdhcyBleGVyY2lzZWQgYWdhaW5zdCBzeW50aGV0aWMgYGNocm9ueWNgIG91dHB1dCBjb3ZlcmluZzogaGVhbHRoeSwgcGVuZGluZyBsZWFwIHNlY29uZCAobXVzdCBwYXNzKSwgbmV2ZXIgc3luY2hyb25pemVkLCBgbG9jYWxgIG1vZGUsIGVhY2ggb2YgdGhlIHRocmVlIHRocmVzaG9sZHMsIHN0b3BwZWQgZGFlbW9uLCBhbmQgdHJ1bmNhdGVkIG91dHB1dC4gVGhlIHRocmVzaG9sZCBmaXh0dXJlIGAwLjAwMSArIDAuMDAyICsgMC41KjAuMTAwID0gMC4wNTMgPiAwLjAyNWAgY29uZmlybXMgZmllbGRzIGBbMTBdYCBhbmQgYFsxMV1gIGFyZSByZWFkIGFzIHJvb3QgZGVsYXkgYW5kIHJvb3QgZGlzcGVyc2lvbi4KCiMjIEZvbGxvdy11cAoKQ29udmVydGluZyBgdmFsaWRhdGUtbnRwLnltbGAgaW4gYG9zaXNtL2Fuc2libGUtcGxheWJvb2tzYCB0byBhIHdyYXBwZXIgYXJvdW5kIGBvc2lzbS52YWxpZGF0aW9ucy5jaHJvbnlgIGlzIGRlbGliZXJhdGVseSBsZWZ0IG91dCDigJQgaXQgY2FuIG9ubHkgbWVyZ2Ugb25jZSB0aGlzIGNvbGxlY3Rpb24gaXMgcmVsZWFzZWQuCgrwn6SWIEdlbmVyYXRlZCB3aXRoIFtDbGF1ZGUgQ29kZV0oaHR0cHM6Ly9jbGF1ZGUuY29tL2NsYXVkZS1jb2RlKQo=
      patchset: 93a5b47926ba0d8d93137f86d6344fb6a1287f6f
      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/ansible-collection-validations
        name: osism/ansible-collection-validations
        short_name: ansible-collection-validations
        src_dir: src/github.com/osism/ansible-collection-validations
      projects:
        github.com/osism/ansible-collection-validations:
          canonical_hostname: github.com
          canonical_name: github.com/osism/ansible-collection-validations
          checkout: main
          checkout_description: zuul branch
          commit: 3096d5fcce4c9601610ef8ec81735f58cf7ca053
          name: osism/ansible-collection-validations
          required: false
          short_name: ansible-collection-validations
          src_dir: src/github.com/osism/ansible-collection-validations
      ref: refs/pull/270/head
      resources: {}
      tenant: osism
      timeout: 1800
      topic: null
      voting: true
