mirror of
https://github.com/NixOS/nix.git
synced 2025-11-09 03:56:01 +01:00
Merge pull request #14295 from NixOS/s3-store-human-readable-uri
libstore: Implement getHumanReadableURI for S3BinaryCacheStoreConfig
This commit is contained in:
commit
b9af19cedf
2 changed files with 28 additions and 10 deletions
|
|
@ -21,8 +21,6 @@ struct S3BinaryCacheStoreConfig : HttpBinaryCacheStoreConfig
|
||||||
Nix uses the `default` profile.
|
Nix uses the `default` profile.
|
||||||
)"};
|
)"};
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
const Setting<std::string> region{
|
const Setting<std::string> region{
|
||||||
this,
|
this,
|
||||||
"us-east-1",
|
"us-east-1",
|
||||||
|
|
@ -63,6 +61,12 @@ public:
|
||||||
> addressing instead of virtual host based addressing.
|
> addressing instead of virtual host based addressing.
|
||||||
)"};
|
)"};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set of settings that are part of the S3 URI itself.
|
||||||
|
* These are needed for region specification and other S3-specific settings.
|
||||||
|
*/
|
||||||
|
const std::set<const AbstractSetting *> s3UriSettings = {&profile, ®ion, &scheme, &endpoint};
|
||||||
|
|
||||||
static const std::string name()
|
static const std::string name()
|
||||||
{
|
{
|
||||||
return "S3 Binary Cache Store";
|
return "S3 Binary Cache Store";
|
||||||
|
|
@ -71,6 +75,8 @@ public:
|
||||||
static StringSet uriSchemes();
|
static StringSet uriSchemes();
|
||||||
|
|
||||||
static std::string doc();
|
static std::string doc();
|
||||||
|
|
||||||
|
std::string getHumanReadableURI() const override;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace nix
|
} // namespace nix
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,10 @@
|
||||||
#include "nix/store/s3-binary-cache-store.hh"
|
#include "nix/store/s3-binary-cache-store.hh"
|
||||||
|
|
||||||
#include <cassert>
|
|
||||||
|
|
||||||
#include "nix/store/http-binary-cache-store.hh"
|
#include "nix/store/http-binary-cache-store.hh"
|
||||||
#include "nix/store/store-registration.hh"
|
#include "nix/store/store-registration.hh"
|
||||||
|
|
||||||
|
#include <cassert>
|
||||||
|
#include <ranges>
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
|
||||||
StringSet S3BinaryCacheStoreConfig::uriSchemes()
|
StringSet S3BinaryCacheStoreConfig::uriSchemes()
|
||||||
|
|
@ -17,19 +17,31 @@ S3BinaryCacheStoreConfig::S3BinaryCacheStoreConfig(
|
||||||
: StoreConfig(params)
|
: StoreConfig(params)
|
||||||
, HttpBinaryCacheStoreConfig(scheme, _cacheUri, params)
|
, HttpBinaryCacheStoreConfig(scheme, _cacheUri, params)
|
||||||
{
|
{
|
||||||
// For S3 stores, preserve S3-specific query parameters as part of the URL
|
|
||||||
// These are needed for region specification and other S3-specific settings
|
|
||||||
assert(cacheUri.query.empty());
|
assert(cacheUri.query.empty());
|
||||||
|
assert(cacheUri.scheme == "s3");
|
||||||
|
|
||||||
// Only copy S3-specific parameters to the URL query
|
|
||||||
static const std::set<std::string> s3Params = {"region", "endpoint", "profile", "scheme"};
|
|
||||||
for (const auto & [key, value] : params) {
|
for (const auto & [key, value] : params) {
|
||||||
if (s3Params.contains(key)) {
|
auto s3Params =
|
||||||
|
std::views::transform(s3UriSettings, [](const AbstractSetting * setting) { return setting->name; });
|
||||||
|
if (std::ranges::contains(s3Params, key)) {
|
||||||
cacheUri.query[key] = value;
|
cacheUri.query[key] = value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string S3BinaryCacheStoreConfig::getHumanReadableURI() const
|
||||||
|
{
|
||||||
|
auto reference = getReference();
|
||||||
|
reference.params = [&]() {
|
||||||
|
Params relevantParams;
|
||||||
|
for (auto & setting : s3UriSettings)
|
||||||
|
if (setting->overridden)
|
||||||
|
relevantParams.insert({setting->name, reference.params.at(setting->name)});
|
||||||
|
return relevantParams;
|
||||||
|
}();
|
||||||
|
return reference.render();
|
||||||
|
}
|
||||||
|
|
||||||
std::string S3BinaryCacheStoreConfig::doc()
|
std::string S3BinaryCacheStoreConfig::doc()
|
||||||
{
|
{
|
||||||
return R"(
|
return R"(
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue