21 May 2019, 21:24

goiardi version 0.11.10 - Tomato Catchup

It’s been running behind, but goiardi v0.11.10 - Tomato Catchup has finally gotten its act together enough to emerge.

This announcement encompasses two releases, because I dragged my feet for quite a while announcing the 0.11.9 release. As is pretty common with the 0.11.x releases for a while now, the changes here are pretty small. They’re a little more important than some of these other small bugfixes, at least, since they allow newer versions of the Chef tools to work with goiardi.

From the CHANGELOG(s):

* It was brought to my attention by @joerg that 'create_key' is now a valid JSON
  hash key for when creating clients with newer chef tools. Added it to the
  whitelist of valid elements for creating clients. Thanks again for bringing
  it to my attention.

* Follow chef RFC041. Newer chef-clients and knifes (knives?) were breaking
  goiardi wasn't following this RFC by reporting the supported api versions.
  (Thanks julian7 for the PR and bringing it to my attention.)
* Remove dependency on golang.org/x/exp/utf8string - it's failing some tests on
  the Debian build servers, and goiardi's liable to get kicked out of testing
  shortly if it isn't addressed. Since goiardi wasn't actually using utf8string
  for anything real complicated, it was easy enough to tear that out and whip
  up a replacement with built-in functions. (Thanks jordi for bringing this
  situation to my attention as well.)

15 Jun 2018, 10:30

goiardi version 0.11.8 - Coelacanth

It’s been lurking in the ocean for a long time, waiting on both me finding the time to bring it all together, to make the release once it was ready, and then ironing out the transition to using circleci 2.0 to build the packages, but goiardi 0.11.8 - Coelacanth is now available.

There’s not a ton new in this release, but it does bring some depsolver tweaks in that bring goiardi’s depsolver closer to Chef Server’s behavior. The depsolver changes don’t change the actual behavor of cookbook dependency resolution to any great degree, but it’s a bit of an improvement regardless. Along with that, goiardi now purges old sandboxes once they’re done and have been sitting around for a while. This will at least free up a little space.

Packages can be found at the usual places at packagecloud.io and in the homebrew tap, along with the Debian unstable (as of this writing, it should be in testing soon) and Ubuntu universe distro repositories.


* Made some small tweaks and updates to the depsolver to make that a little
  better. NB: Down the road, there may be some further changes to the depsolver,
  especially where 'most constrained' cookbooks are concerned.
* Update the circleci config to use the version 2.0 syntax.
* Add purging old sandboxes that have been hanging around for too long.

This will also be the last release that has support for Debian wheezy – LTS support for wheezy has been dropped, so it seems like a good time to drop it from the goiardi build process. The goiardi SysV init script will be kept available somewhere though in case it’s needed.

Chef 12+ support’s had some progress recently. As has been the case for a long time, the hold up is dealing with all the weird corner cases with RBAC permissions. Once that actually works, very basic Chef 12+ support should fall into place. Unfortunately it’s taken such a long time that there will need to be more time spent getting it back up to speed with more recent developments.

27 Jan 2018, 11:34

goiardi version 0.11.7 - Amfortas

Die Wunde! Die Wunde!

Another bugfix release that took way too long to get done, but various sorts of Real Life™ things kept popping up. The goiardi 0.11.7 - Amfortas release has some pretty serious memory usage improvements, along with some search fixes, more control over logging type information that gets stored, and more.

Packages are up on packagecloud.io and in the homebrew tap, and will be moving into Debian sid and testing shortly. New docker images on Docker Hub (along with some other goodies that have been languishing) should be coming soon as well.


* Allow access to /debug/pprof with a whitelist of IP addresses
* Properly index arrays of hashes, arrays of arrays, etc. in object attributes.
* Pretty serious memory usage improvements with search (both the in-memory
  and postgres searches).
* Fix reconnecting to serf if the connection is somehow interrupted.
* Fix negated range queries (it turns out they *do* have a use after all), and 
  refactor how NOT queries are handled generally.
* Add options to purge old reports and node statuses.
* Add option to skip logging extended object information in the event log.
* A handful of other bugfixes.
* Bump up to using golang 1.9.3 for builds.
* Minor changes to the documentation.

On a frequently said note, I need to get a move on with Chef 12+ support - recent Chef clients no longer work with Chef 11 compatible servers. Eeeek!

15 Jun 2017, 18:28

goiardi version 0.11.5 - Spookay!


This is another release in the ever increasing series of small bugfix releases in the 0.11.x series. The only changes in goiardi 0.11.5 - Spookay! are some fixes for certain somewhat obscure search query cases. Hopefully now I’ll get moving more on the long promised 1.0.0.

From the CHANGELOG, such as it is:

* Several search fixes:
  - With postgres search:
    * Fixed reindexing after it broke with the previous update that eliminated
    a lot of unneeded extra rows in the database.
    * Fixed basic queries with NOT statements.
    * Separately, fixed using NOT with subqueries. On a somewhat complicated
      note, but in a way that appears to match standard Solr behavior, when
      doing a query like "name:chef* AND NOT (admin:true OR admin:bleh)" it
      works as is, but when a negated subquery is followed by another basic
      query statement, it needs to have extra parentheses around the NOT +
      subquery, like "name:chef* AND (NOT (admin:true OR admin:bleh)) AND
      public_key:*". A convoluted and unlikely scenario, but it could happen.
  - With in-memory search:
    * NOT + subqueries was also broken with the in-mem search. The fixes for
      the pg-search partially fixed it for in-mem in that it no longer made the
      server panic, but it was returning incorrect results. Additional work
      ended up being needed for in-mem search.

17 Nov 2015, 13:30

goiardi version 0.10.3 - The Fatal Mistake

This release ended up sitting for a while waiting for me to have time to get it all pulled together, but since there ended up being some extra issues to fix it ended up working out. Goiardi version 0.10.3 “The Fatal Mistake” is now available.

This was supposed to be 0.10.2, but after I had cut the release I found while trying to build a Windows binary with gox that the new version of the tideland logging library, while it was supposed to let OSes without syslog still be able to use the library, was causing gox to blow up. While it should have just worked, I decided to take matters into my own hands and use build tags in goiardi itself to deal with the matter. Of course getting 0.10.3 into shape itself proved to be a bit of a hassle, but it’s ironed out now. In any case, 0.10.2 was skipped.

Binaries are available on the release page, and packages for Debian wheezy and jessie, Ubuntu 14.04, and Raspbian are at the goiardi packagecloud repo.

From the CHANGELOG for both 0.10.2 and 0.10.3:

* Handle someone trying to use syslog on Windows ourselves, rather than
  letting the logging library do it (it was causing trouble with gox).

* Fix up packaging and deploy scripts a bit
* Add sql schemas to the deb
* Fixed a logic error when configuring the address to listen on where the
  value specified in the config file was always ignored, and only an address
  specified on the command line worked. (Thanks to jordi and DQEbert here for
  bringing this to my attention.)
* Added options to specify proxy hostname and port different than what goairdi
  itself is listening on. (Thanks to jordi and DQEbert here as well.)
* CoC
* Added Debian wheezy to the list of distros we generate packages for.
* The logging library goiardi used moved. It had been forked, but since the
  dependencies of said fork also moved, goiardi switched to the new version of
  that library. Happily the logger library had added logging to syslog as an
  option, so we just went back to using upstream at the new location.  (Thanks
  to theckman for providing a fix for this.)
* In concert with the above, add a "fatal" log level.
* Terraform removed the depgraph module, so that's been vendored into goiardi
  along with its digraph dependency.

07 Oct 2015, 10:36

goiardi version 0.10.1 - Presto, su! Mario!

Ah, Tosca, you will pay for this release most dearly!

The new goiardi version 0.10.1 is just another bugfix release, but there’s a lot of stuff in here. It should all lead to an all around smoother goiardi experience.

Binaries are available on the release page, and packages for Debian wheezy, Ubuntu 14.04, and Raspbian are at the goiardi packagecloud repo.


* Fix some tests
* Scripts, configuration files for more efficient packaging
* circleci integration
* Bomb on importing data if public keys don't validate. (thanks jordi and 
  DQEbert for bringing this to my attention.)
* Validate older PKCS#1 keys -- golang's stdlib pukes on them without some
  massaging. (thanks jordi and DQEbert for bringing this to my attention.)
* Fix reindexing - databags were not being reindexed with the postgres search,
  and the SaveItem calls were moved to goroutines; otherwise, the request
  from knife would time out and knife would restart the reindex.
* Allow '.' in cookbook names; despite what an error chef-pedant is looking
  for, those are allowed. (thanks jordi and DQEbert for bringing this to my 
* Make the authentication lib more general (thanks theckman)
* Output the version of golang used to build a particular goiardi binary
  (again, thanks theckman)
* The changed hostname in URLs to download bug didn't get fixed in 0.7.1 quite
  all the way after all. It is now. (Thanks to oker1 for bringing that to my
* Fixed search tests to pass when run using more than one processor. (Brought
  to my attention by theckman.)
* Fixed a deadlock that could happen when saving an in-mem index to disk at
  the exact moment an object was being indexed. Seems to be specific to
  go1.5.1 (or at least it never happened before that I saw), but needs fixed
  anyway. (Also brought to my attention by theckman.)
* Fixed broken pipe errors with too large requests when running chef-pedant
  against goiardi built with go 1.5.1.
* Update some docs.

Next week is Chef Summit. If you’re reading this and are attending, say “hi”.

04 Jun 2015, 14:17

goiardi version 0.9.2 - Lithobrake

This is a small bugfix release before something really cool comes along. This goiardi 0.9.2 - Lithobrake release addresses an issue that @julsevern mentioned he noticed on Twitter, where importing goiardi JSON dumps with reports was breaking because it was exporting reports with a nodeName tag, but import expected a node_name tag.

It turned out that when I brought goiardi in line with golang coding conventions with variable names I inadvertently changed the JSON tag for node names in reports from node_name to nodeName and never noticed. This release fixes that issue. Goiardi will import JSON dumps with either version of the node name tag.

31 Mar 2015, 07:14

goiardi version 0.9.1 - Arthropleura

Photo by Sailko

Arthropleura was a eight and a half foot long millipede that dwelled in the Carboniferous period 340 to 280 million years ago, as well as in your dreams tonight.

It’s been a few months, but goiardi 0.9.1 - Arthropleura is out now. As it happens ChefConf is going on right now. This release wasn’t actually timed to come out at the same time as ChefConf, and I wasn’t able to make it there this year, but that’s how it worked out.

This is yet another interim release addressing some issues that were brought to my attention over January and February that then got put on the back burner for a bit while I was on vacation, busy with real work, and just taking a bit of a goiardi break after I was getting kind of burned out from cranking on it too hard for too long. It slowed down goiardi development for a while, but I was getting pretty useless for a while there anyway.


* Fix error where requests for zero byte cookbook files would crash.
* Authentication docs improvments (thanks oker1!)
* Rewritten and more robust cookbook depsolver.
* Fix for client creation with cheffish (thanks whiteley!)
* Fix for search where searching for something like "foo:bar AND NOT foo:bar"
  was returning incorrect results. (brought to my attention and test provided
  by brimstone, thanks!)
* Fixed a bug where clients could be created with the same name as a user (or
  vice versa) in in-memory mode.

This release has quite a few contributions from others. Thanks go out to oker1, whiteley, and brimstone on github for their pull requests and bringing issues to my attention.

Coming up, I’m planning on at least one more release before 1.0.0 comes out, which will bring more search improvements to finally deal with search performance when there are thousands of nodes. The current ersatz solr implementation works fine for smaller installations, but once there’s a lot of content to be indexed the RAM and speed become problems still. After that these new changes will need to be merged into 1.0.0 and then that branch will be wrapped up. When I left off that branch’s development it was coming along nicely, but still had areas that needed tightened up to fit standard Chef server behavior more closely.

19 Mar 2014, 23:04

goiardi version 0.4.2 - This is Spinal Tap

It seems like only yesterday that there was a goiardi release, but really it was a few days ago. Goiardi version 0.4.2 is hot off the presses and ready for your perusal.

This is a bugfix release. The reason this is the “Spinal Tap” release was because I noticed these problems while I took the day off after getting a spinal tap and was bored, so it seemed fitting. The bug fixes, from the CHANGELOG, are:

  • Perm tweak for nodes updating themselves.
  • Small change with validating role descriptions when creating or updating from JSON.
  • Fix issue with saving complicated indexed objects to disk where improperly flattened indexable objects were making the gob encoder puke all over itself when encoding the tries in the index docs.
  • Fixed a possible regression with synchronizing cookbooks that did not show up in testing, but only in real use.
  • An absolutely bonkers fix for listing cookbook files with webui. Webui wants all of the cookbook top level attributes sent over with a request to /cookbooks/<name>/<version>, but this is the exact opposite of the behavior chef-pedant wants, where empty definitions, attributes, etc. are not sent over. Knife also seems quite content with this, so the fix for now, since the two cases are mutually exclusionary, is to only send the empty hashes for those top level attributes with a GET if the request is coming from the webui. Bizarre, but it seems to be what’s necessary.

These were all problems that evaded notice during testing, but did pop up when I was using goiardi to set up a vagrant VM to start working on letting goiardi run a real database (optionally, of course) instead of the in-memory data store system it’s using now. The in-memory mode is great and all for testing, and being able to freeze the data to disk for persistence is very handy, but being able to use a real database would be nice for some workloads. Supporting both the current in-memory storage and a database backend is a top priority.

Which database to use is still a bit up in the air, but I’m leaning towards throwing caution to the wind and providing support for both MySQL and Postgres, with SQLite as a distinct possibility down the line. MySQL is likely to come first, but that is not set in stone.

16 Mar 2014, 14:32

goiardi version 0.4.1 release

Hot on the heels of the 0.4.0 release comes goiardi version 0.4.1. This release adds a –disable-webui option to disable using chef-webui with goiardi, fixes a bug with parsing configuration file options and rearranges how some of the config struct items are set, fixes a typo in the sample config file, and makes some small documentation tweaks.

Other than that, all the changes announced in the 0.4.0 release announcement and previous releases remain relevant.