all:
  children:
    zuul_unreachable:
      hosts: {}
  hosts:
    debian-bookworm:
      ansible_connection: ssh
      ansible_host: 2a13:1a81:8000:3124:f816:3eff:fef4:b63b
      ansible_molecule_ansible_version: 11.12.0
      ansible_port: 22
      ansible_python_interpreter: auto
      ansible_role: netbox
      ansible_user: zuul
      nodepool:
        az: nova
        cloud: regiocloud-a-ci
        external_id: bd7da3b0-ce1d-4290-901c-3094f4064987
        host_id: 82101243836454d7401d5893feae9e2c5df7cc291646d8a99b33b53b
        interface_ip: 2a13:1a81:8000:3124:f816:3eff:fef4:b63b
        label: debian-bookworm
        node_properties: {}
        private_ipv4: 10.128.0.110
        private_ipv6: null
        provider: regiocloud-a
        public_ipv4: 81.163.192.208
        public_ipv6: 2a13:1a81:8000:3124:f816:3eff:fef4:b63b
        region: null
        slot: null
    ubuntu-noble:
      ansible_connection: ssh
      ansible_host: 2a13:1a81:8000:3124:f816:3eff:fe7e:4b5d
      ansible_molecule_ansible_version: 11.12.0
      ansible_port: 22
      ansible_python_interpreter: auto
      ansible_role: netbox
      ansible_user: zuul
      nodepool:
        az: nova
        cloud: regiocloud-a-ci
        external_id: d52e518b-6a01-491f-a93f-136e5ec694c9
        host_id: df70f2a3f3d0c26428f22685cfc722ebc48099d99e7332c39e017195
        interface_ip: 2a13:1a81:8000:3124:f816:3eff:fe7e:4b5d
        label: ubuntu-noble
        node_properties: {}
        private_ipv4: 10.128.0.102
        private_ipv6: null
        provider: regiocloud-a
        public_ipv4: 81.163.192.86
        public_ipv6: 2a13:1a81:8000:3124:f816:3eff:fe7e:4b5d
        region: null
        slot: null
  vars:
    ansible_molecule_ansible_version: 11.12.0
    ansible_role: netbox
    zuul:
      _inheritance_path:
      - '<Job base explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: osism/zuul-config/zuul.d/jobs.yaml@main#2>'
      - '<Job ansible-molecule explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: osism/zuul-jobs/.zuul.yaml@main#12>'
      - '<Job abstract-ansible-collection-services-molecule explicit: None implied:
        {MatchAny:{ImpliedBranchMatcher:main}} source: osism/ansible-collection-services/.zuul.yaml@main#79>'
      - '<Job ansible-collection-services-molecule-netbox explicit: None implied:
        {MatchAny:{ImpliedBranchMatcher:main}} source: osism/ansible-collection-services/.zuul.yaml@main#278>'
      - '<Job ansible-collection-services-molecule-netbox explicit: None implied:
        None source: osism/ansible-collection-services/.zuul.yaml@main#498>'
      ansible_version: '9'
      attempts: 1
      branch: main
      build: 5a1cc06d688d49c798a3d95a33124e0c
      build_refs:
      - branch: main
        change: '2119'
        change_message: "netbox: don't restart during initial migration\n\n## Problem\n\nA
          first-time netbox deploy can intermittently leave `netbox-netbox-1`\ncrash-looping,
          with the data load failing (*\"Failed to establish connection\nto netbox\"*).
          The container log shows, on every start:\n\n```\nCommandError: Conflicting
          migrations detected; multiple leaf nodes in the\nmigration graph: (0002_squashed,
          0208_devicerole_uniqueness in dcim).\n```\n\n`django_migrations` for `dcim`
          is stuck partway (observed at `0001\u20260033`),\nand the state is **unrecoverable**
          without wiping the netbox database.\n\n## Root cause\n\nNetBox v4.3.x ships
          **squashed** dcim migrations. The role restarts the\nservice via the `Restart
          netbox service` handler, notified by the\n`Copy docker-compose.yml file`
          task. On a first deploy that copy always\nreports `changed`, so the restart
          fires right after `Manage netbox service`\nstarts the stack \u2014 **while
          netbox is still running its initial migration**.\n\nIf that restart lands
          while a squash is recording its replaced rows, the\nsquash is left half-recorded.
          Django can then reconcile neither the squash nor\nthe remaining chain \u2192
          two leaf nodes \u2192 `migrate` aborts on every start \u2192\ncrash-loop.\n\nIt
          was masked until recently: before the worker-start fix, the netbox phase\n**failed**
          on first run and operators re-ran it; the re-run (compose\nunchanged) issued
          no restart, so the migration completed undisturbed. With\nthe worker fix
          the phase passes first-run \u2014 exactly when the restart fires.\n\n- osism/ansible-collection-services#2091\n\n##
          Fix\n\nGate `restart-service.yml` on a health check: block until no netbox
          container\nis `created`/`exited`/`starting`/`unhealthy` \u2014 i.e. until
          migrations have\ncompleted \u2014 before any stop or restart. A legitimate
          config-update restart on\nan already-healthy service passes the gate immediately.\n\n##
          Validation\n\nReproduced and validated on a from-scratch comback manager
          bringup against\n`main` (services `v0.20260615.0` \u2014 the worker-start
          fix that unmasks this;\n**without** this PR).\n\n**Reproduced the crash-loop.**
          Recreating the first-deploy trigger (wipe the\nnetbox DB so the initial
          migration re-runs, and force `Copy docker-compose.yml`\nto report `changed`
          so it notifies the restart handler) and re-running the\n`netbox` phase reproduced
          it:\n\n```\nCommandError: Conflicting migrations detected; multiple leaf
          nodes in the\nmigration graph: (0001_squashed_0012, 0020_remove_contactgroupmembership
          in tenancy).\n```\n\n`netbox-netbox-1` crash-looped (40+ restarts); `django_migrations`
          showed the\nhalf-recorded squash. Note the leaf nodes were in **tenancy**,
          not dcim \u2014 the\ncorruptible squash is whichever (non-atomic) squash
          is mid-recording when the\nrestart lands, not dcim-specific.\n\n**Rate:
          1 corrupt in 13 unpatched first-deploys (~8%)** \u2014 consistent with the\nmillisecond-scale
          window.\n\n**Mechanism proof (independent of the ~8% rate).** Instrumented
          one unpatched\nand one patched (this branch) deploy, correlating docker-event
          timestamps with\nmigration-log markers:\n\n| | restart fires | initial migration
          completes | restart vs. migration |\n|---|---|---|---|\n| **unpatched**
          | mid-`dcim.0003_squashed_0130` (~80 ms from the squash log line) | ~5 min
          later | **before** \u2014 inside the window |\n| **patched (this PR)** |
          after migration | first | **after** \u2014 gate held it |\n\nIn the patched
          run the new `Wait for netbox to be healthy before restarting`\ntask blocked
          **33 retries (~5.5 min)** until netbox was healthy, then allowed\nthe restart.
          The fix therefore moves the restart out of the migration window\nstructurally
          \u2014 the interrupt can no longer occur, regardless of the rare\ntiming.\n\nLeft
          as **draft** pending a CI/molecule pass (the corruption itself is a narrow\nrace
          \u2014 a CPU-throttle and timed-kill attempt did not reproduce it on demand;\n`dcim.0003_squashed_0130`
          is atomic and rolls back cleanly). Reviewer input\nwelcome on whether to
          instead suppress the redundant first-deploy restart\noutright.\n\nOut of
          scope (separate follow-up): the redundant first-deploy restart itself,\nand
          the always-true quoted-string postgres-version `when:` guard later in this\nfile.\n\n\U0001F916
          Generated with [Claude Code](https://claude.com/claude-code)\n"
        change_url: https://github.com/osism/ansible-collection-services/pull/2119
        commit_id: 07dbc308a6e6252592c0753853d509f715870677
        patchset: 07dbc308a6e6252592c0753853d509f715870677
        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: 51fa98f6f46e4366823e0c4124206fca
      buildset_refs:
      - branch: main
        change: '2119'
        change_message: "netbox: don't restart during initial migration\n\n## Problem\n\nA
          first-time netbox deploy can intermittently leave `netbox-netbox-1`\ncrash-looping,
          with the data load failing (*\"Failed to establish connection\nto netbox\"*).
          The container log shows, on every start:\n\n```\nCommandError: Conflicting
          migrations detected; multiple leaf nodes in the\nmigration graph: (0002_squashed,
          0208_devicerole_uniqueness in dcim).\n```\n\n`django_migrations` for `dcim`
          is stuck partway (observed at `0001\u20260033`),\nand the state is **unrecoverable**
          without wiping the netbox database.\n\n## Root cause\n\nNetBox v4.3.x ships
          **squashed** dcim migrations. The role restarts the\nservice via the `Restart
          netbox service` handler, notified by the\n`Copy docker-compose.yml file`
          task. On a first deploy that copy always\nreports `changed`, so the restart
          fires right after `Manage netbox service`\nstarts the stack \u2014 **while
          netbox is still running its initial migration**.\n\nIf that restart lands
          while a squash is recording its replaced rows, the\nsquash is left half-recorded.
          Django can then reconcile neither the squash nor\nthe remaining chain \u2192
          two leaf nodes \u2192 `migrate` aborts on every start \u2192\ncrash-loop.\n\nIt
          was masked until recently: before the worker-start fix, the netbox phase\n**failed**
          on first run and operators re-ran it; the re-run (compose\nunchanged) issued
          no restart, so the migration completed undisturbed. With\nthe worker fix
          the phase passes first-run \u2014 exactly when the restart fires.\n\n- osism/ansible-collection-services#2091\n\n##
          Fix\n\nGate `restart-service.yml` on a health check: block until no netbox
          container\nis `created`/`exited`/`starting`/`unhealthy` \u2014 i.e. until
          migrations have\ncompleted \u2014 before any stop or restart. A legitimate
          config-update restart on\nan already-healthy service passes the gate immediately.\n\n##
          Validation\n\nReproduced and validated on a from-scratch comback manager
          bringup against\n`main` (services `v0.20260615.0` \u2014 the worker-start
          fix that unmasks this;\n**without** this PR).\n\n**Reproduced the crash-loop.**
          Recreating the first-deploy trigger (wipe the\nnetbox DB so the initial
          migration re-runs, and force `Copy docker-compose.yml`\nto report `changed`
          so it notifies the restart handler) and re-running the\n`netbox` phase reproduced
          it:\n\n```\nCommandError: Conflicting migrations detected; multiple leaf
          nodes in the\nmigration graph: (0001_squashed_0012, 0020_remove_contactgroupmembership
          in tenancy).\n```\n\n`netbox-netbox-1` crash-looped (40+ restarts); `django_migrations`
          showed the\nhalf-recorded squash. Note the leaf nodes were in **tenancy**,
          not dcim \u2014 the\ncorruptible squash is whichever (non-atomic) squash
          is mid-recording when the\nrestart lands, not dcim-specific.\n\n**Rate:
          1 corrupt in 13 unpatched first-deploys (~8%)** \u2014 consistent with the\nmillisecond-scale
          window.\n\n**Mechanism proof (independent of the ~8% rate).** Instrumented
          one unpatched\nand one patched (this branch) deploy, correlating docker-event
          timestamps with\nmigration-log markers:\n\n| | restart fires | initial migration
          completes | restart vs. migration |\n|---|---|---|---|\n| **unpatched**
          | mid-`dcim.0003_squashed_0130` (~80 ms from the squash log line) | ~5 min
          later | **before** \u2014 inside the window |\n| **patched (this PR)** |
          after migration | first | **after** \u2014 gate held it |\n\nIn the patched
          run the new `Wait for netbox to be healthy before restarting`\ntask blocked
          **33 retries (~5.5 min)** until netbox was healthy, then allowed\nthe restart.
          The fix therefore moves the restart out of the migration window\nstructurally
          \u2014 the interrupt can no longer occur, regardless of the rare\ntiming.\n\nLeft
          as **draft** pending a CI/molecule pass (the corruption itself is a narrow\nrace
          \u2014 a CPU-throttle and timed-kill attempt did not reproduce it on demand;\n`dcim.0003_squashed_0130`
          is atomic and rolls back cleanly). Reviewer input\nwelcome on whether to
          instead suppress the redundant first-deploy restart\noutright.\n\nOut of
          scope (separate follow-up): the redundant first-deploy restart itself,\nand
          the always-true quoted-string postgres-version `when:` guard later in this\nfile.\n\n\U0001F916
          Generated with [Claude Code](https://claude.com/claude-code)\n"
        change_url: https://github.com/osism/ansible-collection-services/pull/2119
        commit_id: 07dbc308a6e6252592c0753853d509f715870677
        patchset: 07dbc308a6e6252592c0753853d509f715870677
        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: '2119'
      change_message: "netbox: don't restart during initial migration\n\n## Problem\n\nA
        first-time netbox deploy can intermittently leave `netbox-netbox-1`\ncrash-looping,
        with the data load failing (*\"Failed to establish connection\nto netbox\"*).
        The container log shows, on every start:\n\n```\nCommandError: Conflicting
        migrations detected; multiple leaf nodes in the\nmigration graph: (0002_squashed,
        0208_devicerole_uniqueness in dcim).\n```\n\n`django_migrations` for `dcim`
        is stuck partway (observed at `0001\u20260033`),\nand the state is **unrecoverable**
        without wiping the netbox database.\n\n## Root cause\n\nNetBox v4.3.x ships
        **squashed** dcim migrations. The role restarts the\nservice via the `Restart
        netbox service` handler, notified by the\n`Copy docker-compose.yml file` task.
        On a first deploy that copy always\nreports `changed`, so the restart fires
        right after `Manage netbox service`\nstarts the stack \u2014 **while netbox
        is still running its initial migration**.\n\nIf that restart lands while a
        squash is recording its replaced rows, the\nsquash is left half-recorded.
        Django can then reconcile neither the squash nor\nthe remaining chain \u2192
        two leaf nodes \u2192 `migrate` aborts on every start \u2192\ncrash-loop.\n\nIt
        was masked until recently: before the worker-start fix, the netbox phase\n**failed**
        on first run and operators re-ran it; the re-run (compose\nunchanged) issued
        no restart, so the migration completed undisturbed. With\nthe worker fix the
        phase passes first-run \u2014 exactly when the restart fires.\n\n- osism/ansible-collection-services#2091\n\n##
        Fix\n\nGate `restart-service.yml` on a health check: block until no netbox
        container\nis `created`/`exited`/`starting`/`unhealthy` \u2014 i.e. until
        migrations have\ncompleted \u2014 before any stop or restart. A legitimate
        config-update restart on\nan already-healthy service passes the gate immediately.\n\n##
        Validation\n\nReproduced and validated on a from-scratch comback manager bringup
        against\n`main` (services `v0.20260615.0` \u2014 the worker-start fix that
        unmasks this;\n**without** this PR).\n\n**Reproduced the crash-loop.** Recreating
        the first-deploy trigger (wipe the\nnetbox DB so the initial migration re-runs,
        and force `Copy docker-compose.yml`\nto report `changed` so it notifies the
        restart handler) and re-running the\n`netbox` phase reproduced it:\n\n```\nCommandError:
        Conflicting migrations detected; multiple leaf nodes in the\nmigration graph:
        (0001_squashed_0012, 0020_remove_contactgroupmembership in tenancy).\n```\n\n`netbox-netbox-1`
        crash-looped (40+ restarts); `django_migrations` showed the\nhalf-recorded
        squash. Note the leaf nodes were in **tenancy**, not dcim \u2014 the\ncorruptible
        squash is whichever (non-atomic) squash is mid-recording when the\nrestart
        lands, not dcim-specific.\n\n**Rate: 1 corrupt in 13 unpatched first-deploys
        (~8%)** \u2014 consistent with the\nmillisecond-scale window.\n\n**Mechanism
        proof (independent of the ~8% rate).** Instrumented one unpatched\nand one
        patched (this branch) deploy, correlating docker-event timestamps with\nmigration-log
        markers:\n\n| | restart fires | initial migration completes | restart vs.
        migration |\n|---|---|---|---|\n| **unpatched** | mid-`dcim.0003_squashed_0130`
        (~80 ms from the squash log line) | ~5 min later | **before** \u2014 inside
        the window |\n| **patched (this PR)** | after migration | first | **after**
        \u2014 gate held it |\n\nIn the patched run the new `Wait for netbox to be
        healthy before restarting`\ntask blocked **33 retries (~5.5 min)** until netbox
        was healthy, then allowed\nthe restart. The fix therefore moves the restart
        out of the migration window\nstructurally \u2014 the interrupt can no longer
        occur, regardless of the rare\ntiming.\n\nLeft as **draft** pending a CI/molecule
        pass (the corruption itself is a narrow\nrace \u2014 a CPU-throttle and timed-kill
        attempt did not reproduce it on demand;\n`dcim.0003_squashed_0130` is atomic
        and rolls back cleanly). Reviewer input\nwelcome on whether to instead suppress
        the redundant first-deploy restart\noutright.\n\nOut of scope (separate follow-up):
        the redundant first-deploy restart itself,\nand the always-true quoted-string
        postgres-version `when:` guard later in this\nfile.\n\n\U0001F916 Generated
        with [Claude Code](https://claude.com/claude-code)\n"
      change_url: https://github.com/osism/ansible-collection-services/pull/2119
      child_jobs: []
      commit_id: 07dbc308a6e6252592c0753853d509f715870677
      event_id: c61b9b00-6cbe-11f1-84d3-f89c4df3ec28
      executor:
        hostname: 521e9411259a
        inventory_file: /var/lib/zuul/builds/5a1cc06d688d49c798a3d95a33124e0c/ansible/inventory.yaml
        log_root: /var/lib/zuul/builds/5a1cc06d688d49c798a3d95a33124e0c/work/logs
        result_data_file: /var/lib/zuul/builds/5a1cc06d688d49c798a3d95a33124e0c/work/results.json
        src_root: /var/lib/zuul/builds/5a1cc06d688d49c798a3d95a33124e0c/work/src
        work_root: /var/lib/zuul/builds/5a1cc06d688d49c798a3d95a33124e0c/work
      include_vars: []
      items:
      - branch: main
        change: '2119'
        change_message: "netbox: don't restart during initial migration\n\n## Problem\n\nA
          first-time netbox deploy can intermittently leave `netbox-netbox-1`\ncrash-looping,
          with the data load failing (*\"Failed to establish connection\nto netbox\"*).
          The container log shows, on every start:\n\n```\nCommandError: Conflicting
          migrations detected; multiple leaf nodes in the\nmigration graph: (0002_squashed,
          0208_devicerole_uniqueness in dcim).\n```\n\n`django_migrations` for `dcim`
          is stuck partway (observed at `0001\u20260033`),\nand the state is **unrecoverable**
          without wiping the netbox database.\n\n## Root cause\n\nNetBox v4.3.x ships
          **squashed** dcim migrations. The role restarts the\nservice via the `Restart
          netbox service` handler, notified by the\n`Copy docker-compose.yml file`
          task. On a first deploy that copy always\nreports `changed`, so the restart
          fires right after `Manage netbox service`\nstarts the stack \u2014 **while
          netbox is still running its initial migration**.\n\nIf that restart lands
          while a squash is recording its replaced rows, the\nsquash is left half-recorded.
          Django can then reconcile neither the squash nor\nthe remaining chain \u2192
          two leaf nodes \u2192 `migrate` aborts on every start \u2192\ncrash-loop.\n\nIt
          was masked until recently: before the worker-start fix, the netbox phase\n**failed**
          on first run and operators re-ran it; the re-run (compose\nunchanged) issued
          no restart, so the migration completed undisturbed. With\nthe worker fix
          the phase passes first-run \u2014 exactly when the restart fires.\n\n- osism/ansible-collection-services#2091\n\n##
          Fix\n\nGate `restart-service.yml` on a health check: block until no netbox
          container\nis `created`/`exited`/`starting`/`unhealthy` \u2014 i.e. until
          migrations have\ncompleted \u2014 before any stop or restart. A legitimate
          config-update restart on\nan already-healthy service passes the gate immediately.\n\n##
          Validation\n\nReproduced and validated on a from-scratch comback manager
          bringup against\n`main` (services `v0.20260615.0` \u2014 the worker-start
          fix that unmasks this;\n**without** this PR).\n\n**Reproduced the crash-loop.**
          Recreating the first-deploy trigger (wipe the\nnetbox DB so the initial
          migration re-runs, and force `Copy docker-compose.yml`\nto report `changed`
          so it notifies the restart handler) and re-running the\n`netbox` phase reproduced
          it:\n\n```\nCommandError: Conflicting migrations detected; multiple leaf
          nodes in the\nmigration graph: (0001_squashed_0012, 0020_remove_contactgroupmembership
          in tenancy).\n```\n\n`netbox-netbox-1` crash-looped (40+ restarts); `django_migrations`
          showed the\nhalf-recorded squash. Note the leaf nodes were in **tenancy**,
          not dcim \u2014 the\ncorruptible squash is whichever (non-atomic) squash
          is mid-recording when the\nrestart lands, not dcim-specific.\n\n**Rate:
          1 corrupt in 13 unpatched first-deploys (~8%)** \u2014 consistent with the\nmillisecond-scale
          window.\n\n**Mechanism proof (independent of the ~8% rate).** Instrumented
          one unpatched\nand one patched (this branch) deploy, correlating docker-event
          timestamps with\nmigration-log markers:\n\n| | restart fires | initial migration
          completes | restart vs. migration |\n|---|---|---|---|\n| **unpatched**
          | mid-`dcim.0003_squashed_0130` (~80 ms from the squash log line) | ~5 min
          later | **before** \u2014 inside the window |\n| **patched (this PR)** |
          after migration | first | **after** \u2014 gate held it |\n\nIn the patched
          run the new `Wait for netbox to be healthy before restarting`\ntask blocked
          **33 retries (~5.5 min)** until netbox was healthy, then allowed\nthe restart.
          The fix therefore moves the restart out of the migration window\nstructurally
          \u2014 the interrupt can no longer occur, regardless of the rare\ntiming.\n\nLeft
          as **draft** pending a CI/molecule pass (the corruption itself is a narrow\nrace
          \u2014 a CPU-throttle and timed-kill attempt did not reproduce it on demand;\n`dcim.0003_squashed_0130`
          is atomic and rolls back cleanly). Reviewer input\nwelcome on whether to
          instead suppress the redundant first-deploy restart\noutright.\n\nOut of
          scope (separate follow-up): the redundant first-deploy restart itself,\nand
          the always-true quoted-string postgres-version `when:` guard later in this\nfile.\n\n\U0001F916
          Generated with [Claude Code](https://claude.com/claude-code)\n"
        change_url: https://github.com/osism/ansible-collection-services/pull/2119
        commit_id: 07dbc308a6e6252592c0753853d509f715870677
        patchset: 07dbc308a6e6252592c0753853d509f715870677
        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-collection-services-molecule-netbox
      jobtags: []
      max_attempts: 3
      message: bmV0Ym94OiBkb24ndCByZXN0YXJ0IGR1cmluZyBpbml0aWFsIG1pZ3JhdGlvbgoKIyMgUHJvYmxlbQoKQSBmaXJzdC10aW1lIG5ldGJveCBkZXBsb3kgY2FuIGludGVybWl0dGVudGx5IGxlYXZlIGBuZXRib3gtbmV0Ym94LTFgCmNyYXNoLWxvb3BpbmcsIHdpdGggdGhlIGRhdGEgbG9hZCBmYWlsaW5nICgqIkZhaWxlZCB0byBlc3RhYmxpc2ggY29ubmVjdGlvbgp0byBuZXRib3giKikuIFRoZSBjb250YWluZXIgbG9nIHNob3dzLCBvbiBldmVyeSBzdGFydDoKCmBgYApDb21tYW5kRXJyb3I6IENvbmZsaWN0aW5nIG1pZ3JhdGlvbnMgZGV0ZWN0ZWQ7IG11bHRpcGxlIGxlYWYgbm9kZXMgaW4gdGhlCm1pZ3JhdGlvbiBncmFwaDogKDAwMDJfc3F1YXNoZWQsIDAyMDhfZGV2aWNlcm9sZV91bmlxdWVuZXNzIGluIGRjaW0pLgpgYGAKCmBkamFuZ29fbWlncmF0aW9uc2AgZm9yIGBkY2ltYCBpcyBzdHVjayBwYXJ0d2F5IChvYnNlcnZlZCBhdCBgMDAwMeKApjAwMzNgKSwKYW5kIHRoZSBzdGF0ZSBpcyAqKnVucmVjb3ZlcmFibGUqKiB3aXRob3V0IHdpcGluZyB0aGUgbmV0Ym94IGRhdGFiYXNlLgoKIyMgUm9vdCBjYXVzZQoKTmV0Qm94IHY0LjMueCBzaGlwcyAqKnNxdWFzaGVkKiogZGNpbSBtaWdyYXRpb25zLiBUaGUgcm9sZSByZXN0YXJ0cyB0aGUKc2VydmljZSB2aWEgdGhlIGBSZXN0YXJ0IG5ldGJveCBzZXJ2aWNlYCBoYW5kbGVyLCBub3RpZmllZCBieSB0aGUKYENvcHkgZG9ja2VyLWNvbXBvc2UueW1sIGZpbGVgIHRhc2suIE9uIGEgZmlyc3QgZGVwbG95IHRoYXQgY29weSBhbHdheXMKcmVwb3J0cyBgY2hhbmdlZGAsIHNvIHRoZSByZXN0YXJ0IGZpcmVzIHJpZ2h0IGFmdGVyIGBNYW5hZ2UgbmV0Ym94IHNlcnZpY2VgCnN0YXJ0cyB0aGUgc3RhY2sg4oCUICoqd2hpbGUgbmV0Ym94IGlzIHN0aWxsIHJ1bm5pbmcgaXRzIGluaXRpYWwgbWlncmF0aW9uKiouCgpJZiB0aGF0IHJlc3RhcnQgbGFuZHMgd2hpbGUgYSBzcXVhc2ggaXMgcmVjb3JkaW5nIGl0cyByZXBsYWNlZCByb3dzLCB0aGUKc3F1YXNoIGlzIGxlZnQgaGFsZi1yZWNvcmRlZC4gRGphbmdvIGNhbiB0aGVuIHJlY29uY2lsZSBuZWl0aGVyIHRoZSBzcXVhc2ggbm9yCnRoZSByZW1haW5pbmcgY2hhaW4g4oaSIHR3byBsZWFmIG5vZGVzIOKGkiBgbWlncmF0ZWAgYWJvcnRzIG9uIGV2ZXJ5IHN0YXJ0IOKGkgpjcmFzaC1sb29wLgoKSXQgd2FzIG1hc2tlZCB1bnRpbCByZWNlbnRseTogYmVmb3JlIHRoZSB3b3JrZXItc3RhcnQgZml4LCB0aGUgbmV0Ym94IHBoYXNlCioqZmFpbGVkKiogb24gZmlyc3QgcnVuIGFuZCBvcGVyYXRvcnMgcmUtcmFuIGl0OyB0aGUgcmUtcnVuIChjb21wb3NlCnVuY2hhbmdlZCkgaXNzdWVkIG5vIHJlc3RhcnQsIHNvIHRoZSBtaWdyYXRpb24gY29tcGxldGVkIHVuZGlzdHVyYmVkLiBXaXRoCnRoZSB3b3JrZXIgZml4IHRoZSBwaGFzZSBwYXNzZXMgZmlyc3QtcnVuIOKAlCBleGFjdGx5IHdoZW4gdGhlIHJlc3RhcnQgZmlyZXMuCgotIG9zaXNtL2Fuc2libGUtY29sbGVjdGlvbi1zZXJ2aWNlcyMyMDkxCgojIyBGaXgKCkdhdGUgYHJlc3RhcnQtc2VydmljZS55bWxgIG9uIGEgaGVhbHRoIGNoZWNrOiBibG9jayB1bnRpbCBubyBuZXRib3ggY29udGFpbmVyCmlzIGBjcmVhdGVkYC9gZXhpdGVkYC9gc3RhcnRpbmdgL2B1bmhlYWx0aHlgIOKAlCBpLmUuIHVudGlsIG1pZ3JhdGlvbnMgaGF2ZQpjb21wbGV0ZWQg4oCUIGJlZm9yZSBhbnkgc3RvcCBvciByZXN0YXJ0LiBBIGxlZ2l0aW1hdGUgY29uZmlnLXVwZGF0ZSByZXN0YXJ0IG9uCmFuIGFscmVhZHktaGVhbHRoeSBzZXJ2aWNlIHBhc3NlcyB0aGUgZ2F0ZSBpbW1lZGlhdGVseS4KCiMjIFZhbGlkYXRpb24KClJlcHJvZHVjZWQgYW5kIHZhbGlkYXRlZCBvbiBhIGZyb20tc2NyYXRjaCBjb21iYWNrIG1hbmFnZXIgYnJpbmd1cCBhZ2FpbnN0CmBtYWluYCAoc2VydmljZXMgYHYwLjIwMjYwNjE1LjBgIOKAlCB0aGUgd29ya2VyLXN0YXJ0IGZpeCB0aGF0IHVubWFza3MgdGhpczsKKip3aXRob3V0KiogdGhpcyBQUikuCgoqKlJlcHJvZHVjZWQgdGhlIGNyYXNoLWxvb3AuKiogUmVjcmVhdGluZyB0aGUgZmlyc3QtZGVwbG95IHRyaWdnZXIgKHdpcGUgdGhlCm5ldGJveCBEQiBzbyB0aGUgaW5pdGlhbCBtaWdyYXRpb24gcmUtcnVucywgYW5kIGZvcmNlIGBDb3B5IGRvY2tlci1jb21wb3NlLnltbGAKdG8gcmVwb3J0IGBjaGFuZ2VkYCBzbyBpdCBub3RpZmllcyB0aGUgcmVzdGFydCBoYW5kbGVyKSBhbmQgcmUtcnVubmluZyB0aGUKYG5ldGJveGAgcGhhc2UgcmVwcm9kdWNlZCBpdDoKCmBgYApDb21tYW5kRXJyb3I6IENvbmZsaWN0aW5nIG1pZ3JhdGlvbnMgZGV0ZWN0ZWQ7IG11bHRpcGxlIGxlYWYgbm9kZXMgaW4gdGhlCm1pZ3JhdGlvbiBncmFwaDogKDAwMDFfc3F1YXNoZWRfMDAxMiwgMDAyMF9yZW1vdmVfY29udGFjdGdyb3VwbWVtYmVyc2hpcCBpbiB0ZW5hbmN5KS4KYGBgCgpgbmV0Ym94LW5ldGJveC0xYCBjcmFzaC1sb29wZWQgKDQwKyByZXN0YXJ0cyk7IGBkamFuZ29fbWlncmF0aW9uc2Agc2hvd2VkIHRoZQpoYWxmLXJlY29yZGVkIHNxdWFzaC4gTm90ZSB0aGUgbGVhZiBub2RlcyB3ZXJlIGluICoqdGVuYW5jeSoqLCBub3QgZGNpbSDigJQgdGhlCmNvcnJ1cHRpYmxlIHNxdWFzaCBpcyB3aGljaGV2ZXIgKG5vbi1hdG9taWMpIHNxdWFzaCBpcyBtaWQtcmVjb3JkaW5nIHdoZW4gdGhlCnJlc3RhcnQgbGFuZHMsIG5vdCBkY2ltLXNwZWNpZmljLgoKKipSYXRlOiAxIGNvcnJ1cHQgaW4gMTMgdW5wYXRjaGVkIGZpcnN0LWRlcGxveXMgKH44JSkqKiDigJQgY29uc2lzdGVudCB3aXRoIHRoZQptaWxsaXNlY29uZC1zY2FsZSB3aW5kb3cuCgoqKk1lY2hhbmlzbSBwcm9vZiAoaW5kZXBlbmRlbnQgb2YgdGhlIH44JSByYXRlKS4qKiBJbnN0cnVtZW50ZWQgb25lIHVucGF0Y2hlZAphbmQgb25lIHBhdGNoZWQgKHRoaXMgYnJhbmNoKSBkZXBsb3ksIGNvcnJlbGF0aW5nIGRvY2tlci1ldmVudCB0aW1lc3RhbXBzIHdpdGgKbWlncmF0aW9uLWxvZyBtYXJrZXJzOgoKfCB8IHJlc3RhcnQgZmlyZXMgfCBpbml0aWFsIG1pZ3JhdGlvbiBjb21wbGV0ZXMgfCByZXN0YXJ0IHZzLiBtaWdyYXRpb24gfAp8LS0tfC0tLXwtLS18LS0tfAp8ICoqdW5wYXRjaGVkKiogfCBtaWQtYGRjaW0uMDAwM19zcXVhc2hlZF8wMTMwYCAofjgwIG1zIGZyb20gdGhlIHNxdWFzaCBsb2cgbGluZSkgfCB+NSBtaW4gbGF0ZXIgfCAqKmJlZm9yZSoqIOKAlCBpbnNpZGUgdGhlIHdpbmRvdyB8CnwgKipwYXRjaGVkICh0aGlzIFBSKSoqIHwgYWZ0ZXIgbWlncmF0aW9uIHwgZmlyc3QgfCAqKmFmdGVyKiog4oCUIGdhdGUgaGVsZCBpdCB8CgpJbiB0aGUgcGF0Y2hlZCBydW4gdGhlIG5ldyBgV2FpdCBmb3IgbmV0Ym94IHRvIGJlIGhlYWx0aHkgYmVmb3JlIHJlc3RhcnRpbmdgCnRhc2sgYmxvY2tlZCAqKjMzIHJldHJpZXMgKH41LjUgbWluKSoqIHVudGlsIG5ldGJveCB3YXMgaGVhbHRoeSwgdGhlbiBhbGxvd2VkCnRoZSByZXN0YXJ0LiBUaGUgZml4IHRoZXJlZm9yZSBtb3ZlcyB0aGUgcmVzdGFydCBvdXQgb2YgdGhlIG1pZ3JhdGlvbiB3aW5kb3cKc3RydWN0dXJhbGx5IOKAlCB0aGUgaW50ZXJydXB0IGNhbiBubyBsb25nZXIgb2NjdXIsIHJlZ2FyZGxlc3Mgb2YgdGhlIHJhcmUKdGltaW5nLgoKTGVmdCBhcyAqKmRyYWZ0KiogcGVuZGluZyBhIENJL21vbGVjdWxlIHBhc3MgKHRoZSBjb3JydXB0aW9uIGl0c2VsZiBpcyBhIG5hcnJvdwpyYWNlIOKAlCBhIENQVS10aHJvdHRsZSBhbmQgdGltZWQta2lsbCBhdHRlbXB0IGRpZCBub3QgcmVwcm9kdWNlIGl0IG9uIGRlbWFuZDsKYGRjaW0uMDAwM19zcXVhc2hlZF8wMTMwYCBpcyBhdG9taWMgYW5kIHJvbGxzIGJhY2sgY2xlYW5seSkuIFJldmlld2VyIGlucHV0CndlbGNvbWUgb24gd2hldGhlciB0byBpbnN0ZWFkIHN1cHByZXNzIHRoZSByZWR1bmRhbnQgZmlyc3QtZGVwbG95IHJlc3RhcnQKb3V0cmlnaHQuCgpPdXQgb2Ygc2NvcGUgKHNlcGFyYXRlIGZvbGxvdy11cCk6IHRoZSByZWR1bmRhbnQgZmlyc3QtZGVwbG95IHJlc3RhcnQgaXRzZWxmLAphbmQgdGhlIGFsd2F5cy10cnVlIHF1b3RlZC1zdHJpbmcgcG9zdGdyZXMtdmVyc2lvbiBgd2hlbjpgIGd1YXJkIGxhdGVyIGluIHRoaXMKZmlsZS4KCvCfpJYgR2VuZXJhdGVkIHdpdGggW0NsYXVkZSBDb2RlXShodHRwczovL2NsYXVkZS5jb20vY2xhdWRlLWNvZGUpCg==
      patchset: 07dbc308a6e6252592c0753853d509f715870677
      pipeline: check
      playbook_context:
        playbook_projects:
          trusted/project_0/github.com/osism/zuul-config:
            canonical_name: github.com/osism/zuul-config
            checkout: main
            commit: 3d5c7b5973754999f7005857a00ce9168944f0f1
          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: 3d5c7b5973754999f7005857a00ce9168944f0f1
          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-molecule/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-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: 2f586cd1015e5f385338a96c8995eef22a1a509b
          name: osism/ansible-collection-services
          required: false
          short_name: ansible-collection-services
          src_dir: src/github.com/osism/ansible-collection-services
      ref: refs/pull/2119/head
      resources: {}
      tenant: osism
      timeout: 1800
      topic: null
      voting: true
