This should help us determine what steps need improving. As it turns out, autoedges are approximately the slowest. (Highly dependent on the specific mcl code being used.) The trend is clear though; note the units: main: new graph took: 913.653µs main: auto edges took: 9.273807153s main: auto grouping took: 28.690819ms main: send/recv building took: 566ns main: new graph took: 779.255µs main: auto edges took: 4.03670168s main: auto grouping took: 37.682101ms main: send/recv building took: 121.017µs main: new graph took: 1.157479ms main: auto edges took: 3.794132165s main: auto grouping took: 49.732836ms main: send/recv building took: 95.921µs main: new graph took: 900.937µs main: auto edges took: 7.206085s main: auto grouping took: 25.508671ms main: send/recv building took: 489ns main: new graph took: 794.224µs main: auto edges took: 4.313729756s main: auto grouping took: 47.970533ms main: send/recv building took: 207.62µs main: new graph took: 884.49µs main: auto edges took: 7.585529786s main: auto grouping took: 24.327938ms main: send/recv building took: 72.741µs main: new graph took: 774.157µs main: auto edges took: 2.827380129s main: auto grouping took: 28.303023ms main: send/recv building took: 85.246µs main: new graph took: 746.841µs main: auto edges took: 2.775868117s main: auto grouping took: 33.11291ms main: send/recv building took: 104.875µs main: new graph took: 796.445µs main: auto edges took: 2.71556122s main: auto grouping took: 24.03827ms main: send/recv building took: 106.414µs main: new graph took: 1.217452ms main: auto edges took: 2.908416104s main: auto grouping took: 61.175916ms main: send/recv building took: 92.328µs main: new graph took: 807.894µs main: auto edges took: 3.222089261s main: auto grouping took: 40.032629ms main: send/recv building took: 106.49µs main: new graph took: 986.963µs main: auto edges took: 3.538425263s main: auto grouping took: 30.660849ms main: send/recv building took: 99.74µs
mgmt: next generation config management!
About:
Mgmt is a real-time automation tool. It is familiar to existing configuration
management software, but is drastically more powerful as it can allow you to
build real-time, closed-loop feedback systems, in a very safe way, and with a
surprisingly small amout of our mcl code. For example, the following code will
ensure that your file server is set to read-only when it's friday.
import "datetime"
$is_friday = datetime.weekday(datetime.now()) == "friday"
file "/srv/files/" {
state => $const.res.file.state.exists,
mode => if $is_friday { # this updates the mode, the instant it changes!
"0550"
} else {
"0770"
},
}
It can run continuously, intermittently, or on-demand, and in the first case, it will guarantee that your system is always in the desired state for that instant! In this mode it can run as a decentralized cluster of agents across your network, each exchanging information with the others in real-time, to respond to your changing needs. For example, if you want to ensure that some resource runs on a maximum of two hosts in your cluster, you can specify that as well:
import "sys"
import "world"
# we'll set a few scheduling options:
$opts = struct{strategy => "rr", max => 2, ttl => 10,}
# schedule in a particular namespace with options:
$set = world.schedule("xsched", $opts)
if sys.hostname() in $set {
# use your imagination to put something more complex right here...
print "i got scheduled" {} # this will run on the chosen machines
}
As you add and remove hosts from the cluster, the real-time schedule function
will dynamically pick up to two hosts from the available pool. These specific
functions aren't intrinsic to the core design, and new ones can be easily added.
Please read on if you'd like to learn more...
Community:
Come join us in the mgmt community!
| Medium | Link |
|---|---|
| Matrix | #mgmtconfig on Matrix.org |
| IRC | #mgmtconfig on Libera.Chat |
| @mgmtconfig & #mgmtconfig | |
| Mailing list | looking for a new home, suggestions welcome |
| Patreon | purpleidea on Patreon |
Status:
Mgmt is a next generation automation tool. It has similarities to other tools in the configuration management space, but has a fast, modern, distributed systems approach. The project contains an engine and a language. Please have a look at an introductory video or blog post.
Mgmt is a fairly new project. It is usable today, but not yet feature complete. With your help you'll be able to influence our design and get us to 1.0 sooner! Interested users should read the quick start guide.
Documentation:
Please read, enjoy and help improve our documentation!
| Documentation | Additional Notes |
|---|---|
| quick start guide | for everyone |
| frequently asked questions | for everyone |
| general documentation | for everyone |
| language guide | for everyone |
| function guide | for mgmt developers |
| resource guide | for mgmt developers |
| style guide | for mgmt developers |
| godoc API reference | for mgmt developers |
| prometheus guide | for everyone |
| puppet guide | for puppet sysadmins |
| development | for mgmt developers |
| videos | for everyone |
| blogs | for everyone |
Questions:
Please ask in the community! If you have a well phrased question that might benefit others, consider asking it by sending a patch to the FAQ section. I'll merge your question, and a patch with the answer!
Get involved:
Feel free to grab one of the straightforward #mgmtlove issues if you're a first time contributor to the project or if you're unsure about what to hack on! Please get involved by working on one of these items or by suggesting something else! There are some lower priority issues and harder issues available in our TODO file. Please have a look.
Bugs:
Please set the DEBUG constant in main.go
to true, and post the logs when you report the issue.
Feel free to read my article on debugging golang programs.
Patches:
We'd love to have your patches! Please send them by email, or as a pull request.
On the web:
Blog posts and recorded talks about mgmt are listed here!
Happy hacking!
