2 个版本
0.1.2 | 2024年1月1日 |
---|---|
0.1.1 | 2023年12月27日 |
#1153 在 开发工具
705KB
672 行
寄生藤(WIP)- 多语言 Kubernetes 包管理器
寄生藤 是一个 Kubernetes 包管理器,它的操作方式与生态系统中的其他工具不同。它围绕一个运行时构建,其中包是 WebAssembly 模块。
mistletoe_package! {"
name: namespace-example
labels:
mistletoe.dev/group: mistletoe-examples
"}
#[derive(Deserialize)]
pub struct Inputs {
name: String,
}
pub fn generate(inputs: Inputs) -> MistResult {
let name = inputs.name;
let output = MistOutput::new()
.with_file("namespace.yaml".to_string(), formatdoc!("
apiVersion: v1
kind: Namespace
metadata:
name: {name}
"));
Ok(output)
}
上面的例子是一个用 Rust 编写的简单包。如果您运行它,
mistctl generate my-namespace -p mistletoe/examples/namespace-example:0.1.2
您将获得以下 YAML 结果
apiVersion: v1
kind: Namespace
metadata:
name: my-namespace
这是编写包的几乎无限种方式之一。您需要的只是一个可以编译为 WebAssembly 的 YAML 解析器的语言。
路线图
寄生藤 在开发周期中仍然处于早期阶段,但我们已经取得了一些进展!
截至目前,我们已经实现了上述示例中使用的 注册表系统 - 您现在可以通过 Git URL 添加注册表,并通过名称引用其中的包!
还有一个默认的 “mistletoe” 注册表被添加,它指向 mistletoe-registry。目前只有示例包,但很快会有更多!
尽管如此,还有一些事情需要解决,才能使其合理地开放给用户使用
mistctl
工具目前仅支持 YAML 生成 - 应扩展以 支持集群安装。这也意味着所有围绕生命周期管理的基本功能,尤其是升级和卸载。- 需要文档,文档,更多的文档。 保证采用的最佳方法是提供涵盖所有内容的最佳类文档,从一般用法到多语言包开发,再到对热心的黑客的运行时的高级信息。
除此之外,还有一些不那么重要但也很受欢迎的努力值得评估
- 动态依赖关系! 通过添加一种方法来让包声明和调用包外部的依赖关系,我们可以获得更多价值。这在与下面的第3点结合起来时非常有用。
- 对其他语言的明确支持。虽然任何支持WebAssembly的语言都可以使用,但该项目是用Rust编写的,并提供了以Rust为主的工具。对于下一次推动,我打算通过QuickJS运行时将库支持扩展到TypeScript。
- 由于运行时相当开放,我们可以从理论上讲打包其他包管理器。这意味着我们可以提供一个系统来安装Helm包,就像安装任何其他Mistletoe包一样。
- 我们可以使用一些包模板。Helm中的模板引擎是一把双刃剑——它使得生成清单变得非常容易,但根据部署系统的逻辑,它往往会迅速变得非常复杂。Mistletoe很好地解决了这个问题,但我们应该提供一些简单的构建包模板来重现这个优点。
依赖项
~14–58MB
~1M SLoC