README
Goiardi
Goiardi is an implementation of the Chef server (http://www.chef.io) written in Go. It can either run entirely in memory with the option to save and load the in-memory data and search indexes to and from disk, drawing inspiration from chef-zero, or it can use MySQL or PostgreSQL as its storage backend.
DOCUMENTATION
The full goiardi documentation has been moved out of this README because it was
getting too big to be easily manageable. It now uses sphinx to manage and format
the documentation, which can be found under the docs/
directory. To learn
about sphinx-doc, see http://sphinx-doc.org/. The documentation can also be
found online at http://goiardi.readthedocs.io/en/latest/.
In addition to the aforementioned Chef documentation at http://docs.chef.io, more documentation specific to goiardi can be viewed with godoc. See https://godoc.org/golang.org/x/tools/cmd/godoc for an explanation of how godoc works. The goiardi godocs can also be viewed online at https://godoc.org/github.com/ctdk/goiardi.
TODO
See the TODO file for an up-to-date list of what needs to be done. There's a lot.
BUGS
There's going to be a lot of these for a while, so we'll just keep those in a BUGS file, won't we?
WHY?
This started as a project to learn Go, and because I thought that an in memory chef server would be handy. Then I found out about chef-zero, but I still wanted a project to learn Go, so I kept it up. Chef 11 Server also only runs under Linux at this time, while Goiardi is developed under Mac OS X and ought to run under any platform Go supports (only partially tested at this time though).
CONTRIBUTING
If you feel like contributing, great! Just fork the repo, make your improvements, and submit a pull request. Tests would, of course, be appreciated. Adding tests where there are no tests currently would be even more appreciated. At least, though, try and not break anything worse than it is. Test coverage has improved, but is still an ongoing concern.
AUTHOR
Jeremy Bingham (jeremy@goiardi.gl)
COPYRIGHT
Copyright 2013-2017, Jeremy Bingham
The depgraph
and digraph
packages are vendored from terraform and are
copyrighted by Hashicorp.
CODE OF CONDUCT
This project adheres to the [Open Code of Conduct][code-of-conduct]. By participating, you are expected to honor this code. [code-of-conduct]: http://todogroup.org/opencodeofconduct/#Goiardi/abuse-coc@goiardi.gl
This code of conduct can also be found in CONDUCT.md in this repository.
LICENSE
Like many Chef ecosystem programs, goairdi is licensed under the Apache 2.0 License. See the LICENSE file for details.
The goiardi documentation in the docs
directory is licensed under a Creative
Commons Attribution 4.0 International (CC-BY 4.0) License.
Chef is copyright (c) 2008-2016 Chef Software (formerly Opscode, Inc.) and its various contributors.
The depgraph
and digraph
packages are vendored from Hashicorp's terraform
package, and is under the Mozilla Public License version 2.0. The MPL is
included in those directories and applies only to those files.
A small part of go-chef/chef
is included under the authentication
directory
to remove a circular dependency with tests between goiardi and go-chef, only
enough to make a minimal client sufficient to test authenticating headers. It is
copyright 2013-2014, Jesse Nelson under the terms of the Apache 2.0 license.
Thanks go out to the fine folks of Chef Software and the Chef community for all their hard work.
Also, if you were wondering, Ettore Boiardi was the man behind Chef Boyardee. Wakka wakka.
Documentation
Overview ¶
The full goiardi documentation has been moved out of this file because it was getting too big to be easily manageable. It now uses sphinx to manage and format the documentation, which can be found under the `docs/` directory. To learn about sphinx-doc, see http://sphinx-doc.org/. The documentation can also be found online at http://goiardi.readthedocs.io/en/latest/. The godocs for goiardi are now focused on development and internals.
Source Files
Directories
Path | Synopsis |
---|---|
Package actor implements actors, which is an interface encompassing both clients or users.
|
Package actor implements actors, which is an interface encompassing both clients or users. |
Package authentication contains functions used to authenticate requests from the signed headers.
|
Package authentication contains functions used to authenticate requests from the signed headers. |
Package chefcrypto bundles up crytographic routines for goairdi.
|
Package chefcrypto bundles up crytographic routines for goairdi. |
Package client defines the Chef clients.
|
Package client defines the Chef clients. |
Package config parses command line flags and config files, and defines options used elsewhere in goiardi.
|
Package config parses command line flags and config files, and defines options used elsewhere in goiardi. |
Package cookbook handles the basic building block of any chef (or goiardi) run, the humble cookbook.
|
Package cookbook handles the basic building block of any chef (or goiardi) run, the humble cookbook. |
Package databag provides a convenient way to store arbitrary data on the server.
|
Package databag provides a convenient way to store arbitrary data on the server. |
Package datastore provides data store functionality.
|
Package datastore provides data store functionality. |
The depgraph package is used to create and model a dependency graph of nouns.
|
The depgraph package is used to create and model a dependency graph of nouns. |
Package environment provides...
|
Package environment provides... |
Package filestore provides local file uploads and downloads for cookbook uploading and downloading.
|
Package filestore provides local file uploads and downloads for cookbook uploading and downloading. |
Package gerror defines a custom error type with a HTTP status code for goiardi.
|
Package gerror defines a custom error type with a HTTP status code for goiardi. |
Package indexer indexes objects that implement the Indexable interface.
|
Package indexer indexes objects that implement the Indexable interface. |
Package loginfo tracks changes to objects when they're saved, noting the actor performing the action, what kind of action it was, the time of the change, the type of object and its id, and a dump of the object's state.
|
Package loginfo tracks changes to objects when they're saved, noting the actor performing the action, what kind of action it was, the time of the change, the type of object and its id, and a dump of the object's state. |
Package node implements nodes.
|
Package node implements nodes. |
Package report implements reporting on client runs and node changes.
|
Package report implements reporting on client runs and node changes. |
Package reqctx contains some types, variables, and functions for request contexts.
|
Package reqctx contains some types, variables, and functions for request contexts. |
Package role provides roles, which are a way to share common attributes and run lists between different nodes.
|
Package role provides roles, which are a way to share common attributes and run lists between different nodes. |
Package sandbox allows checking files before re-uploading them, so any given version of a file need only be uploaded once rather than being uploaded repeatedly.
|
Package sandbox allows checking files before re-uploading them, so any given version of a file need only be uploaded once rather than being uploaded repeatedly. |
Package search provides search and index capabilities for goiardi.
|
Package search provides search and index capabilities for goiardi. |
Package secret contains functions for handling secrets, like public/private keys stored outside of goiardi.
|
Package secret contains functions for handling secrets, like public/private keys stored outside of goiardi. |
Package serfin bundles up serf functions for goiardi.
|
Package serfin bundles up serf functions for goiardi. |
Package shovey provides a means for pushing jobs out to nodes to be run independently of a chef-client run.
|
Package shovey provides a means for pushing jobs out to nodes to be run independently of a chef-client run. |
Package user is the result of users and clients ended up having to be split apart after all, once adding the SQL backing started falling into place.
|
Package user is the result of users and clients ended up having to be split apart after all, once adding the SQL backing started falling into place. |
Package util contains various utility functions that are useful across all of goiardi.
|
Package util contains various utility functions that are useful across all of goiardi. |