I've just released version 1.0.0 of mgmt! > 614 files changed, 30199 insertions(+), 11916 deletions(-) This is very important and large release. It's been 10 years since I first publicly released this project, and I might as well stop confusing new users. I'm happily using it in production for some time now, and I love writing `mcl` every day! I am doing customer work in mgmt, and I have happy users. With that, here are a few highlights from the release: * There is a new function engine which is significantly faster on large graphs. It could be improved further, but the optimizations aren't needed for now. * The "automatic embedded etcd clustering" should be considered deprecated. You can run with --no-magic to ensure it's off. It was buggy and we will possibly write it with mcl anyways. Expect it to be removed soon. * Type unification errors have context and line numbers! Many other error scenarios have this too! This isn't perfect, and there are still some remaining places when you don't get this information. Please help us find and expand these. * The function API has been overhauled which now makes writing most functions significantly easier and simpler. They'll also use less memory. This is a benefit of the new function engine. * We have added *declarative* for and forkv statements to the language. * Exported resources are merged and gorgeous! They work how I've always wanted. You can actually see my experiment in the very first demo of mgmt, and I finally wrote them to work with the language how I've always wanted. * There's an http:server:ui set of resources that have been added. Check out: https://www.youtube.com/watch?v=8vz1MMGkuik for some examples of that in action and more! And much more... SPONSORS The `mgmt` project is generously sponsored by: m9rx corporation - https://m9rx.com/ Please reach out if you'd like to sponsor! DOWNLOAD Prebuilt binaries are available here for this release: https://github.com/purpleidea/mgmt/releases/tag/1.0.0 They can also be found on the Fedora mirror: https://dl.fedoraproject.org/pub/alt/purpleidea/mgmt/releases/1.0.0/ NEWS * A bunch of misc mcl code has been added to modules/ for you to see. * The user resource has been improved following feedback from cloudflare. * Detect self-referential frags when building files that way. * Added a new function for URL parsing. * Type unification errors have context and line numbers! * There's a "baddev" feature branch which gets rebased which you can use if you don't want to install the tools to compiler the lexer/parser stuff. We do the ugly commit for you if that's easier for development. * We have added *declarative* for and forkv statements to the language. If you know of a better name that "forkv" we're happy to hear it, but a small poll didn't produce a more convincing suggestion. * Waiting for a deploy just happens automatically with the "empty" frontend. * Waiting to run a deploy just waits automatically until etcd is online. * Automatic mgmt deploying after virt provisioning works with a seeds field. * There's a global flag to skip autoedges to improve performance. * The docker resource has been modernized and supports running on a docker host that we're bootstrapping. * Docker ports were built backwards and these have been corrected. * The "world" interface has been cleaned up dramatically. This will make life easier for someone who wants to add a new backend there. Filesystem, scheduler, deployer, and more are all split. * We can run our etcd connection over SSH. That's one of the new backends. There's actually a reconnect issue, but it's an easy fix and it should likely come out in the next release. * We have an is_virtual function to detect where mgmt is running! * Virtualization modules moved to qcow2 by default. It's solid. * Improved a lot of user-facing logging so it's clearer what's happening. * Exported resources have been implemented ... and they're glorious. They work how I've always dreamed, and are such a breath of fresh air from the Puppet days. There's an export/collect system. Export works by metaparam, not a special language feature, and collect works with core functions. It runs when the resource in the graph actually runs, as opposed to "all at once, even if you fail" like the old days. Yay! * fmt.printf handles more cases! * The file resource now has a symlink param. Someone test it and find issues. * We have an iter.range function which is helpful with `for` statements. * We do some speculation which drastically reduces the shape of the function graphs in a lot of constant scenarios. This also reduces the need to change the shape, which brings a huge performance boost. * Don't reuse fact pointers. There was a bug around those. In fact get rid of the fact API since it's pointless really. * There's some new stuff in the convert package. * We added an http:server:ui resource. This is kind of a prototype, but you can see it in action here: https://www.youtube.com/watch?v=8vz1MMGkuik * Fix some send/recv corner cases. I wish I had more tests for this. Hint! * There's an os.readfilewait() function in temporarily. This will go away when we get the <|> operator. * A WatchFiles field was added to the exec resource. Very handy. * We have a new "line" resource. It supports "trim"-ing too. * There are some new functions that have been added. * The modules/ directory got some ssh key things. * Automatic grouping logic improved, thanks to http:server:ui stuff. * Hierarchical grouping works very reliably as far as I can tell. * A bunch of ctx's were added all over where they never were. Legacy code! * A bunch of network/NetworkManager/networkd and related mcl code was added. The interfaces are really ugly, what is the correct upstream network config thing? * We have a modinfo function. * We built in some ulimit settings for modern machines. * We have an mcl class for copr setup. * We added SSH hostkey logic into our core etcd ssh connection tooling. * The provisioner supports exec handoff. It can also handle more scenarios, eg booting from an ipxe usb key and not installing on it. * The provisioner supports encrypting machines with LUKS. It does this in a very clever way to allow creation of secure passwords after first boot. Many kudos to the systemd and other authors who built all the needed pieces for this to just work fairly well. * We improved a graph function from O(n) to O(1). Woops =D * We removed the secret channels from the function graphs. This is much simpler now! * ExprIf and StmtIf both do the more correct thing. I guess the bigger graph was eventually going to need to get killed. This was a good choice that I didn't make soon enough. * A ton of races were killed. We're building by default with the race checker. I don't know why I didn't do this ten years ago. Performance is not so terrible these days, and it catches so much. Woops. Good lesson to share with others. * The language has a nil type, but don't worry, this is only for internal plumbing, and we will NOT let it be user facing! * The langpuppet stuff had to be removed again for now. If it's used, patch in. * The GAPI stuff got a major cleanup. It was early code that was bad. Now it's a lot better. * The new function engine is the really big story. Have a look if you're an algorithmist. We'd love to have people work on improving it further. It's most likely glitch free now too! * The virt resource code a big cleanup. It runs hotplug again which had rotted due to libvirt api changes I think. * The qemu guest agent works automatically again. * The svc resource (one of the earliest) has been overhauled since it had old buggy code which has now been fixed. * We're looking for help writing Amazon, Google, DigitalOcean, Hetzner, etc, resources if anyone is interested, reach out to us. Particularly if there is support from those organizations as well. * Many other bug fixes, changes, etc... * See the git log for more NEWS, and for anything notable I left out! BUGS/TODO * Function values getting _passed_ to resources doesn't work yet, but it's not a blocker, but it would definitely be useful. We're looking into it. * The arm64 version doesn't support augeas, so it was built with: GOTAGS='noaugeas' to get the build out. * We don't have the <|> operator merged yet. Expect that when we do this, we'll consider removing the || (default) operator. This is the only pending language change that I know of, and these cases are easily caught by the compiler and can be easily patched. * Autoedge performance isn't great. It can easily be disabled. Most of the time I just specify my edges, so this is really a convenience feature, but it should be looked into when we have a chance. * There's a subtle ssh reconnect issue which can occur. It should be easy to fix and I have a patch in testing. * Our wasm code input fields grew tick marks, but I think this disturbed the buggy wasm code. If someone is an expert here, please have at it. TALKS After FOSDEM/CfgMgmtCamp 2026, I don't have anything planned until CfgMgmtCamp 2027. If you'd like to book me for a private event, or sponsor my travel for your conference, please let me know. MISC Our mailing list host (Red Hat) is no longer letting non-Red Hat employees use their infrastructure. We're looking for a new home. I've opened a ticket with Freedesktop. If you have any sway with them or other recommendations, please let me know: https://gitlab.freedesktop.org/freedesktop/freedesktop/-/issues/1082 We're still looking for new contributors, and while there are easy, medium and hard issues available! You're also welcome to suggest your own! Please join us in #mgmtconfig on Libera IRC or Matrix (preferred) and ping us if you'd like help getting started! For details please see: https://github.com/purpleidea/mgmt/blob/master/docs/faq.md#how-do-i-contribute-to-the-project-if-i-dont-know-golang Many tagged #mgmtlove issues exist: https://github.com/purpleidea/mgmt/issues?q=is%3Aissue+is%3Aopen+label%3Amgmtlove Although asking in matrix is the best way to find something to work on. MENTORING We offer mentoring for new golang/mgmt hackers who want to get involved. This is fun and friendly! You get to improve your skills, and we get some patches in return. Ping me off-list for details. THANKS Thanks (alphabetically) to everyone who contributed to the latest release: Ahmad Abuziad, Edward Toroshchyn, Felix Frank, hades, James Shubin, Karpfen, Lourenço, Lourenço Vales, Samuel Gélineau We had 10 unique committers since 0.0.27, and have had 103 overall. run 'git log 0.0.27..1.0.0' to see what has changed since 0.0.27 Happy hacking, James @purpleidea