1
1
use std:: collections:: BTreeMap ;
2
2
3
3
use product_config:: writer:: to_hadoop_xml;
4
+ use snafu:: { ResultExt , Snafu } ;
4
5
use stackable_hbase_crd:: { HbaseCluster , HbaseRole , HBASE_SITE_XML } ;
5
6
use stackable_operator:: {
6
- builder:: { ConfigMapBuilder , ObjectMetaBuilder } ,
7
+ builder:: { ConfigMapBuilder , ObjectMetaBuilder , ObjectMetaBuilderError } ,
7
8
commons:: product_image_selection:: ResolvedProductImage ,
8
- error:: OperatorResult ,
9
9
k8s_openapi:: api:: core:: v1:: ConfigMap ,
10
+ kube:: runtime:: reflector:: ObjectRef ,
10
11
} ;
11
12
12
13
use crate :: {
13
14
hbase_controller:: build_recommended_labels, zookeeper:: ZookeeperConnectionInformation ,
14
15
} ;
15
16
17
+ type Result < T , E = Error > = std:: result:: Result < T , E > ;
18
+
19
+ #[ derive( Snafu , Debug ) ]
20
+ pub enum Error {
21
+ #[ snafu( display( "object {hbase} is missing metadata to build owner reference" ) ) ]
22
+ ObjectMissingMetadataForOwnerRef {
23
+ source : stackable_operator:: error:: Error ,
24
+ hbase : ObjectRef < HbaseCluster > ,
25
+ } ,
26
+
27
+ #[ snafu( display( "failed to build ConfigMap" ) ) ]
28
+ BuildConfigMap {
29
+ source : stackable_operator:: error:: Error ,
30
+ } ,
31
+
32
+ #[ snafu( display( "failed to build object meta data" ) ) ]
33
+ ObjectMeta { source : ObjectMetaBuilderError } ,
34
+ }
35
+
16
36
/// Creates a discovery config map containing the `hbase-site.xml` for clients.
17
37
pub fn build_discovery_configmap (
18
38
hbase : & HbaseCluster ,
19
39
zookeeper_connection_information : & ZookeeperConnectionInformation ,
20
40
resolved_product_image : & ResolvedProductImage ,
21
- ) -> OperatorResult < ConfigMap > {
41
+ ) -> Result < ConfigMap > {
22
42
let hbase_site = zookeeper_connection_information. as_hbase_settings ( ) ;
23
43
24
44
ConfigMapBuilder :: new ( )
25
45
. metadata (
26
46
ObjectMetaBuilder :: new ( )
27
47
. name_and_namespace ( hbase)
28
- . ownerreference_from_resource ( hbase, None , Some ( true ) ) ?
48
+ . ownerreference_from_resource ( hbase, None , Some ( true ) )
49
+ . with_context ( |_| ObjectMissingMetadataForOwnerRefSnafu {
50
+ hbase : ObjectRef :: from_obj ( hbase) ,
51
+ } ) ?
29
52
. with_recommended_labels ( build_recommended_labels (
30
53
hbase,
31
54
& resolved_product_image. app_version_label ,
32
55
& HbaseRole :: RegionServer . to_string ( ) ,
33
56
"discovery" ,
34
57
) )
58
+ . context ( ObjectMetaSnafu ) ?
35
59
. build ( ) ,
36
60
)
37
61
. add_data (
@@ -45,4 +69,5 @@ pub fn build_discovery_configmap(
45
69
) ,
46
70
)
47
71
. build ( )
72
+ . context ( BuildConfigMapSnafu )
48
73
}
0 commit comments