十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

如何在 Lima 中扩展自定义模板 URL 方案(limactl-url-<scheme> 插件)?

如何在 Lima 中扩展自定义模板 URL 方案(limactl-url-<scheme> 插件)? 如何在 Lima 中扩展自定义模板 URL 方案limactl-url- 插件【免费下载链接】limaLinux virtual machines, with a focus on running containers项目地址: https://gitcode.com/GitHub_Trending/lim/limaLima 的模板定位符template locator支持通过插件扩展自定义 URL 方案当你输入limactl start dev:webapp这类内置命令无法识别的scheme:name形式时Lima 会寻找名为limactl-url-scheme的可执行文件来解析它。借助这个机制你可以为自己或团队的模板仓库建立简短好记的定位符比如dev:webapp、prod:webapp而不是每次都粘贴一条完整的 raw URL。本文适用于 Lima 2.0URL handler 插件目前处于实验性状态。工作原理Lima 如何调用你的插件当 Lima 遇到一个未识别方案的 URL例如dev:webapp时行为是按标准的 插件发现机制查找名为limactl-url-dev的可执行文件把冒号后面的部分这里是webapp作为唯一参数调用该插件读取插件的 stdout其内容必须是一个任意支持方案的 URL或一个本地文件路径。插件输出本身也可以是自定义方案Lima 会逐级解析整条链直到得到最终的https:URL 或本地文件路径并且会检测并拒绝重定向循环。如果插件以非零状态退出Lima 会报告错误并把插件的 stderr 输出包含在错误信息中。插件发现遵循 CLI 插件文档中的三个位置limactl二进制所在目录支持符号链接、$PATH中的所有目录、以及包管理器使用的PREFIX/libexec/lima。也就是说只要把脚本放到$PATH里并加执行权限即可被发现。在动手之前先确认一下版本前提URL handler 插件与github:方案一样都要求Lima 2.0且均标记为实验性后续版本语义可能变化。最短主路径写一个返回 URL 的 handler最简单的 handler 就是把一个短名映射到一个完整 URL。下面两个方案指向同一个仓库但选择不同的分支limactl-url-dev#!/bin/sh echo https://github.example.com/raw/infra/lima-templates/master/$1.yamllimactl-url-prod#!/bin/sh echo https://github.example.com/raw/infra/lima-templates/v1.8.3/$1.yaml$1就是 URL 中冒号后面的部分比如dev:webapp中的webapp。把两个脚本分别保存为limactl-url-dev、limactl-url-prod赋予执行权限并放入$PATH后就可以这样使用示例输出来自文档实际 URL 取决于你的仓库$ limactl start dev:webapp # uses master branch $ limactl start prod:webapp # uses pinned releasehandler 还可以生成预签名 URL。这个s3:handler 从私有 S3 桶提供模板依赖本机已配置的awsCLI#!/bin/sh aws s3 presign s3://my-lima-templates/$1.yaml$ limactl start s3:webapp返回本地文件路径复用已有实例的配置handler 也可以返回本地文件路径而不是 URL。这个instance:handler 取回一个已存在实例的保存配置limactl-url-instance#!/bin/sh echo ${LIMA_HOME:-$HOME/.lima}/$1/lima.yaml这样就可以用和现有实例相同的模板创建新实例文档示例中$1为default即取~/.lima/default/lima.yaml若设置了LIMA_HOME环境变量则以它为准$ limactl create --name another instance:default可选分支运行时动态生成 YAML当镜像 URL 包含日期、构建号等无法写进静态 YAML 的动态成分时handler 可以在运行时生成模板文件并返回其路径limactl-url-nightly#!/bin/sh set -eu CACHE_DIR${XDG_CACHE_HOME:-$HOME/.cache}/lima/limactl-url-nightly mkdir -p ${CACHE_DIR} BUILD$(curl -fsSL https://builds.example.com/latest-id) FILE${CACHE_DIR}/nightly.yaml cat EOF ${FILE} images: - location: https://builds.example.com/${BUILD}/image-amd64.qcow2 arch: x86_64 - location: https://builds.example.com/${BUILD}/image-arm64.qcow2 arch: aarch64 EOF echo $FILE示例中的builds.example.com需要替换为你自己的构建服务器地址。生成的文件会留在缓存目录中下次调用时覆盖或随缓存一起被清理。模板还可以在自己的base:字段里引用这类 handler把动态镜像源和静态挂载配置组合起来base: - nightly:images - template:_default/mounts组合方案在 handler 里调用limactl template urlhandler 内部可以调用limactl template url来解析其他方案包括内置的github:方案。这样你的 handler 不必自己拼原始 URL而是在已有方案之上构建。例如“追踪最新 release”这个 handler 先把github:URL 解析出来再把其中的分支段替换为最新的 semver tag依赖ghCLIlimactl-url-latest#!/bin/sh # Resolve the github: scheme to an https://raw.githubusercontent.com URL url$(limactl template url github:$1) # Extract org/repo from the URL (fields 4-5 of the path) repo$(echo $url | cut -d/ -f4-5) # Find the latest semver release tag (e.g. v2.1.0), ignoring pre-releases tag$(gh release list --repo $repo --json tagName \ --jq map(select(.tagName | test(^v[0-9]\\.[0-9]\\.[0-9]$))) | .[0].tagName) # Replace the branch/tag segment in the URL with the release tag echo $url | sed -E s|(https://raw\.githubusercontent\.com/[^/]/[^/]/)[^/]/|\1$tag/|运行效果文档示例输出$ limactl template url latest:lima-vm/lima/templates/default https://raw.githubusercontent.com/lima-vm/lima/v2.1.0/templates/default.yaml另一个常见用途是按顺序搜索多个仓库返回第一个命中的模板limactl-url-my#!/bin/sh template$1 for repo in \ github:my-org/templates/%smain \ github:lima-vm/lima/templates/%smaster; do url$(limactl template url $(printf $repo $template)) if curl --head --silent --fail $url /dev/null; then echo $url exit fi done echo Template $template not found 2 exit 1$ limactl start my:custom-distro # checks my-org/templates first, then lima-vm/lima两个都没命中时脚本向 stderr 写错误信息并以非零状态退出——按前文机制Lima 会把这些 stderr 内容包含在报错里方便定位是哪个仓库出了问题。验证先确认 URL 解析结果再真正拉取模板改完 handler 后先用limactl template url查看自定义 URL 会解析成什么而不去真正下载模板$ limactl template url dev:webapp https://github.example.com/raw/infra/lima-templates/master/webapp.yaml上面第二行是文档示例输出你的输出应指向你自己的仓库地址。解析正确后再执行limactl start dev:webapp或limactl create ...完成实际验证。如果输出不是预期的 URL 或路径检查三点脚本名是否恰好是limactl-url-scheme脚本是否可执行且在$PATH中脚本是否把结果写到 stdout 而不是其他流。限制与注意事项URL handler 插件是实验性功能API 或发现机制可能在后续版本中发生破坏性变化。解析链中如果出现重定向循环Lima 会直接拒绝。插件非零退出时其 stderr 会进入 Lima 的错误信息想让报错有可读内容错误提示要写到 stderr 而不是 stdout。github:方案同样标记为实验性如果 handler 频繁调用 GitHub 接口如latest示例中的 API 查询可能需要设置GITHUB_TOKEN或GH_TOKEN以避免限流。相关文档URL handler 插件、CLI 插件、GitHub 模板 URL。【免费下载链接】limaLinux virtual machines, with a focus on running containers项目地址: https://gitcode.com/GitHub_Trending/lim/lima创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表