all:
  children:
    zuul_unreachable:
      hosts: {}
  hosts:
    debian-bookworm:
      ansible_connection: ssh
      ansible_host: 2a13:1a81:8000:3124:f816:3eff:fe00:7817
      ansible_port: 22
      ansible_python_interpreter: auto
      ansible_user: zuul
      nodepool:
        az: nova
        cloud: regiocloud-a-ci
        external_id: 9cd6002a-dfc7-4d45-8e99-96a9749d4693
        host_id: 82101243836454d7401d5893feae9e2c5df7cc291646d8a99b33b53b
        interface_ip: 2a13:1a81:8000:3124:f816:3eff:fe00:7817
        label: debian-bookworm
        node_properties: {}
        private_ipv4: 10.128.7.117
        private_ipv6: null
        provider: regiocloud-a
        public_ipv4: 81.163.192.32
        public_ipv6: 2a13:1a81:8000:3124:f816:3eff:fe00:7817
        region: null
        slot: null
  vars:
    zuul:
      _inheritance_path:
      - '<Job base explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: osism/zuul-config/zuul.d/jobs.yaml@main#2>'
      - '<Job flake8 explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: osism/zuul-jobs/.zuul.yaml@main#32>'
      - '<Job flake8 explicit: None implied: None source: osism/release/.zuul.yaml@main#2>'
      ansible_version: '9'
      attempts: 1
      branch: main
      build: 28127148f65144cca5969e648ea623a4
      build_refs:
      - branch: main
        change: '2415'
        change_message: "chore(deps): update osism to v0.20260314.0\n\nThis PR contains
          the following updates:\n\n| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/)
          | [Confidence](https://docs.renovatebot.com/merge-confidence/) | Update
          |\n|---|---|---|---|---|\n| [osism](https://redirect.github.com/osism/python-osism)
          | `0.20260129.1` \u2192 `0.20260314.0` | ![age](https://developer.mend.io/api/mc/badges/age/pypi/osism/0.20260314.0?slim=true)
          | ![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/osism/0.20260129.1/0.20260314.0?slim=true)
          | minor |\n| [registry.osism.tech/osism/osism](https://quay.io/organization/osism)
          ([source](https://redirect.github.com/osism/python-osism)) | `0.20260129.1`
          \u2192 `0.20260314.0` | ![age](https://developer.mend.io/api/mc/badges/age/docker/registry.osism.tech%2fosism%2fosism/0.20260314.0?slim=true)
          | ![confidence](https://developer.mend.io/api/mc/badges/confidence/docker/registry.osism.tech%2fosism%2fosism/0.20260129.1/0.20260314.0?slim=true)
          | minor |\n\n---\n\n### Release Notes\n\n<details>\n<summary>osism/python-osism
          (osism)</summary>\n\n### [`v0.20260314.0`](https://redirect.github.com/osism/python-osism/compare/v0.20260313.0...v0.20260314.0)\n\n[Compare
          Source](https://redirect.github.com/osism/python-osism/compare/v0.20260313.0...v0.20260314.0)\n\n###
          [`v0.20260313.0`](https://redirect.github.com/osism/python-osism/blob/HEAD/CHANGELOG.md#v0202603130---2026-03-13)\n\n[Compare
          Source](https://redirect.github.com/osism/python-osism/compare/v0.20260312.0...v0.20260313.0)\n\n#####
          Added\n\n- LLDP neighbors report command (`osism report lldp`) with per-host
          neighbor discovery via SSH\n- BGP sessions report command (`osism report
          bgp`) showing peer state, uptime, and prefix counts\n\n##### Changed\n\n-
          Use minified inventory (`hosts-minified.yml`) for faster host and group
          resolution when full host variables are not needed\n- Downgrade metalbox
          subnet matching log from warning to debug for routed OOB addresses where
          the fallback path is expected\n- Mask secrets in `frr_parameters`, `netplan_parameters`,
          and inventory hostvar API responses in addition to `kernel_append_params`\n\n#####
          Fixed\n\n- Fix masking of `ironic_osism_*` secrets in `kernel_append_params`
          when vault decryption is unavailable by adding regex-based fallback masking
          by parameter name\n- Fix host resolution with minified inventory by extracting
          hosts from group listings when `_meta.hostvars` is empty\n- Fix LLDP report
          for single-interface hosts where `lldpctl` returns a dict instead of a list\n\n###
          [`v0.20260312.0`](https://redirect.github.com/osism/python-osism/blob/HEAD/CHANGELOG.md#v0202603120---2026-03-12)\n\n[Compare
          Source](https://redirect.github.com/osism/python-osism/compare/v0.20260129.1...v0.20260312.0)\n\n#####
          Added\n\n- Tag handling for L2VPN EVPN BGP neighbor address family, allowing
          enablement via `bgp-af-l2vpn-evpn` tag on local interfaces\n- Report memory
          command (`osism report memory`) to query physical memory and product UUID
          for all hosts in the Ansible inventory\n- Configurable operator user via
          `OSISM_OPERATOR_USER` environment variable, replacing hardcoded \"dragon\"
          username\n- Configurable FRR dummy interface via `OSISM_FRR_DUMMY_INTERFACE`
          environment variable\n- `validate scs` command for running SCS IaaS conformity
          tests against OpenStack clouds\n- Support for ironic\\_parameters from NetBox
          Config Context during node sync, with Ansible Vault decryption\n- `--dry-run`
          flag for `osism sync ironic` command to preview changes without modifying
          Ironic baremetal nodes, with secret masking and prettified JSON output\n-
          `osism vault check` command to verify the full vault password chain: keyfile
          existence, Fernet key validity, Redis storage, password decryption, and
          optional secrets.yml test\n- FRR parameter appending to kernel\\_append\\_params
          for supported IPA types during ironic node sync\n- Baremetal node detail
          page with ports listing and new API endpoint `GET /v1/baremetal/nodes/{node_uuid}/ports`\n-
          Device role from NetBox to baremetal nodes list and detail views\n- Redfish
          address from driver\\_info to baremetal node detail page\n- High-value Ironic
          fields (conductor, fault, maintenance\\_reason, description, owner, lessee,
          traits, allocation\\_uuid, provision\\_updated\\_at) to baremetal node views\n-
          IPv6 support (`osism-ipa-ipv6`) for yrzn001 IPA type kernel parameters\n-
          `osism-ipa-metalbox` kernel parameter for yrzn001 IPA type with subnet-based
          metalbox lookup\n- Fallback metalbox lookup via NETBOX\\_FILTER\\_CONDUCTOR\\_IRONIC
          filters when subnet matching fails\n- `--skip-kernel-param` option for `osism
          sync ironic` to exclude specific kernel append parameters by name\n- `--extra-kernel-param`
          option for `osism sync ironic` to add extra kernel append parameters as
          key=value pairs\n- Kernel append params, netplan parameters, and FRR parameters
          display in frontend node detail view with secret masking\n- Boot device
          set to cdrom before deploy, clean, and burn-in operations to ensure virtual
          media boot\n- Persistence of kernel\\_append\\_params in driver\\_info for
          automated cleaning after undeploy\n- Restoration of instance\\_info from
          extra before clean and burn-in commands\n- Ansible Vault decryption support
          for frr\\_parameters custom field\n- Power off nodes during Ironic sync
          to ensure a defined power state for all newly synced nodes\n- Primary IPv4/IPv6
          addresses in node detail view, lazy-loaded from NetBox\n- Node detail view
          lookup by name in addition to UUID, with selection list for duplicate names\n-
          Node properties display in the Parameters section of the detail view\n-
          Copy-to-clipboard buttons on node detail view fields\n- Metalbox `hosts_additional_entries`
          to the deploy playbook for baremetal deployments\n- New API endpoints for
          lazy-loading NetBox data (`GET /v1/baremetal/nodes/{node_name}/netbox`,
          `POST /v1/baremetal/nodes/netbox`)\n- `--netbox` CLI flag for `baremetal
          list` command to optionally include NetBox device roles\n\n##### Changed\n\n-
          Automatic node cleaning is now enabled per node after reaching available
          state during ironic sync\n- Generic recursive Jinja2 rendering for ironic\\_osism\\_\\*
          secrets in node attributes, replacing hard-coded per-field rendering of
          remote\\_board\\_\\* fields\n- Derive AS number from hostname for yrzn001
          IPA type instead of reading from frr\\_parameters\n- Extend secret masking
          to keys starting with ironic\\_osism\\_\\* and support string-level masking
          of embedded secret values\n- Sync flavors.yaml with osism/openstack-flavor-manager,
          adding SCS-4V-16-100s flavor and fixing hw\\_rng:allowed casing\n- Renamed
          IPA kernel parameters from `osism_as`/`osism_ipv4` to `osism-ipa-as`/`osism-ipa-ipv4`
          scheme\n- Prioritize `frr_local_as` from config context over hostname-derived
          AS number for yrzn001\n- Restrict cdrom boot device override to Supermicro
          nodes only during deploy, burn-in, and clean operations\n- Lazy-load NetBox
          data (device role, primary IPs) to eliminate N+1 HTTP requests on baremetal
          node listing\n- Simplify dashboard to show only Total Nodes and Active Nodes
          tiles with centered layout\n\n##### Fixed\n\n- Listing of SONiC devices
          by moving device retrieval to a conductor task where `NETBOX_FILTER_CONDUCTOR_SONIC`
          is available\n- Typo in netbox command output messages (\"comming\" \u2192
          \"coming\")\n- Missing f-string prefix for operator\\_user interpolation
          in check mount command\n- Wrong key name `kernel_append_parameters` instead
          of `kernel_append_params` in FRR parameter appending\n- Strip whitespace
          from decrypted secrets used as template variables in kernel\\_append\\_params\n-
          YAML line wrapping breaking long strings (e.g. SSH keys) in deployment playbooks
          by setting `width=float(\"inf\")`\n- Trailing whitespace in decrypted Vault
          values in frr\\_parameters\n- Remove `frr_parameters` and `netplan_parameters`
          from `local_context_data` defaults to prevent duplicate encrypted values
          in generated playbooks\n- Use correct task (`baremetal_node_set_power_state`)
          when switching off Ironic nodes during sync\n- Copy-to-clipboard fallback
          for non-HTTPS connections using `document.execCommand`\n\n##### Dependencies\n\n-
          [@&#8203;eslint/eslintrc](https://redirect.github.com/eslint/eslintrc) 3.3.3
          \u2192 3.3.4\n- [@&#8203;tailwindcss/postcss](https://redirect.github.com/tailwindcss/postcss)
          4.2.0 \u2192 4.2.1\n- [@&#8203;tanstack/react-query](https://redirect.github.com/tanstack/react-query)
          5.90.20 \u2192 5.90.21\n- [@&#8203;types/node](https://redirect.github.com/types/node)
          24.10.9 \u2192 24.12.0\n- [@&#8203;types/react](https://redirect.github.com/types/react)
          19.2.10 \u2192 19.2.14\n- autoprefixer 10.4.23 \u2192 10.4.27\n- axios 1.13.4
          \u2192 1.13.6\n- boto3 1.38.0 \u2192 1.42.63\n- cliff 4.13.1 \u2192 4.13.2\n-
          community.docker 5.0.5 \u2192 5.0.6\n- eslint 9 \u2192 10.0.3\n- fastapi
          0.128.0 \u2192 0.135.1\n- keystoneauth1 5.13.0 \u2192 5.13.1\n- lucide-react
          0.563.0 \u2192 0.577.0\n- netbox-manager 0.20260129.0 \u2192 0.20260211.0\n-
          openstack-flavor-manager 0.20260127.0 \u2192 0.20260227.0\n- openstack-image-manager
          0.20260128.0 \u2192 0.20260227.0\n- openstacksdk 4.9.0 \u2192 4.10.0\n-
          postcss 8.5.6 \u2192 8.5.8\n- setuptools 80.10.2 \u2192 82.0.1\n- sqlmodel
          0.0.31 \u2192 0.0.37\n- sushy 5.9.0 \u2192 5.10.0\n- tabulate 0.9.0 \u2192
          0.10.0\n- tailwind-merge 3.4.0 \u2192 3.5.0\n- tailwindcss 4.1.18 \u2192
          4.2.1\n- uv 0.9.27 \u2192 0.10.8\n- uvicorn 0.40.0 \u2192 0.41.0\n\n</details>\n\n---\n\n###
          Configuration\n\n\U0001F4C5 **Schedule**: Branch creation - At any time
          (no schedule defined), Automerge - At any time (no schedule defined).\n\n\U0001F6A6
          **Automerge**: Disabled by config. Please merge this manually once you are
          satisfied.\n\n\u267B **Rebasing**: Whenever PR becomes conflicted, or you
          tick the rebase/retry checkbox.\n\n\U0001F515 **Ignore**: Close this PR
          and you won't be reminded about these updates again.\n\n---\n\n - [ ] <!--
          rebase-check -->If you want to rebase/retry this PR, check this box\n\n---\n\nThis
          PR was generated by [Mend Renovate](https://mend.io/renovate/). View the
          [repository job log](https://developer.mend.io/github/osism/release).\n<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My42Ni40IiwidXBkYXRlZEluVmVyIjoiNDMuNjYuNCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsicmVub3ZhdGUiXX0=-->\n"
        change_url: https://github.com/osism/release/pull/2415
        commit_id: 3afceeeba2cee9a6aca23290d8261d77128f15ec
        patchset: 3afceeeba2cee9a6aca23290d8261d77128f15ec
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/release
          name: osism/release
          short_name: release
        src_dir: src/github.com/osism/release
        topic: null
      buildset: 2aeee9acfe0b41569d6d96825146b714
      buildset_refs:
      - branch: main
        change: '2415'
        change_message: "chore(deps): update osism to v0.20260314.0\n\nThis PR contains
          the following updates:\n\n| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/)
          | [Confidence](https://docs.renovatebot.com/merge-confidence/) | Update
          |\n|---|---|---|---|---|\n| [osism](https://redirect.github.com/osism/python-osism)
          | `0.20260129.1` \u2192 `0.20260314.0` | ![age](https://developer.mend.io/api/mc/badges/age/pypi/osism/0.20260314.0?slim=true)
          | ![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/osism/0.20260129.1/0.20260314.0?slim=true)
          | minor |\n| [registry.osism.tech/osism/osism](https://quay.io/organization/osism)
          ([source](https://redirect.github.com/osism/python-osism)) | `0.20260129.1`
          \u2192 `0.20260314.0` | ![age](https://developer.mend.io/api/mc/badges/age/docker/registry.osism.tech%2fosism%2fosism/0.20260314.0?slim=true)
          | ![confidence](https://developer.mend.io/api/mc/badges/confidence/docker/registry.osism.tech%2fosism%2fosism/0.20260129.1/0.20260314.0?slim=true)
          | minor |\n\n---\n\n### Release Notes\n\n<details>\n<summary>osism/python-osism
          (osism)</summary>\n\n### [`v0.20260314.0`](https://redirect.github.com/osism/python-osism/compare/v0.20260313.0...v0.20260314.0)\n\n[Compare
          Source](https://redirect.github.com/osism/python-osism/compare/v0.20260313.0...v0.20260314.0)\n\n###
          [`v0.20260313.0`](https://redirect.github.com/osism/python-osism/blob/HEAD/CHANGELOG.md#v0202603130---2026-03-13)\n\n[Compare
          Source](https://redirect.github.com/osism/python-osism/compare/v0.20260312.0...v0.20260313.0)\n\n#####
          Added\n\n- LLDP neighbors report command (`osism report lldp`) with per-host
          neighbor discovery via SSH\n- BGP sessions report command (`osism report
          bgp`) showing peer state, uptime, and prefix counts\n\n##### Changed\n\n-
          Use minified inventory (`hosts-minified.yml`) for faster host and group
          resolution when full host variables are not needed\n- Downgrade metalbox
          subnet matching log from warning to debug for routed OOB addresses where
          the fallback path is expected\n- Mask secrets in `frr_parameters`, `netplan_parameters`,
          and inventory hostvar API responses in addition to `kernel_append_params`\n\n#####
          Fixed\n\n- Fix masking of `ironic_osism_*` secrets in `kernel_append_params`
          when vault decryption is unavailable by adding regex-based fallback masking
          by parameter name\n- Fix host resolution with minified inventory by extracting
          hosts from group listings when `_meta.hostvars` is empty\n- Fix LLDP report
          for single-interface hosts where `lldpctl` returns a dict instead of a list\n\n###
          [`v0.20260312.0`](https://redirect.github.com/osism/python-osism/blob/HEAD/CHANGELOG.md#v0202603120---2026-03-12)\n\n[Compare
          Source](https://redirect.github.com/osism/python-osism/compare/v0.20260129.1...v0.20260312.0)\n\n#####
          Added\n\n- Tag handling for L2VPN EVPN BGP neighbor address family, allowing
          enablement via `bgp-af-l2vpn-evpn` tag on local interfaces\n- Report memory
          command (`osism report memory`) to query physical memory and product UUID
          for all hosts in the Ansible inventory\n- Configurable operator user via
          `OSISM_OPERATOR_USER` environment variable, replacing hardcoded \"dragon\"
          username\n- Configurable FRR dummy interface via `OSISM_FRR_DUMMY_INTERFACE`
          environment variable\n- `validate scs` command for running SCS IaaS conformity
          tests against OpenStack clouds\n- Support for ironic\\_parameters from NetBox
          Config Context during node sync, with Ansible Vault decryption\n- `--dry-run`
          flag for `osism sync ironic` command to preview changes without modifying
          Ironic baremetal nodes, with secret masking and prettified JSON output\n-
          `osism vault check` command to verify the full vault password chain: keyfile
          existence, Fernet key validity, Redis storage, password decryption, and
          optional secrets.yml test\n- FRR parameter appending to kernel\\_append\\_params
          for supported IPA types during ironic node sync\n- Baremetal node detail
          page with ports listing and new API endpoint `GET /v1/baremetal/nodes/{node_uuid}/ports`\n-
          Device role from NetBox to baremetal nodes list and detail views\n- Redfish
          address from driver\\_info to baremetal node detail page\n- High-value Ironic
          fields (conductor, fault, maintenance\\_reason, description, owner, lessee,
          traits, allocation\\_uuid, provision\\_updated\\_at) to baremetal node views\n-
          IPv6 support (`osism-ipa-ipv6`) for yrzn001 IPA type kernel parameters\n-
          `osism-ipa-metalbox` kernel parameter for yrzn001 IPA type with subnet-based
          metalbox lookup\n- Fallback metalbox lookup via NETBOX\\_FILTER\\_CONDUCTOR\\_IRONIC
          filters when subnet matching fails\n- `--skip-kernel-param` option for `osism
          sync ironic` to exclude specific kernel append parameters by name\n- `--extra-kernel-param`
          option for `osism sync ironic` to add extra kernel append parameters as
          key=value pairs\n- Kernel append params, netplan parameters, and FRR parameters
          display in frontend node detail view with secret masking\n- Boot device
          set to cdrom before deploy, clean, and burn-in operations to ensure virtual
          media boot\n- Persistence of kernel\\_append\\_params in driver\\_info for
          automated cleaning after undeploy\n- Restoration of instance\\_info from
          extra before clean and burn-in commands\n- Ansible Vault decryption support
          for frr\\_parameters custom field\n- Power off nodes during Ironic sync
          to ensure a defined power state for all newly synced nodes\n- Primary IPv4/IPv6
          addresses in node detail view, lazy-loaded from NetBox\n- Node detail view
          lookup by name in addition to UUID, with selection list for duplicate names\n-
          Node properties display in the Parameters section of the detail view\n-
          Copy-to-clipboard buttons on node detail view fields\n- Metalbox `hosts_additional_entries`
          to the deploy playbook for baremetal deployments\n- New API endpoints for
          lazy-loading NetBox data (`GET /v1/baremetal/nodes/{node_name}/netbox`,
          `POST /v1/baremetal/nodes/netbox`)\n- `--netbox` CLI flag for `baremetal
          list` command to optionally include NetBox device roles\n\n##### Changed\n\n-
          Automatic node cleaning is now enabled per node after reaching available
          state during ironic sync\n- Generic recursive Jinja2 rendering for ironic\\_osism\\_\\*
          secrets in node attributes, replacing hard-coded per-field rendering of
          remote\\_board\\_\\* fields\n- Derive AS number from hostname for yrzn001
          IPA type instead of reading from frr\\_parameters\n- Extend secret masking
          to keys starting with ironic\\_osism\\_\\* and support string-level masking
          of embedded secret values\n- Sync flavors.yaml with osism/openstack-flavor-manager,
          adding SCS-4V-16-100s flavor and fixing hw\\_rng:allowed casing\n- Renamed
          IPA kernel parameters from `osism_as`/`osism_ipv4` to `osism-ipa-as`/`osism-ipa-ipv4`
          scheme\n- Prioritize `frr_local_as` from config context over hostname-derived
          AS number for yrzn001\n- Restrict cdrom boot device override to Supermicro
          nodes only during deploy, burn-in, and clean operations\n- Lazy-load NetBox
          data (device role, primary IPs) to eliminate N+1 HTTP requests on baremetal
          node listing\n- Simplify dashboard to show only Total Nodes and Active Nodes
          tiles with centered layout\n\n##### Fixed\n\n- Listing of SONiC devices
          by moving device retrieval to a conductor task where `NETBOX_FILTER_CONDUCTOR_SONIC`
          is available\n- Typo in netbox command output messages (\"comming\" \u2192
          \"coming\")\n- Missing f-string prefix for operator\\_user interpolation
          in check mount command\n- Wrong key name `kernel_append_parameters` instead
          of `kernel_append_params` in FRR parameter appending\n- Strip whitespace
          from decrypted secrets used as template variables in kernel\\_append\\_params\n-
          YAML line wrapping breaking long strings (e.g. SSH keys) in deployment playbooks
          by setting `width=float(\"inf\")`\n- Trailing whitespace in decrypted Vault
          values in frr\\_parameters\n- Remove `frr_parameters` and `netplan_parameters`
          from `local_context_data` defaults to prevent duplicate encrypted values
          in generated playbooks\n- Use correct task (`baremetal_node_set_power_state`)
          when switching off Ironic nodes during sync\n- Copy-to-clipboard fallback
          for non-HTTPS connections using `document.execCommand`\n\n##### Dependencies\n\n-
          [@&#8203;eslint/eslintrc](https://redirect.github.com/eslint/eslintrc) 3.3.3
          \u2192 3.3.4\n- [@&#8203;tailwindcss/postcss](https://redirect.github.com/tailwindcss/postcss)
          4.2.0 \u2192 4.2.1\n- [@&#8203;tanstack/react-query](https://redirect.github.com/tanstack/react-query)
          5.90.20 \u2192 5.90.21\n- [@&#8203;types/node](https://redirect.github.com/types/node)
          24.10.9 \u2192 24.12.0\n- [@&#8203;types/react](https://redirect.github.com/types/react)
          19.2.10 \u2192 19.2.14\n- autoprefixer 10.4.23 \u2192 10.4.27\n- axios 1.13.4
          \u2192 1.13.6\n- boto3 1.38.0 \u2192 1.42.63\n- cliff 4.13.1 \u2192 4.13.2\n-
          community.docker 5.0.5 \u2192 5.0.6\n- eslint 9 \u2192 10.0.3\n- fastapi
          0.128.0 \u2192 0.135.1\n- keystoneauth1 5.13.0 \u2192 5.13.1\n- lucide-react
          0.563.0 \u2192 0.577.0\n- netbox-manager 0.20260129.0 \u2192 0.20260211.0\n-
          openstack-flavor-manager 0.20260127.0 \u2192 0.20260227.0\n- openstack-image-manager
          0.20260128.0 \u2192 0.20260227.0\n- openstacksdk 4.9.0 \u2192 4.10.0\n-
          postcss 8.5.6 \u2192 8.5.8\n- setuptools 80.10.2 \u2192 82.0.1\n- sqlmodel
          0.0.31 \u2192 0.0.37\n- sushy 5.9.0 \u2192 5.10.0\n- tabulate 0.9.0 \u2192
          0.10.0\n- tailwind-merge 3.4.0 \u2192 3.5.0\n- tailwindcss 4.1.18 \u2192
          4.2.1\n- uv 0.9.27 \u2192 0.10.8\n- uvicorn 0.40.0 \u2192 0.41.0\n\n</details>\n\n---\n\n###
          Configuration\n\n\U0001F4C5 **Schedule**: Branch creation - At any time
          (no schedule defined), Automerge - At any time (no schedule defined).\n\n\U0001F6A6
          **Automerge**: Disabled by config. Please merge this manually once you are
          satisfied.\n\n\u267B **Rebasing**: Whenever PR becomes conflicted, or you
          tick the rebase/retry checkbox.\n\n\U0001F515 **Ignore**: Close this PR
          and you won't be reminded about these updates again.\n\n---\n\n - [ ] <!--
          rebase-check -->If you want to rebase/retry this PR, check this box\n\n---\n\nThis
          PR was generated by [Mend Renovate](https://mend.io/renovate/). View the
          [repository job log](https://developer.mend.io/github/osism/release).\n<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My42Ni40IiwidXBkYXRlZEluVmVyIjoiNDMuNjYuNCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsicmVub3ZhdGUiXX0=-->\n"
        change_url: https://github.com/osism/release/pull/2415
        commit_id: 3afceeeba2cee9a6aca23290d8261d77128f15ec
        patchset: 3afceeeba2cee9a6aca23290d8261d77128f15ec
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/release
          name: osism/release
          short_name: release
        src_dir: src/github.com/osism/release
        topic: null
      change: '2415'
      change_message: "chore(deps): update osism to v0.20260314.0\n\nThis PR contains
        the following updates:\n\n| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/)
        | [Confidence](https://docs.renovatebot.com/merge-confidence/) | Update |\n|---|---|---|---|---|\n|
        [osism](https://redirect.github.com/osism/python-osism) | `0.20260129.1` \u2192
        `0.20260314.0` | ![age](https://developer.mend.io/api/mc/badges/age/pypi/osism/0.20260314.0?slim=true)
        | ![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/osism/0.20260129.1/0.20260314.0?slim=true)
        | minor |\n| [registry.osism.tech/osism/osism](https://quay.io/organization/osism)
        ([source](https://redirect.github.com/osism/python-osism)) | `0.20260129.1`
        \u2192 `0.20260314.0` | ![age](https://developer.mend.io/api/mc/badges/age/docker/registry.osism.tech%2fosism%2fosism/0.20260314.0?slim=true)
        | ![confidence](https://developer.mend.io/api/mc/badges/confidence/docker/registry.osism.tech%2fosism%2fosism/0.20260129.1/0.20260314.0?slim=true)
        | minor |\n\n---\n\n### Release Notes\n\n<details>\n<summary>osism/python-osism
        (osism)</summary>\n\n### [`v0.20260314.0`](https://redirect.github.com/osism/python-osism/compare/v0.20260313.0...v0.20260314.0)\n\n[Compare
        Source](https://redirect.github.com/osism/python-osism/compare/v0.20260313.0...v0.20260314.0)\n\n###
        [`v0.20260313.0`](https://redirect.github.com/osism/python-osism/blob/HEAD/CHANGELOG.md#v0202603130---2026-03-13)\n\n[Compare
        Source](https://redirect.github.com/osism/python-osism/compare/v0.20260312.0...v0.20260313.0)\n\n#####
        Added\n\n- LLDP neighbors report command (`osism report lldp`) with per-host
        neighbor discovery via SSH\n- BGP sessions report command (`osism report bgp`)
        showing peer state, uptime, and prefix counts\n\n##### Changed\n\n- Use minified
        inventory (`hosts-minified.yml`) for faster host and group resolution when
        full host variables are not needed\n- Downgrade metalbox subnet matching log
        from warning to debug for routed OOB addresses where the fallback path is
        expected\n- Mask secrets in `frr_parameters`, `netplan_parameters`, and inventory
        hostvar API responses in addition to `kernel_append_params`\n\n##### Fixed\n\n-
        Fix masking of `ironic_osism_*` secrets in `kernel_append_params` when vault
        decryption is unavailable by adding regex-based fallback masking by parameter
        name\n- Fix host resolution with minified inventory by extracting hosts from
        group listings when `_meta.hostvars` is empty\n- Fix LLDP report for single-interface
        hosts where `lldpctl` returns a dict instead of a list\n\n### [`v0.20260312.0`](https://redirect.github.com/osism/python-osism/blob/HEAD/CHANGELOG.md#v0202603120---2026-03-12)\n\n[Compare
        Source](https://redirect.github.com/osism/python-osism/compare/v0.20260129.1...v0.20260312.0)\n\n#####
        Added\n\n- Tag handling for L2VPN EVPN BGP neighbor address family, allowing
        enablement via `bgp-af-l2vpn-evpn` tag on local interfaces\n- Report memory
        command (`osism report memory`) to query physical memory and product UUID
        for all hosts in the Ansible inventory\n- Configurable operator user via `OSISM_OPERATOR_USER`
        environment variable, replacing hardcoded \"dragon\" username\n- Configurable
        FRR dummy interface via `OSISM_FRR_DUMMY_INTERFACE` environment variable\n-
        `validate scs` command for running SCS IaaS conformity tests against OpenStack
        clouds\n- Support for ironic\\_parameters from NetBox Config Context during
        node sync, with Ansible Vault decryption\n- `--dry-run` flag for `osism sync
        ironic` command to preview changes without modifying Ironic baremetal nodes,
        with secret masking and prettified JSON output\n- `osism vault check` command
        to verify the full vault password chain: keyfile existence, Fernet key validity,
        Redis storage, password decryption, and optional secrets.yml test\n- FRR parameter
        appending to kernel\\_append\\_params for supported IPA types during ironic
        node sync\n- Baremetal node detail page with ports listing and new API endpoint
        `GET /v1/baremetal/nodes/{node_uuid}/ports`\n- Device role from NetBox to
        baremetal nodes list and detail views\n- Redfish address from driver\\_info
        to baremetal node detail page\n- High-value Ironic fields (conductor, fault,
        maintenance\\_reason, description, owner, lessee, traits, allocation\\_uuid,
        provision\\_updated\\_at) to baremetal node views\n- IPv6 support (`osism-ipa-ipv6`)
        for yrzn001 IPA type kernel parameters\n- `osism-ipa-metalbox` kernel parameter
        for yrzn001 IPA type with subnet-based metalbox lookup\n- Fallback metalbox
        lookup via NETBOX\\_FILTER\\_CONDUCTOR\\_IRONIC filters when subnet matching
        fails\n- `--skip-kernel-param` option for `osism sync ironic` to exclude specific
        kernel append parameters by name\n- `--extra-kernel-param` option for `osism
        sync ironic` to add extra kernel append parameters as key=value pairs\n- Kernel
        append params, netplan parameters, and FRR parameters display in frontend
        node detail view with secret masking\n- Boot device set to cdrom before deploy,
        clean, and burn-in operations to ensure virtual media boot\n- Persistence
        of kernel\\_append\\_params in driver\\_info for automated cleaning after
        undeploy\n- Restoration of instance\\_info from extra before clean and burn-in
        commands\n- Ansible Vault decryption support for frr\\_parameters custom field\n-
        Power off nodes during Ironic sync to ensure a defined power state for all
        newly synced nodes\n- Primary IPv4/IPv6 addresses in node detail view, lazy-loaded
        from NetBox\n- Node detail view lookup by name in addition to UUID, with selection
        list for duplicate names\n- Node properties display in the Parameters section
        of the detail view\n- Copy-to-clipboard buttons on node detail view fields\n-
        Metalbox `hosts_additional_entries` to the deploy playbook for baremetal deployments\n-
        New API endpoints for lazy-loading NetBox data (`GET /v1/baremetal/nodes/{node_name}/netbox`,
        `POST /v1/baremetal/nodes/netbox`)\n- `--netbox` CLI flag for `baremetal list`
        command to optionally include NetBox device roles\n\n##### Changed\n\n- Automatic
        node cleaning is now enabled per node after reaching available state during
        ironic sync\n- Generic recursive Jinja2 rendering for ironic\\_osism\\_\\*
        secrets in node attributes, replacing hard-coded per-field rendering of remote\\_board\\_\\*
        fields\n- Derive AS number from hostname for yrzn001 IPA type instead of reading
        from frr\\_parameters\n- Extend secret masking to keys starting with ironic\\_osism\\_\\*
        and support string-level masking of embedded secret values\n- Sync flavors.yaml
        with osism/openstack-flavor-manager, adding SCS-4V-16-100s flavor and fixing
        hw\\_rng:allowed casing\n- Renamed IPA kernel parameters from `osism_as`/`osism_ipv4`
        to `osism-ipa-as`/`osism-ipa-ipv4` scheme\n- Prioritize `frr_local_as` from
        config context over hostname-derived AS number for yrzn001\n- Restrict cdrom
        boot device override to Supermicro nodes only during deploy, burn-in, and
        clean operations\n- Lazy-load NetBox data (device role, primary IPs) to eliminate
        N+1 HTTP requests on baremetal node listing\n- Simplify dashboard to show
        only Total Nodes and Active Nodes tiles with centered layout\n\n##### Fixed\n\n-
        Listing of SONiC devices by moving device retrieval to a conductor task where
        `NETBOX_FILTER_CONDUCTOR_SONIC` is available\n- Typo in netbox command output
        messages (\"comming\" \u2192 \"coming\")\n- Missing f-string prefix for operator\\_user
        interpolation in check mount command\n- Wrong key name `kernel_append_parameters`
        instead of `kernel_append_params` in FRR parameter appending\n- Strip whitespace
        from decrypted secrets used as template variables in kernel\\_append\\_params\n-
        YAML line wrapping breaking long strings (e.g. SSH keys) in deployment playbooks
        by setting `width=float(\"inf\")`\n- Trailing whitespace in decrypted Vault
        values in frr\\_parameters\n- Remove `frr_parameters` and `netplan_parameters`
        from `local_context_data` defaults to prevent duplicate encrypted values in
        generated playbooks\n- Use correct task (`baremetal_node_set_power_state`)
        when switching off Ironic nodes during sync\n- Copy-to-clipboard fallback
        for non-HTTPS connections using `document.execCommand`\n\n##### Dependencies\n\n-
        [@&#8203;eslint/eslintrc](https://redirect.github.com/eslint/eslintrc) 3.3.3
        \u2192 3.3.4\n- [@&#8203;tailwindcss/postcss](https://redirect.github.com/tailwindcss/postcss)
        4.2.0 \u2192 4.2.1\n- [@&#8203;tanstack/react-query](https://redirect.github.com/tanstack/react-query)
        5.90.20 \u2192 5.90.21\n- [@&#8203;types/node](https://redirect.github.com/types/node)
        24.10.9 \u2192 24.12.0\n- [@&#8203;types/react](https://redirect.github.com/types/react)
        19.2.10 \u2192 19.2.14\n- autoprefixer 10.4.23 \u2192 10.4.27\n- axios 1.13.4
        \u2192 1.13.6\n- boto3 1.38.0 \u2192 1.42.63\n- cliff 4.13.1 \u2192 4.13.2\n-
        community.docker 5.0.5 \u2192 5.0.6\n- eslint 9 \u2192 10.0.3\n- fastapi 0.128.0
        \u2192 0.135.1\n- keystoneauth1 5.13.0 \u2192 5.13.1\n- lucide-react 0.563.0
        \u2192 0.577.0\n- netbox-manager 0.20260129.0 \u2192 0.20260211.0\n- openstack-flavor-manager
        0.20260127.0 \u2192 0.20260227.0\n- openstack-image-manager 0.20260128.0 \u2192
        0.20260227.0\n- openstacksdk 4.9.0 \u2192 4.10.0\n- postcss 8.5.6 \u2192 8.5.8\n-
        setuptools 80.10.2 \u2192 82.0.1\n- sqlmodel 0.0.31 \u2192 0.0.37\n- sushy
        5.9.0 \u2192 5.10.0\n- tabulate 0.9.0 \u2192 0.10.0\n- tailwind-merge 3.4.0
        \u2192 3.5.0\n- tailwindcss 4.1.18 \u2192 4.2.1\n- uv 0.9.27 \u2192 0.10.8\n-
        uvicorn 0.40.0 \u2192 0.41.0\n\n</details>\n\n---\n\n### Configuration\n\n\U0001F4C5
        **Schedule**: Branch creation - At any time (no schedule defined), Automerge
        - At any time (no schedule defined).\n\n\U0001F6A6 **Automerge**: Disabled
        by config. Please merge this manually once you are satisfied.\n\n\u267B **Rebasing**:
        Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.\n\n\U0001F515
        **Ignore**: Close this PR and you won't be reminded about these updates again.\n\n---\n\n
        - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this
        box\n\n---\n\nThis PR was generated by [Mend Renovate](https://mend.io/renovate/).
        View the [repository job log](https://developer.mend.io/github/osism/release).\n<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My42Ni40IiwidXBkYXRlZEluVmVyIjoiNDMuNjYuNCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsicmVub3ZhdGUiXX0=-->\n"
      change_url: https://github.com/osism/release/pull/2415
      child_jobs: []
      commit_id: 3afceeeba2cee9a6aca23290d8261d77128f15ec
      event_id: 1eeaf4d0-1ff1-11f1-9faf-ec3a8e0eb4ed
      executor:
        hostname: 521e9411259a
        inventory_file: /var/lib/zuul/builds/28127148f65144cca5969e648ea623a4/ansible/inventory.yaml
        log_root: /var/lib/zuul/builds/28127148f65144cca5969e648ea623a4/work/logs
        result_data_file: /var/lib/zuul/builds/28127148f65144cca5969e648ea623a4/work/results.json
        src_root: /var/lib/zuul/builds/28127148f65144cca5969e648ea623a4/work/src
        work_root: /var/lib/zuul/builds/28127148f65144cca5969e648ea623a4/work
      include_vars: []
      items:
      - branch: main
        change: '2415'
        change_message: "chore(deps): update osism to v0.20260314.0\n\nThis PR contains
          the following updates:\n\n| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/)
          | [Confidence](https://docs.renovatebot.com/merge-confidence/) | Update
          |\n|---|---|---|---|---|\n| [osism](https://redirect.github.com/osism/python-osism)
          | `0.20260129.1` \u2192 `0.20260314.0` | ![age](https://developer.mend.io/api/mc/badges/age/pypi/osism/0.20260314.0?slim=true)
          | ![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/osism/0.20260129.1/0.20260314.0?slim=true)
          | minor |\n| [registry.osism.tech/osism/osism](https://quay.io/organization/osism)
          ([source](https://redirect.github.com/osism/python-osism)) | `0.20260129.1`
          \u2192 `0.20260314.0` | ![age](https://developer.mend.io/api/mc/badges/age/docker/registry.osism.tech%2fosism%2fosism/0.20260314.0?slim=true)
          | ![confidence](https://developer.mend.io/api/mc/badges/confidence/docker/registry.osism.tech%2fosism%2fosism/0.20260129.1/0.20260314.0?slim=true)
          | minor |\n\n---\n\n### Release Notes\n\n<details>\n<summary>osism/python-osism
          (osism)</summary>\n\n### [`v0.20260314.0`](https://redirect.github.com/osism/python-osism/compare/v0.20260313.0...v0.20260314.0)\n\n[Compare
          Source](https://redirect.github.com/osism/python-osism/compare/v0.20260313.0...v0.20260314.0)\n\n###
          [`v0.20260313.0`](https://redirect.github.com/osism/python-osism/blob/HEAD/CHANGELOG.md#v0202603130---2026-03-13)\n\n[Compare
          Source](https://redirect.github.com/osism/python-osism/compare/v0.20260312.0...v0.20260313.0)\n\n#####
          Added\n\n- LLDP neighbors report command (`osism report lldp`) with per-host
          neighbor discovery via SSH\n- BGP sessions report command (`osism report
          bgp`) showing peer state, uptime, and prefix counts\n\n##### Changed\n\n-
          Use minified inventory (`hosts-minified.yml`) for faster host and group
          resolution when full host variables are not needed\n- Downgrade metalbox
          subnet matching log from warning to debug for routed OOB addresses where
          the fallback path is expected\n- Mask secrets in `frr_parameters`, `netplan_parameters`,
          and inventory hostvar API responses in addition to `kernel_append_params`\n\n#####
          Fixed\n\n- Fix masking of `ironic_osism_*` secrets in `kernel_append_params`
          when vault decryption is unavailable by adding regex-based fallback masking
          by parameter name\n- Fix host resolution with minified inventory by extracting
          hosts from group listings when `_meta.hostvars` is empty\n- Fix LLDP report
          for single-interface hosts where `lldpctl` returns a dict instead of a list\n\n###
          [`v0.20260312.0`](https://redirect.github.com/osism/python-osism/blob/HEAD/CHANGELOG.md#v0202603120---2026-03-12)\n\n[Compare
          Source](https://redirect.github.com/osism/python-osism/compare/v0.20260129.1...v0.20260312.0)\n\n#####
          Added\n\n- Tag handling for L2VPN EVPN BGP neighbor address family, allowing
          enablement via `bgp-af-l2vpn-evpn` tag on local interfaces\n- Report memory
          command (`osism report memory`) to query physical memory and product UUID
          for all hosts in the Ansible inventory\n- Configurable operator user via
          `OSISM_OPERATOR_USER` environment variable, replacing hardcoded \"dragon\"
          username\n- Configurable FRR dummy interface via `OSISM_FRR_DUMMY_INTERFACE`
          environment variable\n- `validate scs` command for running SCS IaaS conformity
          tests against OpenStack clouds\n- Support for ironic\\_parameters from NetBox
          Config Context during node sync, with Ansible Vault decryption\n- `--dry-run`
          flag for `osism sync ironic` command to preview changes without modifying
          Ironic baremetal nodes, with secret masking and prettified JSON output\n-
          `osism vault check` command to verify the full vault password chain: keyfile
          existence, Fernet key validity, Redis storage, password decryption, and
          optional secrets.yml test\n- FRR parameter appending to kernel\\_append\\_params
          for supported IPA types during ironic node sync\n- Baremetal node detail
          page with ports listing and new API endpoint `GET /v1/baremetal/nodes/{node_uuid}/ports`\n-
          Device role from NetBox to baremetal nodes list and detail views\n- Redfish
          address from driver\\_info to baremetal node detail page\n- High-value Ironic
          fields (conductor, fault, maintenance\\_reason, description, owner, lessee,
          traits, allocation\\_uuid, provision\\_updated\\_at) to baremetal node views\n-
          IPv6 support (`osism-ipa-ipv6`) for yrzn001 IPA type kernel parameters\n-
          `osism-ipa-metalbox` kernel parameter for yrzn001 IPA type with subnet-based
          metalbox lookup\n- Fallback metalbox lookup via NETBOX\\_FILTER\\_CONDUCTOR\\_IRONIC
          filters when subnet matching fails\n- `--skip-kernel-param` option for `osism
          sync ironic` to exclude specific kernel append parameters by name\n- `--extra-kernel-param`
          option for `osism sync ironic` to add extra kernel append parameters as
          key=value pairs\n- Kernel append params, netplan parameters, and FRR parameters
          display in frontend node detail view with secret masking\n- Boot device
          set to cdrom before deploy, clean, and burn-in operations to ensure virtual
          media boot\n- Persistence of kernel\\_append\\_params in driver\\_info for
          automated cleaning after undeploy\n- Restoration of instance\\_info from
          extra before clean and burn-in commands\n- Ansible Vault decryption support
          for frr\\_parameters custom field\n- Power off nodes during Ironic sync
          to ensure a defined power state for all newly synced nodes\n- Primary IPv4/IPv6
          addresses in node detail view, lazy-loaded from NetBox\n- Node detail view
          lookup by name in addition to UUID, with selection list for duplicate names\n-
          Node properties display in the Parameters section of the detail view\n-
          Copy-to-clipboard buttons on node detail view fields\n- Metalbox `hosts_additional_entries`
          to the deploy playbook for baremetal deployments\n- New API endpoints for
          lazy-loading NetBox data (`GET /v1/baremetal/nodes/{node_name}/netbox`,
          `POST /v1/baremetal/nodes/netbox`)\n- `--netbox` CLI flag for `baremetal
          list` command to optionally include NetBox device roles\n\n##### Changed\n\n-
          Automatic node cleaning is now enabled per node after reaching available
          state during ironic sync\n- Generic recursive Jinja2 rendering for ironic\\_osism\\_\\*
          secrets in node attributes, replacing hard-coded per-field rendering of
          remote\\_board\\_\\* fields\n- Derive AS number from hostname for yrzn001
          IPA type instead of reading from frr\\_parameters\n- Extend secret masking
          to keys starting with ironic\\_osism\\_\\* and support string-level masking
          of embedded secret values\n- Sync flavors.yaml with osism/openstack-flavor-manager,
          adding SCS-4V-16-100s flavor and fixing hw\\_rng:allowed casing\n- Renamed
          IPA kernel parameters from `osism_as`/`osism_ipv4` to `osism-ipa-as`/`osism-ipa-ipv4`
          scheme\n- Prioritize `frr_local_as` from config context over hostname-derived
          AS number for yrzn001\n- Restrict cdrom boot device override to Supermicro
          nodes only during deploy, burn-in, and clean operations\n- Lazy-load NetBox
          data (device role, primary IPs) to eliminate N+1 HTTP requests on baremetal
          node listing\n- Simplify dashboard to show only Total Nodes and Active Nodes
          tiles with centered layout\n\n##### Fixed\n\n- Listing of SONiC devices
          by moving device retrieval to a conductor task where `NETBOX_FILTER_CONDUCTOR_SONIC`
          is available\n- Typo in netbox command output messages (\"comming\" \u2192
          \"coming\")\n- Missing f-string prefix for operator\\_user interpolation
          in check mount command\n- Wrong key name `kernel_append_parameters` instead
          of `kernel_append_params` in FRR parameter appending\n- Strip whitespace
          from decrypted secrets used as template variables in kernel\\_append\\_params\n-
          YAML line wrapping breaking long strings (e.g. SSH keys) in deployment playbooks
          by setting `width=float(\"inf\")`\n- Trailing whitespace in decrypted Vault
          values in frr\\_parameters\n- Remove `frr_parameters` and `netplan_parameters`
          from `local_context_data` defaults to prevent duplicate encrypted values
          in generated playbooks\n- Use correct task (`baremetal_node_set_power_state`)
          when switching off Ironic nodes during sync\n- Copy-to-clipboard fallback
          for non-HTTPS connections using `document.execCommand`\n\n##### Dependencies\n\n-
          [@&#8203;eslint/eslintrc](https://redirect.github.com/eslint/eslintrc) 3.3.3
          \u2192 3.3.4\n- [@&#8203;tailwindcss/postcss](https://redirect.github.com/tailwindcss/postcss)
          4.2.0 \u2192 4.2.1\n- [@&#8203;tanstack/react-query](https://redirect.github.com/tanstack/react-query)
          5.90.20 \u2192 5.90.21\n- [@&#8203;types/node](https://redirect.github.com/types/node)
          24.10.9 \u2192 24.12.0\n- [@&#8203;types/react](https://redirect.github.com/types/react)
          19.2.10 \u2192 19.2.14\n- autoprefixer 10.4.23 \u2192 10.4.27\n- axios 1.13.4
          \u2192 1.13.6\n- boto3 1.38.0 \u2192 1.42.63\n- cliff 4.13.1 \u2192 4.13.2\n-
          community.docker 5.0.5 \u2192 5.0.6\n- eslint 9 \u2192 10.0.3\n- fastapi
          0.128.0 \u2192 0.135.1\n- keystoneauth1 5.13.0 \u2192 5.13.1\n- lucide-react
          0.563.0 \u2192 0.577.0\n- netbox-manager 0.20260129.0 \u2192 0.20260211.0\n-
          openstack-flavor-manager 0.20260127.0 \u2192 0.20260227.0\n- openstack-image-manager
          0.20260128.0 \u2192 0.20260227.0\n- openstacksdk 4.9.0 \u2192 4.10.0\n-
          postcss 8.5.6 \u2192 8.5.8\n- setuptools 80.10.2 \u2192 82.0.1\n- sqlmodel
          0.0.31 \u2192 0.0.37\n- sushy 5.9.0 \u2192 5.10.0\n- tabulate 0.9.0 \u2192
          0.10.0\n- tailwind-merge 3.4.0 \u2192 3.5.0\n- tailwindcss 4.1.18 \u2192
          4.2.1\n- uv 0.9.27 \u2192 0.10.8\n- uvicorn 0.40.0 \u2192 0.41.0\n\n</details>\n\n---\n\n###
          Configuration\n\n\U0001F4C5 **Schedule**: Branch creation - At any time
          (no schedule defined), Automerge - At any time (no schedule defined).\n\n\U0001F6A6
          **Automerge**: Disabled by config. Please merge this manually once you are
          satisfied.\n\n\u267B **Rebasing**: Whenever PR becomes conflicted, or you
          tick the rebase/retry checkbox.\n\n\U0001F515 **Ignore**: Close this PR
          and you won't be reminded about these updates again.\n\n---\n\n - [ ] <!--
          rebase-check -->If you want to rebase/retry this PR, check this box\n\n---\n\nThis
          PR was generated by [Mend Renovate](https://mend.io/renovate/). View the
          [repository job log](https://developer.mend.io/github/osism/release).\n<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My42Ni40IiwidXBkYXRlZEluVmVyIjoiNDMuNjYuNCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsicmVub3ZhdGUiXX0=-->\n"
        change_url: https://github.com/osism/release/pull/2415
        commit_id: 3afceeeba2cee9a6aca23290d8261d77128f15ec
        patchset: 3afceeeba2cee9a6aca23290d8261d77128f15ec
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/release
          name: osism/release
          short_name: release
          src_dir: src/github.com/osism/release
        topic: null
      job: flake8
      jobtags: []
      max_attempts: 3
      message: Y2hvcmUoZGVwcyk6IHVwZGF0ZSBvc2lzbSB0byB2MC4yMDI2MDMxNC4wCgpUaGlzIFBSIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgdXBkYXRlczoKCnwgUGFja2FnZSB8IENoYW5nZSB8IFtBZ2VdKGh0dHBzOi8vZG9jcy5yZW5vdmF0ZWJvdC5jb20vbWVyZ2UtY29uZmlkZW5jZS8pIHwgW0NvbmZpZGVuY2VdKGh0dHBzOi8vZG9jcy5yZW5vdmF0ZWJvdC5jb20vbWVyZ2UtY29uZmlkZW5jZS8pIHwgVXBkYXRlIHwKfC0tLXwtLS18LS0tfC0tLXwtLS18CnwgW29zaXNtXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vb3Npc20vcHl0aG9uLW9zaXNtKSB8IGAwLjIwMjYwMTI5LjFgIOKGkiBgMC4yMDI2MDMxNC4wYCB8ICFbYWdlXShodHRwczovL2RldmVsb3Blci5tZW5kLmlvL2FwaS9tYy9iYWRnZXMvYWdlL3B5cGkvb3Npc20vMC4yMDI2MDMxNC4wP3NsaW09dHJ1ZSkgfCAhW2NvbmZpZGVuY2VdKGh0dHBzOi8vZGV2ZWxvcGVyLm1lbmQuaW8vYXBpL21jL2JhZGdlcy9jb25maWRlbmNlL3B5cGkvb3Npc20vMC4yMDI2MDEyOS4xLzAuMjAyNjAzMTQuMD9zbGltPXRydWUpIHwgbWlub3IgfAp8IFtyZWdpc3RyeS5vc2lzbS50ZWNoL29zaXNtL29zaXNtXShodHRwczovL3F1YXkuaW8vb3JnYW5pemF0aW9uL29zaXNtKSAoW3NvdXJjZV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL29zaXNtL3B5dGhvbi1vc2lzbSkpIHwgYDAuMjAyNjAxMjkuMWAg4oaSIGAwLjIwMjYwMzE0LjBgIHwgIVthZ2VdKGh0dHBzOi8vZGV2ZWxvcGVyLm1lbmQuaW8vYXBpL21jL2JhZGdlcy9hZ2UvZG9ja2VyL3JlZ2lzdHJ5Lm9zaXNtLnRlY2glMmZvc2lzbSUyZm9zaXNtLzAuMjAyNjAzMTQuMD9zbGltPXRydWUpIHwgIVtjb25maWRlbmNlXShodHRwczovL2RldmVsb3Blci5tZW5kLmlvL2FwaS9tYy9iYWRnZXMvY29uZmlkZW5jZS9kb2NrZXIvcmVnaXN0cnkub3Npc20udGVjaCUyZm9zaXNtJTJmb3Npc20vMC4yMDI2MDEyOS4xLzAuMjAyNjAzMTQuMD9zbGltPXRydWUpIHwgbWlub3IgfAoKLS0tCgojIyMgUmVsZWFzZSBOb3RlcwoKPGRldGFpbHM+CjxzdW1tYXJ5Pm9zaXNtL3B5dGhvbi1vc2lzbSAob3Npc20pPC9zdW1tYXJ5PgoKIyMjIFtgdjAuMjAyNjAzMTQuMGBdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9vc2lzbS9weXRob24tb3Npc20vY29tcGFyZS92MC4yMDI2MDMxMy4wLi4udjAuMjAyNjAzMTQuMCkKCltDb21wYXJlIFNvdXJjZV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL29zaXNtL3B5dGhvbi1vc2lzbS9jb21wYXJlL3YwLjIwMjYwMzEzLjAuLi52MC4yMDI2MDMxNC4wKQoKIyMjIFtgdjAuMjAyNjAzMTMuMGBdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9vc2lzbS9weXRob24tb3Npc20vYmxvYi9IRUFEL0NIQU5HRUxPRy5tZCN2MDIwMjYwMzEzMC0tLTIwMjYtMDMtMTMpCgpbQ29tcGFyZSBTb3VyY2VdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9vc2lzbS9weXRob24tb3Npc20vY29tcGFyZS92MC4yMDI2MDMxMi4wLi4udjAuMjAyNjAzMTMuMCkKCiMjIyMjIEFkZGVkCgotIExMRFAgbmVpZ2hib3JzIHJlcG9ydCBjb21tYW5kIChgb3Npc20gcmVwb3J0IGxsZHBgKSB3aXRoIHBlci1ob3N0IG5laWdoYm9yIGRpc2NvdmVyeSB2aWEgU1NICi0gQkdQIHNlc3Npb25zIHJlcG9ydCBjb21tYW5kIChgb3Npc20gcmVwb3J0IGJncGApIHNob3dpbmcgcGVlciBzdGF0ZSwgdXB0aW1lLCBhbmQgcHJlZml4IGNvdW50cwoKIyMjIyMgQ2hhbmdlZAoKLSBVc2UgbWluaWZpZWQgaW52ZW50b3J5IChgaG9zdHMtbWluaWZpZWQueW1sYCkgZm9yIGZhc3RlciBob3N0IGFuZCBncm91cCByZXNvbHV0aW9uIHdoZW4gZnVsbCBob3N0IHZhcmlhYmxlcyBhcmUgbm90IG5lZWRlZAotIERvd25ncmFkZSBtZXRhbGJveCBzdWJuZXQgbWF0Y2hpbmcgbG9nIGZyb20gd2FybmluZyB0byBkZWJ1ZyBmb3Igcm91dGVkIE9PQiBhZGRyZXNzZXMgd2hlcmUgdGhlIGZhbGxiYWNrIHBhdGggaXMgZXhwZWN0ZWQKLSBNYXNrIHNlY3JldHMgaW4gYGZycl9wYXJhbWV0ZXJzYCwgYG5ldHBsYW5fcGFyYW1ldGVyc2AsIGFuZCBpbnZlbnRvcnkgaG9zdHZhciBBUEkgcmVzcG9uc2VzIGluIGFkZGl0aW9uIHRvIGBrZXJuZWxfYXBwZW5kX3BhcmFtc2AKCiMjIyMjIEZpeGVkCgotIEZpeCBtYXNraW5nIG9mIGBpcm9uaWNfb3Npc21fKmAgc2VjcmV0cyBpbiBga2VybmVsX2FwcGVuZF9wYXJhbXNgIHdoZW4gdmF1bHQgZGVjcnlwdGlvbiBpcyB1bmF2YWlsYWJsZSBieSBhZGRpbmcgcmVnZXgtYmFzZWQgZmFsbGJhY2sgbWFza2luZyBieSBwYXJhbWV0ZXIgbmFtZQotIEZpeCBob3N0IHJlc29sdXRpb24gd2l0aCBtaW5pZmllZCBpbnZlbnRvcnkgYnkgZXh0cmFjdGluZyBob3N0cyBmcm9tIGdyb3VwIGxpc3RpbmdzIHdoZW4gYF9tZXRhLmhvc3R2YXJzYCBpcyBlbXB0eQotIEZpeCBMTERQIHJlcG9ydCBmb3Igc2luZ2xlLWludGVyZmFjZSBob3N0cyB3aGVyZSBgbGxkcGN0bGAgcmV0dXJucyBhIGRpY3QgaW5zdGVhZCBvZiBhIGxpc3QKCiMjIyBbYHYwLjIwMjYwMzEyLjBgXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vb3Npc20vcHl0aG9uLW9zaXNtL2Jsb2IvSEVBRC9DSEFOR0VMT0cubWQjdjAyMDI2MDMxMjAtLS0yMDI2LTAzLTEyKQoKW0NvbXBhcmUgU291cmNlXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vb3Npc20vcHl0aG9uLW9zaXNtL2NvbXBhcmUvdjAuMjAyNjAxMjkuMS4uLnYwLjIwMjYwMzEyLjApCgojIyMjIyBBZGRlZAoKLSBUYWcgaGFuZGxpbmcgZm9yIEwyVlBOIEVWUE4gQkdQIG5laWdoYm9yIGFkZHJlc3MgZmFtaWx5LCBhbGxvd2luZyBlbmFibGVtZW50IHZpYSBgYmdwLWFmLWwydnBuLWV2cG5gIHRhZyBvbiBsb2NhbCBpbnRlcmZhY2VzCi0gUmVwb3J0IG1lbW9yeSBjb21tYW5kIChgb3Npc20gcmVwb3J0IG1lbW9yeWApIHRvIHF1ZXJ5IHBoeXNpY2FsIG1lbW9yeSBhbmQgcHJvZHVjdCBVVUlEIGZvciBhbGwgaG9zdHMgaW4gdGhlIEFuc2libGUgaW52ZW50b3J5Ci0gQ29uZmlndXJhYmxlIG9wZXJhdG9yIHVzZXIgdmlhIGBPU0lTTV9PUEVSQVRPUl9VU0VSYCBlbnZpcm9ubWVudCB2YXJpYWJsZSwgcmVwbGFjaW5nIGhhcmRjb2RlZCAiZHJhZ29uIiB1c2VybmFtZQotIENvbmZpZ3VyYWJsZSBGUlIgZHVtbXkgaW50ZXJmYWNlIHZpYSBgT1NJU01fRlJSX0RVTU1ZX0lOVEVSRkFDRWAgZW52aXJvbm1lbnQgdmFyaWFibGUKLSBgdmFsaWRhdGUgc2NzYCBjb21tYW5kIGZvciBydW5uaW5nIFNDUyBJYWFTIGNvbmZvcm1pdHkgdGVzdHMgYWdhaW5zdCBPcGVuU3RhY2sgY2xvdWRzCi0gU3VwcG9ydCBmb3IgaXJvbmljXF9wYXJhbWV0ZXJzIGZyb20gTmV0Qm94IENvbmZpZyBDb250ZXh0IGR1cmluZyBub2RlIHN5bmMsIHdpdGggQW5zaWJsZSBWYXVsdCBkZWNyeXB0aW9uCi0gYC0tZHJ5LXJ1bmAgZmxhZyBmb3IgYG9zaXNtIHN5bmMgaXJvbmljYCBjb21tYW5kIHRvIHByZXZpZXcgY2hhbmdlcyB3aXRob3V0IG1vZGlmeWluZyBJcm9uaWMgYmFyZW1ldGFsIG5vZGVzLCB3aXRoIHNlY3JldCBtYXNraW5nIGFuZCBwcmV0dGlmaWVkIEpTT04gb3V0cHV0Ci0gYG9zaXNtIHZhdWx0IGNoZWNrYCBjb21tYW5kIHRvIHZlcmlmeSB0aGUgZnVsbCB2YXVsdCBwYXNzd29yZCBjaGFpbjoga2V5ZmlsZSBleGlzdGVuY2UsIEZlcm5ldCBrZXkgdmFsaWRpdHksIFJlZGlzIHN0b3JhZ2UsIHBhc3N3b3JkIGRlY3J5cHRpb24sIGFuZCBvcHRpb25hbCBzZWNyZXRzLnltbCB0ZXN0Ci0gRlJSIHBhcmFtZXRlciBhcHBlbmRpbmcgdG8ga2VybmVsXF9hcHBlbmRcX3BhcmFtcyBmb3Igc3VwcG9ydGVkIElQQSB0eXBlcyBkdXJpbmcgaXJvbmljIG5vZGUgc3luYwotIEJhcmVtZXRhbCBub2RlIGRldGFpbCBwYWdlIHdpdGggcG9ydHMgbGlzdGluZyBhbmQgbmV3IEFQSSBlbmRwb2ludCBgR0VUIC92MS9iYXJlbWV0YWwvbm9kZXMve25vZGVfdXVpZH0vcG9ydHNgCi0gRGV2aWNlIHJvbGUgZnJvbSBOZXRCb3ggdG8gYmFyZW1ldGFsIG5vZGVzIGxpc3QgYW5kIGRldGFpbCB2aWV3cwotIFJlZGZpc2ggYWRkcmVzcyBmcm9tIGRyaXZlclxfaW5mbyB0byBiYXJlbWV0YWwgbm9kZSBkZXRhaWwgcGFnZQotIEhpZ2gtdmFsdWUgSXJvbmljIGZpZWxkcyAoY29uZHVjdG9yLCBmYXVsdCwgbWFpbnRlbmFuY2VcX3JlYXNvbiwgZGVzY3JpcHRpb24sIG93bmVyLCBsZXNzZWUsIHRyYWl0cywgYWxsb2NhdGlvblxfdXVpZCwgcHJvdmlzaW9uXF91cGRhdGVkXF9hdCkgdG8gYmFyZW1ldGFsIG5vZGUgdmlld3MKLSBJUHY2IHN1cHBvcnQgKGBvc2lzbS1pcGEtaXB2NmApIGZvciB5cnpuMDAxIElQQSB0eXBlIGtlcm5lbCBwYXJhbWV0ZXJzCi0gYG9zaXNtLWlwYS1tZXRhbGJveGAga2VybmVsIHBhcmFtZXRlciBmb3IgeXJ6bjAwMSBJUEEgdHlwZSB3aXRoIHN1Ym5ldC1iYXNlZCBtZXRhbGJveCBsb29rdXAKLSBGYWxsYmFjayBtZXRhbGJveCBsb29rdXAgdmlhIE5FVEJPWFxfRklMVEVSXF9DT05EVUNUT1JcX0lST05JQyBmaWx0ZXJzIHdoZW4gc3VibmV0IG1hdGNoaW5nIGZhaWxzCi0gYC0tc2tpcC1rZXJuZWwtcGFyYW1gIG9wdGlvbiBmb3IgYG9zaXNtIHN5bmMgaXJvbmljYCB0byBleGNsdWRlIHNwZWNpZmljIGtlcm5lbCBhcHBlbmQgcGFyYW1ldGVycyBieSBuYW1lCi0gYC0tZXh0cmEta2VybmVsLXBhcmFtYCBvcHRpb24gZm9yIGBvc2lzbSBzeW5jIGlyb25pY2AgdG8gYWRkIGV4dHJhIGtlcm5lbCBhcHBlbmQgcGFyYW1ldGVycyBhcyBrZXk9dmFsdWUgcGFpcnMKLSBLZXJuZWwgYXBwZW5kIHBhcmFtcywgbmV0cGxhbiBwYXJhbWV0ZXJzLCBhbmQgRlJSIHBhcmFtZXRlcnMgZGlzcGxheSBpbiBmcm9udGVuZCBub2RlIGRldGFpbCB2aWV3IHdpdGggc2VjcmV0IG1hc2tpbmcKLSBCb290IGRldmljZSBzZXQgdG8gY2Ryb20gYmVmb3JlIGRlcGxveSwgY2xlYW4sIGFuZCBidXJuLWluIG9wZXJhdGlvbnMgdG8gZW5zdXJlIHZpcnR1YWwgbWVkaWEgYm9vdAotIFBlcnNpc3RlbmNlIG9mIGtlcm5lbFxfYXBwZW5kXF9wYXJhbXMgaW4gZHJpdmVyXF9pbmZvIGZvciBhdXRvbWF0ZWQgY2xlYW5pbmcgYWZ0ZXIgdW5kZXBsb3kKLSBSZXN0b3JhdGlvbiBvZiBpbnN0YW5jZVxfaW5mbyBmcm9tIGV4dHJhIGJlZm9yZSBjbGVhbiBhbmQgYnVybi1pbiBjb21tYW5kcwotIEFuc2libGUgVmF1bHQgZGVjcnlwdGlvbiBzdXBwb3J0IGZvciBmcnJcX3BhcmFtZXRlcnMgY3VzdG9tIGZpZWxkCi0gUG93ZXIgb2ZmIG5vZGVzIGR1cmluZyBJcm9uaWMgc3luYyB0byBlbnN1cmUgYSBkZWZpbmVkIHBvd2VyIHN0YXRlIGZvciBhbGwgbmV3bHkgc3luY2VkIG5vZGVzCi0gUHJpbWFyeSBJUHY0L0lQdjYgYWRkcmVzc2VzIGluIG5vZGUgZGV0YWlsIHZpZXcsIGxhenktbG9hZGVkIGZyb20gTmV0Qm94Ci0gTm9kZSBkZXRhaWwgdmlldyBsb29rdXAgYnkgbmFtZSBpbiBhZGRpdGlvbiB0byBVVUlELCB3aXRoIHNlbGVjdGlvbiBsaXN0IGZvciBkdXBsaWNhdGUgbmFtZXMKLSBOb2RlIHByb3BlcnRpZXMgZGlzcGxheSBpbiB0aGUgUGFyYW1ldGVycyBzZWN0aW9uIG9mIHRoZSBkZXRhaWwgdmlldwotIENvcHktdG8tY2xpcGJvYXJkIGJ1dHRvbnMgb24gbm9kZSBkZXRhaWwgdmlldyBmaWVsZHMKLSBNZXRhbGJveCBgaG9zdHNfYWRkaXRpb25hbF9lbnRyaWVzYCB0byB0aGUgZGVwbG95IHBsYXlib29rIGZvciBiYXJlbWV0YWwgZGVwbG95bWVudHMKLSBOZXcgQVBJIGVuZHBvaW50cyBmb3IgbGF6eS1sb2FkaW5nIE5ldEJveCBkYXRhIChgR0VUIC92MS9iYXJlbWV0YWwvbm9kZXMve25vZGVfbmFtZX0vbmV0Ym94YCwgYFBPU1QgL3YxL2JhcmVtZXRhbC9ub2Rlcy9uZXRib3hgKQotIGAtLW5ldGJveGAgQ0xJIGZsYWcgZm9yIGBiYXJlbWV0YWwgbGlzdGAgY29tbWFuZCB0byBvcHRpb25hbGx5IGluY2x1ZGUgTmV0Qm94IGRldmljZSByb2xlcwoKIyMjIyMgQ2hhbmdlZAoKLSBBdXRvbWF0aWMgbm9kZSBjbGVhbmluZyBpcyBub3cgZW5hYmxlZCBwZXIgbm9kZSBhZnRlciByZWFjaGluZyBhdmFpbGFibGUgc3RhdGUgZHVyaW5nIGlyb25pYyBzeW5jCi0gR2VuZXJpYyByZWN1cnNpdmUgSmluamEyIHJlbmRlcmluZyBmb3IgaXJvbmljXF9vc2lzbVxfXCogc2VjcmV0cyBpbiBub2RlIGF0dHJpYnV0ZXMsIHJlcGxhY2luZyBoYXJkLWNvZGVkIHBlci1maWVsZCByZW5kZXJpbmcgb2YgcmVtb3RlXF9ib2FyZFxfXCogZmllbGRzCi0gRGVyaXZlIEFTIG51bWJlciBmcm9tIGhvc3RuYW1lIGZvciB5cnpuMDAxIElQQSB0eXBlIGluc3RlYWQgb2YgcmVhZGluZyBmcm9tIGZyclxfcGFyYW1ldGVycwotIEV4dGVuZCBzZWNyZXQgbWFza2luZyB0byBrZXlzIHN0YXJ0aW5nIHdpdGggaXJvbmljXF9vc2lzbVxfXCogYW5kIHN1cHBvcnQgc3RyaW5nLWxldmVsIG1hc2tpbmcgb2YgZW1iZWRkZWQgc2VjcmV0IHZhbHVlcwotIFN5bmMgZmxhdm9ycy55YW1sIHdpdGggb3Npc20vb3BlbnN0YWNrLWZsYXZvci1tYW5hZ2VyLCBhZGRpbmcgU0NTLTRWLTE2LTEwMHMgZmxhdm9yIGFuZCBmaXhpbmcgaHdcX3JuZzphbGxvd2VkIGNhc2luZwotIFJlbmFtZWQgSVBBIGtlcm5lbCBwYXJhbWV0ZXJzIGZyb20gYG9zaXNtX2FzYC9gb3Npc21faXB2NGAgdG8gYG9zaXNtLWlwYS1hc2AvYG9zaXNtLWlwYS1pcHY0YCBzY2hlbWUKLSBQcmlvcml0aXplIGBmcnJfbG9jYWxfYXNgIGZyb20gY29uZmlnIGNvbnRleHQgb3ZlciBob3N0bmFtZS1kZXJpdmVkIEFTIG51bWJlciBmb3IgeXJ6bjAwMQotIFJlc3RyaWN0IGNkcm9tIGJvb3QgZGV2aWNlIG92ZXJyaWRlIHRvIFN1cGVybWljcm8gbm9kZXMgb25seSBkdXJpbmcgZGVwbG95LCBidXJuLWluLCBhbmQgY2xlYW4gb3BlcmF0aW9ucwotIExhenktbG9hZCBOZXRCb3ggZGF0YSAoZGV2aWNlIHJvbGUsIHByaW1hcnkgSVBzKSB0byBlbGltaW5hdGUgTisxIEhUVFAgcmVxdWVzdHMgb24gYmFyZW1ldGFsIG5vZGUgbGlzdGluZwotIFNpbXBsaWZ5IGRhc2hib2FyZCB0byBzaG93IG9ubHkgVG90YWwgTm9kZXMgYW5kIEFjdGl2ZSBOb2RlcyB0aWxlcyB3aXRoIGNlbnRlcmVkIGxheW91dAoKIyMjIyMgRml4ZWQKCi0gTGlzdGluZyBvZiBTT05pQyBkZXZpY2VzIGJ5IG1vdmluZyBkZXZpY2UgcmV0cmlldmFsIHRvIGEgY29uZHVjdG9yIHRhc2sgd2hlcmUgYE5FVEJPWF9GSUxURVJfQ09ORFVDVE9SX1NPTklDYCBpcyBhdmFpbGFibGUKLSBUeXBvIGluIG5ldGJveCBjb21tYW5kIG91dHB1dCBtZXNzYWdlcyAoImNvbW1pbmciIOKGkiAiY29taW5nIikKLSBNaXNzaW5nIGYtc3RyaW5nIHByZWZpeCBmb3Igb3BlcmF0b3JcX3VzZXIgaW50ZXJwb2xhdGlvbiBpbiBjaGVjayBtb3VudCBjb21tYW5kCi0gV3Jvbmcga2V5IG5hbWUgYGtlcm5lbF9hcHBlbmRfcGFyYW1ldGVyc2AgaW5zdGVhZCBvZiBga2VybmVsX2FwcGVuZF9wYXJhbXNgIGluIEZSUiBwYXJhbWV0ZXIgYXBwZW5kaW5nCi0gU3RyaXAgd2hpdGVzcGFjZSBmcm9tIGRlY3J5cHRlZCBzZWNyZXRzIHVzZWQgYXMgdGVtcGxhdGUgdmFyaWFibGVzIGluIGtlcm5lbFxfYXBwZW5kXF9wYXJhbXMKLSBZQU1MIGxpbmUgd3JhcHBpbmcgYnJlYWtpbmcgbG9uZyBzdHJpbmdzIChlLmcuIFNTSCBrZXlzKSBpbiBkZXBsb3ltZW50IHBsYXlib29rcyBieSBzZXR0aW5nIGB3aWR0aD1mbG9hdCgiaW5mIilgCi0gVHJhaWxpbmcgd2hpdGVzcGFjZSBpbiBkZWNyeXB0ZWQgVmF1bHQgdmFsdWVzIGluIGZyclxfcGFyYW1ldGVycwotIFJlbW92ZSBgZnJyX3BhcmFtZXRlcnNgIGFuZCBgbmV0cGxhbl9wYXJhbWV0ZXJzYCBmcm9tIGBsb2NhbF9jb250ZXh0X2RhdGFgIGRlZmF1bHRzIHRvIHByZXZlbnQgZHVwbGljYXRlIGVuY3J5cHRlZCB2YWx1ZXMgaW4gZ2VuZXJhdGVkIHBsYXlib29rcwotIFVzZSBjb3JyZWN0IHRhc2sgKGBiYXJlbWV0YWxfbm9kZV9zZXRfcG93ZXJfc3RhdGVgKSB3aGVuIHN3aXRjaGluZyBvZmYgSXJvbmljIG5vZGVzIGR1cmluZyBzeW5jCi0gQ29weS10by1jbGlwYm9hcmQgZmFsbGJhY2sgZm9yIG5vbi1IVFRQUyBjb25uZWN0aW9ucyB1c2luZyBgZG9jdW1lbnQuZXhlY0NvbW1hbmRgCgojIyMjIyBEZXBlbmRlbmNpZXMKCi0gW0AmIzgyMDM7ZXNsaW50L2VzbGludHJjXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vZXNsaW50L2VzbGludHJjKSAzLjMuMyDihpIgMy4zLjQKLSBbQCYjODIwMzt0YWlsd2luZGNzcy9wb3N0Y3NzXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vdGFpbHdpbmRjc3MvcG9zdGNzcykgNC4yLjAg4oaSIDQuMi4xCi0gW0AmIzgyMDM7dGFuc3RhY2svcmVhY3QtcXVlcnldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS90YW5zdGFjay9yZWFjdC1xdWVyeSkgNS45MC4yMCDihpIgNS45MC4yMQotIFtAJiM4MjAzO3R5cGVzL25vZGVdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS90eXBlcy9ub2RlKSAyNC4xMC45IOKGkiAyNC4xMi4wCi0gW0AmIzgyMDM7dHlwZXMvcmVhY3RdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS90eXBlcy9yZWFjdCkgMTkuMi4xMCDihpIgMTkuMi4xNAotIGF1dG9wcmVmaXhlciAxMC40LjIzIOKGkiAxMC40LjI3Ci0gYXhpb3MgMS4xMy40IOKGkiAxLjEzLjYKLSBib3RvMyAxLjM4LjAg4oaSIDEuNDIuNjMKLSBjbGlmZiA0LjEzLjEg4oaSIDQuMTMuMgotIGNvbW11bml0eS5kb2NrZXIgNS4wLjUg4oaSIDUuMC42Ci0gZXNsaW50IDkg4oaSIDEwLjAuMwotIGZhc3RhcGkgMC4xMjguMCDihpIgMC4xMzUuMQotIGtleXN0b25lYXV0aDEgNS4xMy4wIOKGkiA1LjEzLjEKLSBsdWNpZGUtcmVhY3QgMC41NjMuMCDihpIgMC41NzcuMAotIG5ldGJveC1tYW5hZ2VyIDAuMjAyNjAxMjkuMCDihpIgMC4yMDI2MDIxMS4wCi0gb3BlbnN0YWNrLWZsYXZvci1tYW5hZ2VyIDAuMjAyNjAxMjcuMCDihpIgMC4yMDI2MDIyNy4wCi0gb3BlbnN0YWNrLWltYWdlLW1hbmFnZXIgMC4yMDI2MDEyOC4wIOKGkiAwLjIwMjYwMjI3LjAKLSBvcGVuc3RhY2tzZGsgNC45LjAg4oaSIDQuMTAuMAotIHBvc3Rjc3MgOC41LjYg4oaSIDguNS44Ci0gc2V0dXB0b29scyA4MC4xMC4yIOKGkiA4Mi4wLjEKLSBzcWxtb2RlbCAwLjAuMzEg4oaSIDAuMC4zNwotIHN1c2h5IDUuOS4wIOKGkiA1LjEwLjAKLSB0YWJ1bGF0ZSAwLjkuMCDihpIgMC4xMC4wCi0gdGFpbHdpbmQtbWVyZ2UgMy40LjAg4oaSIDMuNS4wCi0gdGFpbHdpbmRjc3MgNC4xLjE4IOKGkiA0LjIuMQotIHV2IDAuOS4yNyDihpIgMC4xMC44Ci0gdXZpY29ybiAwLjQwLjAg4oaSIDAuNDEuMAoKPC9kZXRhaWxzPgoKLS0tCgojIyMgQ29uZmlndXJhdGlvbgoK8J+ThSAqKlNjaGVkdWxlKio6IEJyYW5jaCBjcmVhdGlvbiAtIEF0IGFueSB0aW1lIChubyBzY2hlZHVsZSBkZWZpbmVkKSwgQXV0b21lcmdlIC0gQXQgYW55IHRpbWUgKG5vIHNjaGVkdWxlIGRlZmluZWQpLgoK8J+apiAqKkF1dG9tZXJnZSoqOiBEaXNhYmxlZCBieSBjb25maWcuIFBsZWFzZSBtZXJnZSB0aGlzIG1hbnVhbGx5IG9uY2UgeW91IGFyZSBzYXRpc2ZpZWQuCgrimbsgKipSZWJhc2luZyoqOiBXaGVuZXZlciBQUiBiZWNvbWVzIGNvbmZsaWN0ZWQsIG9yIHlvdSB0aWNrIHRoZSByZWJhc2UvcmV0cnkgY2hlY2tib3guCgrwn5SVICoqSWdub3JlKio6IENsb3NlIHRoaXMgUFIgYW5kIHlvdSB3b24ndCBiZSByZW1pbmRlZCBhYm91dCB0aGVzZSB1cGRhdGVzIGFnYWluLgoKLS0tCgogLSBbIF0gPCEtLSByZWJhc2UtY2hlY2sgLS0+SWYgeW91IHdhbnQgdG8gcmViYXNlL3JldHJ5IHRoaXMgUFIsIGNoZWNrIHRoaXMgYm94CgotLS0KClRoaXMgUFIgd2FzIGdlbmVyYXRlZCBieSBbTWVuZCBSZW5vdmF0ZV0oaHR0cHM6Ly9tZW5kLmlvL3Jlbm92YXRlLykuIFZpZXcgdGhlIFtyZXBvc2l0b3J5IGpvYiBsb2ddKGh0dHBzOi8vZGV2ZWxvcGVyLm1lbmQuaW8vZ2l0aHViL29zaXNtL3JlbGVhc2UpLgo8IS0tcmVub3ZhdGUtZGVidWc6ZXlKamNtVmhkR1ZrU1c1V1pYSWlPaUkwTXk0Mk5pNDBJaXdpZFhCa1lYUmxaRWx1Vm1WeUlqb2lORE11TmpZdU5DSXNJblJoY21kbGRFSnlZVzVqYUNJNkltMWhhVzRpTENKc1lXSmxiSE1pT2xzaWNtVnViM1poZEdVaVhYMD0tLT4K
      patchset: 3afceeeba2cee9a6aca23290d8261d77128f15ec
      pipeline: check
      playbook_context:
        playbook_projects:
          trusted/project_0/github.com/osism/zuul-config:
            canonical_name: github.com/osism/zuul-config
            checkout: main
            commit: 4f450aa36c28b035ce97359a888edbd7599eaf31
          trusted/project_1/github.com/osism/openinfra-zuul-jobs:
            canonical_name: github.com/osism/openinfra-zuul-jobs
            checkout: master
            commit: 397240f42127868e42e86e6aeb120c2cb092d117
          untrusted/project_0/github.com/osism/zuul-jobs:
            canonical_name: github.com/osism/zuul-jobs
            checkout: main
            commit: a01eed06dffe368c1d01819193bfadccb137414d
          untrusted/project_1/github.com/osism/zuul-config:
            canonical_name: github.com/osism/zuul-config
            checkout: main
            commit: 4f450aa36c28b035ce97359a888edbd7599eaf31
          untrusted/project_2/github.com/osism/openinfra-zuul-jobs:
            canonical_name: github.com/osism/openinfra-zuul-jobs
            checkout: master
            commit: 397240f42127868e42e86e6aeb120c2cb092d117
        playbooks:
        - path: untrusted/project_0/github.com/osism/zuul-jobs/playbooks/flake8/run.yaml
          roles:
          - checkout: main
            checkout_description: playbook branch
            link_name: ansible/playbook_0/role_0/zuul-jobs
            link_target: untrusted/project_0/github.com/osism/zuul-jobs
            role_path: ansible/playbook_0/role_0/zuul-jobs/roles
          - checkout: main
            checkout_description: zuul branch
            link_name: ansible/playbook_0/role_1/zuul-config
            link_target: untrusted/project_1/github.com/osism/zuul-config
            role_path: ansible/playbook_0/role_1/zuul-config/roles
          - checkout: master
            checkout_description: project default branch
            link_name: ansible/playbook_0/role_2/openinfra-zuul-jobs
            link_target: untrusted/project_2/github.com/osism/openinfra-zuul-jobs
            role_path: ansible/playbook_0/role_2/openinfra-zuul-jobs/roles
      post_review: false
      post_timeout: null
      pre_timeout: null
      project:
        canonical_hostname: github.com
        canonical_name: github.com/osism/release
        name: osism/release
        short_name: release
        src_dir: src/github.com/osism/release
      projects:
        github.com/osism/release:
          canonical_hostname: github.com
          canonical_name: github.com/osism/release
          checkout: main
          checkout_description: zuul branch
          commit: b63e0f3827fc5db48c06a4d0aa5a92beba393d08
          name: osism/release
          required: false
          short_name: release
          src_dir: src/github.com/osism/release
      ref: refs/pull/2415/head
      resources: {}
      tenant: osism
      timeout: 1800
      topic: null
      voting: true
