all:
  children:
    zuul_unreachable:
      hosts: {}
  hosts:
    debian-bookworm:
      ansible_connection: ssh
      ansible_host: 2a13:1a81:8000:3124:f816:3eff:feff:8ce7
      ansible_port: 22
      ansible_python_interpreter: auto
      ansible_user: zuul
      nodepool:
        az: nova
        cloud: regiocloud-a-ci
        external_id: 39ddc1cd-70d5-41fd-a12c-c6f6a4116956
        host_id: d2c528664e1bd332192bb574345deb0c6c7158061222e4a6c036b5ef
        interface_ip: 2a13:1a81:8000:3124:f816:3eff:feff:8ce7
        label: debian-bookworm
        node_properties: {}
        private_ipv4: 10.128.0.110
        private_ipv6: null
        provider: regiocloud-a
        public_ipv4: 81.163.192.157
        public_ipv6: 2a13:1a81:8000:3124:f816:3eff:feff:8ce7
        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/ansible-collection-services/.zuul.yaml@main#498>'
      ansible_version: '9'
      attempts: 1
      branch: main
      build: bd60569930a94221b46757fc24b639ef
      build_refs:
      - branch: main
        change: '2097'
        change_message: "smartd: make /etc/smartd.conf configurable via variables\n\nCloses
          #2082\n\n## Problem\n\nThe `smartd` role installs `smartmontools`, manages\n`/etc/default/smartmontools`,
          and starts the service, but never manages\n`/etc/smartd.conf`. As a result
          the package-provided `DEVICESCAN` line\ncannot be replaced when it finds
          no devices \u2014 e.g. behind an HPE Smart\nArray Gen8 RAID controller,
          where the daemon exits with status 17\n(`Unable to monitor any SMART enabled
          devices`) and the\n`Manage smartd service` task fails.\n\n## Change set
          (in commit order)\n\n1. **`smartd: make /etc/smartd.conf configurable via
          variables`**\n   - `roles/smartd/templates/smartd.conf.j2` (new) \u2014
          renders one line\n     per device as `<device> -d <type> <options>` (type/options\n
          \    optional), or a `DEVICESCAN` line when no devices are configured.\n
          \  - `roles/smartd/tasks/main.yml` \u2014 new `Copy smartd configuration\n
          \    file` task (`ansible.builtin.template` \u2192 `/etc/smartd.conf`,\n
          \    `0644 root:root`, `notify: Restart smartd service`), inserted\n     between
          the existing `/etc/default/smartmontools` copy and\n     `Manage smartd
          service`. Gated by\n     `when: smartd_configure | bool or smartd_devices
          | length > 0`.\n   - `roles/smartd/defaults/main.yml` \u2014 documents the
          new variables:\n     - `smartd_configure` (default `false`) \u2014 gate;
          also auto-enables\n       when `smartd_devices` is set.\n     - `smartd_devices`
          (default `[]`) \u2014 list of `{device, type?,\n       options?}`; setting
          any device replaces the default\n       `DEVICESCAN` line.\n     - `smartd_devicescan`
          (default `true`) \u2014 emit `DEVICESCAN` when no\n       devices are configured.\n
          \    - `smartd_devicescan_options` \u2014 directives appended to\n       `DEVICESCAN`
          (default matches the Debian/Ubuntu package default).\n\n2. **`smartd: cover
          /etc/smartd.conf rendering in molecule test`**\n   - `molecule/delegated/vars/smartd.yml`
          \u2014 sets `smartd_devices` to the\n     issue's example so converge exercises
          the new path.\n   - `molecule/delegated/tests/smartd.py` \u2014 `test_smartd_conf`
          asserts\n     `/etc/smartd.conf` is created `root:root 0644`, renders the
          device\n     line verbatim, and contains no `DEVICESCAN` line.\n\n## Why
          opt-in by default\n\nManagement defaults to **off** so existing Debian/Ubuntu/EL9
          hosts and\nany hand-edited `/etc/smartd.conf` (including the manual workaround
          from\nthe issue) are left untouched until a user opts in \u2014 either by
          setting\n`smartd_devices` or `smartd_configure: true`. This also avoids
          a\npotential EL9 regression: `smartd_devicescan_options` defaults to the\nDebian
          path `/usr/share/smartmontools/smartd-runner`, which differs on\nRedHat-family
          systems; keeping management opt-in means the default has no\neffect there.\n\n##
          Verification\n\nRendered the template via a throwaway localhost play for
          all branches\n(devices set, DEVICESCAN on, DEVICESCAN off, device without
          type/options)\n\u2014 the devices case reproduces the issue's workaround
          line exactly with a\nsingle trailing newline and no `DEVICESCAN`. Local
          checks run green:\n`yamllint roles/smartd`, `ansible-lint roles/smartd`
          (profile\n`production`, 0 findings), `flake8` + `black --check` on the test.\n\nNote:
          the `delegated` molecule scenario is `managed: false` (remote\nhost), so
          the full converge/verify runs in the Zuul\n`ansible-collection-services-molecule-smartd`
          job. The\n`smartd_configure: true` + empty-`smartd_devices` DEVICESCAN path
          is\ncovered by template review only \u2014 the scenario can converge a single\nvariable
          set.\n\n\U0001F916 Generated with [Claude Code](https://claude.com/claude-code)"
        change_url: https://github.com/osism/ansible-collection-services/pull/2097
        commit_id: 9b43dd65a7ded1517699128f3dc34cc5e0224cfb
        patchset: 9b43dd65a7ded1517699128f3dc34cc5e0224cfb
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/ansible-collection-services
          name: osism/ansible-collection-services
          short_name: ansible-collection-services
        src_dir: src/github.com/osism/ansible-collection-services
        topic: null
      buildset: 67509d42625647978c553fadace94a2d
      buildset_refs:
      - branch: main
        change: '2097'
        change_message: "smartd: make /etc/smartd.conf configurable via variables\n\nCloses
          #2082\n\n## Problem\n\nThe `smartd` role installs `smartmontools`, manages\n`/etc/default/smartmontools`,
          and starts the service, but never manages\n`/etc/smartd.conf`. As a result
          the package-provided `DEVICESCAN` line\ncannot be replaced when it finds
          no devices \u2014 e.g. behind an HPE Smart\nArray Gen8 RAID controller,
          where the daemon exits with status 17\n(`Unable to monitor any SMART enabled
          devices`) and the\n`Manage smartd service` task fails.\n\n## Change set
          (in commit order)\n\n1. **`smartd: make /etc/smartd.conf configurable via
          variables`**\n   - `roles/smartd/templates/smartd.conf.j2` (new) \u2014
          renders one line\n     per device as `<device> -d <type> <options>` (type/options\n
          \    optional), or a `DEVICESCAN` line when no devices are configured.\n
          \  - `roles/smartd/tasks/main.yml` \u2014 new `Copy smartd configuration\n
          \    file` task (`ansible.builtin.template` \u2192 `/etc/smartd.conf`,\n
          \    `0644 root:root`, `notify: Restart smartd service`), inserted\n     between
          the existing `/etc/default/smartmontools` copy and\n     `Manage smartd
          service`. Gated by\n     `when: smartd_configure | bool or smartd_devices
          | length > 0`.\n   - `roles/smartd/defaults/main.yml` \u2014 documents the
          new variables:\n     - `smartd_configure` (default `false`) \u2014 gate;
          also auto-enables\n       when `smartd_devices` is set.\n     - `smartd_devices`
          (default `[]`) \u2014 list of `{device, type?,\n       options?}`; setting
          any device replaces the default\n       `DEVICESCAN` line.\n     - `smartd_devicescan`
          (default `true`) \u2014 emit `DEVICESCAN` when no\n       devices are configured.\n
          \    - `smartd_devicescan_options` \u2014 directives appended to\n       `DEVICESCAN`
          (default matches the Debian/Ubuntu package default).\n\n2. **`smartd: cover
          /etc/smartd.conf rendering in molecule test`**\n   - `molecule/delegated/vars/smartd.yml`
          \u2014 sets `smartd_devices` to the\n     issue's example so converge exercises
          the new path.\n   - `molecule/delegated/tests/smartd.py` \u2014 `test_smartd_conf`
          asserts\n     `/etc/smartd.conf` is created `root:root 0644`, renders the
          device\n     line verbatim, and contains no `DEVICESCAN` line.\n\n## Why
          opt-in by default\n\nManagement defaults to **off** so existing Debian/Ubuntu/EL9
          hosts and\nany hand-edited `/etc/smartd.conf` (including the manual workaround
          from\nthe issue) are left untouched until a user opts in \u2014 either by
          setting\n`smartd_devices` or `smartd_configure: true`. This also avoids
          a\npotential EL9 regression: `smartd_devicescan_options` defaults to the\nDebian
          path `/usr/share/smartmontools/smartd-runner`, which differs on\nRedHat-family
          systems; keeping management opt-in means the default has no\neffect there.\n\n##
          Verification\n\nRendered the template via a throwaway localhost play for
          all branches\n(devices set, DEVICESCAN on, DEVICESCAN off, device without
          type/options)\n\u2014 the devices case reproduces the issue's workaround
          line exactly with a\nsingle trailing newline and no `DEVICESCAN`. Local
          checks run green:\n`yamllint roles/smartd`, `ansible-lint roles/smartd`
          (profile\n`production`, 0 findings), `flake8` + `black --check` on the test.\n\nNote:
          the `delegated` molecule scenario is `managed: false` (remote\nhost), so
          the full converge/verify runs in the Zuul\n`ansible-collection-services-molecule-smartd`
          job. The\n`smartd_configure: true` + empty-`smartd_devices` DEVICESCAN path
          is\ncovered by template review only \u2014 the scenario can converge a single\nvariable
          set.\n\n\U0001F916 Generated with [Claude Code](https://claude.com/claude-code)"
        change_url: https://github.com/osism/ansible-collection-services/pull/2097
        commit_id: 9b43dd65a7ded1517699128f3dc34cc5e0224cfb
        patchset: 9b43dd65a7ded1517699128f3dc34cc5e0224cfb
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/ansible-collection-services
          name: osism/ansible-collection-services
          short_name: ansible-collection-services
        src_dir: src/github.com/osism/ansible-collection-services
        topic: null
      change: '2097'
      change_message: "smartd: make /etc/smartd.conf configurable via variables\n\nCloses
        #2082\n\n## Problem\n\nThe `smartd` role installs `smartmontools`, manages\n`/etc/default/smartmontools`,
        and starts the service, but never manages\n`/etc/smartd.conf`. As a result
        the package-provided `DEVICESCAN` line\ncannot be replaced when it finds no
        devices \u2014 e.g. behind an HPE Smart\nArray Gen8 RAID controller, where
        the daemon exits with status 17\n(`Unable to monitor any SMART enabled devices`)
        and the\n`Manage smartd service` task fails.\n\n## Change set (in commit order)\n\n1.
        **`smartd: make /etc/smartd.conf configurable via variables`**\n   - `roles/smartd/templates/smartd.conf.j2`
        (new) \u2014 renders one line\n     per device as `<device> -d <type> <options>`
        (type/options\n     optional), or a `DEVICESCAN` line when no devices are
        configured.\n   - `roles/smartd/tasks/main.yml` \u2014 new `Copy smartd configuration\n
        \    file` task (`ansible.builtin.template` \u2192 `/etc/smartd.conf`,\n     `0644
        root:root`, `notify: Restart smartd service`), inserted\n     between the
        existing `/etc/default/smartmontools` copy and\n     `Manage smartd service`.
        Gated by\n     `when: smartd_configure | bool or smartd_devices | length >
        0`.\n   - `roles/smartd/defaults/main.yml` \u2014 documents the new variables:\n
        \    - `smartd_configure` (default `false`) \u2014 gate; also auto-enables\n
        \      when `smartd_devices` is set.\n     - `smartd_devices` (default `[]`)
        \u2014 list of `{device, type?,\n       options?}`; setting any device replaces
        the default\n       `DEVICESCAN` line.\n     - `smartd_devicescan` (default
        `true`) \u2014 emit `DEVICESCAN` when no\n       devices are configured.\n
        \    - `smartd_devicescan_options` \u2014 directives appended to\n       `DEVICESCAN`
        (default matches the Debian/Ubuntu package default).\n\n2. **`smartd: cover
        /etc/smartd.conf rendering in molecule test`**\n   - `molecule/delegated/vars/smartd.yml`
        \u2014 sets `smartd_devices` to the\n     issue's example so converge exercises
        the new path.\n   - `molecule/delegated/tests/smartd.py` \u2014 `test_smartd_conf`
        asserts\n     `/etc/smartd.conf` is created `root:root 0644`, renders the
        device\n     line verbatim, and contains no `DEVICESCAN` line.\n\n## Why opt-in
        by default\n\nManagement defaults to **off** so existing Debian/Ubuntu/EL9
        hosts and\nany hand-edited `/etc/smartd.conf` (including the manual workaround
        from\nthe issue) are left untouched until a user opts in \u2014 either by
        setting\n`smartd_devices` or `smartd_configure: true`. This also avoids a\npotential
        EL9 regression: `smartd_devicescan_options` defaults to the\nDebian path `/usr/share/smartmontools/smartd-runner`,
        which differs on\nRedHat-family systems; keeping management opt-in means the
        default has no\neffect there.\n\n## Verification\n\nRendered the template
        via a throwaway localhost play for all branches\n(devices set, DEVICESCAN
        on, DEVICESCAN off, device without type/options)\n\u2014 the devices case
        reproduces the issue's workaround line exactly with a\nsingle trailing newline
        and no `DEVICESCAN`. Local checks run green:\n`yamllint roles/smartd`, `ansible-lint
        roles/smartd` (profile\n`production`, 0 findings), `flake8` + `black --check`
        on the test.\n\nNote: the `delegated` molecule scenario is `managed: false`
        (remote\nhost), so the full converge/verify runs in the Zuul\n`ansible-collection-services-molecule-smartd`
        job. The\n`smartd_configure: true` + empty-`smartd_devices` DEVICESCAN path
        is\ncovered by template review only \u2014 the scenario can converge a single\nvariable
        set.\n\n\U0001F916 Generated with [Claude Code](https://claude.com/claude-code)"
      change_url: https://github.com/osism/ansible-collection-services/pull/2097
      child_jobs: []
      commit_id: 9b43dd65a7ded1517699128f3dc34cc5e0224cfb
      event_id: a36233b0-6978-11f1-8cd0-43aa1bbaab3f
      executor:
        hostname: 521e9411259a
        inventory_file: /var/lib/zuul/builds/bd60569930a94221b46757fc24b639ef/ansible/inventory.yaml
        log_root: /var/lib/zuul/builds/bd60569930a94221b46757fc24b639ef/work/logs
        result_data_file: /var/lib/zuul/builds/bd60569930a94221b46757fc24b639ef/work/results.json
        src_root: /var/lib/zuul/builds/bd60569930a94221b46757fc24b639ef/work/src
        work_root: /var/lib/zuul/builds/bd60569930a94221b46757fc24b639ef/work
      include_vars: []
      items:
      - branch: main
        change: '2097'
        change_message: "smartd: make /etc/smartd.conf configurable via variables\n\nCloses
          #2082\n\n## Problem\n\nThe `smartd` role installs `smartmontools`, manages\n`/etc/default/smartmontools`,
          and starts the service, but never manages\n`/etc/smartd.conf`. As a result
          the package-provided `DEVICESCAN` line\ncannot be replaced when it finds
          no devices \u2014 e.g. behind an HPE Smart\nArray Gen8 RAID controller,
          where the daemon exits with status 17\n(`Unable to monitor any SMART enabled
          devices`) and the\n`Manage smartd service` task fails.\n\n## Change set
          (in commit order)\n\n1. **`smartd: make /etc/smartd.conf configurable via
          variables`**\n   - `roles/smartd/templates/smartd.conf.j2` (new) \u2014
          renders one line\n     per device as `<device> -d <type> <options>` (type/options\n
          \    optional), or a `DEVICESCAN` line when no devices are configured.\n
          \  - `roles/smartd/tasks/main.yml` \u2014 new `Copy smartd configuration\n
          \    file` task (`ansible.builtin.template` \u2192 `/etc/smartd.conf`,\n
          \    `0644 root:root`, `notify: Restart smartd service`), inserted\n     between
          the existing `/etc/default/smartmontools` copy and\n     `Manage smartd
          service`. Gated by\n     `when: smartd_configure | bool or smartd_devices
          | length > 0`.\n   - `roles/smartd/defaults/main.yml` \u2014 documents the
          new variables:\n     - `smartd_configure` (default `false`) \u2014 gate;
          also auto-enables\n       when `smartd_devices` is set.\n     - `smartd_devices`
          (default `[]`) \u2014 list of `{device, type?,\n       options?}`; setting
          any device replaces the default\n       `DEVICESCAN` line.\n     - `smartd_devicescan`
          (default `true`) \u2014 emit `DEVICESCAN` when no\n       devices are configured.\n
          \    - `smartd_devicescan_options` \u2014 directives appended to\n       `DEVICESCAN`
          (default matches the Debian/Ubuntu package default).\n\n2. **`smartd: cover
          /etc/smartd.conf rendering in molecule test`**\n   - `molecule/delegated/vars/smartd.yml`
          \u2014 sets `smartd_devices` to the\n     issue's example so converge exercises
          the new path.\n   - `molecule/delegated/tests/smartd.py` \u2014 `test_smartd_conf`
          asserts\n     `/etc/smartd.conf` is created `root:root 0644`, renders the
          device\n     line verbatim, and contains no `DEVICESCAN` line.\n\n## Why
          opt-in by default\n\nManagement defaults to **off** so existing Debian/Ubuntu/EL9
          hosts and\nany hand-edited `/etc/smartd.conf` (including the manual workaround
          from\nthe issue) are left untouched until a user opts in \u2014 either by
          setting\n`smartd_devices` or `smartd_configure: true`. This also avoids
          a\npotential EL9 regression: `smartd_devicescan_options` defaults to the\nDebian
          path `/usr/share/smartmontools/smartd-runner`, which differs on\nRedHat-family
          systems; keeping management opt-in means the default has no\neffect there.\n\n##
          Verification\n\nRendered the template via a throwaway localhost play for
          all branches\n(devices set, DEVICESCAN on, DEVICESCAN off, device without
          type/options)\n\u2014 the devices case reproduces the issue's workaround
          line exactly with a\nsingle trailing newline and no `DEVICESCAN`. Local
          checks run green:\n`yamllint roles/smartd`, `ansible-lint roles/smartd`
          (profile\n`production`, 0 findings), `flake8` + `black --check` on the test.\n\nNote:
          the `delegated` molecule scenario is `managed: false` (remote\nhost), so
          the full converge/verify runs in the Zuul\n`ansible-collection-services-molecule-smartd`
          job. The\n`smartd_configure: true` + empty-`smartd_devices` DEVICESCAN path
          is\ncovered by template review only \u2014 the scenario can converge a single\nvariable
          set.\n\n\U0001F916 Generated with [Claude Code](https://claude.com/claude-code)"
        change_url: https://github.com/osism/ansible-collection-services/pull/2097
        commit_id: 9b43dd65a7ded1517699128f3dc34cc5e0224cfb
        patchset: 9b43dd65a7ded1517699128f3dc34cc5e0224cfb
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/ansible-collection-services
          name: osism/ansible-collection-services
          short_name: ansible-collection-services
          src_dir: src/github.com/osism/ansible-collection-services
        topic: null
      job: ansible-lint
      jobtags: []
      max_attempts: 3
      message: c21hcnRkOiBtYWtlIC9ldGMvc21hcnRkLmNvbmYgY29uZmlndXJhYmxlIHZpYSB2YXJpYWJsZXMKCkNsb3NlcyAjMjA4MgoKIyMgUHJvYmxlbQoKVGhlIGBzbWFydGRgIHJvbGUgaW5zdGFsbHMgYHNtYXJ0bW9udG9vbHNgLCBtYW5hZ2VzCmAvZXRjL2RlZmF1bHQvc21hcnRtb250b29sc2AsIGFuZCBzdGFydHMgdGhlIHNlcnZpY2UsIGJ1dCBuZXZlciBtYW5hZ2VzCmAvZXRjL3NtYXJ0ZC5jb25mYC4gQXMgYSByZXN1bHQgdGhlIHBhY2thZ2UtcHJvdmlkZWQgYERFVklDRVNDQU5gIGxpbmUKY2Fubm90IGJlIHJlcGxhY2VkIHdoZW4gaXQgZmluZHMgbm8gZGV2aWNlcyDigJQgZS5nLiBiZWhpbmQgYW4gSFBFIFNtYXJ0CkFycmF5IEdlbjggUkFJRCBjb250cm9sbGVyLCB3aGVyZSB0aGUgZGFlbW9uIGV4aXRzIHdpdGggc3RhdHVzIDE3CihgVW5hYmxlIHRvIG1vbml0b3IgYW55IFNNQVJUIGVuYWJsZWQgZGV2aWNlc2ApIGFuZCB0aGUKYE1hbmFnZSBzbWFydGQgc2VydmljZWAgdGFzayBmYWlscy4KCiMjIENoYW5nZSBzZXQgKGluIGNvbW1pdCBvcmRlcikKCjEuICoqYHNtYXJ0ZDogbWFrZSAvZXRjL3NtYXJ0ZC5jb25mIGNvbmZpZ3VyYWJsZSB2aWEgdmFyaWFibGVzYCoqCiAgIC0gYHJvbGVzL3NtYXJ0ZC90ZW1wbGF0ZXMvc21hcnRkLmNvbmYuajJgIChuZXcpIOKAlCByZW5kZXJzIG9uZSBsaW5lCiAgICAgcGVyIGRldmljZSBhcyBgPGRldmljZT4gLWQgPHR5cGU+IDxvcHRpb25zPmAgKHR5cGUvb3B0aW9ucwogICAgIG9wdGlvbmFsKSwgb3IgYSBgREVWSUNFU0NBTmAgbGluZSB3aGVuIG5vIGRldmljZXMgYXJlIGNvbmZpZ3VyZWQuCiAgIC0gYHJvbGVzL3NtYXJ0ZC90YXNrcy9tYWluLnltbGAg4oCUIG5ldyBgQ29weSBzbWFydGQgY29uZmlndXJhdGlvbgogICAgIGZpbGVgIHRhc2sgKGBhbnNpYmxlLmJ1aWx0aW4udGVtcGxhdGVgIOKGkiBgL2V0Yy9zbWFydGQuY29uZmAsCiAgICAgYDA2NDQgcm9vdDpyb290YCwgYG5vdGlmeTogUmVzdGFydCBzbWFydGQgc2VydmljZWApLCBpbnNlcnRlZAogICAgIGJldHdlZW4gdGhlIGV4aXN0aW5nIGAvZXRjL2RlZmF1bHQvc21hcnRtb250b29sc2AgY29weSBhbmQKICAgICBgTWFuYWdlIHNtYXJ0ZCBzZXJ2aWNlYC4gR2F0ZWQgYnkKICAgICBgd2hlbjogc21hcnRkX2NvbmZpZ3VyZSB8IGJvb2wgb3Igc21hcnRkX2RldmljZXMgfCBsZW5ndGggPiAwYC4KICAgLSBgcm9sZXMvc21hcnRkL2RlZmF1bHRzL21haW4ueW1sYCDigJQgZG9jdW1lbnRzIHRoZSBuZXcgdmFyaWFibGVzOgogICAgIC0gYHNtYXJ0ZF9jb25maWd1cmVgIChkZWZhdWx0IGBmYWxzZWApIOKAlCBnYXRlOyBhbHNvIGF1dG8tZW5hYmxlcwogICAgICAgd2hlbiBgc21hcnRkX2RldmljZXNgIGlzIHNldC4KICAgICAtIGBzbWFydGRfZGV2aWNlc2AgKGRlZmF1bHQgYFtdYCkg4oCUIGxpc3Qgb2YgYHtkZXZpY2UsIHR5cGU/LAogICAgICAgb3B0aW9ucz99YDsgc2V0dGluZyBhbnkgZGV2aWNlIHJlcGxhY2VzIHRoZSBkZWZhdWx0CiAgICAgICBgREVWSUNFU0NBTmAgbGluZS4KICAgICAtIGBzbWFydGRfZGV2aWNlc2NhbmAgKGRlZmF1bHQgYHRydWVgKSDigJQgZW1pdCBgREVWSUNFU0NBTmAgd2hlbiBubwogICAgICAgZGV2aWNlcyBhcmUgY29uZmlndXJlZC4KICAgICAtIGBzbWFydGRfZGV2aWNlc2Nhbl9vcHRpb25zYCDigJQgZGlyZWN0aXZlcyBhcHBlbmRlZCB0bwogICAgICAgYERFVklDRVNDQU5gIChkZWZhdWx0IG1hdGNoZXMgdGhlIERlYmlhbi9VYnVudHUgcGFja2FnZSBkZWZhdWx0KS4KCjIuICoqYHNtYXJ0ZDogY292ZXIgL2V0Yy9zbWFydGQuY29uZiByZW5kZXJpbmcgaW4gbW9sZWN1bGUgdGVzdGAqKgogICAtIGBtb2xlY3VsZS9kZWxlZ2F0ZWQvdmFycy9zbWFydGQueW1sYCDigJQgc2V0cyBgc21hcnRkX2RldmljZXNgIHRvIHRoZQogICAgIGlzc3VlJ3MgZXhhbXBsZSBzbyBjb252ZXJnZSBleGVyY2lzZXMgdGhlIG5ldyBwYXRoLgogICAtIGBtb2xlY3VsZS9kZWxlZ2F0ZWQvdGVzdHMvc21hcnRkLnB5YCDigJQgYHRlc3Rfc21hcnRkX2NvbmZgIGFzc2VydHMKICAgICBgL2V0Yy9zbWFydGQuY29uZmAgaXMgY3JlYXRlZCBgcm9vdDpyb290IDA2NDRgLCByZW5kZXJzIHRoZSBkZXZpY2UKICAgICBsaW5lIHZlcmJhdGltLCBhbmQgY29udGFpbnMgbm8gYERFVklDRVNDQU5gIGxpbmUuCgojIyBXaHkgb3B0LWluIGJ5IGRlZmF1bHQKCk1hbmFnZW1lbnQgZGVmYXVsdHMgdG8gKipvZmYqKiBzbyBleGlzdGluZyBEZWJpYW4vVWJ1bnR1L0VMOSBob3N0cyBhbmQKYW55IGhhbmQtZWRpdGVkIGAvZXRjL3NtYXJ0ZC5jb25mYCAoaW5jbHVkaW5nIHRoZSBtYW51YWwgd29ya2Fyb3VuZCBmcm9tCnRoZSBpc3N1ZSkgYXJlIGxlZnQgdW50b3VjaGVkIHVudGlsIGEgdXNlciBvcHRzIGluIOKAlCBlaXRoZXIgYnkgc2V0dGluZwpgc21hcnRkX2RldmljZXNgIG9yIGBzbWFydGRfY29uZmlndXJlOiB0cnVlYC4gVGhpcyBhbHNvIGF2b2lkcyBhCnBvdGVudGlhbCBFTDkgcmVncmVzc2lvbjogYHNtYXJ0ZF9kZXZpY2VzY2FuX29wdGlvbnNgIGRlZmF1bHRzIHRvIHRoZQpEZWJpYW4gcGF0aCBgL3Vzci9zaGFyZS9zbWFydG1vbnRvb2xzL3NtYXJ0ZC1ydW5uZXJgLCB3aGljaCBkaWZmZXJzIG9uClJlZEhhdC1mYW1pbHkgc3lzdGVtczsga2VlcGluZyBtYW5hZ2VtZW50IG9wdC1pbiBtZWFucyB0aGUgZGVmYXVsdCBoYXMgbm8KZWZmZWN0IHRoZXJlLgoKIyMgVmVyaWZpY2F0aW9uCgpSZW5kZXJlZCB0aGUgdGVtcGxhdGUgdmlhIGEgdGhyb3dhd2F5IGxvY2FsaG9zdCBwbGF5IGZvciBhbGwgYnJhbmNoZXMKKGRldmljZXMgc2V0LCBERVZJQ0VTQ0FOIG9uLCBERVZJQ0VTQ0FOIG9mZiwgZGV2aWNlIHdpdGhvdXQgdHlwZS9vcHRpb25zKQrigJQgdGhlIGRldmljZXMgY2FzZSByZXByb2R1Y2VzIHRoZSBpc3N1ZSdzIHdvcmthcm91bmQgbGluZSBleGFjdGx5IHdpdGggYQpzaW5nbGUgdHJhaWxpbmcgbmV3bGluZSBhbmQgbm8gYERFVklDRVNDQU5gLiBMb2NhbCBjaGVja3MgcnVuIGdyZWVuOgpgeWFtbGxpbnQgcm9sZXMvc21hcnRkYCwgYGFuc2libGUtbGludCByb2xlcy9zbWFydGRgIChwcm9maWxlCmBwcm9kdWN0aW9uYCwgMCBmaW5kaW5ncyksIGBmbGFrZThgICsgYGJsYWNrIC0tY2hlY2tgIG9uIHRoZSB0ZXN0LgoKTm90ZTogdGhlIGBkZWxlZ2F0ZWRgIG1vbGVjdWxlIHNjZW5hcmlvIGlzIGBtYW5hZ2VkOiBmYWxzZWAgKHJlbW90ZQpob3N0KSwgc28gdGhlIGZ1bGwgY29udmVyZ2UvdmVyaWZ5IHJ1bnMgaW4gdGhlIFp1dWwKYGFuc2libGUtY29sbGVjdGlvbi1zZXJ2aWNlcy1tb2xlY3VsZS1zbWFydGRgIGpvYi4gVGhlCmBzbWFydGRfY29uZmlndXJlOiB0cnVlYCArIGVtcHR5LWBzbWFydGRfZGV2aWNlc2AgREVWSUNFU0NBTiBwYXRoIGlzCmNvdmVyZWQgYnkgdGVtcGxhdGUgcmV2aWV3IG9ubHkg4oCUIHRoZSBzY2VuYXJpbyBjYW4gY29udmVyZ2UgYSBzaW5nbGUKdmFyaWFibGUgc2V0LgoK8J+kliBHZW5lcmF0ZWQgd2l0aCBbQ2xhdWRlIENvZGVdKGh0dHBzOi8vY2xhdWRlLmNvbS9jbGF1ZGUtY29kZSk=
      patchset: 9b43dd65a7ded1517699128f3dc34cc5e0224cfb
      pipeline: check
      playbook_context:
        playbook_projects:
          trusted/project_0/github.com/osism/zuul-config:
            canonical_name: github.com/osism/zuul-config
            checkout: main
            commit: 688445d15ac2c497396b682f69c57ccd484f5f25
          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: 688445d15ac2c497396b682f69c57ccd484f5f25
          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/ansible-collection-services
        name: osism/ansible-collection-services
        short_name: ansible-collection-services
        src_dir: src/github.com/osism/ansible-collection-services
      projects:
        github.com/osism/ansible-collection-services:
          canonical_hostname: github.com
          canonical_name: github.com/osism/ansible-collection-services
          checkout: main
          checkout_description: zuul branch
          commit: 690b4873a7679ff9953e962ebf93cc1ce5e6e98b
          name: osism/ansible-collection-services
          required: false
          short_name: ansible-collection-services
          src_dir: src/github.com/osism/ansible-collection-services
      ref: refs/pull/2097/head
      resources: {}
      tenant: osism
      timeout: 1800
      topic: null
      voting: true
