Files
nomad/website/content/docs/concepts/plugins/base.mdx
Aimee Ukasick 03faedbc69 Docs SEO: Update Concepts for search (#24757)
* Update for search engine optimization

* Update descriptions and add intro body summary paragraph

* Apply suggestions from code review

Co-authored-by: Jeff Boruszak <104028618+boruszak@users.noreply.github.com>

---------

Co-authored-by: Jeff Boruszak <104028618+boruszak@users.noreply.github.com>
2025-02-03 09:26:51 -06:00

82 lines
2.5 KiB
Plaintext

---
layout: docs
page_title: Nomad Base Plugin
description: |-
Learn how to create a Nomad plugin so you can extend Nomad's task and device driver features. Review device plugin API functions that you must implement in your device plugin.
---
# Nomad Base Plugin
This page provides conceptual information on Nomad's base plugin, which is a
special plugin type implemented by all plugins. The base plugin allows for
common plugin operations such as defining a configuration schema and version
information.
## Plugin API
#### `PluginInfo() (*PluginInfoResponse, error)`
A `PluginInfoResponse` contains meta data about the plugin.
```go
PluginInfoResponse{
// Type is the plugin type which is implemented
Type: PluginTypeDriver,
// Plugin API versions supported by the plugin
PluginApiVersions: []string{drivers.ApiVersion010},
// Version of the plugin
PluginVersion: "0.1.0",
// Name of the plugin
Name: "foodriver",
}
```
#### `ConfigSchema() (*hclspec.Spec, error)`
The `ConfigSchema` function allows a plugin to tell Nomad the schema for its
configuration. This configuration is given in a [plugin block][pluginblock] of
the client configuration. The schema is defined with the [hclspec][hclspec]
package.
#### `SetConfig(config *Config) error`
The `SetConfig` function is called when starting the plugin for the first
time. The `Config` given has two different configuration fields. The first
`PluginConfig`, is an encoded configuration from the `plugin` block of the
client config. The second, `AgentConfig`, is the Nomad agent's configuration
which is given to all plugins.
## HCL Specifications
`*hclspec.Spec` is a struct that defines the schema to validate an HCL entity
against. The full documentation of the different hcl attribute types can be
found on the [hclspec godoc][hclspec].
For a basic example, lets look at the driver configuration for the raw_exec
driver:
```hcl
job "example" {
...
driver = "raw_exec"
config {
command = "/bin/sleep"
args = ["100"]
}
}
```
The `config` block is what is validated against the `hclspec.Spec`. It has two
keys, command which takes a string attribute and args which takes an array
attribute. The corresponding `*hclspec.Spec` would be:
```go
spec := hclspec.NewObject(map[string]*hclspec.Spec{
"command": hclspec.NewAttr("command", "string", true),
"args": hclspec.NewAttr("args", "list(string)", false),
})
```
[hclspec]: https://godoc.org/github.com/hashicorp/nomad/plugins/shared/hclspec
[pluginblock]: /nomad/docs/configuration/plugin