changed delimiters from "{{", "}}" to "{{+", "+}}", to avoid parsing the vault templates Signed-off-by: Amneesh Singh <natto@weirdnatto.in>
129 lines
3.2 KiB
Markdown
129 lines
3.2 KiB
Markdown
# Nomad Job Concourse Resource
|
|
|
|
A concurse resource for jobs on [Hashicorp Nomad](https://www.nomadproject.io/).
|
|
|
|
## Source Configuration
|
|
```yaml
|
|
resource_types:
|
|
- name: nomad
|
|
type: registry-image
|
|
source:
|
|
repository: natto1784/concourse-nomad-resource
|
|
tag: latest
|
|
|
|
resources:
|
|
- name: test-job
|
|
type: nomad
|
|
source:
|
|
url: http://nomad-cluster.local:4646
|
|
name: test
|
|
token: XXXX
|
|
```
|
|
|
|
* `url`: (required) URL of the nomad api on a node of your cluster
|
|
* `name`: (required) name of the job
|
|
* `token`: Nomad ACL token
|
|
|
|
## Behavior
|
|
|
|
### `check`: Check for new [versions](https://www.nomadproject.io/api-docs/jobs#list-job-versions) of the job
|
|
|
|
Checks if there are new versions of the job. It uses the `nomad job history` command of the [nomad
|
|
CLI](https://www.nomadproject.io/docs/commands/job/history) and not all versions since the first
|
|
deployment might be available.
|
|
|
|
### `in`: noop
|
|
|
|
### `out`: Run a new version of the job
|
|
|
|
Deploys a new version of the job to the cluster using `nomad job run` by reading a HCL job file.
|
|
[Golang template variables](https://golang.org/pkg/text/template/) can be used to insert information
|
|
like a version on the fly.
|
|
|
|
#### Parameters
|
|
* `job_path`: (required) Path of the HCL job file to run
|
|
* `vars`: { [key: string]: string } dictionary of variables to substitute in the job file. Each key
|
|
should be represented in the job file as `{{+.key+}}`
|
|
* `var_files`: { [key: string]: string } dictionary of paths to files to read to get variable
|
|
values. Each key should be represented in the job file as `{{+.key+}}` and the values should be path
|
|
to text files which content will be used as the variable value. Whitespace and trailing newlines
|
|
will be trimmed from the value.
|
|
* `templating`: { bool }: Whether to use templating or not. `true` by default
|
|
* `restart`: { bool }: Whether to restart a job or not. `false` by default
|
|
> **NOTE:** Restart just runs `stop -purge` against the job before running `run` against it
|
|
|
|
## Example
|
|
|
|
```yaml
|
|
resource_types:
|
|
- name: nomad
|
|
type: registry-image
|
|
source:
|
|
repository: natto1784/concourse-nomad-resource
|
|
tag: latest
|
|
|
|
resources:
|
|
- name: sample-job
|
|
type: nomad
|
|
source:
|
|
url: http://10.4.0.4:4646
|
|
name: sample
|
|
token: ((nomad-cluster-token))
|
|
|
|
- name: sample-repo
|
|
type: git
|
|
source:
|
|
uri: git@github.com:cioplenu/sample.git
|
|
branch: main
|
|
private_key: ((private-repo-key))
|
|
|
|
jobs:
|
|
- name: deploy
|
|
plan:
|
|
- get: sample-repo
|
|
- put: sample-job
|
|
params:
|
|
job_path: sample-repo/sample.nomad
|
|
vars:
|
|
registry_token: ((registry-token))
|
|
var_files:
|
|
version: sample-repo/ci/version
|
|
```
|
|
|
|
with a job file like:
|
|
|
|
```hcl
|
|
job "sample" {
|
|
region = "de"
|
|
datacenters = ["dc1"]
|
|
type = "service"
|
|
|
|
group "sample" {
|
|
task "sample" {
|
|
driver = "docker"
|
|
|
|
config {
|
|
image = "cioplenu/sample:{{+.version+}}"
|
|
auth = {
|
|
username = "some-username"
|
|
password = "{{+.registry_token+}}"
|
|
}
|
|
force_pull = true
|
|
}
|
|
|
|
resources {
|
|
cpu = 50
|
|
memory = 50
|
|
network {
|
|
mbits = 1
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
```
|
|
and a version file like:
|
|
```text
|
|
9.1.4
|
|
```
|