jsonnet
s6
Our great sponsors
jsonnet | s6 | |
---|---|---|
48 | 22 | |
6,745 | 726 | |
0.9% | - | |
8.4 | 7.4 | |
8 days ago | 1 day ago | |
Jsonnet | C | |
Apache License 2.0 | ISC License |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
jsonnet
-
A Reasonable Configuration Language
jsonnet[1] and kapitan[2] are the tools I currently use. Their learning curve is not optimal (and I tried to contribute to smoothen it with a jsonnet course[3] and a 'get started wit kapitan' blog post[4]), but once used to it it's hard to do without, and their combination makes them even more useful (esp. if you deploy K8s).
In Ruud's case, Jsonnet might have been worth looking at as Hashicorp tools can be configured with json in addition to HCL. But that would have been less fun I guess ;-)
I hope for Ruud it finds its niche, there's quite some competition in this field!
-
Pkl, a Programming Language for Configuration
Kubernetes config is a decent example. I had ChatGPT generate a representative silly example -- the content doesn't matter so much as the structure:
https://gist.github.com/cstrahan/528b00cd5c3a22e3d8f057bb1a7...
Now consider 100s (if not 1000s) of such files.
I haven't given Pkl an in depth look yet, but I can say that the Industry Standard™ of "simple YAML" + string substitution (with delicate, error prone indentation -- since YAML is indentation sensitive) is easily beat by any of:
- https://nixos.org/manual/nix/stable/language/index.html
- (insert many more here, probably including Pkl)
-
Introduction to Jsonnet: The YAML/JSON templating language
jsonnet cli: link
-
10 Ways for Kubernetes Declarative Configuration Management
Jsonnet: A data template language implemented in C++, suitable for application and tool developers, can generate configuration data and organize, simplify and manage large configurations without side effects.
-
-❄️- 2023 Day 4 Solutions -❄️-
[Language: Jsonnet] (on GitHub)
-
What Is Wrong with TOML?
Maybe you'd like jsonnet: https://jsonnet.org/
I find it particularly useful for configurations that often have repeated boilerplate, like ansible playbooks or deploying a bunch of "similar-but" services to kubernetes (with https://tanka.dev).
Dhall is also quite interesting, with some tradeoffs: https://dhall-lang.org/
A few years ago I did a small comparison by re-implementing one of my simpler ansible playbooks: https://github.com/retzkek/ansible-dhall-jsonnet
- Show HN: Keep – GitHub Actions for your monitoring tools
-
That people produce HTML with string templates is telling us something
Apologies for the lack of context, and for missing this comment until today.
Both are tools for defining kubernetes manifests (which are YAML) in a reusable manner.
Jsonnet is a formally specified extension of JSON. It’s essentially a functional programming language (w/some object oriented features) that generates config files in JSON/YAML/etc, so it’s straightforward to determine whether an input file is valid, and to throw an error that points to an exact line if it’s not. It has a high learning curve, especially for people whose only experience is with imperative languages.
Helm charts also generate YAML/JSON config files, but they use Go templating. This is easier and faster to understand, since it’s mostly string substitution and not much logic (there’s conditionals, iterators, and very basic helper functions). Unfortunately a simple typo or mistake can cause errors that are difficult to diagnose (the message may indicate a problem far away in code from the actual mistake). It can also generate output that’s valid according to the string templating rules, but not what was intended, which can be very confusing to debug.
Despite these shortcomings, the vast majority of kubernetes applications are distributed as helm charts. I understand why things ended up this way, but I still wish it were more common for people to invest the upfront effort to learn the superior tool, so it could be more widespread.
-
TOML: Tom's Obvious Minimal Language
I like Google's Jsonnet [1], which has all of this except for 4.
Jsonnet is quite mature, with fairly wide language adoption, and has the benefit of supporting expressions, including conditionals, arithmetic, as well as being able to define reusable blocks inside function definitions or external files.
It's not suitable as a serialization format, but great for config. It's popular in some circles, but I'm sad that it has not reached wider adoption.
- Jsonnet – The Data Templating Language
s6
- OpenRC is a dependency-based init system for Unix-like systems
-
are there any good reasons for me to avoid systemd
A (rare) good critique to systemd can be found here. Written by the developer behind s6, which happens to be scheduled to replace OpenRC on Alpine Linux. For completeness-sake, some of the main reasons why Alpine doesn't prefer systemd do not apply on most other distros.
-
A discussion about the Ultimate Linux Desktop
It got mass-adopted while being imperfect, so that's to be expected. Thankfully its inception and the criticism that followed have paved the way for the likes of dinit and s6.
-
Which do you use systemd or openrc? Why do you use what you use?
this page and this page, both by Laurent Bercot, creator of s6.
-
init software: What's the difference?
Of the two I have experience with, runit is simpler and thus easier to get the hang of than s6-rc/s6. Though the s6 (not s6-rc) docs at the author's site contain a lot of info (including apologetics and rationales) that applies almost equally well to runit
-
What do you guys think about this?
systemd: Yes; it's awaiting its "PipeWire". Thankfully, the likes of s6 and dinit are very promising. Though I can actually appreciate that systemd is addressed. As ultimately it helps in raising awareness that will benefit whatever software will replace it eventually.
-
The (GNU/)Linux rabbit hole has been a negative influence on my mental state
Arguably this is less troublesome to solve compared to the other concerns. As we're inevitably waiting for the system supervision suite that will be to systemd what PipeWire has been to PulseAudio. I'm very optimistic about this as both s6 and Dinit are shaping up lovely.
- Systemd 252 Released
-
Trouble with s6 services
Using the s6-service add command I added a service called "libvertd" when I ment to put "libvirtd". Now when I run s6-db-reload it spits out a error message saying "undefined service name libvertd". But I cant remove it using s6-service remove libvertd because that just spits out a generic help message and doesn't change anything. I also couldn't find documentation on https://skarnet.org/software/s6/ or https://skarnet.org/software/s6-rc/ as the command just *doesn't* exist on those pages. (also no man or info page).
- Alpine Linux is reducing dependencies on Busybox
What are some alternatives?
kube-libsonnet - Bitnami's jsonnet library for building Kubernetes manifests
dinit - Service monitoring / "init" system
dhall-lang - Maintainable configuration files
systemd - The systemd System and Service Manager
cue - CUE has moved to https://github.com/cue-lang/cue
init - KISS Linux - Init Framework
cue - The home of the CUE language! Validate and define text-based and dynamic configuration
tini - A tiny but valid `init` for containers
json5 - JSON5 — JSON for Humans
hummingbird - Hummingbird init system for Linux based operating systems.
cdk8s - Define Kubernetes native apps and abstractions using object-oriented programming
systemE - 🤣 A lightweight systemd replacement written in Emacs lisp 🤣