This adds a simple API for adding static, polymorphic, pure functions. This lets you define a list of type signatures and the associated implementations to overload a particular function name. The internals of this API then do all of the hard work of matching the available signatures to what statically type checks, and then calling the appropriate implementation. While this seems as if this would only work for function polymorphism with a finite number of possible types, while this is mostly true, it also allows you to add the `variant` "wildcard" type into your signatures which will allow you to match a wider set of signatures. A canonical use case for this is the len function which can determine the length of both lists and maps with any contained type. (Either the type of the list elements, or the types of the map keys and values.) When using this functionality, you must be careful to ensure that there is only a single mapping from possible type to signature so that the "dynamic dispatch" of the function is unique. It is worth noting that this API won't cover functions which support an arbitrary number of input arguments. The well-known case of this, printf, is implemented with the more general function API which is more complicated. This patch also adds some necessary library improvements for comparing types to partial types, and to types containing variants. Lastly, this fixes a bug in the `NewType` parser which parsed certain complex function types wrong.
84 lines
3.9 KiB
Markdown
84 lines
3.9 KiB
Markdown
# *mgmt*: next generation config management!
|
|
|
|
[](art/)
|
|
|
|
[](https://goreportcard.com/report/github.com/purpleidea/mgmt)
|
|
[](http://travis-ci.org/purpleidea/mgmt)
|
|
[](https://godoc.org/github.com/purpleidea/mgmt)
|
|
[](https://webchat.freenode.net/?channels=#mgmtconfig)
|
|
[](https://ci.centos.org/job/purpleidea-mgmt/)
|
|
|
|
## Community:
|
|
|
|
Come join us in the `mgmt` community!
|
|
|
|
| Medium | Link |
|
|
|---|---|
|
|
| IRC | [#mgmtconfig](https://webchat.freenode.net/?channels=#mgmtconfig) on Freenode |
|
|
| Twitter | [@mgmtconfig](https://twitter.com/mgmtconfig) & [#mgmtconfig](https://twitter.com/hashtag/mgmtconfig) |
|
|
| Mailing list | [mgmtconfig-list@redhat.com](https://www.redhat.com/mailman/listinfo/mgmtconfig-list) |
|
|
|
|
## 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.](docs/on-the-web.md)
|
|
|
|
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 developers should read the [quick start guide](docs/quick-start-guide.md).
|
|
|
|
## Documentation:
|
|
|
|
Please read, enjoy and help improve our documentation!
|
|
|
|
| Documentation | Additional Notes |
|
|
|---|---|
|
|
| [quick start guide](docs/quick-start-guide.md) | for mgmt developers |
|
|
| [frequently asked questions](docs/faq.md) | for everyone |
|
|
| [general documentation](docs/documentation.md) | for everyone |
|
|
| [language guide](docs/language-guide.md) | for everyone |
|
|
| [function guide](docs/function-guide.md) | for mgmt developers |
|
|
| [resource guide](docs/resource-guide.md) | for mgmt developers |
|
|
| [style guide](docs/style-guide.md) | for mgmt developers |
|
|
| [godoc API reference](https://godoc.org/github.com/purpleidea/mgmt) | for mgmt developers |
|
|
| [prometheus guide](docs/prometheus.md) | for everyone |
|
|
| [puppet guide](docs/puppet-guide.md) | for puppet sysadmins |
|
|
| [development](docs/development.md) | for mgmt developers |
|
|
|
|
## Questions:
|
|
|
|
Please ask in the [community](#community)!
|
|
If you have a well phrased question that might benefit others, consider asking
|
|
it by sending a patch to the [FAQ](docs/faq.md) section. I'll merge your
|
|
question, and a patch with the answer!
|
|
|
|
## Roadmap:
|
|
|
|
Feel free to grab one of the straightforward [#mgmtlove](https://github.com/purpleidea/mgmt/labels/mgmtlove)
|
|
issues if you're a first time contributor to the project or if you're unsure
|
|
about what to hack on!
|
|
Please see: [TODO.md](TODO.md) for a list of upcoming work and TODO items.
|
|
Please get involved by working on one of these items or by suggesting something
|
|
else!
|
|
|
|
## Bugs:
|
|
|
|
Please set the `DEBUG` constant in [main.go](https://github.com/purpleidea/mgmt/blob/master/main.go)
|
|
to `true`, and post the logs when you report the [issue](https://github.com/purpleidea/mgmt/issues).
|
|
Bonus points if you provide a [shell](https://github.com/purpleidea/mgmt/tree/master/test/shell)
|
|
or [OMV](https://github.com/purpleidea/mgmt/tree/master/test/omv) reproducible
|
|
test case.
|
|
Feel free to read my article on [debugging golang programs](https://purpleidea.com/blog/2016/02/15/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!](docs/on-the-web.md)
|
|
|
|
Happy hacking!
|