Next generation distributed, event-driven, parallel config management!

Overview

mgmt: next generation config management!

mgmt!

Go Report Card Build Status GoDoc IRC Patreon Liberapay

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
IRC #mgmtconfig on Freenode
Twitter @mgmtconfig & #mgmtconfig
Mailing list [email protected]
Patreon purpleidea on Patreon
Liberapay purpleidea on Liberapay

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

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:

Read what people are saying and publishing about mgmt!

Happy hacking!

Comments
  • Declarative DSL

    Declarative DSL

    Consider a DSL that is similar to make with explicitly set defaults to map to fqdn's (via import/whatever). This way targets could be handled by an external program of some sort that 'schedules' hosts (e.g host with least latency to $someplace start http server).

    design 
    opened by nwmcsween 49
  • file resource needs improvements

    file resource needs improvements

    The file resource can (currently) only set file contents for a single file. It can't make directories or do anything fancy yet. That's okay, because the remaining parts are left as an introductory patch for a new golang hacker. Here's the design, people working on this code are welcome to suggest alternatives:

    All the work should probably happen in Apply() and StateOK(): https://github.com/purpleidea/mgmt/blob/master/file.go#L339 NOTE: i'm considering changing the API to merge the two functions-- comments welcome. It might be preferable to delay this patch if you're not willing to rebase your work. Such is a pre 1.x release.

    The resource offers up a list of file properties, and does "the right thing": $name - if ends in / then it's a directory, otherwise it's a file $content - for files, this is a string with the contents of the file $content - for directories, this is the path to an existing directory, the structure/contents of which we'll want to copy in $content - for directories, if this is an empty string, it means an empty directory $recursive - if resource would require changing more than a single thing, this must be true, otherwise error. we'll have to reconsider if this is necessary or not. only applies to directories. $force - if resource would require a switch from file to directory or vice versa, then force must be true. otherwise it's an error. it can probably be thought of as the -f flag on rm.

    Lastly (and can be a separate patch) the Watch() function will need support for watching recursively into the directories. Adding fanotify support ( https://github.com/go-fsnotify/fsnotify/issues/114 ) would also be welcome in addition.

    Comments welcome by anyone who is going to hack on this!

    mgmtlove 
    opened by purpleidea 32
  • File: implement file attributes

    File: implement file attributes

    Add owner which must be username or uid of the file owner, group which is the group name or gid of the file, and mode which is the octal unix file permissions.

    opened by mildred 23
  • Allow mgmt to run from Puppet manifests

    Allow mgmt to run from Puppet manifests

    Still on that, but no usable results yet. I had used my first PoC Ruby script to reproduce issue #4.

    My initial approach of using the output of puppet master --compile cannot work. Not only does it not include actual dependency edges, it's also much too raw. I will blog about this with details.

    What I will try to do instead is to rely on the agent side graph generating code, to let Puppet help with validation, munging and the computation of actual edges.

    opened by ffrank 23
  • Ctrl+C doesn't quit mgmt

    Ctrl+C doesn't quit mgmt

    [email protected] ~/s/p/mgmt (master|✔)> ./mgmt run -f examples/graph1b.yaml 
    14:50:16 main.go:65: This is: mgmt, version: 0.0.1-70-g3cf8c4a
    14:50:16 main.go:66: Main: Start: 1454421016718582027
    14:50:16 main.go:196: Main: Running...
    14:50:16 main.go:106: Etcd: Starting...
    14:50:16 etcd.go:132: Etcd: Watching...
    14:50:16 configwatch.go:54: Watching: examples/graph1b.yaml
    14:50:16 main.go:149: Graph: Vertices(2), Edges(1)
    14:50:16 main.go:152: Graphviz: No filename given!
    14:50:16 main.go:163: State: graphNil -> graphStarting
    14:50:16 etcd.go:159: Etcd: Waiting 1000 ms for connection...
    14:50:16 main.go:165: State: graphStarting -> graphStarted
    14:50:16 file.go:340: File[file2]: Apply
    14:50:16 file.go:340: File[file3]: Apply
    14:50:17 etcd.go:132: Etcd: Watching...
    14:50:17 etcd.go:159: Etcd: Waiting 2000 ms for connection...
    14:50:19 etcd.go:132: Etcd: Watching...
    14:50:19 etcd.go:159: Etcd: Waiting 4000 ms for connection...
    14:50:23 etcd.go:132: Etcd: Watching...
    14:50:23 etcd.go:159: Etcd: Waiting 8000 ms for connection...
    14:50:31 etcd.go:132: Etcd: Watching...
    14:50:31 etcd.go:159: Etcd: Waiting 16000 ms for connection...
    ^C14:50:46 main.go:51: Interrupted by ^C
    14:50:47 etcd.go:132: Etcd: Watching...
    14:50:47 etcd.go:159: Etcd: Waiting 16000 ms for connection...
    ^C14:51:03 etcd.go:132: Etcd: Watching...
    14:51:03 etcd.go:159: Etcd: Waiting 16000 ms for connection...
    
    bug 
    opened by igalic 22
  • [LOVE] Our GAPI needs a tweak

    [LOVE] Our GAPI needs a tweak

    This is intended for a new mgmt contributor or for someone with very few patches. If nobody claims this, but you are really itching to write this, that's okay too!

    In mgmt we have a GAPI (graph API) which any frontend can implement to generate graphs that the mgmt engine will run. Currently we have a raw yaml graph input, and a puppet code input. When the mgmt language is built, it will use this API as well.

    (Links to code are at an arbitrary git commit so that they don't break, but obviously you'll want to do this on git master and some things might have moved slightly if we've patches those files. Ping me if you can't find something.)

    Here is the interface: https://github.com/purpleidea/mgmt/blob/73ccbb69ea1d74ab5fd96b2096d5902313588a59/gapi/gapi.go#L44

    The Next() function spits out events when there are new graphs available. In particular, when new "exported resources" are available (from other machines) we refresh our local graphs.

    That stream of events is currently located here: https://github.com/purpleidea/mgmt/blob/73ccbb69ea1d74ab5fd96b2096d5902313588a59/lib/main.go#L377

    But it should actually be hidden inside the GAPI itself, since not every GAPI might necessarily want to Watch for exported resources.

    So, that function should be moved out of there, and into the GAPI, eg here: https://github.com/purpleidea/mgmt/blob/73ccbb69ea1d74ab5fd96b2096d5902313588a59/yamlgraph/gapi.go#L79

    but to wrap it nicely, we'd like to actual have a generic interface for that watch called ResWatch which should go here:

    https://github.com/purpleidea/mgmt/blob/73ccbb69ea1d74ab5fd96b2096d5902313588a59/gapi/gapi.go#L29

    The implementation of that function will probably USE the WatchAll method, and go in here:

    https://github.com/purpleidea/mgmt/blob/73ccbb69ea1d74ab5fd96b2096d5902313588a59/etcd/world.go#L30

    Hopefully this is clear enough, if you have questions please let me know!

    Happy hacking!

    help wanted mgmtlove 
    opened by purpleidea 21
  • Automatic build

    Automatic build

    Would it be possible to publish automated builds generated by travis on GitHub Releases ?

    https://docs.travis-ci.com/user/deployment/releases/

    This would allow us to download the binary for easy deploy on servers.

    opened by mildred 21
  • pippet resource support

    pippet resource support

    The pippet resource implements faster integration of Puppet resources in mgmt at runtime, by piping synchronization commands to a Puppet process that keeps running alongside mgmt. This avoids huge overhead through launching a Puppet process for each operation on a resource that is delegated to Puppet.

    opened by ffrank 19
  • yamlgraph: refactor parsing

    yamlgraph: refactor parsing

    Subset of #143 with just refactoring of YAML parser

    Avoid use of the reflect package, and use an extensible list of registred resource kinds. This also has the benefit of removing the empty VirtRes and AugeasRes struct types when compiling without libvirt and libaugeas.

    opened by mildred 18
  • An interesting change for file state and content

    An interesting change for file state and content

    Consider:

    file "/tmp/foo" {
            content => "hello\n",
    }
    

    Suppose there's an existing file at /tmp/foo, then this is a no-brainer, we edit the file so that it has the expected contents of hello.

    But suppose no file exists? Should we create one or not?

    Puppet does, and at the moment, we do too, because we imply from the content specification that we'd want one. But it turns out that it actually makes our code more complex to do so, and it makes the reversible resource code slightly illogical because of the implied state.

    When I think about it, perhaps it's a mistake in general to ever imply the state. Same logic for specifying mode or any other property if the file is missing.

    What are you thoughts? What does chef, ansible, or any other tool do? Maybe puppet got this one wrong? Let's get it right!

    bug design 
    opened by purpleidea 17
  • Support official builds on supported LTS Ubuntu/Debian releases

    Support official builds on supported LTS Ubuntu/Debian releases

    These are the current LTS releases of Debian/Ubunutu (https://wiki.debian.org/LTS/, https://wiki.ubuntu.com/Releases): Debian 8, Debian 9, Ubuntu 16.04, Ubuntu 18.04.

    I think it would be nice if mgmt would support these with the official builds. The current build in Github releases does not work on any of these OS releases because it is linked against libraries not available on these systems [0].

    This PR adds a test script to verify if a .deb release build under releases/ will install and run on these supported LTS releases.

    You can run tests using:

     git tag -f 0.0.0; make releases/0.0.0/deb/mgmt_0.0.0_amd64.deb; test/test-deb-releases.sh 
    

    There is also a change to the build scripting included which allows to build the .deb release in a Debian 8 system which ensures it will install and run in all OS releases mentioned above.

    A branch with only the test scripting is available at: https://github.com/aequitas/mgmt/tree/deb-test

    [0]

    $ wget https://github.com/purpleidea/mgmt/releases/download/0.0.19/mgmt_0.0.19_amd64.deb
    $ mv mgmt_0.0.19_amd64.deb releases/0.0.19/deb/ 
    $ test/test-deb-releases.sh
    Testing: ubuntu:19.04
    + apt-get update
    + dpkg -i /releases/0.0.19/deb/mgmt_0.0.19_amd64.deb
    Selecting previously unselected package mgmt.
    (Reading database ... 4058 files and directories currently installed.)
    Preparing to unpack .../deb/mgmt_0.0.19_amd64.deb ...
    Unpacking mgmt (0.0.19) ...
    + apt-get install -yqqf
    debconf: delaying package configuration, since apt-utils is not installed
    + mgmt --version
    mgmt version 0.0.19
    Testing: ubuntu:18.04
    + apt-get update
    + dpkg -i /releases/0.0.19/deb/mgmt_0.0.19_amd64.deb
    Selecting previously unselected package mgmt.
    (Reading database ... 4038 files and directories currently installed.)
    Preparing to unpack .../deb/mgmt_0.0.19_amd64.deb ...
    Unpacking mgmt (0.0.19) ...
    + apt-get install -yqqf
    debconf: delaying package configuration, since apt-utils is not installed
    + mgmt --version
    mgmt: /usr/lib/x86_64-linux-gnu/libvirt.so.0: version `LIBVIRT_4.1.0' not found (required by mgmt)
    Testing: debian:9
    + apt-get update
    + dpkg -i /releases/0.0.19/deb/mgmt_0.0.19_amd64.deb
    Selecting previously unselected package mgmt.
    (Reading database ... 6498 files and directories currently installed.)
    Preparing to unpack .../deb/mgmt_0.0.19_amd64.deb ...
    Unpacking mgmt (0.0.19) ...
    + apt-get install -yqqf
    debconf: delaying package configuration, since apt-utils is not installed
    + mgmt --version
    mgmt: /usr/lib/libvirt.so.0: version `LIBVIRT_4.1.0' not found (required by mgmt)
    mgmt: /usr/lib/libvirt.so.0: version `LIBVIRT_3.9.0' not found (required by mgmt)
    mgmt: /usr/lib/libvirt.so.0: version `LIBVIRT_3.7.0' not found (required by mgmt)
    mgmt: /usr/lib/libvirt.so.0: version `LIBVIRT_3.1.0' not found (required by mgmt)
    mgmt: /usr/lib/libvirt.so.0: version `LIBVIRT_3.4.0' not found (required by mgmt)
    Testing: ubuntu:16.04
    + apt-get update
    + dpkg -i /releases/0.0.19/deb/mgmt_0.0.19_amd64.deb
    Selecting previously unselected package mgmt.
    (Reading database ... 4768 files and directories currently installed.)
    Preparing to unpack .../deb/mgmt_0.0.19_amd64.deb ...
    Unpacking mgmt (0.0.19) ...
    + apt-get install -yqqf
    debconf: delaying package configuration, since apt-utils is not installed
    + mgmt --version
    mgmt: /usr/lib/x86_64-linux-gnu/libvirt-lxc.so.0: version `LIBVIRT_LXC_2.0.0' not found (required by mgmt)
    mgmt: /usr/lib/x86_64-linux-gnu/libvirt.so.0: version `LIBVIRT_2.2.0' not found (required by mgmt)
    mgmt: /usr/lib/x86_64-linux-gnu/libvirt.so.0: version `LIBVIRT_4.1.0' not found (required by mgmt)
    mgmt: /usr/lib/x86_64-linux-gnu/libvirt.so.0: version `LIBVIRT_3.9.0' not found (required by mgmt)
    mgmt: /usr/lib/x86_64-linux-gnu/libvirt.so.0: version `LIBVIRT_3.7.0' not found (required by mgmt)
    mgmt: /usr/lib/x86_64-linux-gnu/libvirt.so.0: version `LIBVIRT_3.1.0' not found (required by mgmt)
    mgmt: /usr/lib/x86_64-linux-gnu/libvirt.so.0: version `LIBVIRT_3.0.0' not found (required by mgmt)
    mgmt: /usr/lib/x86_64-linux-gnu/libvirt.so.0: version `LIBVIRT_3.4.0' not found (required by mgmt)
    mgmt: /usr/lib/x86_64-linux-gnu/libvirt.so.0: version `LIBVIRT_1.3.3' not found (required by mgmt)
    mgmt: /usr/lib/x86_64-linux-gnu/libvirt.so.0: version `LIBVIRT_2.0.0' not found (required by mgmt)
    Testing: debian:8
    + apt-get update
    + dpkg -i /releases/0.0.19/deb/mgmt_0.0.19_amd64.deb
    Selecting previously unselected package mgmt.
    (Reading database ... 7627 files and directories currently installed.)
    Preparing to unpack .../deb/mgmt_0.0.19_amd64.deb ...
    Unpacking mgmt (0.0.19) ...
    + apt-get install -yqqf
    debconf: delaying package configuration, since apt-utils is not installed
    + mgmt --version
    mgmt: /usr/lib/libvirt-lxc.so.0: version `LIBVIRT_LXC_2.0.0' not found (required by mgmt)
    mgmt: /usr/lib/libvirt.so.0: version `LIBVIRT_2.2.0' not found (required by mgmt)
    mgmt: /usr/lib/libvirt.so.0: version `LIBVIRT_1.2.11' not found (required by mgmt)
    mgmt: /usr/lib/libvirt.so.0: version `LIBVIRT_1.2.12' not found (required by mgmt)
    mgmt: /usr/lib/libvirt.so.0: version `LIBVIRT_4.1.0' not found (required by mgmt)
    mgmt: /usr/lib/libvirt.so.0: version `LIBVIRT_3.9.0' not found (required by mgmt)
    mgmt: /usr/lib/libvirt.so.0: version `LIBVIRT_1.2.16' not found (required by mgmt)
    mgmt: /usr/lib/libvirt.so.0: version `LIBVIRT_3.7.0' not found (required by mgmt)
    mgmt: /usr/lib/libvirt.so.0: version `LIBVIRT_3.1.0' not found (required by mgmt)
    mgmt: /usr/lib/libvirt.so.0: version `LIBVIRT_1.2.15' not found (required by mgmt)
    mgmt: /usr/lib/libvirt.so.0: version `LIBVIRT_1.2.19' not found (required by mgmt)
    mgmt: /usr/lib/libvirt.so.0: version `LIBVIRT_1.2.14' not found (required by mgmt)
    mgmt: /usr/lib/libvirt.so.0: version `LIBVIRT_3.0.0' not found (required by mgmt)
    mgmt: /usr/lib/libvirt.so.0: version `LIBVIRT_3.4.0' not found (required by mgmt)
    mgmt: /usr/lib/libvirt.so.0: version `LIBVIRT_1.3.3' not found (required by mgmt)
    mgmt: /usr/lib/libvirt.so.0: version `LIBVIRT_2.0.0' not found (required by mgmt)
    FAIL
    The following tests failed:
     ubuntu:18.04 debian:9 ubuntu:16.04 debian:8
    
    opened by aequitas 17
  • add flake for easier build support

    add flake for easier build support

    This change adds support for nix flake based builds. This includes a dev shell required for running make targets like code generation or testing, and a package target for the output mgmt binary. We have also .gitignored the default output location, result.

    Fixes #610

    opened by urandom2 0
  • tftp resources blocks

    tftp resources blocks

    See here: https://github.com/pin/tftp/issues/41

    @vpaprots commented:

    If somebody else stumbles upon this, as I did.. mine hung on a large file (~100mb). s.SetBlockSize(65456) appears to have fixed it. (This might be 'per-spec', I didn't dig all that much.. I think dnsmasq-tftp has a similar issue with block size..)

    opened by purpleidea 1
  • test: Create codeql-analysis.yml

    test: Create codeql-analysis.yml

    Tips:

    • please read the style guide before submitting your patch: docs/style-guide.md

    • commit message titles must be in the form:

    topic: Capitalized message with no trailing period

    or:

    topic, topic2: Capitalized message with no trailing period

    • golang code must be formatted according to the standard, please run:
    make gofmt		# formats the entire project correctly
    

    or format a single golang file correctly:

    gofmt -w yourcode.go
    
    • please rebase your patch against current git master:
    git checkout master
    git pull origin master
    git checkout your-feature
    git rebase master
    git push your-remote your-feature
    hub pull-request	# or submit with the github web ui
    
    • after a patch review, please ping @purpleidea so we know to re-review:
    # make changes based on reviews...
    git add -p		# add new changes
    git commit --amend	# combine with existing commit
    git push your-remote your-feature -f
    # now ping @purpleidea in the github PR since it doesn't notify us automatically
    

    Thanks for contributing to mgmt and welcome to the team!

    opened by purpleidea 1
  • manage bios/firmware settings

    manage bios/firmware settings

    We want some resources and functions for interacting with bios/firmware settings. Here's a short guide:

    https://github.com/fwupd/fwupd/blob/main/docs/bios-settings.md

    This uses the linux firmware attributes API: https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-class-firmware-attributes

    @hughsie talked about this here: https://blogs.gnome.org/hughsie/2022/08/30/new-fwupd-1-8-4-release/

    The first step is deciding whether to wrap this from pure golang or to wrap the fwupdmgr command. It has a --json flag so this is plausible.

    Cheers

    opened by purpleidea 1
  • add auth, so mgmt can be used on publicly accessible networks

    add auth, so mgmt can be used on publicly accessible networks

    Hi folks, is the FAQ up to date? It says "Auth hasn't been implemented yet, so you should only use it in trusted environments (not on publicly accessible networks) for now." https://github.com/purpleidea/mgmt/blob/master/docs/faq.md#is-this-project-ready-for-production

    If that is still true, I can't use mgmt yet for my use cases, so I wanted to file an issue I could follow so I can see when it's worth trying mgmt.

    If that is no longer true, could you please update the documentation? Thank you :)

    opened by skyfaller 0
Releases(0.0.21)
Production-Grade Container Scheduling and Management

Kubernetes (K8s) Kubernetes, also known as K8s, is an open source system for managing containerized applications across multiple hosts. It provides ba

Kubernetes 94.2k Dec 2, 2022
An edge-native container management system for edge computing

SuperEdge is an open source container management system for edge computing to manage compute resources and container applications in multiple edge regions. These resources and applications, in the current approach, are managed as one single Kubernetes cluster. A native Kubernetes cluster can be easily converted to a SuperEdge cluster.

SuperEdge 880 Dec 1, 2022
cloud-native local storage management system

Open-Local是由多个组件构成的本地磁盘管理系统,目标是解决当前 Kubernetes 本地存储能力缺失问题。通过Open-Local,使用本地存储会像集中式存储一样简单。

null 317 Dec 8, 2022
JuiceFS is a distributed POSIX file system built on top of Redis and S3.

JuiceFS is an open-source POSIX file system built on top of Redis and object storage (e.g. Amazon S3), designed and optimized for cloud native environ

Juicedata, Inc 7.1k Nov 30, 2022
KEDA is a Kubernetes-based Event Driven Autoscaling component. It provides event driven scale for any container running in Kubernetes

Kubernetes-based Event Driven Autoscaling KEDA allows for fine-grained autoscaling (including to/from zero) for event driven Kubernetes workloads. KED

KEDA 5.7k Dec 5, 2022
K8s-network-config-operator - Kubernetes network config operator to push network config to switches

Kubernetes Network operator Will add more to the readme later :D Operations The

Daniel Hertzberg 6 May 16, 2022
Build event-driven and event streaming applications with ease

Commander ?? Commander is Go library for writing event-driven applications. Enabling event sourcing, RPC over messages, SAGA's, bidirectional streamin

Jeroen Rinzema 61 Nov 2, 2022
💡 A Distributed and High-Performance Monitoring System. The next generation of Open-Falcon

夜莺简介 夜莺是一套分布式高可用的运维监控系统,最大的特点是混合云支持,既可以支持传统物理机虚拟机的场景,也可以支持K8S容器的场景。同时,夜莺也不只是监控,还有一部分CMDB的能力、自动化运维的能力,很多公司都基于夜莺开发自己公司的运维平台。开源的这部分功能模块也是商业版本的一部分,所以可靠性有保

DiDi 5.7k Dec 5, 2022
Tarmac is a unique framework designed for the next generation of distributed systems

Framework for building distributed services with Web Assembly

Benjamin Cane 224 Dec 5, 2022
Colonies is a generic framework for implementing next-generation distributed applications and systems

Colonies is a generic framework for implementing next-generation distributed applications and systems. It can be used as a building block for grid computing or edge computing, e.g. implement a meta operating system or cloud-of-cloud platform that combines many execution environments into a new virtual computing environment that can be controlled using an single unified API.

null 3 Nov 14, 2022
⚙️ Dead Simple Config Management, load and persist config without having to think about where and how.

Configo Dead Simple Config Management, load and persist config without having to think about where and how. Install go get github.com/UltiRequiem/conf

Eliaz Bobadilla 8 Apr 6, 2022
parallel: a Go Parallel Processing Library

parallel: a Go Parallel Processing Library Concurrency is hard. This library doesn't aim to make it easy, but it will hopefully make it a little less

Ryan Skidmore 29 May 9, 2022
M3u8-parallel-downloader - M3u8 parallel downloader with golang

m3u8-parallel-downloader Usage ./m3u8-parallel-downloader -input http://example.

CzBiX 4 Aug 12, 2022
Dapr is a portable, event-driven, runtime for building distributed applications across cloud and edge.

Dapr is a portable, serverless, event-driven runtime that makes it easy for developers to build resilient, stateless and stateful microservices that run on the cloud and edge and embraces the diversity of languages and developer frameworks.

Dapr 20k Dec 3, 2022
A next-generation testing tool. Orion provides a powerful DSL to write and automate your acceptance tests

Orion is born to change the way we implement our acceptance tests. It takes advantage of HCL from Hashicorp t o provide a simple DSL to write the acceptance tests.

Wesovi Labs 45 Aug 31, 2022
:paw_prints: Creeper - The Next Generation Crawler Framework (Go)

About Creeper is a next-generation crawler which fetches web page by creeper script. As a cross-platform embedded crawler, you can use it for your new

Plutonist 769 Dec 4, 2022
🐶 Next generation building tool for nothing

Oscar ?? Next generation building tool for nothing Motivation Imitation is the sincerest form of flattery. Oscar is yet another nonsense activity gene

dongdong 67 Nov 24, 2022
This is the next generation Go based Airbyte CLI.

Airbyte CLI This is the next generation Go based Airbyte CLI. Contents Setup Configuration as YAML Usage get search check logs export create Setup Clo

Harshith Mullapudi 24 Sep 6, 2022
Elkeid is a Cloud-Native Host-Based Intrusion Detection solution project to provide next-generation Threat Detection and Behavior Audition with modern architecture.

Elkeid is a Cloud-Native Host-Based Intrusion Detection solution project to provide next-generation Threat Detection and Behavior Audition with modern architecture.

Bytedance Inc. 1.5k Nov 30, 2022
lmap (LinuxHub's Nmap) is the nmap next generation pro plus max

lmap lmap (LinuxHub's Nmap) is the nmap next generation pro plus max, made by 浪神 (from THE GREAT LinuxHub). LICENSE Copyright (C) <2021> <LinuxHub-Gr

LinuxHub 4 Mar 29, 2022