services.buildkite-agents: support multi-tags
The buildkite agent supports multiple tags with the same key. This functionality is used to have a [single agent listen on multiple queues](https://buildkite.com/docs/agent/v3/queues#setting-an-agents-queue). However, having the tags be of type `attrsOf str` means that we cannot suport this use case. This commit modifies the type of tags to be `attrsOf (either str (listOf str))` where the list is expanded into multiple tags with the same key. Example: ``` {tags = {queue = ["default", "testing"];};} ``` generates ``` tags="queue=default,queue=testing" ``` in the buildkite agent configuration.
This commit is contained in:
parent
f29292db76
commit
c01046b022
@ -76,7 +76,7 @@ let
|
|||||||
};
|
};
|
||||||
|
|
||||||
tags = mkOption {
|
tags = mkOption {
|
||||||
type = types.attrsOf types.str;
|
type = types.attrsOf (types.either types.str (types.listOf types.str));
|
||||||
default = {};
|
default = {};
|
||||||
example = { queue = "default"; docker = "true"; ruby2 ="true"; };
|
example = { queue = "default"; docker = "true"; ruby2 ="true"; };
|
||||||
description = ''
|
description = ''
|
||||||
@ -230,7 +230,11 @@ in
|
|||||||
## don't end up in the Nix store.
|
## don't end up in the Nix store.
|
||||||
preStart = let
|
preStart = let
|
||||||
sshDir = "${cfg.dataDir}/.ssh";
|
sshDir = "${cfg.dataDir}/.ssh";
|
||||||
tagStr = lib.concatStringsSep "," (lib.mapAttrsToList (name: value: "${name}=${value}") cfg.tags);
|
tagStr = name: value:
|
||||||
|
if lib.isList value
|
||||||
|
then lib.concatStringsSep "," (builtins.map (v: "${name}=${v}") value)
|
||||||
|
else "${name}=${value}";
|
||||||
|
tagsStr = lib.concatStringsSep "," (lib.mapAttrsToList tagStr cfg.tags);
|
||||||
in
|
in
|
||||||
optionalString (cfg.privateSshKeyPath != null) ''
|
optionalString (cfg.privateSshKeyPath != null) ''
|
||||||
mkdir -m 0700 -p "${sshDir}"
|
mkdir -m 0700 -p "${sshDir}"
|
||||||
@ -241,7 +245,7 @@ in
|
|||||||
token="$(cat ${toString cfg.tokenPath})"
|
token="$(cat ${toString cfg.tokenPath})"
|
||||||
name="${cfg.name}"
|
name="${cfg.name}"
|
||||||
shell="${cfg.shell}"
|
shell="${cfg.shell}"
|
||||||
tags="${tagStr}"
|
tags="${tagsStr}"
|
||||||
build-path="${cfg.dataDir}/builds"
|
build-path="${cfg.dataDir}/builds"
|
||||||
hooks-path="${cfg.hooksPath}"
|
hooks-path="${cfg.hooksPath}"
|
||||||
${cfg.extraConfig}
|
${cfg.extraConfig}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user