diff --git a/README.md b/README.md new file mode 100644 index 0000000..f2338d8 --- /dev/null +++ b/README.md @@ -0,0 +1,125 @@ +# 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: cioplenu/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. + +## Example + +```yaml +resource_types: + - name: nomad + type: registry-image + source: + repository: cioplenu/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 +```