Skip to content

Commit 3506f7c

Browse files
committed
feat: support cliOverrides
1 parent a1b348c commit 3506f7c

3 files changed

Lines changed: 54 additions & 2 deletions

File tree

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ All notable changes to this project will be documented in this file.
1111
- Bump testing-tools to `0.3.0-stackable0.0.0-dev` ([#793]).
1212
- Support objectOverrides using `.spec.objectOverrides`.
1313
See [objectOverrides concepts page](https://docs.stackable.tech/home/nightly/concepts/overrides/#object-overrides) for details ([#795]).
14+
- Support `cliOverrides` to allow customization of OPA command-line arguments at role and rolegroup levels ([#803]).
1415

1516
### Changed
1617

@@ -31,6 +32,7 @@ All notable changes to this project will be documented in this file.
3132
[#795]: https://github.com/stackabletech/opa-operator/pull/795
3233
[#797]: https://github.com/stackabletech/opa-operator/pull/797
3334
[#799]: https://github.com/stackabletech/opa-operator/pull/799
35+
[#803]: https://github.com/stackabletech/opa-operator/pull/803
3436

3537
## [25.11.0] - 2025-11-07
3638

docs/modules/opa/pages/usage-guide/configuration-environment-overrides.adoc

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,39 @@ servers:
3838
config: {}
3939
----
4040

41+
== CLI overrides
42+
43+
The OPA operator supports overriding command-line arguments passed to the OPA binary via the `cliOverrides` property.
44+
This allows you to customize OPA's behavior by passing additional or overriding existing command-line flags.
45+
46+
CLI overrides can be specified at both the role and rolegroup level, with rolegroup overrides taking precedence over role overrides.
47+
48+
For example, per rolegroup:
49+
50+
[source,yaml]
51+
----
52+
servers:
53+
roleGroups:
54+
default:
55+
cliOverrides:
56+
--log-format: json-pretty
57+
--diagnostic-addr: "0.0.0.0:8282"
58+
----
59+
60+
or per role:
61+
62+
[source,yaml]
63+
----
64+
servers:
65+
cliOverrides:
66+
--log-format: json
67+
--diagnostic-addr: "0.0.0.0:8282"
68+
roleGroups:
69+
default: {}
70+
----
71+
72+
For a complete list of available flags, refer to the https://www.openpolicyagent.org/docs/latest/cli/#run[OPA documentation].
73+
4174
== Pod overrides
4275

4376
The OPA operator also supports Pod overrides, allowing you to override any property that you can set on a Kubernetes Pod.

rust/operator-binary/src/controller.rs

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -735,6 +735,14 @@ fn build_server_rolegroup_daemonset(
735735
.rolegroup(rolegroup_ref)
736736
.context(InternalOperatorFailureSnafu)?;
737737

738+
let merged_cli_overrides = {
739+
let role_cli_overrides: &BTreeMap<String, String> = &role.config.cli_overrides;
740+
let rolegroup_cli_overrides: &BTreeMap<String, String> = &role_group.config.cli_overrides;
741+
let mut merged = role_cli_overrides.clone();
742+
merged.extend(rolegroup_cli_overrides.clone());
743+
merged
744+
};
745+
738746
let env = server_config
739747
.get(&PropertyNameKind::Env)
740748
.iter()
@@ -846,6 +854,7 @@ fn build_server_rolegroup_daemonset(
846854
merged_config,
847855
&opa_container_name,
848856
opa.spec.cluster_config.tls_enabled(),
857+
&merged_cli_overrides,
849858
)])
850859
.add_env_vars(env)
851860
.add_env_var(
@@ -1206,6 +1215,7 @@ fn build_opa_start_command(
12061215
merged_config: &v1alpha1::OpaConfig,
12071216
container_name: &str,
12081217
tls_enabled: bool,
1218+
cli_overrides: &BTreeMap<String, String>,
12091219
) -> String {
12101220
let mut file_log_level = DEFAULT_FILE_LOG_LEVEL;
12111221
let mut console_log_level = DEFAULT_CONSOLE_LOG_LEVEL;
@@ -1267,13 +1277,19 @@ fn build_opa_start_command(
12671277
"&> >(CONSOLE_LEVEL={console_log_level} FILE_LEVEL={file_log_level} DECISION_LEVEL={decision_log_level} SERVER_LEVEL={server_log_level} OPA_ROLLING_LOG_FILE_SIZE_BYTES={OPA_ROLLING_LOG_FILE_SIZE_BYTES} OPA_ROLLING_LOG_FILES={OPA_ROLLING_LOG_FILES} STACKABLE_LOG_DIR={STACKABLE_LOG_DIR} CONTAINER_NAME={container_name} process-logs)"
12681278
);
12691279

1280+
let extra_cli_args = cli_overrides
1281+
.iter()
1282+
.map(|(key, value)| format!("{key} {value}"))
1283+
.collect::<Vec<_>>()
1284+
.join(" ");
1285+
12701286
// TODO: Think about adding --shutdown-wait-period, as suggested by https://github.com/open-policy-agent/opa/issues/2764
12711287
formatdoc! {"
12721288
{COMMON_BASH_TRAP_FUNCTIONS}
12731289
{remove_vector_shutdown_file_command}
12741290
prepare_signal_handlers
12751291
containerdebug --output={STACKABLE_LOG_DIR}/containerdebug-state.json --loop &
1276-
opa run -s -a 0.0.0.0:{bind_port} -c {CONFIG_DIR}/{CONFIG_FILE} -l {opa_log_level} --shutdown-grace-period {shutdown_grace_period_s} --disable-telemetry {tls_flags} {logging_redirects} &
1292+
opa run -s -a 0.0.0.0:{bind_port} -c {CONFIG_DIR}/{CONFIG_FILE} -l {opa_log_level} --shutdown-grace-period {shutdown_grace_period_s} --disable-telemetry {tls_flags} {extra_cli_args} {logging_redirects} &
12771293
wait_for_termination $!
12781294
{create_vector_shutdown_file_command}
12791295
",
@@ -1282,7 +1298,8 @@ fn build_opa_start_command(
12821298
create_vector_shutdown_file_command =
12831299
create_vector_shutdown_file_command(STACKABLE_LOG_DIR),
12841300
shutdown_grace_period_s = merged_config.graceful_shutdown_timeout.unwrap_or(DEFAULT_SERVER_GRACEFUL_SHUTDOWN_TIMEOUT).as_secs(),
1285-
opa_log_level = [console_log_level, file_log_level].iter().min().unwrap_or(&LogLevel::INFO).to_opa_literal()
1301+
opa_log_level = [console_log_level, file_log_level].iter().min().unwrap_or(&LogLevel::INFO).to_opa_literal(),
1302+
extra_cli_args = extra_cli_args
12861303
}
12871304
}
12881305

0 commit comments

Comments
 (0)