Otter Documentation

Otter Extensions

Although you can already do anything in Otter with script assets and the other tightly-integrated PowerShell features, you can also build an Otter Extension to add additional components and functionality into your Otter Installation.

A lot of Otter's functionality is delivered through built-in extensions, and you can add several types of components by simply creating an extension that's built against the Otter SDK. Here's what you can extend:

  • Configurations - information collected from a server, or a template for desired configuration
  • Operations - be it a simple Execute operation, or a Ensure operation
  • Raft Repositories - backing store for plans and assets
  • Resource Credentials - a secret
  • User Directories - authentication and privileges
  • Variable Functions - used in plans to provide or manipulate values

Installing and Managing Extensions

See the Otter Extension Tutorial for instructions on installing extensions; we plan to ship with a BuildMaster-style extension gallery that will make installing custom extensions much easier in 1.2.

Script Assets vs Custom Extensions

Scripts are significantly easier to develop and manage: just write, test, then upload (or commit), and your script will be available for execution in a plan as any other operation. For most things you'd need to do in a plan, that's perfectly adequate.

Extensions are a bit more involved, but allow you to build components other than operations, and provide maximum flexibility for building operations. You can also incorporate third-party libraries into your extension, and use the powerful libraries already built-in to the Otter SDK.

  • Direct Agent Access - with components from Inedo.Agents, you can build Operations that will be faster and scale better than using scripting runtime
  • Rich Descriptions - the Inedo.Documentation components enable you to describe Operations in a plan using a consistent, visually-rich description so that anyone reading it will see, at a glance, what it's configured to do
  • Strongly-typed Database Access - data access components in Inedo.Otter.Data provide direct -- and safe -- access to the data you persist in Otter's database from the Web Application without needing to use the API; use it to query or manipulate data with DB::Methods

Additionally, extensions may be easier to unit test and mock using the testing framework of your choice.