tsr 0.7.0 release notes

Welcome to tsr 0.7.0!

These release notes cover the new features, bug fixes, backward incompatible changes and general improvements you’ll want to be aware of when upgrading from tsr 0.6.0 or older versions.

What’s new in tsr 0.7.0

  • quota management via API is back: now tsuru administrators are able to view and change the quota of a user of an application. It can be done from the remote API or using tsuru-admin (issue #869)
  • deploy via upload: now it’s possible to upload a tar archive to the API. In this case, users are able to just drop the file in the tsuru server, without using git. This feature enables the deployment of binaries, WAR files, and other things that may need local processing (issue #874). The tsuru client also includes a tsuru deploy command
  • removing platforms via API: now tsuru administrators are able to remove platforms from tsuru. It can be done from the remote API or using tsuru-admin (issue #779)
  • new apps now get a new environment variable: TSURU_APPDIR. This environment variable represents the path where the application was deployed, the root directory of the application (issue #783)
  • now tsuru server will reload configuration on SIGHUP. Users running the API under upstart or other services like that are now able to call the reload command and get the expected behaviour (issue #898)
  • multiple cnames: now it’s possible to app have multiple cnames. The tsuru set- cname and tsuru unset-cname commands changed to tsuru add-cname and tsuru remove-cname respectively (issue #677).
  • tsuru is now able to heal failing nodes and containers automatically, this is disabled by default. Instructions can be found in the config reference
  • set app’s owner team: now it’s possible to user to change app’s owner team. App’s new owner team should be one of user’s team. Admin user can change app’s owner team to any team. (issue #894).
  • Now it’s possible to configure a health check request path to be called during the deployment process of an application. tsuru will make sure the health check is passing before switching the router to the newly created units. See health check docs for more details.

Bug fixes

  • API: fix the endpoint for creating new services so it returns 409 Conflict instead of 500 when there’s already a service registered with the provided name
  • PlatformAdd: returns better error when an platform is added but there’s no node to build the platform image (issue #906).

Other improvements in tsr 0.7.0

  • API: improve the App swap endpoint, so it will refuse to swap incompatible apps. Two apps are incompatible if they don’t use the same platform or don’t have the same amount of units. Users can force the swap of incompatible apps by providing the force parameter (issue #582)
  • API: admin users now see all service instances in the service instances list endpoint (issue #614)
  • API: Handler that returns information about the deploy has implemented. Its included the diff attribute that returns the difference between the last commit and the preceding it.

Backward incompatible changes

  • tsr ssh-agent has been totally removed, it’s no longe possible to use it with tsuru server
  • tsuru no longer accepts teams with space in the name (issue #674)
  • tsuru no longer supports docker:cluster:storage set to redis, the only storage available is now mongodb. See config reference for more details. Also, there’s a python script that can be used to migrate from redis to mongodb.
  • Hooks semantic has changed, restart:before-each and restart:after-each no longer exist and now restart:before and restart:afer run on every unit. Also existing app.yaml file should be renamed to tsuru.yaml. See hooks for more details.
  • Existing platform images should be updated due to changes in tsuru-circus and tsuru-unit-agent. Old platforms still work, but support will be dropped on the next version.
  • router cnames should be migrate from string to list in redis. There is a script that can be used to migrate it.
  • app should be migrate from string to list in mongo too. You can execute this code to do it:
db.apps.find().forEach(function(item) {
    cname = item.cname;
    item.cname !== "" ? item.cname = [cname]:item.cname = [];