open-nomad/client
grembo edd3b8a20c
Un-break templates when using vault stanza change_mode noop (#11783)
Templates in nomad jobs make use of the vault token defined in
the vault stanza when issuing credentials like client certificates.

When using change_mode "noop" in the vault stanza, consul-template
is not informed in case a vault token is re-issued (which can
happen from time to time for various reasons, as described
in https://www.nomadproject.io/docs/job-specification/vault).

As a result, consul-template will keep using the old vault token
to renew credentials and - once the token expired - stop renewing
credentials. The symptom of this problem is a vault_token
file that is newer than the issued credential (e.g., TLS certificate)
in a job's /secrets directory.

This change corrects this, so that h.updater.updatedVaultToken(token)
is called, which will inform stakeholders about the new
token and make sure, the new token is used by consul-template.

Example job template fragment:

    vault {
        policies = ["nomad-job-policy"]
        change_mode = "noop"
    }

    template {
      data = <<-EOH
        {{ with secret "pki_int/issue/nomad-job"
        "common_name=myjob.service.consul" "ttl=90m"
        "alt_names=localhost" "ip_sans=127.0.0.1"}}
        {{ .Data.certificate }}
        {{ .Data.private_key }}
        {{ .Data.issuing_ca }}
        {{ end }}
      EOH
      destination = "${NOMAD_SECRETS_DIR}/myjob.crt"
      change_mode = "noop"
    }

This fix does not alter the meaning of the three change modes of vault

- "noop" - Take no action
- "restart" - Restart the job
- "signal" - send a signal to the task

as the switch statement following line 232 contains the necessary
logic.

It is assumed that "take no action" was never meant to mean "don't tell
consul-template about the new vault token".

Successfully tested in a staging cluster consisting of multiple
nomad client nodes.
2022-01-10 14:41:38 -05:00
..
allocdir replace 'a alloc' with 'an alloc' where appropriate (#11792) 2022-01-10 11:59:46 -05:00
allochealth e2e test for on_update service checks 2021-02-08 08:32:40 -05:00
allocrunner Un-break templates when using vault stanza change_mode noop (#11783) 2022-01-10 14:41:38 -05:00
allocwatcher client: never embed alloc_dir in chroot 2021-10-18 09:22:01 -07:00
config Expose Consul template configuration parameters (#11606) 2022-01-10 10:19:07 -05:00
consul consul: plubming for specifying consul namespace in job/group 2021-04-05 10:03:19 -06:00
devicemanager Fix some errcheck errors (#9811) 2021-01-14 12:46:35 -08:00
dynamicplugins Add gosimple linter (#9590) 2020-12-09 11:05:18 -08:00
fingerprint fix host network reserved port fingerprint (#11728) 2021-12-22 15:29:54 -05:00
interfaces replace 'a alloc' with 'an alloc' where appropriate (#11792) 2022-01-10 11:59:46 -05:00
lib gofmt all the files 2021-10-01 10:14:28 -04:00
logmon logmon: Fix a memory leak on task restart 2021-10-05 12:11:53 -04:00
pluginmanager Log error if there are no event handlers registered 2021-10-11 19:44:52 +00:00
servers client: drop unused DC field from servers list 2019-05-20 14:19:15 -07:00
state gofmt all the files 2021-10-01 10:14:28 -04:00
stats deps: bump gopsutil to v3.21.2 2021-03-30 16:02:51 -04:00
structs remove generated files 2021-11-24 18:54:50 +00:00
taskenv client: task env vars should take precendece over host env vars. 2021-09-20 09:15:28 +01:00
testutil cli: refactor operator debug capture (#11466) 2021-11-05 19:43:10 -04:00
vaultclient Add gosimple linter (#9590) 2020-12-09 11:05:18 -08:00
acl.go Audit config, seams for enterprise audit features 2020-03-23 13:47:42 -04:00
acl_test.go Event Stream: Track ACL changes, unsubscribe on invalidating changes (#9447) 2020-12-01 11:11:34 -05:00
agent_endpoint.go json handles were moved to a new package in #10202 2021-04-02 13:31:10 +00:00
agent_endpoint_test.go fix params for Agent.Host client RPC (#8795) 2020-08-31 17:14:26 -04:00
alloc_endpoint.go client: fix multiple imports (#10537) 2021-05-13 14:30:31 -04:00
alloc_endpoint_test.go tests: remove duplicate import statements. 2021-06-11 09:39:22 +02:00
alloc_watcher_e2e_test.go tests: swap lib/freeport for tweaked helper/freeport 2019-12-09 08:37:32 -06:00
client.go replace 'a alloc' with 'an alloc' where appropriate (#11792) 2022-01-10 11:59:46 -05:00
client_stats_endpoint.go Server side impl + touch ups 2018-02-15 13:59:02 -08:00
client_stats_endpoint_test.go tests: swap lib/freeport for tweaked helper/freeport 2019-12-09 08:37:32 -06:00
client_test.go client: defensively log reserved ports 2021-10-04 15:43:35 -07:00
csi_endpoint.go CSI: use AccessMode/AttachmentMode from CSIVolumeClaim 2021-04-07 11:24:09 -04:00
csi_endpoint_test.go CSI ListSnapshots secrets implementation 2021-07-28 11:30:29 -07:00
driver_manager_test.go tests: fix data race in client TestDriverManager_Fingerprint_Periodic 2019-05-21 09:49:56 -04:00
enterprise_client_oss.go gofmt all the files 2021-10-01 10:14:28 -04:00
fingerprint_manager.go chore: fixup inconsistent method receiver names. (#11704) 2021-12-20 11:44:21 +01:00
fingerprint_manager_test.go use allow/deny instead of the colored alternatives (#9019) 2020-10-12 08:47:05 -04:00
fs_endpoint.go Fix log streaming missing frames (#11721) 2022-01-04 14:07:16 -05:00
fs_endpoint_test.go Fix log streaming missing frames (#11721) 2022-01-04 14:07:16 -05:00
gc.go chore: fix incorrect docstring formatting. 2021-08-30 11:08:12 +02:00
gc_test.go Events/msgtype cleanup (#9117) 2020-10-19 09:30:15 -04:00
heartbeatstop.go Delayed evaluations for stop_after_client_disconnect can cause unwanted extra followup evaluations around job garbage collection (#8099) 2020-06-03 09:48:38 -04:00
heartbeatstop_test.go docs: s/hearbeat/heartbeat and fix link 2020-07-23 11:33:34 -07:00
node_updater.go client: use NewNodeEvent builder for consistency (#7559) 2020-03-31 10:02:16 -04:00
rpc.go pool: track usage of incoming streams (#10710) 2021-06-07 10:22:37 -04:00
rpc_test.go Simplify Bootstrap logic in tests 2020-03-02 13:47:43 -05:00
testing.go test infrastructure for mock client RPCs (#10193) 2021-03-31 16:37:09 -04:00
util.go Revert "client: defensive against getting stale alloc updates" 2020-06-19 15:39:44 -04:00
util_test.go Update state with server 2018-10-16 16:53:29 -07:00