-
Notifications
You must be signed in to change notification settings - Fork 119
[talos] Add lldpd extension to image #1351
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
Note Other AI code review bot(s) detectedCodeRabbit has detected other AI code review bot(s) in this pull request and will avoid duplicating their findings in the review comments. This may lead to a less comprehensive review. WalkthroughAdds LLDPD as a system extension image and as a kernel module in Talos profiles and the e2e cluster preparation. Also converts many installer/profile image references from tag-based to digest-pinned imageRefs and switches gen-profiles to produce _IMAGE variables driven by image-digests. Changes
Sequence Diagram(s)sequenceDiagram
autonumber
actor Dev as Developer
participant Gen as gen-profiles.sh
participant Registry as Image Registry (ghcr.io)
participant Profiles as Talos Profiles (YAML)
participant E2E as e2e-prepare-cluster.bats
participant Cluster as Talos Cluster
Dev->>Gen: run profile generation
Gen->>Registry: fetch image digests (crane) → image-digests
Registry-->>Gen: digest pins
Gen->>Profiles: emit _IMAGE vars and systemExtensions (incl. LLDPD_IMAGE)
Dev->>E2E: run e2e prepare
E2E->>Cluster: apply cluster config patch (machine.kernel.modules includes lldpd)
Cluster->>Cluster: kernel modules list includes lldpd (load on boot)
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes Possibly related PRs
Suggested reviewers
Poem
Tip 🔌 Remote MCP (Model Context Protocol) integration is now available!Pro plan users can now connect to remote MCP servers from the Integrations page. Connect with popular remote MCPs such as Notion and Linear to add more context to your reviews and chats. ✨ Finishing Touches
🧪 Generate unit tests
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Create a ticket on our support page for assistance with any issues or questions. CodeRabbit Commands (Invoked using PR/Issue comments)Type Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Summary of Changes
Hello @lllamnyp, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!
This pull request integrates the lldpd extension into the Talos Linux image. This enhancement allows Talos systems to utilize the Link Layer Discovery Protocol, improving network discoverability and management capabilities within the environment.
Highlights
- Enable lldpd extension: The lldpd extension has been added to the list of machine extensions in the e2e cluster preparation script, ensuring it's available for testing and deployment.
- Include lldpd in image profiles: The lldpd extension is now explicitly included in the EXTENSIONS variable used by the profile generation script, ensuring it's bundled into the various Talos image profiles.
- Reference lldpd image: The necessary image reference for lldpd has been added to the input section of the image profile generation, allowing the build system to pull and integrate the lldpd component.
Using Gemini Code Assist
The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.
Invoking Gemini
You can request assistance from Gemini at any point in your pull request via creating an issue comment (i.e. comment on the pull request page) using either /gemini <command>
or @gemini-code-assist <command>
. Below is a summary of the supported commands.
Feature | Command | Description |
---|---|---|
Code Review | /gemini review |
Performs a code review for the current pull request in its current state. |
Pull Request Summary | /gemini summary |
Provides a summary of the current pull request in its current state. |
Comment | @gemini-code-assist | Responds in comments when explicitly tagged, both in issue comments and review comments. |
Help | /gemini help |
Displays a list of available commands. |
Customization
To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/
folder in the base of the repository. Detailed instructions can be found here.
Limitations & Feedback
Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.
You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.
Footnotes
-
Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution. ↩
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Code Review
This pull request correctly modifies the scripts to include the lldpd
extension. However, a critical part of the change is missing: the generated profile files under packages/core/installer/images/talos/profiles/
have not been updated. Please run packages/core/installer/hack/gen-profiles.sh
and commit the resulting changes to these YAML files to complete the PR. I've also left a comment regarding a potential improvement in the shell script to avoid code duplication and improve maintainability.
@@ -4,7 +4,7 @@ set -u | |||
|
|||
PROFILES="initramfs kernel iso installer nocloud metal" | |||
FIRMWARES="amd-ucode amdgpu-firmware bnx2-bnx2x i915-ucode intel-ice-firmware intel-ucode qlogic-firmware" | |||
EXTENSIONS="drbd zfs" | |||
EXTENSIONS="drbd zfs lldpd" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
While adding lldpd
here is correct, it highlights a maintainability issue. The list of extensions is defined in this EXTENSIONS
variable, but it's also manually maintained in the systemExtensions
list within the YAML template on lines 86-88. This duplication is error-prone, as one might be updated without the other.
To improve this, consider generating the systemExtensions
list dynamically from this EXTENSIONS
variable. This would make the script more robust and easier to maintain.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Could you please also run make generate
to update all the profiles÷
The
perhaps the scripts should be updated to use |
d14197b
to
c9e9dd2
Compare
This patch adds the lldpd extension to Cozystack's Talos build. Additionally it changes the profile generation scripts to use Siderolabs' recommended way to get appropriate extension image versions to include with Talos. Release note: ```release-note [talos] Add LLDP support in default Talos build. ``` Signed-off-by: Timofei Larkin <lllamnyp@gmail.com>
c9e9dd2
to
8681487
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 4
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
packages/core/installer/hack/gen-profiles.sh (1)
13-13
: Regex bug: tag filter can select wrong versions or fail on non-GNU grepThe pattern uses BRE with
\+
and unescaped dots. On BusyBox/Dash,\+
may be literal, and.
matches any char. Use ERE and escape dots.- talos_version=${1:-$(skopeo --override-os linux --override-arch amd64 list-tags docker://ghcr.io/siderolabs/imager | jq -r '.Tags[]' | grep '^v[0-9]\+.[0-9]\+.[0-9]\+$' | sort -V | tail -n 1)} + talos_version=${1:-$(skopeo --override-os linux --override-arch amd64 list-tags docker://ghcr.io/siderolabs/imager \ + | jq -r '.Tags[]' \ + | grep -E '^v[0-9]+\.[0-9]+\.[0-9]+$' \ + | sort -V | tail -n 1)}
♻️ Duplicate comments (1)
packages/core/installer/hack/gen-profiles.sh (1)
83-93
: Avoid duplicated, hand-maintained lists for systemExtensionsThis block must be kept in sync with FIRMWARES/EXTENSIONS. Generate it from those arrays to prevent drift. Similar feedback was shared previously.
- systemExtensions: - - imageRef: ${AMD_UCODE_IMAGE} - - imageRef: ${AMDGPU_IMAGE} - - imageRef: ${BNX2_BNX2X_IMAGE} - - imageRef: ${INTEL_ICE_FIRMWARE_IMAGE} - - imageRef: ${I915_IMAGE} - - imageRef: ${INTEL_UCODE_IMAGE} - - imageRef: ${QLOGIC_FIRMWARE_IMAGE} - - imageRef: ${DRBD_IMAGE} - - imageRef: ${ZFS_IMAGE} - - imageRef: ${LLDPD_IMAGE} + systemExtensions: +$(for name in $FIRMWARES $EXTENSIONS; do + var=$(echo "$name" | tr '[:lower:]' '[:upper:]' | tr - _)_IMAGE + printf " - imageRef: %s\n" "$(eval "printf '%s' \"\$$var\"")" +done)
🧹 Nitpick comments (2)
packages/core/installer/hack/gen-profiles.sh (1)
1-4
: Preflight tool checks for better UXFail early with clear messages if required tools are missing: skopeo, jq, crane, tar.
#!/bin/sh set -e set -u +for tool in skopeo jq crane tar; do + command -v "$tool" >/dev/null 2>&1 || { echo "error: '$tool' is required" >&2; exit 1; } +donepackages/core/installer/images/talos/profiles/metal.yaml (1)
13-13
: Consider digest-pinning the base installer image for full reproducibilityAll systemExtensions are pinned to digests (great), but the base installer still references a tag. To keep builds hermetic and auditable, consider pinning this as well (and ideally have hack/gen-profiles.sh emit it).
Apply after you obtain the digest (via crane or skopeo):
- imageRef: "ghcr.io/siderolabs/installer:v1.10.6" + imageRef: "ghcr.io/siderolabs/installer:v1.10.6@sha256:<installer-digest>"I can wire up gen-profiles.sh to resolve and inject the digest automatically if you want.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
💡 Knowledge Base configuration:
- MCP integration is disabled by default for public repositories
- Jira integration is disabled by default for public repositories
- Linear integration is disabled by default for public repositories
You can enable these sources in your CodeRabbit configuration.
📒 Files selected for processing (8)
hack/e2e-prepare-cluster.bats
(1 hunks)packages/core/installer/hack/gen-profiles.sh
(3 hunks)packages/core/installer/images/talos/profiles/initramfs.yaml
(1 hunks)packages/core/installer/images/talos/profiles/installer.yaml
(1 hunks)packages/core/installer/images/talos/profiles/iso.yaml
(1 hunks)packages/core/installer/images/talos/profiles/kernel.yaml
(1 hunks)packages/core/installer/images/talos/profiles/metal.yaml
(1 hunks)packages/core/installer/images/talos/profiles/nocloud.yaml
(1 hunks)
✅ Files skipped from review due to trivial changes (1)
- packages/core/installer/images/talos/profiles/installer.yaml
🚧 Files skipped from review as they are similar to previous changes (1)
- hack/e2e-prepare-cluster.bats
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
- GitHub Check: Build
🔇 Additional comments (7)
packages/core/installer/images/talos/profiles/kernel.yaml (2)
15-24
: LGTM: digest-pinned systemExtensions incl. lldpdAll extensions are pinned with sha256 digests; lldpd 1.0.19 is present. This improves reproducibility.
6-14
: Manual Digest Verification RequiredI attempted to run the provided script but
crane
isn’t available in this environment, so I couldn’t extract theimage-digests
automatically. Please manually verify that thelldpd
digest inpackages/core/installer/images/talos/profiles/kernel.yaml
matches the one in theghcr.io/siderolabs/extensions:v1.10.6
image. For example:
- Pull and extract the digests from the container:
docker pull ghcr.io/siderolabs/extensions:v1.10.6 container=$(docker create ghcr.io/siderolabs/extensions:v1.10.6) docker cp "$container":/image-digests /tmp/ext-digests docker rm "$container"- Compare the
lldpd
entries:grep -F '/lldpd:' /tmp/ext-digests rg -nP 'lldpd:.*@sha256:[a-f0-9]+' packages/core/installer/images/talos/profiles/kernel.yamlEnsure the SHA256 digest for
/lldpd:
in both outputs is identical.packages/core/installer/images/talos/profiles/nocloud.yaml (1)
15-24
: LGTM: nocloud profile updated with pinned digests and lldpd; outFormat .xz setLooks consistent with other profiles; no issues noticed.
packages/core/installer/images/talos/profiles/iso.yaml (1)
15-24
: LGTM: iso profile adopts digest pins and includes lldpdConsistent with kernel/initramfs; reproducible and aligned with v1.10.6.
packages/core/installer/images/talos/profiles/initramfs.yaml (1)
15-24
: LGTM: initramfs profile includes lldpd and digest pinsNo functional concerns here.
packages/core/installer/images/talos/profiles/metal.yaml (2)
6-6
: Version bump to v1.10.6: confirm parity across all Talos profiles and release notes entryLooks good here. Please confirm that every generated Talos profile (initramfs/installer/iso/kernel/nocloud/metal) is on the same version and that the release notes include this version bump and the new lldpd extension.
Would you like me to open a checklist for cross-profile parity and release-note updates?
15-24
: Ensure Crane Is Installed Before Running Digest VerificationThe digest pins look consistent, and the addition of lldpd 1.0.19 with its SHA-256 is great. To guard against registry drift, please install
crane
in your environment (or CI) and rerun the following verification script againstpackages/core/installer/images/talos/profiles/metal.yaml
. If installingcrane
is not feasible, manually verify that each@sha256:
matches the registry’s canonical digest.#!/usr/bin/env bash set -euo pipefail FILE="packages/core/installer/images/talos/profiles/metal.yaml" # Ensure crane is available if ! command -v crane &>/dev/null; then echo "Error: 'crane' is required. Install it from https://github.com/google/go-containerregistry." exit 1 fi # Extract all imageRefs mapfile -t IMAGES < <( awk -F': ' '/^\s*- imageRef:/{print $2}' "$FILE" | tr -d '"' ) FAIL=0 for ref in "${IMAGES[@]}"; do want="${ref##*@}" repo="${ref%@*}" got="$(crane digest "$repo" | sed 's/^sha256://')" if [[ "$got" != "$want" ]]; then echo "Mismatch: $repo → got sha256:$got, want sha256:$want" FAIL=1 fi done if [[ $FAIL -eq 0 ]]; then echo "✓ All digests validated." else echo "✗ One or more digests mismatched." >&2 exit 2 fi• If you cannot install
crane
, please manually query each<repo>:<tag>
via your preferred container registry tool to confirm its SHA-256 matches the pinned digest.
• Optionally, extend this check to thebaseInstaller
profile once it is likewise digest-pinned.
@@ -2,9 +2,10 @@ | |||
set -e | |||
set -u | |||
|
|||
TMPDIR=$(mktemp -d) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
No cleanup for mktemp directory
Add a trap to remove the temporary directory on exit.
TMPDIR=$(mktemp -d)
+trap 'rm -rf "$TMPDIR"' EXIT
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
TMPDIR=$(mktemp -d) | |
TMPDIR=$(mktemp -d) | |
trap 'rm -rf "$TMPDIR"' EXIT |
🤖 Prompt for AI Agents
In packages/core/installer/hack/gen-profiles.sh around line 5, the temporary
directory created with TMPDIR=$(mktemp -d) has no cleanup; add a trap to remove
the directory on script exit and on common signals by registering something
like: trap 'rm -rf -- "$TMPDIR"' EXIT INT TERM; ensure TMPDIR is quoted and use
rm -rf with -- to safely remove the temp directory, and set TMPDIR only after
mktemp succeeds so the trap always has a valid path.
@@ -14,20 +15,22 @@ echo "$talos_version" | |||
|
|||
export "TALOS_VERSION=$talos_version" | |||
|
|||
crane export ghcr.io/siderolabs/extensions:v1.10.6 | tar x -O image-digests > $TMPDIR/image-digests |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hard-coded extensions version causes profile/image mismatch
Extensions are pinned from v1.10.6 regardless of computed TALOS_VERSION, risking inconsistent images (e.g., base installer vX.Y.Z but extensions from v1.10.6).
-crane export ghcr.io/siderolabs/extensions:v1.10.6 | tar x -O image-digests > $TMPDIR/image-digests
+crane export "ghcr.io/siderolabs/extensions:${TALOS_VERSION}" \
+ | tar x -O image-digests > "$TMPDIR/image-digests"
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
crane export ghcr.io/siderolabs/extensions:v1.10.6 | tar x -O image-digests > $TMPDIR/image-digests | |
crane export "ghcr.io/siderolabs/extensions:${TALOS_VERSION}" \ | |
| tar x -O image-digests > "$TMPDIR/image-digests" |
🤖 Prompt for AI Agents
In packages/core/installer/hack/gen-profiles.sh around line 18, the script
currently hard-codes the extensions tag to v1.10.6 which can mismatch the
computed TALOS_VERSION; change the command to use a variable (e.g.
$TALOS_VERSION or an explicitly computed EXTENSIONS_TAG derived from
TALOS_VERSION) instead of the literal v1.10.6 so the exported extensions image
matches the installer version, ensure that the variable is set/validated before
use (exit with an error if unset) and update any callers or defaults so the
variable is populated when the script runs.
for firmware in $FIRMWARES; do | ||
printf "fetching %s version: " "$firmware" | ||
firmware_var=$(echo "$firmware" | tr '[:lower:]' '[:upper:]' | tr - _)_VERSION | ||
version=$(skopeo list-tags docker://ghcr.io/siderolabs/$firmware | jq -r '.Tags[]|select(length == 8)|select(startswith("20"))' | sort -V | tail -n 1) | ||
echo "$version" | ||
export "$firmware_var=$version" | ||
firmware_var=$(echo "$firmware" | tr '[:lower:]' '[:upper:]' | tr - _)_IMAGE | ||
image=$(grep $firmware $TMPDIR/image-digests) | ||
echo "$image" | ||
export "$firmware_var=$image" | ||
done |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Fragile grep; prefer exact, quoted, fixed-string match
grep $firmware $TMPDIR/image-digests
is unquoted and regex-based. Use fixed-string search scoped to /${name}:
to avoid partial matches and quoting issues.
- firmware_var=$(echo "$firmware" | tr '[:lower:]' '[:upper:]' | tr - _)_IMAGE
- image=$(grep $firmware $TMPDIR/image-digests)
+ firmware_var=$(echo "$firmware" | tr '[:lower:]' '[:upper:]' | tr - _)_IMAGE
+ image=$(grep -F "/${firmware}:" "$TMPDIR/image-digests")
echo "$image"
export "$firmware_var=$image"
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
for firmware in $FIRMWARES; do | |
printf "fetching %s version: " "$firmware" | |
firmware_var=$(echo "$firmware" | tr '[:lower:]' '[:upper:]' | tr - _)_VERSION | |
version=$(skopeo list-tags docker://ghcr.io/siderolabs/$firmware | jq -r '.Tags[]|select(length == 8)|select(startswith("20"))' | sort -V | tail -n 1) | |
echo "$version" | |
export "$firmware_var=$version" | |
firmware_var=$(echo "$firmware" | tr '[:lower:]' '[:upper:]' | tr - _)_IMAGE | |
image=$(grep $firmware $TMPDIR/image-digests) | |
echo "$image" | |
export "$firmware_var=$image" | |
done | |
for firmware in $FIRMWARES; do | |
printf "fetching %s version: " "$firmware" | |
firmware_var=$(echo "$firmware" | tr '[:lower:]' '[:upper:]' | tr - _)_IMAGE | |
image=$(grep -F "/${firmware}:" "$TMPDIR/image-digests") | |
echo "$image" | |
export "$firmware_var=$image" | |
done |
🤖 Prompt for AI Agents
In packages/core/installer/hack/gen-profiles.sh around lines 20 to 26, the line
using grep is fragile because it is unquoted and performs a regex match which
can produce partial matches; change it to quote variables and perform a
fixed-string search scoped to the name plus colon (e.g. search for
"${firmware}:") and pass the filename as a separate, quoted argument (or use
awk/while-read to match the start of line) so you get exact, quoted matches and
avoid regex/word-splitting issues.
for extension in $EXTENSIONS; do | ||
printf "fetching %s version: " "$extension" | ||
extension_var=$(echo "$extension" | tr '[:lower:]' '[:upper:]' | tr - _)_VERSION | ||
version=$(skopeo --override-os linux --override-arch amd64 list-tags docker://ghcr.io/siderolabs/$extension | jq -r '.Tags[]' | grep "\-${talos_version}$" | sort -V | tail -n1) | ||
echo "$version" | ||
export "$extension_var=$version" | ||
extension_var=$(echo "$extension" | tr '[:lower:]' '[:upper:]' | tr - _)_IMAGE | ||
image=$(grep $extension $TMPDIR/image-digests) | ||
echo "$image" | ||
export "$extension_var=$image" | ||
done |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Same grep robustness applies to extensions loop
Mirror the fixed-string match and quoting for extensions.
- extension_var=$(echo "$extension" | tr '[:lower:]' '[:upper:]' | tr - _)_IMAGE
- image=$(grep $extension $TMPDIR/image-digests)
+ extension_var=$(echo "$extension" | tr '[:lower:]' '[:upper:]' | tr - _)_IMAGE
+ image=$(grep -F "/${extension}:" "$TMPDIR/image-digests")
echo "$image"
export "$extension_var=$image"
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
for extension in $EXTENSIONS; do | |
printf "fetching %s version: " "$extension" | |
extension_var=$(echo "$extension" | tr '[:lower:]' '[:upper:]' | tr - _)_VERSION | |
version=$(skopeo --override-os linux --override-arch amd64 list-tags docker://ghcr.io/siderolabs/$extension | jq -r '.Tags[]' | grep "\-${talos_version}$" | sort -V | tail -n1) | |
echo "$version" | |
export "$extension_var=$version" | |
extension_var=$(echo "$extension" | tr '[:lower:]' '[:upper:]' | tr - _)_IMAGE | |
image=$(grep $extension $TMPDIR/image-digests) | |
echo "$image" | |
export "$extension_var=$image" | |
done | |
for extension in $EXTENSIONS; do | |
printf "fetching %s version: " "$extension" | |
extension_var=$(echo "$extension" | tr '[:lower:]' '[:upper:]' | tr - _)_IMAGE | |
image=$(grep -F "/${extension}:" "$TMPDIR/image-digests") | |
echo "$image" | |
export "$extension_var=$image" | |
done |
🤖 Prompt for AI Agents
In packages/core/installer/hack/gen-profiles.sh around lines 28-34, the grep
call inside the extensions loop should use fixed-string matching and proper
quoting to avoid treating extension names as regexes or word-splitting; replace
the grep invocation with a fixed-string, end-of-options form (e.g. grep -F --
"$extension" "$TMPDIR/image-digests"), and ensure all variable expansions are
quoted when used (echo "$image" and export using the existing export
"$extension_var=$image" pattern) so matches are exact and values aren’t subject
to word-splitting.
Some version strings were accidentally hardcoded instead of retrieving them dynamically in the profile generator for the Talos build. This follows up #1351 and fixes these issues. ```release-note [talos] Add LLDP support and improve profile generation logic. ``` Signed-off-by: Timofei Larkin <lllamnyp@gmail.com>
## What this PR does Some version strings were accidentally hardcoded instead of retrieving them dynamically in the profile generator for the Talos build. This follows up #1351 and fixes these issues. ### Release note ```release-note [talos] Add LLDP support and improve profile generation logic. ``` <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - Bug Fixes - Anchored matching for firmware and extension digests to avoid false positives and incorrect selections during export, improving reliability of installs. - Chores - Switched to dynamic image tagging based on the detected Talos version, ensuring the correct extension images are exported for each release and reducing version mismatch issues for more consistent builds. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
This patch adds the lldpd extension to Cozystack's Talos build. Additionally it changes the profile generation scripts to use
Siderolabs' recommended way to get appropriate extension image versions to include with Talos.
Release note
Signed-off-by: Timofei Larkin lllamnyp@gmail.com