2019-03-04 14:04:53 +00:00
|
|
|
---
|
2020-02-06 23:45:31 +00:00
|
|
|
layout: docs
|
|
|
|
page_title: Plugins
|
|
|
|
sidebar_title: Plugins
|
|
|
|
description: Learn about how external plugins work in Nomad.
|
2019-03-04 14:04:53 +00:00
|
|
|
---
|
|
|
|
|
|
|
|
# Plugins
|
|
|
|
|
|
|
|
Nomad 0.9 introduced a plugin framework which allows users to extend the
|
|
|
|
functionality of some components within Nomad. The design of the plugin system
|
|
|
|
is inspired by the lessons learned from plugin systems implemented in other
|
|
|
|
HashiCorp products such as Terraform and Vault.
|
|
|
|
|
2019-05-08 16:54:44 +00:00
|
|
|
The following components are currently pluggable within Nomad:
|
2019-03-04 14:04:53 +00:00
|
|
|
|
2020-02-06 23:45:31 +00:00
|
|
|
- [Task Drivers](/docs/internals/plugins/task-drivers)
|
|
|
|
- [Devices](/docs/internals/plugins/devices)
|
2019-03-04 14:04:53 +00:00
|
|
|
|
|
|
|
# Architecture
|
|
|
|
|
|
|
|
The Nomad plugin framework uses the [go-plugin][goplugin] project to expose
|
2019-05-15 19:02:16 +00:00
|
|
|
a language independent plugin interface. Plugins implement a set of gRPC
|
2019-04-23 15:15:26 +00:00
|
|
|
services and methods which Nomad manages by running the plugin and calling the
|
|
|
|
implemented RPCs. This means that plugins are free to be implemented in the
|
|
|
|
author's language of choice.
|
2019-03-04 14:04:53 +00:00
|
|
|
|
|
|
|
To make plugin development easier, a set of go interfaces and structs exist for
|
2019-05-15 19:02:16 +00:00
|
|
|
each plugin type that abstract away go-plugin and the gRPC interface. The
|
2019-03-04 14:04:53 +00:00
|
|
|
guides in this documentation reference these abstractions for ease of use.
|
|
|
|
|
|
|
|
[goplugin]: https://github.com/hashicorp/go-plugin
|