#[allow(unused_imports)]
mod prelude {
pub use kube::CustomResource;
pub use serde::{Serialize, Deserialize};
pub use std::collections::BTreeMap;
pub use k8s_openapi::apimachinery::pkg::apis::meta::v1::Condition;
}
use self::prelude::*;
#[derive(CustomResource, Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
#[kube(group = "superset.stackable.tech", version = "v1alpha1", kind = "SupersetCluster", plural = "supersetclusters")]
#[kube(namespaced)]
#[kube(status = "SupersetClusterStatus")]
#[kube(schema = "disabled")]
#[kube(derive="Default")]
#[kube(derive="PartialEq")]
pub struct SupersetClusterSpec {
#[serde(rename = "clusterConfig")]
pub cluster_config: SupersetClusterClusterConfig,
pub image: SupersetClusterImage,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub nodes: Option<SupersetClusterNodes>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "objectOverrides")]
pub object_overrides: Option<Vec<BTreeMap<String, serde_json::Value>>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct SupersetClusterClusterConfig {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub authentication: Option<Vec<SupersetClusterClusterConfigAuthentication>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub authorization: Option<SupersetClusterClusterConfigAuthorization>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "clusterOperation")]
pub cluster_operation: Option<SupersetClusterClusterConfigClusterOperation>,
#[serde(rename = "credentialsSecret")]
pub credentials_secret: String,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "mapboxSecret")]
pub mapbox_secret: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "vectorAggregatorConfigMapName")]
pub vector_aggregator_config_map_name: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct SupersetClusterClusterConfigAuthentication {
#[serde(rename = "authenticationClass")]
pub authentication_class: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub oidc: Option<SupersetClusterClusterConfigAuthenticationOidc>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "syncRolesAt")]
pub sync_roles_at: Option<SupersetClusterClusterConfigAuthenticationSyncRolesAt>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "userRegistration")]
pub user_registration: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "userRegistrationRole")]
pub user_registration_role: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct SupersetClusterClusterConfigAuthenticationOidc {
#[serde(rename = "clientCredentialsSecret")]
pub client_credentials_secret: String,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "extraScopes")]
pub extra_scopes: Option<Vec<String>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
pub enum SupersetClusterClusterConfigAuthenticationSyncRolesAt {
Registration,
Login,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct SupersetClusterClusterConfigAuthorization {
#[serde(rename = "roleMappingFromOpa")]
pub role_mapping_from_opa: SupersetClusterClusterConfigAuthorizationRoleMappingFromOpa,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct SupersetClusterClusterConfigAuthorizationRoleMappingFromOpa {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub cache: Option<SupersetClusterClusterConfigAuthorizationRoleMappingFromOpaCache>,
#[serde(rename = "configMapName")]
pub config_map_name: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub package: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct SupersetClusterClusterConfigAuthorizationRoleMappingFromOpaCache {
#[serde(default, skip_serializing_if = "Option::is_none", rename = "entryTimeToLive")]
pub entry_time_to_live: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "maxEntries")]
pub max_entries: Option<u32>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct SupersetClusterClusterConfigClusterOperation {
#[serde(default, skip_serializing_if = "Option::is_none", rename = "reconciliationPaused")]
pub reconciliation_paused: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub stopped: Option<bool>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct SupersetClusterImage {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub custom: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "productVersion")]
pub product_version: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "pullPolicy")]
pub pull_policy: Option<SupersetClusterImagePullPolicy>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "pullSecrets")]
pub pull_secrets: Option<Vec<SupersetClusterImagePullSecrets>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub repo: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "stackableVersion")]
pub stackable_version: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
pub enum SupersetClusterImagePullPolicy {
IfNotPresent,
Always,
Never,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct SupersetClusterImagePullSecrets {
pub name: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct SupersetClusterNodes {
#[serde(default, skip_serializing_if = "Option::is_none", rename = "cliOverrides")]
pub cli_overrides: Option<BTreeMap<String, String>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub config: Option<SupersetClusterNodesConfig>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "configOverrides")]
pub config_overrides: Option<BTreeMap<String, BTreeMap<String, String>>>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "envOverrides")]
pub env_overrides: Option<BTreeMap<String, String>>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "podOverrides")]
pub pod_overrides: Option<BTreeMap<String, serde_json::Value>>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "roleConfig")]
pub role_config: Option<SupersetClusterNodesRoleConfig>,
#[serde(rename = "roleGroups")]
pub role_groups: BTreeMap<String, SupersetClusterNodesRoleGroups>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct SupersetClusterNodesConfig {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub affinity: Option<SupersetClusterNodesConfigAffinity>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "gracefulShutdownTimeout")]
pub graceful_shutdown_timeout: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub logging: Option<SupersetClusterNodesConfigLogging>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub resources: Option<SupersetClusterNodesConfigResources>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "rowLimit")]
pub row_limit: Option<i32>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "webserverTimeout")]
pub webserver_timeout: Option<u32>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct SupersetClusterNodesConfigAffinity {
#[serde(default, skip_serializing_if = "Option::is_none", rename = "nodeAffinity")]
pub node_affinity: Option<BTreeMap<String, serde_json::Value>>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "nodeSelector")]
pub node_selector: Option<BTreeMap<String, String>>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "podAffinity")]
pub pod_affinity: Option<BTreeMap<String, serde_json::Value>>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "podAntiAffinity")]
pub pod_anti_affinity: Option<BTreeMap<String, serde_json::Value>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct SupersetClusterNodesConfigLogging {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub containers: Option<BTreeMap<String, SupersetClusterNodesConfigLoggingContainers>>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "enableVectorAgent")]
pub enable_vector_agent: Option<bool>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct SupersetClusterNodesConfigLoggingContainers {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub console: Option<SupersetClusterNodesConfigLoggingContainersConsole>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub custom: Option<SupersetClusterNodesConfigLoggingContainersCustom>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub file: Option<SupersetClusterNodesConfigLoggingContainersFile>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub loggers: Option<BTreeMap<String, SupersetClusterNodesConfigLoggingContainersLoggers>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct SupersetClusterNodesConfigLoggingContainersConsole {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub level: Option<SupersetClusterNodesConfigLoggingContainersConsoleLevel>,
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
pub enum SupersetClusterNodesConfigLoggingContainersConsoleLevel {
#[serde(rename = "TRACE")]
Trace,
#[serde(rename = "DEBUG")]
Debug,
#[serde(rename = "INFO")]
Info,
#[serde(rename = "WARN")]
Warn,
#[serde(rename = "ERROR")]
Error,
#[serde(rename = "FATAL")]
Fatal,
#[serde(rename = "NONE")]
None,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct SupersetClusterNodesConfigLoggingContainersCustom {
#[serde(default, skip_serializing_if = "Option::is_none", rename = "configMap")]
pub config_map: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct SupersetClusterNodesConfigLoggingContainersFile {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub level: Option<SupersetClusterNodesConfigLoggingContainersFileLevel>,
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
pub enum SupersetClusterNodesConfigLoggingContainersFileLevel {
#[serde(rename = "TRACE")]
Trace,
#[serde(rename = "DEBUG")]
Debug,
#[serde(rename = "INFO")]
Info,
#[serde(rename = "WARN")]
Warn,
#[serde(rename = "ERROR")]
Error,
#[serde(rename = "FATAL")]
Fatal,
#[serde(rename = "NONE")]
None,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct SupersetClusterNodesConfigLoggingContainersLoggers {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub level: Option<SupersetClusterNodesConfigLoggingContainersLoggersLevel>,
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
pub enum SupersetClusterNodesConfigLoggingContainersLoggersLevel {
#[serde(rename = "TRACE")]
Trace,
#[serde(rename = "DEBUG")]
Debug,
#[serde(rename = "INFO")]
Info,
#[serde(rename = "WARN")]
Warn,
#[serde(rename = "ERROR")]
Error,
#[serde(rename = "FATAL")]
Fatal,
#[serde(rename = "NONE")]
None,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct SupersetClusterNodesConfigResources {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub cpu: Option<SupersetClusterNodesConfigResourcesCpu>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub memory: Option<SupersetClusterNodesConfigResourcesMemory>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub storage: Option<SupersetClusterNodesConfigResourcesStorage>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct SupersetClusterNodesConfigResourcesCpu {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub max: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub min: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct SupersetClusterNodesConfigResourcesMemory {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub limit: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "runtimeLimits")]
pub runtime_limits: Option<SupersetClusterNodesConfigResourcesMemoryRuntimeLimits>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct SupersetClusterNodesConfigResourcesMemoryRuntimeLimits {
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct SupersetClusterNodesConfigResourcesStorage {
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct SupersetClusterNodesRoleConfig {
#[serde(default, skip_serializing_if = "Option::is_none", rename = "listenerClass")]
pub listener_class: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "podDisruptionBudget")]
pub pod_disruption_budget: Option<SupersetClusterNodesRoleConfigPodDisruptionBudget>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct SupersetClusterNodesRoleConfigPodDisruptionBudget {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub enabled: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "maxUnavailable")]
pub max_unavailable: Option<u16>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct SupersetClusterNodesRoleGroups {
#[serde(default, skip_serializing_if = "Option::is_none", rename = "cliOverrides")]
pub cli_overrides: Option<BTreeMap<String, String>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub config: Option<SupersetClusterNodesRoleGroupsConfig>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "configOverrides")]
pub config_overrides: Option<BTreeMap<String, BTreeMap<String, String>>>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "envOverrides")]
pub env_overrides: Option<BTreeMap<String, String>>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "podOverrides")]
pub pod_overrides: Option<BTreeMap<String, serde_json::Value>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub replicas: Option<u16>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct SupersetClusterNodesRoleGroupsConfig {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub affinity: Option<SupersetClusterNodesRoleGroupsConfigAffinity>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "gracefulShutdownTimeout")]
pub graceful_shutdown_timeout: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub logging: Option<SupersetClusterNodesRoleGroupsConfigLogging>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub resources: Option<SupersetClusterNodesRoleGroupsConfigResources>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "rowLimit")]
pub row_limit: Option<i32>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "webserverTimeout")]
pub webserver_timeout: Option<u32>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct SupersetClusterNodesRoleGroupsConfigAffinity {
#[serde(default, skip_serializing_if = "Option::is_none", rename = "nodeAffinity")]
pub node_affinity: Option<BTreeMap<String, serde_json::Value>>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "nodeSelector")]
pub node_selector: Option<BTreeMap<String, String>>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "podAffinity")]
pub pod_affinity: Option<BTreeMap<String, serde_json::Value>>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "podAntiAffinity")]
pub pod_anti_affinity: Option<BTreeMap<String, serde_json::Value>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct SupersetClusterNodesRoleGroupsConfigLogging {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub containers: Option<BTreeMap<String, SupersetClusterNodesRoleGroupsConfigLoggingContainers>>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "enableVectorAgent")]
pub enable_vector_agent: Option<bool>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct SupersetClusterNodesRoleGroupsConfigLoggingContainers {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub console: Option<SupersetClusterNodesRoleGroupsConfigLoggingContainersConsole>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub custom: Option<SupersetClusterNodesRoleGroupsConfigLoggingContainersCustom>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub file: Option<SupersetClusterNodesRoleGroupsConfigLoggingContainersFile>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub loggers: Option<BTreeMap<String, SupersetClusterNodesRoleGroupsConfigLoggingContainersLoggers>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct SupersetClusterNodesRoleGroupsConfigLoggingContainersConsole {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub level: Option<SupersetClusterNodesRoleGroupsConfigLoggingContainersConsoleLevel>,
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
pub enum SupersetClusterNodesRoleGroupsConfigLoggingContainersConsoleLevel {
#[serde(rename = "TRACE")]
Trace,
#[serde(rename = "DEBUG")]
Debug,
#[serde(rename = "INFO")]
Info,
#[serde(rename = "WARN")]
Warn,
#[serde(rename = "ERROR")]
Error,
#[serde(rename = "FATAL")]
Fatal,
#[serde(rename = "NONE")]
None,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct SupersetClusterNodesRoleGroupsConfigLoggingContainersCustom {
#[serde(default, skip_serializing_if = "Option::is_none", rename = "configMap")]
pub config_map: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct SupersetClusterNodesRoleGroupsConfigLoggingContainersFile {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub level: Option<SupersetClusterNodesRoleGroupsConfigLoggingContainersFileLevel>,
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
pub enum SupersetClusterNodesRoleGroupsConfigLoggingContainersFileLevel {
#[serde(rename = "TRACE")]
Trace,
#[serde(rename = "DEBUG")]
Debug,
#[serde(rename = "INFO")]
Info,
#[serde(rename = "WARN")]
Warn,
#[serde(rename = "ERROR")]
Error,
#[serde(rename = "FATAL")]
Fatal,
#[serde(rename = "NONE")]
None,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct SupersetClusterNodesRoleGroupsConfigLoggingContainersLoggers {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub level: Option<SupersetClusterNodesRoleGroupsConfigLoggingContainersLoggersLevel>,
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
pub enum SupersetClusterNodesRoleGroupsConfigLoggingContainersLoggersLevel {
#[serde(rename = "TRACE")]
Trace,
#[serde(rename = "DEBUG")]
Debug,
#[serde(rename = "INFO")]
Info,
#[serde(rename = "WARN")]
Warn,
#[serde(rename = "ERROR")]
Error,
#[serde(rename = "FATAL")]
Fatal,
#[serde(rename = "NONE")]
None,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct SupersetClusterNodesRoleGroupsConfigResources {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub cpu: Option<SupersetClusterNodesRoleGroupsConfigResourcesCpu>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub memory: Option<SupersetClusterNodesRoleGroupsConfigResourcesMemory>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub storage: Option<SupersetClusterNodesRoleGroupsConfigResourcesStorage>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct SupersetClusterNodesRoleGroupsConfigResourcesCpu {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub max: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub min: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct SupersetClusterNodesRoleGroupsConfigResourcesMemory {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub limit: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "runtimeLimits")]
pub runtime_limits: Option<SupersetClusterNodesRoleGroupsConfigResourcesMemoryRuntimeLimits>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct SupersetClusterNodesRoleGroupsConfigResourcesMemoryRuntimeLimits {
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct SupersetClusterNodesRoleGroupsConfigResourcesStorage {
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct SupersetClusterStatus {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub conditions: Option<Vec<Condition>>,
}