Skip to content

Commit 6182360

Browse files
authored
Add UDF to discover namespace where Vizier is deployed (#1307)
Summary: Adds a new `px.vizier_namespace()` function usable from PxL scripts to discover the namespace that the Vizier components are deployed into. Type of change: /kind feature Test Plan: Added some unit tests. Manually tested on a minikube. Relevant Issues: Fixes #1304 Changelog Message: ```release-note Add `px.vizier_namespace()` UDF to get namespace that Vizier is running in. ``` --------- Signed-off-by: Gabe Rosenhouse <grosenhouse@vmware.com>
1 parent 48635e3 commit 6182360

13 files changed

Lines changed: 63 additions & 20 deletions

File tree

k8s/vizier/base/kelvin_deployment.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ spec:
9595
key: cluster-name
9696
name: pl-cluster-secrets
9797
optional: true
98-
- name: PL_NAMESPACE
98+
- name: PL_POD_NAMESPACE
9999
valueFrom:
100100
fieldRef:
101101
fieldPath: metadata.namespace

k8s/vizier/pem/base/pem_daemonset.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,10 @@ spec:
9191
valueFrom:
9292
fieldRef:
9393
fieldPath: metadata.name
94+
- name: PL_POD_NAMESPACE
95+
valueFrom:
96+
fieldRef:
97+
fieldPath: metadata.namespace
9498
- name: PL_HOST_IP
9599
valueFrom:
96100
fieldRef:

src/carnot/funcs/metadata/metadata_ops.cc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,7 @@ void RegisterMetadataOpsOrDie(px::carnot::udf::Registry* registry) {
128128
registry->RegisterOrDie<HostNumCPUsUDF>("_exec_host_num_cpus");
129129
registry->RegisterOrDie<VizierIDUDF>("vizier_id");
130130
registry->RegisterOrDie<VizierNameUDF>("vizier_name");
131+
registry->RegisterOrDie<VizierNamespaceUDF>("vizier_namespace");
131132
registry->RegisterOrDie<GetClusterCIDRRangeUDF>("get_cidrs");
132133

133134
/*****************************************

src/carnot/funcs/metadata/metadata_ops.h

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3120,6 +3120,21 @@ class VizierNameUDF : public ScalarUDF {
31203120
}
31213121
};
31223122

3123+
class VizierNamespaceUDF : public ScalarUDF {
3124+
public:
3125+
StringValue Exec(FunctionContext* ctx) {
3126+
auto md = GetMetadataState(ctx);
3127+
return md->vizier_namespace();
3128+
}
3129+
3130+
static udf::ScalarUDFDocBuilder Doc() {
3131+
return udf::ScalarUDFDocBuilder("Get the namespace where Vizier is deployed.")
3132+
.Details("Get the Kubernetes namespace in which the Vizier is deployed.")
3133+
.Example("df.vizier_namespace = px.vizier_namespace()")
3134+
.Returns("The Kubernetes namespace in which Vizier is deployed");
3135+
}
3136+
};
3137+
31233138
class CreateUPIDUDF : public udf::ScalarUDF {
31243139
public:
31253140
UInt128Value Exec(FunctionContext* ctx, Int64Value pid, Int64Value pid_start_time) {

src/carnot/funcs/metadata/metadata_ops_test.cc

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,8 @@ class MetadataOpsTest : public ::testing::Test {
5252
vizier_id_ = sole::uuid4();
5353
metadata_state_ = std::make_shared<px::md::AgentMetadataState>(
5454
/* hostname */ "myhost",
55-
/* asid */ 1, /* pid */ 123, agent_id_, "mypod", vizier_id_, "myvizier");
55+
/* asid */ 1, /* pid */ 123, agent_id_, "mypod", vizier_id_, "myvizier",
56+
"myviziernamespace");
5657
// Apply updates to metadata state.
5758
updates_ =
5859
std::make_unique<moodycamel::BlockingConcurrentQueue<std::unique_ptr<ResourceUpdate>>>();
@@ -1269,7 +1270,7 @@ TEST_F(MetadataOpsTest, in_value_or_array_test) {
12691270
TEST_F(MetadataOpsTest, vizier_id_test) {
12701271
auto metadata_state = std::make_shared<px::md::AgentMetadataState>(
12711272
/* hostname */ "myhost",
1272-
/* asid */ 1, /* pid */ 123, agent_id_, "mypod", vizier_id_, "myvizier");
1273+
/* asid */ 1, /* pid */ 123, agent_id_, "mypod", vizier_id_, "myvizier", "myviziernamespace");
12731274
auto function_ctx = std::make_unique<FunctionContext>(metadata_state, nullptr);
12741275
auto udf_tester = px::carnot::udf::UDFTester<VizierIDUDF>(std::move(function_ctx));
12751276
udf_tester.ForInput().Expect(vizier_id_.str());
@@ -1278,7 +1279,8 @@ TEST_F(MetadataOpsTest, vizier_id_test) {
12781279
TEST_F(MetadataOpsTest, empty_vizier_id_test) {
12791280
auto metadata_state = std::make_shared<px::md::AgentMetadataState>(
12801281
/* hostname */ "myhost",
1281-
/* asid */ 1, /* pid */ 123, agent_id_, "mypod", sole::uuid(), "myvizier");
1282+
/* asid */ 1, /* pid */ 123, agent_id_, "mypod", sole::uuid(), "myvizier",
1283+
"myviziernamespace");
12821284
auto function_ctx = std::make_unique<FunctionContext>(metadata_state, nullptr);
12831285
auto udf_tester = px::carnot::udf::UDFTester<VizierIDUDF>(std::move(function_ctx));
12841286
udf_tester.ForInput().Expect("00000000-0000-0000-0000-000000000000");
@@ -1287,16 +1289,25 @@ TEST_F(MetadataOpsTest, empty_vizier_id_test) {
12871289
TEST_F(MetadataOpsTest, vizier_name_test) {
12881290
auto metadata_state = std::make_shared<px::md::AgentMetadataState>(
12891291
/* hostname */ "myhost",
1290-
/* asid */ 1, /* pid */ 123, agent_id_, "mypod", vizier_id_, "myvizier");
1292+
/* asid */ 1, /* pid */ 123, agent_id_, "mypod", vizier_id_, "myvizier", "myviziernamespace");
12911293
auto function_ctx = std::make_unique<FunctionContext>(metadata_state, nullptr);
12921294
auto udf_tester = px::carnot::udf::UDFTester<VizierNameUDF>(std::move(function_ctx));
12931295
udf_tester.ForInput().Expect("myvizier");
12941296
}
12951297

1298+
TEST_F(MetadataOpsTest, vizier_namespace_test) {
1299+
auto metadata_state = std::make_shared<px::md::AgentMetadataState>(
1300+
/* hostname */ "myhost",
1301+
/* asid */ 1, /* pid */ 123, agent_id_, "mypod", vizier_id_, "myvizier", "myviziernamespace");
1302+
auto function_ctx = std::make_unique<FunctionContext>(metadata_state, nullptr);
1303+
auto udf_tester = px::carnot::udf::UDFTester<VizierNamespaceUDF>(std::move(function_ctx));
1304+
udf_tester.ForInput().Expect("myviziernamespace");
1305+
}
1306+
12961307
TEST_F(MetadataOpsTest, basic_upid_test) {
12971308
auto metadata_state = std::make_shared<px::md::AgentMetadataState>(
12981309
/* hostname */ "myhost",
1299-
/* asid */ 1, /* pid */ 123, agent_id_, "mypod", vizier_id_, "myvizier");
1310+
/* asid */ 1, /* pid */ 123, agent_id_, "mypod", vizier_id_, "myvizier", "myviziernamespace");
13001311
auto function_ctx = std::make_unique<FunctionContext>(metadata_state, nullptr);
13011312
auto udf_tester = px::carnot::udf::UDFTester<CreateUPIDUDF>(std::move(function_ctx));
13021313
udf_tester.ForInput(100, 23123).Expect(md::UPID(1, 100, 23123).value());
@@ -1305,7 +1316,7 @@ TEST_F(MetadataOpsTest, basic_upid_test) {
13051316
TEST_F(MetadataOpsTest, basic_upid_with_asid_test) {
13061317
auto metadata_state = std::make_shared<px::md::AgentMetadataState>(
13071318
/* hostname */ "myhost",
1308-
/* asid */ 1, /* pid */ 123, agent_id_, "mypod", vizier_id_, "myvizier");
1319+
/* asid */ 1, /* pid */ 123, agent_id_, "mypod", vizier_id_, "myvizier", "myviziernamespace");
13091320
auto function_ctx = std::make_unique<FunctionContext>(metadata_state, nullptr);
13101321
auto udf_tester = px::carnot::udf::UDFTester<CreateUPIDWithASIDUDF>(std::move(function_ctx));
13111322
udf_tester.ForInput(2, 100, 23123).Expect(md::UPID(2, 100, 23123).value());
@@ -1314,7 +1325,7 @@ TEST_F(MetadataOpsTest, basic_upid_with_asid_test) {
13141325
TEST_F(MetadataOpsTest, get_cidrs) {
13151326
auto metadata_state = std::make_shared<px::md::AgentMetadataState>(
13161327
/* hostname */ "myhost",
1317-
/* asid */ 1, /* pid */ 123, agent_id_, "mypod", vizier_id_, "myvizier");
1328+
/* asid */ 1, /* pid */ 123, agent_id_, "mypod", vizier_id_, "myvizier", "myviziernamespace");
13181329
px::CIDRBlock pod_cidr;
13191330
std::string pod_cidr_str("10.0.0.20/32");
13201331
ASSERT_OK(px::ParseCIDRBlock(pod_cidr_str, &pod_cidr));

src/shared/metadata/metadata_state.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -513,7 +513,7 @@ Status K8sMetadataState::CleanupExpiredMetadata(int64_t retention_time_ns) {
513513

514514
std::shared_ptr<AgentMetadataState> AgentMetadataState::CloneToShared() const {
515515
auto state = std::make_shared<AgentMetadataState>(hostname_, asid_, pid_, agent_id_, pod_name_,
516-
vizier_id_, vizier_name_);
516+
vizier_id_, vizier_name_, vizier_namespace_);
517517
state->last_update_ts_ns_ = last_update_ts_ns_;
518518
state->epoch_id_ = epoch_id_;
519519
state->k8s_metadata_state_ = k8s_metadata_state_->Clone();

src/shared/metadata/metadata_state.h

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -317,17 +317,19 @@ class AgentMetadataState : NotCopyable {
317317
AgentMetadataState() = delete;
318318
explicit AgentMetadataState(uint32_t asid, uint32_t pid)
319319
: AgentMetadataState(/* hostname */ "unknown", asid, pid, sole::uuid(),
320-
/* pod_name */ "unknown", sole::uuid(), "") {}
320+
/* pod_name */ "unknown", sole::uuid(), "", "") {}
321321

322322
AgentMetadataState(std::string_view hostname, uint32_t asid, uint32_t pid, AgentID agent_id,
323-
std::string_view pod_name, sole::uuid vizier_id, std::string_view vizier_name)
323+
std::string_view pod_name, sole::uuid vizier_id, std::string_view vizier_name,
324+
std::string_view vizier_namespace)
324325
: hostname_(std::string(hostname)),
325326
pod_name_(std::string(pod_name)),
326327
asid_(asid),
327328
pid_(pid),
328329
agent_id_(agent_id),
329330
vizier_id_(vizier_id),
330331
vizier_name_(std::string(vizier_name)),
332+
vizier_namespace_(std::string(vizier_namespace)),
331333
k8s_metadata_state_(new K8sMetadataState()) {}
332334

333335
const std::string& hostname() const { return hostname_; }
@@ -338,6 +340,7 @@ class AgentMetadataState : NotCopyable {
338340

339341
const sole::uuid& vizier_id() const { return vizier_id_; }
340342
const std::string& vizier_name() const { return vizier_name_; }
343+
const std::string& vizier_namespace() const { return vizier_namespace_; }
341344

342345
int64_t last_update_ts_ns() const { return last_update_ts_ns_; }
343346
void set_last_update_ts_ns(int64_t last_update_ts_ns) { last_update_ts_ns_ = last_update_ts_ns; }
@@ -405,6 +408,7 @@ class AgentMetadataState : NotCopyable {
405408

406409
sole::uuid vizier_id_;
407410
std::string vizier_name_;
411+
std::string vizier_namespace_;
408412

409413
std::unique_ptr<K8sMetadataState> k8s_metadata_state_;
410414

src/shared/metadata/standalone_state_manager.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ class StandaloneAgentMetadataStateManager : public AgentMetadataStateManager {
3838
sole::uuid agent_id) {
3939
agent_metadata_state_ =
4040
std::make_shared<AgentMetadataState>(hostname, asid, pid, agent_id,
41-
/*pod_name=*/"", sole::uuid(), "standalone_pem");
41+
/*pod_name=*/"", sole::uuid(), "standalone_pem", "");
4242
}
4343
virtual ~StandaloneAgentMetadataStateManager() = default;
4444
AgentMetadataFilter* metadata_filter() const override { return nullptr; }

src/shared/metadata/state_manager.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -122,11 +122,11 @@ class AgentMetadataStateManagerImpl : public AgentMetadataStateManager {
122122
std::string pod_name, sole::uuid agent_id, bool collects_data,
123123
const px::system::Config& config,
124124
AgentMetadataFilter* metadata_filter, sole::uuid vizier_id,
125-
std::string vizier_name)
125+
std::string vizier_name, std::string vizier_namespace)
126126
: pod_name_(pod_name), collects_data_(collects_data), metadata_filter_(metadata_filter) {
127127
md_reader_ = std::make_unique<CGroupMetadataReader>(config);
128-
agent_metadata_state_ = std::make_shared<AgentMetadataState>(hostname, asid, pid, agent_id,
129-
pod_name, vizier_id, vizier_name);
128+
agent_metadata_state_ = std::make_shared<AgentMetadataState>(
129+
hostname, asid, pid, agent_id, pod_name, vizier_id, vizier_name, vizier_namespace);
130130
}
131131

132132
AgentMetadataFilter* metadata_filter() const override { return metadata_filter_; }

src/shared/metadata/state_manager_test.cc

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -247,11 +247,13 @@ class AgentMetadataStateTest : public ::testing::Test {
247247
static constexpr char kHostname[] = "myhost";
248248
static constexpr char kPodName[] = "mypod";
249249
static constexpr char kVizierName[] = "myvizier";
250+
static constexpr char kVizierNamespace[] = "myviziernamespace";
250251

251252
AgentMetadataStateTest()
252253
: agent_id_(sole::uuid4()),
253254
vizier_id_(sole::uuid4()),
254-
metadata_state_(kHostname, kASID, kPID, agent_id_, kPodName, vizier_id_, kVizierName) {}
255+
metadata_state_(kHostname, kASID, kPID, agent_id_, kPodName, vizier_id_, kVizierName,
256+
kVizierNamespace) {}
255257

256258
sole::uuid agent_id_;
257259
sole::uuid vizier_id_;
@@ -273,6 +275,7 @@ TEST_F(AgentMetadataStateTest, initialize_md_state) {
273275
EXPECT_EQ(agent_id_.str(), metadata_state_.agent_id().str());
274276
EXPECT_EQ(vizier_id_.str(), metadata_state_.vizier_id().str());
275277
EXPECT_EQ("myvizier", metadata_state_.vizier_name());
278+
EXPECT_EQ("myviziernamespace", metadata_state_.vizier_namespace());
276279

277280
K8sMetadataState* state = metadata_state_.k8s_metadata_state();
278281
EXPECT_THAT(state->pods_by_name(), UnorderedElementsAre(Pair(Pair("pl", "pod1"), "pod_id1")));
@@ -406,7 +409,8 @@ TEST_F(AgentMetadataStateTest, cidr_test) {
406409
AgentMetadataStateManagerImpl mgr("test_host", /*asid*/ 0, /*pid*/ 987, "test_pod",
407410
/*id*/ sole::uuid4(),
408411
/*collects_data*/ true, px::system::Config::GetInstance(),
409-
&md_filter_, /*vizier_id*/ sole::uuid4(), "test_vizier");
412+
&md_filter_, /*vizier_id*/ sole::uuid4(), "test_vizier",
413+
"test_vizier_namespace");
410414

411415
EXPECT_OK(mgr.PerformMetadataStateUpdate());
412416
// Should not be updated yet.

0 commit comments

Comments
 (0)