Skip to content

Commit 481d327

Browse files
committed
feat: Add conversion webhook server
1 parent 05da230 commit 481d327

12 files changed

Lines changed: 4471 additions & 2321 deletions

File tree

Cargo.lock

Lines changed: 453 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.nix

Lines changed: 1680 additions & 44 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,11 @@ repository = "https://github.com/stackabletech/opa-operator"
1111

1212
[workspace.dependencies]
1313
product-config = { git = "https://github.com/stackabletech/product-config.git", tag = "0.8.0" }
14-
stackable-operator = { git = "https://github.com/stackabletech/operator-rs.git", tag = "stackable-operator-0.101.2", features = ["telemetry", "versioned"] }
14+
stackable-operator = { git = "https://github.com/stackabletech/operator-rs.git", tag = "stackable-operator-0.101.2", features = [
15+
"telemetry",
16+
"versioned",
17+
"webhook",
18+
] }
1519
krb5 = { git = "https://github.com/stackabletech/krb5-rs.git", tag = "v0.1.0" }
1620

1721
anyhow = "1.0"

Makefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,8 @@ config:
4545
fi
4646

4747
crds:
48-
mkdir -p deploy/helm/"${OPERATOR_NAME}"/crds
49-
cargo run --bin stackable-"${OPERATOR_NAME}" -- crd | yq eval '.metadata.annotations["helm.sh/resource-policy"]="keep"' - > "deploy/helm/${OPERATOR_NAME}/crds/crds.yaml"
48+
mkdir -p extra
49+
cargo run --bin stackable-"${OPERATOR_NAME}" -- crd > extra/crds.yaml
5050

5151
chart-lint: compile-chart
5252
docker run -it -v $(shell pwd):/build/helm-charts -w /build/helm-charts quay.io/helmpack/chart-testing:v3.5.0 ct lint --config deploy/helm/ct.yaml

Tiltfile

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -35,18 +35,12 @@ helm_values = settings.get('helm_values', None)
3535

3636
helm_override_image_repository = 'image.repository=' + registry + '/' + operator_name
3737

38-
# Exclude stale CRDs from Helm chart, and apply the rest
39-
helm_crds, helm_non_crds = filter_yaml(
40-
helm(
41-
'deploy/helm/' + operator_name,
42-
name=operator_name,
43-
namespace="stackable-operators",
44-
set=[
45-
helm_override_image_repository,
46-
],
47-
values=helm_values,
48-
),
49-
api_version = "^apiextensions\\.k8s\\.io/.*$",
50-
kind = "^CustomResourceDefinition$",
51-
)
52-
k8s_yaml(helm_non_crds)
38+
k8s_yaml(helm(
39+
'deploy/helm/' + operator_name,
40+
name=operator_name,
41+
namespace="stackable-operators",
42+
set=[
43+
helm_override_image_repository,
44+
],
45+
values=helm_values,
46+
))

crate-hashes.json

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

deploy/helm/opa-operator/crds/crds.yaml

Lines changed: 0 additions & 2250 deletions
This file was deleted.

extra/crds.yaml

Lines changed: 2248 additions & 0 deletions
Large diffs are not rendered by default.

rust/operator-binary/src/crd/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ pub mod user_info_fetcher;
3636

3737
pub const APP_NAME: &str = "opa";
3838
pub const OPERATOR_NAME: &str = "opa.stackable.tech";
39+
pub const FIELD_MANAGER: &str = "opa-operator";
3940

4041
pub const DEFAULT_SERVER_GRACEFUL_SHUTDOWN_TIMEOUT: Duration = Duration::from_minutes_unchecked(2);
4142
/// Safety puffer to guarantee the graceful shutdown works every time.

rust/operator-binary/src/main.rs

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,9 @@
33
#![allow(clippy::result_large_err)]
44
use std::sync::Arc;
55

6+
use anyhow::anyhow;
67
use clap::Parser;
7-
use futures::StreamExt;
8+
use futures::{FutureExt, StreamExt, TryFutureExt};
89
use product_config::ProductConfigManager;
910
use stackable_operator::{
1011
YamlSchema,
@@ -34,6 +35,7 @@ use stackable_operator::{
3435
use crate::{
3536
controller::OPA_FULL_CONTROLLER_NAME,
3637
crd::{OPERATOR_NAME, OpaCluster, OpaClusterVersion, v1alpha2},
38+
webhooks::conversion::create_webhook_server,
3739
};
3840

3941
mod controller;
@@ -42,6 +44,7 @@ mod discovery;
4244
mod operations;
4345
mod product_logging;
4446
mod service;
47+
mod webhooks;
4548

4649
pub mod built_info {
4750
include!(concat!(env!("OUT_DIR"), "/built.rs"));
@@ -76,7 +79,7 @@ async fn main() -> anyhow::Result<()> {
7679
operator_image,
7780
common:
7881
RunArguments {
79-
operator_environment: _,
82+
operator_environment,
8083
watch_namespace,
8184
product_config,
8285
maintenance,
@@ -102,7 +105,8 @@ async fn main() -> anyhow::Result<()> {
102105

103106
let eos_checker =
104107
EndOfSupportChecker::new(built_info::BUILT_TIME_UTC, maintenance.end_of_support)?
105-
.run();
108+
.run()
109+
.map(anyhow::Ok);
106110

107111
let product_config = product_config.load(&[
108112
"deploy/config-spec/properties.yaml",
@@ -115,16 +119,28 @@ async fn main() -> anyhow::Result<()> {
115119

116120
let kubernetes_cluster_info = client.kubernetes_cluster_info.clone();
117121

122+
let webhook_server = create_webhook_server(
123+
&operator_environment,
124+
maintenance.disable_crd_maintenance,
125+
client.as_kube_client(),
126+
)
127+
.await?;
128+
129+
let webhook_server = webhook_server
130+
.run()
131+
.map_err(|err| anyhow!(err).context("failed to run webhook server"));
132+
118133
let controller = create_controller(
119134
client,
120135
product_config,
121136
watch_namespace,
122137
operator_image.clone(),
123138
operator_image,
124139
kubernetes_cluster_info,
125-
);
140+
)
141+
.map(anyhow::Ok);
126142

127-
futures::join!(controller, eos_checker);
143+
futures::try_join!(controller, webhook_server, eos_checker)?;
128144
}
129145
};
130146

0 commit comments

Comments
 (0)