-
-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathdiscovery.rs
More file actions
86 lines (77 loc) · 2.89 KB
/
discovery.rs
File metadata and controls
86 lines (77 loc) · 2.89 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
use std::collections::BTreeMap;
use product_config::writer::to_hadoop_xml;
use snafu::{ResultExt, Snafu};
use stackable_operator::{
builder::{configmap::ConfigMapBuilder, meta::ObjectMetaBuilder},
commons::product_image_selection::ResolvedProductImage,
k8s_openapi::api::core::v1::ConfigMap,
kube::runtime::reflector::ObjectRef,
utils::cluster_info::KubernetesClusterInfo,
};
use crate::{
crd::{HBASE_SITE_XML, HbaseRole, v1alpha1},
hbase_controller::build_recommended_labels,
kerberos::{self, kerberos_discovery_config_properties},
zookeeper::ZookeeperConnectionInformation,
};
type Result<T, E = Error> = std::result::Result<T, E>;
#[derive(Snafu, Debug)]
pub enum Error {
#[snafu(display("object {hbase} is missing metadata to build owner reference"))]
ObjectMissingMetadataForOwnerRef {
source: stackable_operator::builder::meta::Error,
hbase: ObjectRef<v1alpha1::HbaseCluster>,
},
#[snafu(display("failed to build ConfigMap"))]
BuildConfigMap {
source: stackable_operator::builder::configmap::Error,
},
#[snafu(display("failed to build object meta data"))]
ObjectMeta {
source: stackable_operator::builder::meta::Error,
},
#[snafu(display("failed to add Kerberos discovery"))]
AddKerberosDiscovery { source: kerberos::Error },
}
/// Creates a discovery config map containing the `hbase-site.xml` for clients.
pub fn build_discovery_configmap(
hbase: &v1alpha1::HbaseCluster,
cluster_info: &KubernetesClusterInfo,
zookeeper_connection_information: &ZookeeperConnectionInformation,
resolved_product_image: &ResolvedProductImage,
) -> Result<ConfigMap> {
let mut hbase_site = zookeeper_connection_information.as_hbase_settings();
hbase_site.extend(
kerberos_discovery_config_properties(hbase, cluster_info)
.context(AddKerberosDiscoverySnafu)?,
);
ConfigMapBuilder::new()
.metadata(
ObjectMetaBuilder::new()
.name_and_namespace(hbase)
.ownerreference_from_resource(hbase, None, Some(true))
.with_context(|_| ObjectMissingMetadataForOwnerRefSnafu {
hbase: ObjectRef::from_obj(hbase),
})?
.with_recommended_labels(build_recommended_labels(
hbase,
&resolved_product_image.app_version_label_value,
&HbaseRole::RegionServer.to_string(),
"discovery",
))
.context(ObjectMetaSnafu)?
.build(),
)
.add_data(
HBASE_SITE_XML,
to_hadoop_xml(
hbase_site
.into_iter()
.map(|(k, v)| (k, Some(v)))
.collect::<BTreeMap<_, _>>()
.iter(),
),
)
.build()
.context(BuildConfigMapSnafu)
}