Replace $NIX_REMOTE_SYSTEMS with an option "builder-files"
Also, to unify with hydra-queue-runner, allow it to be a list of files.
This commit is contained in:
parent
cd4d2705ec
commit
7f6837a0f6
4 changed files with 34 additions and 14 deletions
|
@ -43,6 +43,10 @@ Settings::Settings()
|
||||||
lockCPU = getEnv("NIX_AFFINITY_HACK", "1") == "1";
|
lockCPU = getEnv("NIX_AFFINITY_HACK", "1") == "1";
|
||||||
caFile = getEnv("NIX_SSL_CERT_FILE", getEnv("SSL_CERT_FILE", "/etc/ssl/certs/ca-certificates.crt"));
|
caFile = getEnv("NIX_SSL_CERT_FILE", getEnv("SSL_CERT_FILE", "/etc/ssl/certs/ca-certificates.crt"));
|
||||||
|
|
||||||
|
/* Backwards compatibility. */
|
||||||
|
auto s = getEnv("NIX_REMOTE_SYSTEMS");
|
||||||
|
if (s != "") builderFiles = tokenizeString<Strings>(s, ":");
|
||||||
|
|
||||||
#if __linux__
|
#if __linux__
|
||||||
sandboxPaths = tokenizeString<StringSet>("/bin/sh=" BASH_PATH);
|
sandboxPaths = tokenizeString<StringSet>("/bin/sh=" BASH_PATH);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -133,6 +133,10 @@ public:
|
||||||
Setting<std::string> builders{this, "", "builders",
|
Setting<std::string> builders{this, "", "builders",
|
||||||
"A semicolon-separated list of build machines, in the format of nix.machines."};
|
"A semicolon-separated list of build machines, in the format of nix.machines."};
|
||||||
|
|
||||||
|
Setting<Strings> builderFiles{this,
|
||||||
|
{nixConfDir + "/machines"}, "builder-files",
|
||||||
|
"A list of files specifying build machines."};
|
||||||
|
|
||||||
Setting<off_t> reservedSize{this, 8 * 1024 * 1024, "gc-reserved-space",
|
Setting<off_t> reservedSize{this, 8 * 1024 * 1024, "gc-reserved-space",
|
||||||
"Amount of reserved disk space for the garbage collector."};
|
"Amount of reserved disk space for the garbage collector."};
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,8 @@ Machine::Machine(decltype(storeUri) storeUri,
|
||||||
decltype(maxJobs) maxJobs,
|
decltype(maxJobs) maxJobs,
|
||||||
decltype(speedFactor) speedFactor,
|
decltype(speedFactor) speedFactor,
|
||||||
decltype(supportedFeatures) supportedFeatures,
|
decltype(supportedFeatures) supportedFeatures,
|
||||||
decltype(mandatoryFeatures) mandatoryFeatures) :
|
decltype(mandatoryFeatures) mandatoryFeatures,
|
||||||
|
decltype(sshPublicHostKey) sshPublicHostKey) :
|
||||||
storeUri(
|
storeUri(
|
||||||
// Backwards compatibility: if the URI is a hostname,
|
// Backwards compatibility: if the URI is a hostname,
|
||||||
// prepend ssh://.
|
// prepend ssh://.
|
||||||
|
@ -24,7 +25,8 @@ Machine::Machine(decltype(storeUri) storeUri,
|
||||||
maxJobs(maxJobs),
|
maxJobs(maxJobs),
|
||||||
speedFactor(std::max(1U, speedFactor)),
|
speedFactor(std::max(1U, speedFactor)),
|
||||||
supportedFeatures(supportedFeatures),
|
supportedFeatures(supportedFeatures),
|
||||||
mandatoryFeatures(mandatoryFeatures)
|
mandatoryFeatures(mandatoryFeatures),
|
||||||
|
sshPublicHostKey(sshPublicHostKey)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
bool Machine::allSupported(const std::set<string> & features) const {
|
bool Machine::allSupported(const std::set<string> & features) const {
|
||||||
|
@ -52,13 +54,19 @@ void parseMachines(const std::string & s, Machines & machines)
|
||||||
auto sz = tokens.size();
|
auto sz = tokens.size();
|
||||||
if (sz < 1)
|
if (sz < 1)
|
||||||
throw FormatError("bad machine specification ‘%s’", line);
|
throw FormatError("bad machine specification ‘%s’", line);
|
||||||
|
|
||||||
|
auto isSet = [&](int n) {
|
||||||
|
return tokens.size() > n && tokens[n] != "" && tokens[n] != "-";
|
||||||
|
};
|
||||||
|
|
||||||
machines.emplace_back(tokens[0],
|
machines.emplace_back(tokens[0],
|
||||||
sz >= 2 ? tokenizeString<std::vector<string>>(tokens[1], ",") : std::vector<string>{settings.thisSystem},
|
isSet(1) ? tokenizeString<std::vector<string>>(tokens[1], ",") : std::vector<string>{settings.thisSystem},
|
||||||
sz >= 3 ? tokens[2] : "",
|
isSet(2) ? tokens[2] : "",
|
||||||
sz >= 4 ? std::stoull(tokens[3]) : 1LL,
|
isSet(3) ? std::stoull(tokens[3]) : 1LL,
|
||||||
sz >= 5 ? std::stoull(tokens[4]) : 1LL,
|
isSet(4) ? std::stoull(tokens[4]) : 1LL,
|
||||||
sz >= 6 ? tokenizeString<std::set<string>>(tokens[5], ",") : std::set<string>{},
|
isSet(5) ? tokenizeString<std::set<string>>(tokens[5], ",") : std::set<string>{},
|
||||||
sz >= 7 ? tokenizeString<std::set<string>>(tokens[6], ",") : std::set<string>{});
|
isSet(6) ? tokenizeString<std::set<string>>(tokens[6], ",") : std::set<string>{},
|
||||||
|
isSet(7) ? tokens[7] : "");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -66,12 +74,14 @@ Machines getMachines()
|
||||||
{
|
{
|
||||||
Machines machines;
|
Machines machines;
|
||||||
|
|
||||||
|
for (auto & file : settings.builderFiles.get()) {
|
||||||
try {
|
try {
|
||||||
parseMachines(readFile(getEnv("NIX_REMOTE_SYSTEMS", settings.nixConfDir + "/machines")), machines);
|
parseMachines(readFile(file), machines);
|
||||||
} catch (const SysError & e) {
|
} catch (const SysError & e) {
|
||||||
if (e.errNo != ENOENT)
|
if (e.errNo != ENOENT)
|
||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
parseMachines(settings.builders, machines);
|
parseMachines(settings.builders, machines);
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,7 @@ struct Machine {
|
||||||
const unsigned int speedFactor;
|
const unsigned int speedFactor;
|
||||||
const std::set<string> supportedFeatures;
|
const std::set<string> supportedFeatures;
|
||||||
const std::set<string> mandatoryFeatures;
|
const std::set<string> mandatoryFeatures;
|
||||||
|
const std::string sshPublicHostKey;
|
||||||
bool enabled = true;
|
bool enabled = true;
|
||||||
|
|
||||||
bool allSupported(const std::set<string> & features) const;
|
bool allSupported(const std::set<string> & features) const;
|
||||||
|
@ -25,7 +26,8 @@ struct Machine {
|
||||||
decltype(maxJobs) maxJobs,
|
decltype(maxJobs) maxJobs,
|
||||||
decltype(speedFactor) speedFactor,
|
decltype(speedFactor) speedFactor,
|
||||||
decltype(supportedFeatures) supportedFeatures,
|
decltype(supportedFeatures) supportedFeatures,
|
||||||
decltype(mandatoryFeatures) mandatoryFeatures);
|
decltype(mandatoryFeatures) mandatoryFeatures,
|
||||||
|
decltype(sshPublicHostKey) sshPublicHostKey);
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef std::vector<Machine> Machines;
|
typedef std::vector<Machine> Machines;
|
||||||
|
|
Loading…
Reference in a new issue